⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fdd.v

📁 自己编写的串口UART发送的Verilog模块。与FIFO连接
💻 V
字号:
/*
自己编写的串口UART的发送器,通过与外部的FIFO连接,可以实现自动的数据发送(具体原理图参考bmp文件)。
接口中tclk和over是测试信号。波特率38400bps 8位数据位,1位停止位,也可以根据需要调整波特率,增减数据位,具体的
内容参考文件中的说明。
由于是初学Verilog时编写的,条理和移植性较差,但总算能正确运行,希望批评指正。liyzz99@163.com。
*/


module fdd(clk,enable,d,txd,rd,over,tclk);
    input clk;				输入时钟60MHZ,可以自己选择
    input enable;			FIFO的空标记
    input [7:0]d;			从FIFO输入的需要发送的字节
    output txd;				串行数据输出端
    output rd;				到FIFO的读FIFO的允许信号
		output tclk;
		output over;
reg [11:0]bps_cnt;   波特率计数器
reg [3:0]bit_cnt;    发送数据位计数器
reg [4:0]step;       开始进行一个数据发送时的时序控制节拍移位器
reg [7:0]id;         输入8位数据锁存器
reg [8:0]xd;         输出数据的暂存器
reg flag;
wire byte_stop,ld,lx,li,clr_flag;
//wire over,tclk;
assign over = (bps_cnt==1562)?1:0;	/*用60MHZ时钟计数得到38400bps的发送钟。*/
assign byte_stop = (bit_cnt==10)?1:0;	 起始位+8位数据位+1位停止位,也可以增加奇偶校验位,则bit_cnt==11
assign clr_flag = (bit_cnt ==9&&bps_cnt==1561)?1:0;   在发送最后一位停止位时,设定clr_flag,保证数据的快速发送,在有校验位的情况下
				则bit_cnt == 10。
assign ld = step[0]&~step[1];
assign rd = step[1]&~step[2];
assign li = step[2]&~step[3];
assign lx = step[3]&~step[4];
assign tclk = over | ld;
assign txd = xd[8];
always @(posedge(clk))
begin
	if(over|ld)
		bps_cnt <= 0;
	else
		begin
		if(~byte_stop)
			begin
			bps_cnt <= bps_cnt+1;
			end
		end
	if(ld)
		bit_cnt <=0;
	else
		begin
		if(over)
			bit_cnt <= bit_cnt+1;
		end

	if(clr_flag)
		flag <= 0;
	else
		begin
		if(byte_stop)
			flag <= ~enable;
		end
	if(~flag)
		step <= 0;
	else
		begin
		step <= step <<1;
		step[0] <= 1;
		end
	if(li)
		id <= d;
	if(lx)
		begin
		xd[0] <= id[7];
		xd[1] <= id[6];
		xd[2] <= id[5];
		xd[3] <= id[4];
		xd[4] <= id[3];
		xd[5] <= id[2];
		xd[6] <= id[1];
		xd[7] <= id[0];
		xd[8] <= 0;
/*
如果想实现有校验位的发送,则xd数据应该变为
		xd[0] <= id[7]^id[6]^id[5]^id[4]^id[3]^id[2]^id[1]^id[0]^1;/*奇校验*/
		xd[1] <= id[7];
		xd[2] <= id[6];
		xd[3] <= id[5];
		xd[4] <= id[4];
		xd[5] <= id[3];
		xd[6] <= id[2];
		xd[7] <= id[1];
		xd[8] <= id[0];
		xd[9] <= 0;
*/
		end
	else
		begin
		if(tclk)
			begin
			xd <= xd<<1;
			xd[0] <= 1;
			end
		end
end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -