最近主管让我用串口循环发送数据包,这对单片机来说很简单,但是用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 <= 4'd0;
rTX <= 1'b1;
isDone <= 1'b0;
end
else if( tx_en_sig )
case ( i )
4'd0 :
if( bps_clk ) begin i <= i + 1'b1; rTX <= 1'b0; end
4'd1, 4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8 :
if( bps_clk ) begin i <= i + 1'b1; rTX <= txdata[ i - 1 ]; end
4'd9 :
if( bps_clk ) begin i <= i + 1'b1; rTX <= 1'b1;isDone <= 1'b1; end
4'd10 :
begin i <= 1'b0; isDone <= 1'b0; end
endcase
最后就是modelsim仿真波形
上图是我要发送的数据的一部分。modelsim仿真波形如下
两条红线之间的串口发送的一帧数据,txdata是当前发送的数据,tx_pin是串口TX引脚,低位在前,停止位1位,数据8位,无校验位,因此读出来是00010011,与发送数据相同。下图是串口发送的一包数据:
现在把modeldim工程放在这里: