![]() |
|
||||||||||||||
| | 网站首页 | 综合电子 | 51单片机 | AVR单片机 | ARM专栏 | MSP430 | 网上商城 | PSOC | 下载中心 | 公司事项 | DSP专栏 | | ||
|
||
|
|||||
| 基于VHDL的异步串行通信电路设计 | |||||
| 基于VHDL的异步串行通信电路设计 | |||||
作者:未知 文章来源:网络 点击数: 更新时间:2007-12-10 ![]() |
|||||
|
随着电子技术的发展,现场可编程门阵列 FPGA和复杂可编程逻辑器件CPLD的出现,使得电子系统的设计者利用与器件相应的电子CAD软件,在实验室里就可以设计自己的专用集成电路ASIC器件。这种可编程ASIC不仅使设计的产品达到小型化、集成化和高可靠性,而且器件具有用户可编程特性,大大缩短了设计周期,减少了设计费用,降低了设计风险。目前数字系统的设计可以直接面向用户需求,根据系统的行为和功能要求,自上至下地逐层完成相应的描述﹑综合﹑优化﹑仿真与验证,直到生成器件,实现电子设计自动化。其中电子设计自动化(EDA)的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。 VHDL是用来描述从抽象到具体级别硬件的工业标准语言,它是由美国国防部在80年代开发的HDL,现在已成为IEEE承认的标准硬件描述语言。VHDL支持硬件的设计、验证、综合和测试,以及硬件设计数据的交换、维护、修改和硬件的实现,具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用等优点。利用VHDL这些优点和先进的EDA工具,根据具体的实际要求,我们可以自己来设计串口异步通信电路。 2串口异步通信的帧格式和波特率 2.1 串行异步通信的帧格式
2.2 串行异步通信的波特率 3 串行发送电路的设计 为简化电路设计的复杂性,采用的帧格式为: 1位开始位+8位数据位+1位停止位,没有校验位,波特率为9600。 3.1 波特率发生器的设计 3.2 发送电路的设计 library ieee; use ieee.std_logic_1164.all; entity Com is port(clk,en:in std_logic; Send_data:in std_logic_vector(9 downto 0); serial:out std_logic); end com; architecture com_arc of com is begin process(clk) variable count:integer range 0 to 9 :=0; begin if en=‘0‘ then count:=0; serial<=‘1‘; elsif rising_edge(clk) then if count=9 then serial<=Send_data(9); else serial<=Send_data(count); count:=count+1; end if; end if; end process; end com_arc; 其中,Send_data(0 to 9)表示需要发送的数据帧,发送时,开始位Send_data(0)必须为逻辑0,停止位Send_data(9)必须为逻辑1,否者与硬件电路连接的设备接收到的数据会出现错误。在发送每一帧之前,首先给输入端en一个低电平脉冲,让电路复位(count置0),然后开始发送。变量count 在进程中用来记录发送的数据数目,当数据帧发送完后,发送端就一直发送停止位(逻辑1)。
4 串行接收电路的设计 4.1 波特率发生器和采样时钟的设计 library ieee; entity count625 is port(clk,en:in std_logic; Clock1,Clock3:out std_logic); end count625; architecture count625_arc of count625 is begin process(clk,en) variable count:integer range 0 to 625 :=0; begin if en=‘0‘ then NUll; elsif (rising_edge(clk)) then count:=count+1; if count=625 then Clock1<=‘1‘; count:=0; else Clock1<=‘0‘; end if; if (count=100 or count=300 or count=500 ) then Clock3<=‘1‘; else Clock3<=‘0‘; end if; end if; end process; end count625_arc; 其中clk为6MHz的时钟;en控制波形的产生; Clock1为9600Hz的接收时钟; Clock3为3倍频的采样时钟。 4.2 接收电路的设计 library ieee; use ieee.std_logic_1164.all; entity com_receive10 is
architecture com_receive10_arc of com_receive10 is Signal Enable:std_logic :=‘1‘; Signal Hold:std_logic :=‘0‘; Signal N:std_logic_vector(0 to 2) :="000"; begin Valid<=Enable and Hold; process(clk1,clr) variable Num:integer range 0 to 9 :=0; begin if clr=‘0‘ then Enable<=‘1‘ Num:=0; Q<="0000000000"; elsif (rising_edge(clk1)) then Q(Num)<=(N(0) and N(1)) or (N(1) and N(2)) or (N(0) and N(2)); if Num=9 then Enable<=‘0‘; Num:=0; else Num:=Num+1; end if; end if; end process; process(clk3,clr) variable m:integer range 0 to 2 :=0; begin if clr=‘0‘ then m:=0; elsif(rising_edge(clk3)) then N(m)<=com; if m=2 then m:=0; else m:=m+1; end if; end if; end process; process(clr,com) begin
elsif falling_edge(com) then Hold<=‘1‘; end if; end process; end com_receive10_arc; 其中,N(m)<=com 用来对波形采样;Q(Num)<=(N(0) and N(1)) or (N(1) and N(2)) or (N(0) and N(2))是对其中1位数据的3次采样结果判决;Num用来记录接收的数据位数;falling_edge(com)是用来时实检测每一帧的起始位(即下降沿)的到来;Valid<=Enable and Hold用来输出到波特率发生器电路单元控制时钟的产生,最后将一帧的10位数据输出。 用MAX+plus II 9.3 Baseline将上面两个VHDL文件制成库器件,然后在电路图上调出来,最后做成的串行接收电路图如图4所示。
列波形,最后结果:接收到的数据位为6D,起始位为0,停止位为1。 5 结束语 VHDL语言设计的出现从根本上改变了以往数字电路的设计模式,使电路设计由硬件设计转变为软件设计,这样提高了设计的灵活性,降低了电路的复杂程度,修改起来也很方便。 利用VHDL设计的灵活性,根据串行通信协议的要求,可以在实验室利用先进的EDA工具,用VHDL设计出符合自己实际需求的异步串行通信电路。 本文设计出的基于VHDL异步串行通信电路,在实验室已经与计算机串口RS-232进行了通信实验(注意:TTL和RS-232逻辑电平的转换)。实验证明,0至255的所有数据都能被正确收、发。 参考文献: [1] ARMSTRONG J R, FRAY F G. VHDL设计表示和综合[M].李宗伯,王蓉晖译.北京:机械工业出版社, 2002. [2] SKAHILL K.可编程逻辑系统的VHDL设计技术[M].朱明程,孙普译.南京:东南大学出版社,1998. [3] 仇玉章. 微型计算机系统接口技术[M]. 南京:江苏科技出版社,1997. |
|||||
| 文章录入:dycxin 责任编辑:dycxin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| ALTERA的假货识别方法 Verilog技术实践教程(2) Verilog 技术实践教程(1) 浅谈VHDL/Verilog的可综合性 选择 VHDL 还是 verilog HDL |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | | 设为首页 | 购买方法 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 联系我们 | 网络答疑| | | |||
|