名稱:UART分線器設(shè)計(jì)Verilog代碼Vivado仿真
軟件:Vivado
語(yǔ)言:Verilog
代碼功能:
UART分線器
要求與內(nèi)容:
設(shè)計(jì)UART分線器,要求如下:
1.至少支持9600、115200兩種波特率。
2.實(shí)現(xiàn)2個(gè)UART的分線功能,如圖所示。
3.當(dāng)檢測(cè)到RXD接收到字符串“S#1”,UART切換到串口1,接收到“S#2”時(shí),切換到UART2。
4.編寫相應(yīng)的 testbench,進(jìn)行仿真測(cè)試。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
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主時(shí)鐘 input?rst_n;//低電平復(fù)位信號(hào) input?clk_bps;//?clk_bps的高電平為接收或者發(fā)送數(shù)據(jù)位的中間采樣點(diǎn) input[7:0]?rd_data;//接收數(shù)據(jù)寄存器 output?rd_en;//接收數(shù)據(jù)使能 input?empty;//fifo空信號(hào) output?rs232_tx;//?RS232發(fā)送數(shù)據(jù)信號(hào) 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)//發(fā)送完成 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數(shù)據(jù),把數(shù)據(jù)存入發(fā)送數(shù)據(jù)寄存器 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//接收數(shù)據(jù)完畢,準(zhǔn)備把接收到的數(shù)據(jù)發(fā)回去 tx_en?<=?1'b1;//進(jìn)入發(fā)送數(shù)據(jù)狀態(tài)中 end else?if(num==4'd11)?begin//數(shù)據(jù)發(fā)送完成,復(fù)位 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;?//發(fā)送起始位 4'd1:rs232_tx_r?<=?tx_data[0];//發(fā)送bit0 4'd2:rs232_tx_r?<=?tx_data[1];//發(fā)送bit1 4'd3:?rs232_tx_r?<=?tx_data[2];//發(fā)送bit2 4'd4:?rs232_tx_r?<=?tx_data[3];//發(fā)送bit3 4'd5:?rs232_tx_r?<=?tx_data[4];//發(fā)送bit4 4'd6:?rs232_tx_r?<=?tx_data[5];//發(fā)送bit5 4'd7:rs232_tx_r?<=?tx_data[6];//發(fā)送bit6 4'd8:?rs232_tx_r?<=?tx_data[7];//發(fā)送bit7 4'd9:?rs232_tx_r?<=?1'b1;//發(fā)送結(jié)束位 ?default:?rs232_tx_r?<=?1'b1; endcase end else?if(num==4'd11)?num?<=?4'd0;//復(fù)位 end end assign?rs232_tx?=?rs232_tx_r; endmodule
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=507