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
youerw.com
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)andN(1))or(N(1)andN(2))or(N(0)andN(2)),这是对其中1位数据的3次采样结果判决;Num用来记录接收的数据位数;falling_edge(com)是用来时实检测每一帧的起始位(即下降沿)的到来;Valid<=EnableandHold用来输出到波特率发生器电路单元控制时钟的产生,最后将一帧的10位数据输出。其在QuartusII 10.1下的RTL级视图为图5-4所示。
图5-4 数据接收端的RTL级视图
用QuartusII 10.1将上面两个VHDL文件制成库器件,然后在电路图上调出来,最后做成的串行接收电路图如图5-4所示。图5-5 总模块逻辑图
5.3时序仿真
时序仿真如图5所示,Receive为接收到的序列波形,最后结果:接收到的数据位为6D,起始位为0,停止位为1。
图5-6 串行接收电路的时序仿真6小结
VHDL语言设计的出现从根本上改变了以往数字电路的设计模式,使电路设计由硬件设计转变为软件设计,这样提高了设计的灵活性,降低了电路的复杂程度,修改起来也很方便。 利用VHDL设计的灵活性,根据串行通信协议的要求,可以在实验室利用先进的EDA工具,用VHDL设计出符合自己实际需求的异步串行通信电路。
本文设计出的基于VHDL异步串行通信电路,在实验室已经与计算机串口RS-232进行了通信实验(注意:TTL和RS-232逻辑电平的转换)。实验证明,0至255的所有数据都能被正确收、发。
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页