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工程放在这里:

经验分享 程序员 微信小程序 职场和发展