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
if clr=‘0‘ then
Hold<=‘0‘;
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所示。
4.3 时序仿真
时序仿真如图5所示,Receive为接收到的序
列波形,最后结果:接收到的数据位为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.
本文关键字:通信 51单片机,单片机-工控设备 - 51单片机
上一篇:89S51的看门狗用法