软件: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
阅读全文
542