end
//***********发送数据模块
reg[3:0] state_tx=0;
always@(posedge txclk or posedge rst)
begin
if(rst)
begin
dout_ser<=1'bz;
state_tx<=0;
txdone=1;
end
else
case(state_tx)
0:begin
dout_ser<=dout_buf[0];state_tx<=state_tx+1;txdone=1'b0;end
1:begin
dout_ser<=dout_buf[1];state_tx<=state_tx+1;end
2:begin
dout_ser<=dout_buf[2];state_tx<=state_tx+1;end
3:begin
dout_ser<=dout_buf[3];state_tx<=state_tx+1;end
4:begin
dout_ser<=dout_buf[4];state_tx<=state_tx+1;end
5:begin
dout_ser<=dout_buf[5];state_tx<=state_tx+1;end
6:begin
dout_ser<=dout_buf[6];state_tx<=state_tx+1;end
7:begin
dout_ser<=dout_buf[7];state_tx<=state_tx+1;end
8:begin
dout_ser<=dout_buf[8];state_tx<=state_tx+1;end
9:begin
dout_ser<=dout_buf[9];state_tx<=state_tx+1;end
endcase
end
endmodule
注:两个频率信号nclk、txclk由相应的分频程序产生。由于篇幅所限未在文中列出。
FPGA模块接收从RS-485发送过来的串行数据。25位为一个字符。数据的传输速率是700kbps,用四倍于波特率的速率进行采样,这样可以大大降低系统的噪声。数据的串行输出波特率选为11200bps。
由输入输出波形图可以看出:本段程序实现了对输入数据的有效数据位的提取,并按照一定的波特率进行串行输出。程序中,波特率可以根据需要通过分频程序进行改动。硬件电路搭建简单,程序代码书写容易。数据传输稳定可靠,可以满足串口通信的要求。
,基于串口通讯的Verilog设计