软件:Vivado
语言:Verilog
代码功能:
UART分线器
要求与内容:
设计UART分线器,要求如下:
1.至少支持9600、115200两种波特率。
2.实现2个UART的分线功能,如图所示。
3.当检测到RXD接收到字符串“S#1”,UART切换到串口1,接收到“S#2”时,切换到UART2。
4.编写相应的 testbench,进行仿真测试。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
部分代码展示:
module?my_uart_tx(clk,rst_n,clk_bps,rd_data,rd_en,empty,rs232_tx); input?clk;//?50MHz主时钟 input?rst_n;//低电平复位信号 input?clk_bps;//?clk_bps的高电平为接收或者发送数据位的中间采样点 input[7:0]?rd_data;//接收数据寄存器 output?rd_en;//接收数据使能 input?empty;//fifo空信号 output?rs232_tx;//?RS232发送数据信号 reg?rd_en=0; reg?[2:0]?state=3'd0; always@(posedge?clk?or?negedge?rst_n)? if(!rst_n)? state<=3'd0; else case(state) 3'd0://wait if(empty==0) state<=3'd1;//read else state<=3'd0; 3'd1://read_en state<=3'd2; 3'd2://read_data state<=3'd3; 3'd3://send state<=3'd4; 3'd4: if(tx_en==0)//发送完成 state<=3'd0; else state<=3'd4; default:; endcase always@(posedge?clk?) if(state==3'd1) rd_en<=1;//读fifo使能 else rd_en<=0; always@(posedge?clk?or?negedge?rst_n) if(!rst_n) tx_data<=8'd0; else if(state==3'd3) tx_data<=rd_data;//读fifo数据,把数据存入发送数据寄存器 else tx_data<=tx_data; always?@?(posedge?clk?or?negedge?rst_n)?begin if(!rst_n)?begin tx_en?<=?1'b0; end else?if(state==3'd3)?begin//接收数据完毕,准备把接收到的数据发回去 tx_en?<=?1'b1;//进入发送数据状态中 end else?if(num==4'd11)?begin//数据发送完成,复位 tx_en?<=?1'b0; end end //--------------------------------------------------------- reg?rs232_tx_r; always?@?(posedge?clk?or?negedge?rst_n)?begin if(!rst_n)?begin num?<=?4'd0; rs232_tx_r?<=?1'b1; end else?if(tx_en)?begin if(clk_bps)begin num?<=?num+1'b1; case?(num) 4'd0:rs232_tx_r?<=?1'b0;?//发送起始位 4'd1:rs232_tx_r?<=?tx_data[0];//发送bit0 4'd2:rs232_tx_r?<=?tx_data[1];//发送bit1 4'd3:?rs232_tx_r?<=?tx_data[2];//发送bit2 4'd4:?rs232_tx_r?<=?tx_data[3];//发送bit3 4'd5:?rs232_tx_r?<=?tx_data[4];//发送bit4 4'd6:?rs232_tx_r?<=?tx_data[5];//发送bit5 4'd7:rs232_tx_r?<=?tx_data[6];//发送bit6 4'd8:?rs232_tx_r?<=?tx_data[7];//发送bit7 4'd9:?rs232_tx_r?<=?1'b1;//发送结束位 ?default:?rs232_tx_r?<=?1'b1; endcase end else?if(num==4'd11)?num?<=?4'd0;//复位 end end assign?rs232_tx?=?rs232_tx_r; endmodule
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=507
阅读全文