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