fpga串口多字节发送、数据包发送
最近主管让我用串口循环发送数据包,这对单片机来说很简单,但是用fpga来做对我来说就有点难了,在查了点资料后就开始写,然后基本就那样了。
首先是读入发送的数据:
always@(posedge rst_n) $readmemh("E:\ModelsimWork\u\src\init.dat",dat_buf);
然后就是不断发送数据
always @ ( posedge clk or negedge rst_n ) if( !rst_n ) begin i <= 4d0; rTX <= 1b1; isDone <= 1b0; end else if( tx_en_sig ) case ( i ) 4d0 : if( bps_clk ) begin i <= i + 1b1; rTX <= 1b0; end 4d1, 4d2, 4d3, 4d4, 4d5, 4d6, 4d7, 4d8 : if( bps_clk ) begin i <= i + 1b1; rTX <= txdata[ i - 1 ]; end 4d9 : if( bps_clk ) begin i <= i + 1b1; rTX <= 1b1;isDone <= 1b1; end 4d10 : begin i <= 1b0; isDone <= 1b0; end endcase
最后就是modelsim仿真波形 上图是我要发送的数据的一部分。modelsim仿真波形如下 两条红线之间的串口发送的一帧数据,txdata是当前发送的数据,tx_pin是串口TX引脚,低位在前,停止位1位,数据8位,无校验位,因此读出来是00010011,与发送数据相同。下图是串口发送的一包数据: 现在把modeldim工程放在这里: