rs232接收器的程序,非常简单的程序,仿真没问题,但是上硬件,shift_ra输出结果是正确的,但是接受完成标志 irq没有反映。用quartus的嵌入式逻辑分析仪来看出来shift_ra端口有值,其他输出端和中间的寄存器都没有反映!!输入端口就只能看到复位端在按键的控制下电平跳变,232数据的输入端都没有变化!!哪位好心的大侠能帮忙分析下为什么呀?<br />library ieee;<br />use ieee.std_logic_1164.all;<br />use ieee.std_logic_unsigned.all;<br /><br />entity ceshib is<br /> port(clk:in std_logic;--9600<br /> dataout:out std_logic_vector(7 downto 0);<br /> rst,rxd:in std_logic;--复位端、数据输入端<br /> shift_ra:out std_logic_vector(7 downto 0);<br /> irq:out std_logic);--接受完成标志<br /> end;<br /><br />architecture behav of ceshib is<br />signal state:std_logic_vector(1 downto 0);--00:空闲;01:移位;10:输出正确数据;11:接受错误数据<br /> begin<br /> process(rst,clk,rxd)<br /> variable shift_r:std_logic_vector(7 downto 0);<br /> variable n:integer range 0 to 8;<br /> begin<br /> if clk'event and clk='1' then<br /> if rst='0' then<br /> shift_r:="00000000";<br /> n:=0;<br /> state<="00";<br /> dataout<="00000000";<br /> irq<='0';<br /> else<br /> if state="00" then<br /> if rxd='0' then<br /> state<="01";<br /> irq<='0';<br /> shift_r:="00000000";<br /> else<br /> shift_r:="00000000";<br /> n:=0;<br /> irq<='0';<br /> end if;<br /> elsif state="01" then<br /> if n=8 then<br /> dataout<=shift_r;<br /> state<="00";<br /> n:=0;<br /> irq<='1';<br /> else<br /> shift_r(n):=rxd;<br /> n:=n+1;<br /> irq<='0';<br /> end if;<br /> end if;<br /> end if;<br /> end if;<br /> shift_ra<=shift_r;<br /> end process;<br />end; |
|