本文选用CPLD是ALTERA公司的EPM240T100,结合MAX232接口芯片进行串口通信设计。
二、VHDL程序模块设计及描述
使用VHDL对CPLD进行编程,设计3个模块,波特率发生模块,接收器,发送器。
1.波特率发生模块
波特率发生器实际是一个分频器,如前所述,本文设计的波特率为19.2kb/秒,设计使用的时钟频率为10MHz,所以计数器进行计数时计数到260进行翻转。
2.发送模块
发送部分采用状态机t_state进行编程,共设两个值:t-start和t_shift,分别表示发送开始以及发送保持状态。复位键按下时设置到t-start状态,并将发送数据位设为“1”,发送的数据位数计数为0,在t-start状态,状态机将处于这一个状态并等待波特率计数信号的电平上升沿到来。上升沿到来时,依据t_state状态的不同值做不同处理,如果是t-start开始状态则先读待发送的数据,并发送开始位“0”,然后将状态转到发送保持t_shift状态,在发送保持t_shift状态,不断判断发送的数据位数是否满8位,如果满了则回归t-start状态,否则继续发送,保持在t_shift状态,为避免干扰将其余情况下的状态自动跳转到t-start状态。
3.数据接收模块
接收部分采用状态机进行编程,共设两个状态:
r-start和r_shift分别表示接收开始以及接收保持状态;复位键按下时设置到r-start状态,并将待接收存放数据的data赋值为“00000000”,在r-start状态,接收状态机将处于这一个状态并等待波特率计数信号的电平上升沿到来。波特率发生模块的计数上升沿到来,依据状态的不同值做不同处理,如果是r-start接收开始状态则等待开始位信号,检测到rxds=‘0’的开始位信号好转到r_shift接收保持状态,r_shift接收保持状态会不断判断接收的数据位数是否满8位,如果满了则回归r-start状态,否则继续接收,保持在r_shift接收保持状态,为避免干扰将其余情况下的状态自动跳转到r-start接收开始状态,程序与发送部分类似,此处省略。
三、串口通信的VHDL程序仿真结果
每发送完一个字节,即8位数据后,线路上将输出一个高电平,之后又开始传送下一个字节。
同样,仿真波形显示,有效数据到达接收管脚rxd之前,线路上保持为高电平,直到收到一个低电平起始位,将该起始位后的8位数据串行接收后依次送到保存接收结果的信号data的各位。
上一篇:小小芯片愁煞人
下一篇:做强芯片解密与IC代工整合服务