预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

编号:时间:2021年x月x日书山有路勤为径学海无涯苦作舟页码:基于VHDL的异步串行通信电路设计1引言随着电子技术的发展现场可编程门阵列FPGA和复杂可编程逻辑器件CPLD的出现使得电子系统的设计者利用与器件相应的电子CAD软件在实验室里就可以设计自己的专用集成电路ASIC器件。这种可编程ASIC不仅使设计的产品达到小型化、集成化和高可靠性而且器件具有用户可编程特性大大缩短了设计周期减少了设计费用降低了设计风险。目前数字系统的设计可以直接面向用户需求根据系统的行为和功能要求自上至下地逐层完成相应的描述﹑综合﹑优化﹑仿真与验证直到生成器件实现电子设计自动化。其中电子设计自动化(EDA)的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。VHDL是用来描述从抽象到具体级别硬件的工业标准语言它是由美国国防部在80年代开发的HDL现在已成为IEEE承认的标准硬件描述语言。VHDL支持硬件的设计、验证、综合和测试以及硬件设计数据的交换、维护、修改和硬件的实现具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用等优点。利用VHDL这些优点和先进的EDA工具根据具体的实际要求我们可以自己来设计串口异步通信电路。广告插播信息维库最新热卖芯片:EL1501CMEL7457CULT1640ALCS8LTC1439CGMAX241EEAIAD9203ARUZQMV72DP5IRF7459MAX706CPAPBL3770A2串口异步通信的帧格式和波特率2.1串行异步通信的帧格式在串行异步通信中数据位是以字符为传送单位数据位的前、后要有起始位、停止位另外可以在停止位的前面加上一个比特位(bit)的校验位。其帧格式如图1所示。起始位是一个逻辑0总是加在每一帧的开始为的是提醒数据接收设备接收数据在接收数据位过程中又被分离出去。数据位根据串行通信协议允许传输的字符长度可以为5、6、7或8位。通常数据位为7位或8位如果要传输非ASCII数据(假如使用扩展字符设置的文本或者二进制数据)数据位格式就需要采用8位。数据位被传输时从一个字符的最低位数据开始最高位数据在最后。例如字母C在ASCII表中是十进制67二进制的01000011那么传输的将是11000010。校验位是为了验证传输的数据是否被正确接收常见的校验方法是奇、偶校验。另外校验位也可以为0校验或者1校验即不管数据位中1的个数是多少校验位始终为0或者1如果在传输的过程中校验位发生了变化这就提示出现了某类错误。不过在传输数据的时候也可以不用校验位。停止位为逻辑1总在每一帧的末尾可以是1位、1.5位或者2位。最常用的是1位超过1位的停止位通常出现在这样的场合:在处理下一个即将发送来的字符之前接收设备要求附加时间。2.2串行异步通信的波特率串行口每秒发送或接收数据的位数为波特率。若发送或接收一位数据需要时间为t则波特率为1/t相应的发送或接收时钟为1/tHz。发送和接收设备的波特率应该设置成一致如果两者的波特率不一致将会出现校验错或者帧错。3串行发送电路的设计为简化电路设计的复杂性采用的帧格式为:1位开始位+8位数据位+1位停止位没有校验位波特率为9600。3.1波特率发生器的设计要产生9600波特率要有一个不低于9600Hz的时钟才可以。为产生高精度的时钟我选了6MHz(6M能整除9600)的晶振来提供外部时钟。当然你也可以选其它频率的时钟来产生9600Hz的时钟。对于6MHz时钟需要设计一个625进制的分频器来产生9600波特率的时钟信号。用VHDL设计分频器较简单在这里就不再给出源程序了。3.2发送电路的设计根据采用的帧格式需要发送的数据为10位(1位开始位、8位数据位、1位停止位)在发送完这10位后就应该停止发送并使发送端电平处于逻辑1然后等候下次的发送。下面是实现上述功能的VHDL源程序:libraryieee;useieee.std_logic_1164.all;entityComisport(clken:instd_logic;Send_data:instd_logic_vector(9downto0);serial:outstd_logic);endcom;architecturecom_arcofcomisbeginprocess(clk)variablecount:integerrange0to9:=0;beginifen='0'thencount:=0;serial<='1';elsifrising_edge(clk)thenifcount=9