日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA入门实验之串口发送

發布時間:2023/12/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA入门实验之串口发送 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要求

串口助手功能實現,5個按鍵,按一次輸出1種波特率的信號及他的一半波特率的信號,再按一次輸出另一種信號,依次對應。

代碼設計

## 分頻模塊 module frequency( input clk_50m,input rst, output BPS_CLK1,//輸出為不同波特率的信號output BPS_CLK2,output BPS_CLK3,output BPS_CLK4,output BPS_CLK5,output BPS_CLK6,output BPS_CLK7,output BPS_CLK8,output BPS_CLK9,output BPS_CLK10);reg [12:0]cnt_bps1=0;reg [12:0]cnt_bps2=0;reg [12:0]cnt_bps3=0;reg [12:0]cnt_bps4=0;reg [12:0]cnt_bps5=0;reg [12:0]cnt_bps6=0;reg [12:0]cnt_bps7=0;always@(posedge clk_50m or posedge rst)if(rst) //復位信號cnt_bps1<=0;else if(cnt_bps1==13'd5207) // 50_000_000/9600cnt_bps1<=0;elsecnt_bps1<=cnt_bps1+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps2<=0;elseif(cnt_bps2==13'd2603) //19200cnt_bps2<=0;elsecnt_bps2<=cnt_bps2+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps3<=0;elseif(cnt_bps3==13'd1301) //38400cnt_bps3<=0;elsecnt_bps3<=cnt_bps3+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps4<=0;elseif(cnt_bps4==13'd867) //57600cnt_bps4<=0;elsecnt_bps4<=cnt_bps4+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps5<=0;elseif(cnt_bps5==13'd433)cnt_bps5<=0;elsecnt_bps5<=cnt_bps5+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps6<=0;elseif(cnt_bps6==13'd1301) //115200cnt_bps6<=0;elsecnt_bps6<=cnt_bps6+1; always@(posedge clk_50m or posedge rst)if(rst)cnt_bps7<=0;elseif(cnt_bps7==13'd215)cnt_bps7<=0;elsecnt_bps7<=cnt_bps7+1; assign BPS_CLK1=(cnt_bps1==13'd2604)?1:0;assign BPS_CLK2=(cnt_bps2==13'd1302)?1:0;assign BPS_CLK3=(cnt_bps3==13'd868)?1:0;assign BPS_CLK4=(cnt_bps4==13'd434)?1:0;assign BPS_CLK5=(cnt_bps5==13'd217)?1:0;assign BPS_CLK6=(cnt_bps2==13'd1302)?1:0;assign BPS_CLK7=(cnt_bps6==13'd651)?1:0;assign BPS_CLK8=(cnt_bps4==13'd434)?1:0;assign BPS_CLK9=(cnt_bps5==13'd217)?1:0;assign BPS_CLK10=(cnt_bps7==13'd018)?1:0; endmodule

七個always語句里面分別產生對應波特率信號的計數。比如要產生9600的就應該是計數(系統時鐘50m除以9600)下。
## 按鍵模塊

module key(input clk_50m,input key,input rst,input BPS_CLK1,input BPS_CLK2,input BPS_CLK3,input BPS_CLK4,input BPS_CLK5,input BPS_CLK6,input BPS_CLK7,input BPS_CLK8,input BPS_CLK9,input BPS_CLK10,output reg sent_clk=0,output reg res_clk=0);reg [2:0] key_cn=0;always@(posedge clk_50m or posedge rst) //檢測按鍵次數,用于轉換輸出不同的波特率if(rst)key_cn<=0;elseif(key==1)if(key_cn==4)key_cn<=0;elsekey_cn<=key_cn+1;always@(posedge clk_50m) //根據按鍵次數輸出不同波特率的信號及它的一半case(key_cn)3'd0:begin sent_clk<=BPS_CLK1;res_clk<=BPS_CLK6; end3'd1:begin sent_clk<=BPS_CLK2;res_clk<=BPS_CLK7; end3'd2:begin sent_clk<=BPS_CLK3;res_clk<=BPS_CLK8; end3'd3:begin sent_clk<=BPS_CLK4;res_clk<=BPS_CLK9; end3'd4:begin sent_clk<=BPS_CLK5;res_clk<=BPS_CLK10; enddefault:begin sent_clk<=BPS_CLK1;res_clk<=BPS_CLK6; endendcaseendmodule

按鍵計數,把按鍵當作使能信號,當按鍵按下,按鍵計數器計數,之后case語句判斷按鍵次數,然后賦值輸出對應波特率及他的一半;輸出為sen_clk與rec_clk。也就是按一次鍵會產生兩種波特率信號。
## 頂層文件

module top(input clk_50m,input key,input rst,output sent_clk,output res_clk); wire BPS_CLK1,BPS_CLK2,BPS_CLK3,BPS_CLK4,BPS_CLK5,BPS_CLK6,BPS_CLK7,BPS_CLK8,BPS_CLK9,BPS_CLK10;wire BPS1,BPS2,BPS3,BPS4,BPS5,BPS6,BPS7,BPS8,BPS9,BPS10;frequency i1 (.clk_50m(clk_50m), .rst(rst), .BPS_CLK1(BPS1), .BPS_CLK2(BPS2), .BPS_CLK3(BPS3), .BPS_CLK4(BPS4), .BPS_CLK5(BPS5), .BPS_CLK6(BPS6), .BPS_CLK7(BPS7), .BPS_CLK8(BPS8), .BPS_CLK9(BPS9), .BPS_CLK10(BPS10));key i2(.clk_50m(clk_50m), .key(key), .BPS_CLK1(BPS1), .BPS_CLK2(BPS2), .BPS_CLK3(BPS3), .BPS_CLK4(BPS4), .BPS_CLK5(BPS5), .BPS_CLK6(BPS6), .BPS_CLK7(BPS7), .BPS_CLK8(BPS8), .BPS_CLK9(BPS9), .BPS_CLK10(BPS10), .sent_clk(sent_clk), .res_clk(res_clk));endmodule ## 仿真文件 module uart_clk;// Inputsreg clk_50m;reg key;reg rst;// Outputswire sent_clk;wire res_clk;// Instantiate the Unit Under Test (UUT)top uut (.clk_50m(clk_50m), .key(key), .rst(rst), .sent_clk(sent_clk), .res_clk(res_clk));initial begin// Initialize Inputsclk_50m = 0;key = 0;rst = 0;end always #10 clk_50m=!clk_50m; alwaysbeginkey<=1;#20;key<=0;#500000;endendmodule

仿真波形

總結

以上是生活随笔為你收集整理的FPGA入门实验之串口发送的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。