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 <= 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仿真波形如下
fpga串口多字节发送、数据包发送_第1张图片
两条红线之间的串口发送的一帧数据,txdata是当前发送的数据,tx_pin是串口TX引脚,低位在前,停止位1位,数据8位,无校验位,因此读出来是00010011,与发送数据相同。下图是串口发送的一包数据:
在这里插入图片描述
现在把modeldim工程放在这里:

你可能感兴趣的:(fpga串口多字节发送、数据包发送)