首页 » 技术SOS » EDA与制造 » EDA/IC设计 » fpga实现uart232 时 数据遗失问题

fpga实现uart232 时 数据遗失问题

菜鸟
2012-04-24 19:08:40     悬赏5分
现在调uart232程序有数据遗失的问题。比如串口输入 1122334455,实际发送只有113355.是不是接收模块要写个缓存?怎么改呢? 我写了3个模块:波特率产生模块,接收模块,发送模块 模块间连接关系为: bclk= bclkr= bclkt resetb=resetr=reset (8位数据接收完毕) r_ready= xmit_cmd_p(有数据待发送) 模块外接端口为: clk 接芯片时钟 (50MHZ) Rxdr 串口输入 Txd 串口输出 entity baud is Port (clk,resetb:in std_logic; bclk:out std_logic); end baud; entity receiver is generic(framlenr:integer:=8); Port (bclkr,resetr,rxdr:in std_logic; --定义输入输出信号 r_ready:out std_logic; rbuf:out std_logic_vector(7 downto 0)); end receiver; entity transfer is generic(framlent:integer:=8); Port (bclkt,resett:in std_logic; xmit_cmd_p:in std_logic:='0'; --定义输入输出信号 txdbuf:in std_logic_vector(7 downto 0):="00000000"; txd:out std_logic:='0'; txd_done:out std_logic:='0'); end transfer; 板子晶振是50M的,分频为153600HZ = 波特率的16倍 entity baud is Port (clk,resetb:in std_logic; bclk:out std_logic); end baud; architecture behavioral of baud is begin process(clk,resetb) variable cnt:integer range 0 to 325:=0; begin if resetb='0' then -- resetb='0'时复位 cnt:=0; bclk=325 then cnt:=0; bclk --r_readyif rxd_sync='0' then if count="0110" then count:="0000";stateif count="1110" then if rcnt=framlenr then staterbufs(rcnt):=rxd_sync; rcnt:=rcnt+1; state r_readystate xcnt16:="00000";xbitcnt:=0;txd_done if xcnt16="00010" then state if xcnt16="01110" then if xbitcnt=framlent then state txds:=txdbuf(xbitcnt); xbitcnt:=xbitcnt+1; state if xcnt16="01111" then if xmit_cmd_p='0' then statestate
关键词: 串口UART232, 数据遗失