文章目錄
- 前言
- 本實驗是基于FPGA的串口通信實驗,
- 一、實驗結果
- 二、實驗步驟
- 頂層模塊
- 串口發送模塊中的累加模塊
- 波特率
- 邊沿檢測
- 實驗中遇到的問題及解決辦法
- 寫在最后的話
前言
本實驗是基于FPGA的串口通信實驗,
想要完整電路圖的同學可直接可加我微信:wxid_c82ezb72s7cf22或QQ:1871478767,
一、實驗結果
①:串口發送0~255資料,通過按鍵來控制,按鍵每按下一次,就實作發送一次資料,并且資料加一,如下圖所示:
②:和①大致一樣,每次按鍵按下,資料就減一,如下圖:

③:對于波特率,本次實驗也是將其單獨獨立出來,用戶可以隨意更改,本次我采用的是9600.
二、實驗步驟
本實驗總共只有兩個模塊,一個是按鍵消抖模塊,另一個是串口通信中的發送模塊,
頂層模塊
module top_uart(
input sys_clk, //時鐘信號50Mhz
input sys_rst_n, //復位信號
input key, //按鍵信號
output uart_txd, //UART發送埠
output wire key_value,
output wire key_flag
);
assign uart_en = key_flag & (~key_value);
//*****************************************************
//** main code
//*****************************************************
//串口發送模塊
s_c u_s_c(
.sys_clk (sys_clk),
.sys_rst_n (sys_rst_n),
.key_value (key_value),
.uart_en (uart_en),
.uart_txd (uart_txd )
);
//按鍵消抖模塊
key_debounce u_key_debounce(
.sys_clk (sys_clk),
.sys_rst_n (sys_rst_n),
.key (key),
.key_flag (key_flag),
.key_value (key_value)
);
endmodule
串口發送模塊中的累加模塊
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
uart_din <= 8'b0;
else if(uart_en)
uart_din <= uart_din + 1'd1;
else
uart_din <= uart_din;
end
之前要定義一下uart_din的位寬,我此處定義的是8位,即是最大值為255,用戶可以根據自己的需要進行改動,此處不做過多的贅述,
波特率
用戶可以自行更改波特率
parameter CLK_FREQ = 50000000;
parameter UART_BPS = 9600; //波特率此處更改
localparam BPS_CNT = CLK_FREQ/UART_BPS;
邊沿檢測
//捕獲uart_en上升沿,得到一個時鐘周期的脈沖信號
assign en_flag = (~uart_en_d0) & uart_en;
//assign en_flag = (~uart_en_d1) & uart_en_d0;
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n) begin
uart_en_d0 <= 1'b0;
//uart_en_d1 <= 1'b0;
end
else begin
uart_en_d0 <= uart_en;
//uart_en_d1 <= uart_en_d0;
end
end
實驗中遇到的問題及解決辦法
我在本次實驗中遇到了許多問題,但是最值得被記錄的一個是這個邊沿檢測的時序問題,
在上述邊沿檢測代碼中,可以看到我注釋了一些,那是因為如果將uart_en打兩拍之后,取//assign en_flag = (~uart_en_d1) & uart_en_d0,這個則是取第二拍,如下圖所示:

圖中的箭頭是第一拍,
這個的結果是,發出的資料從01開始累加,而不是從00開始,
我改進的辦法在上述代碼中也可以看出,上時序圖:

這樣改進之后,就會取第一拍,就是從00開始計數了,
寫在最后的話
想要完整代碼的小伙伴可直接可加我微信:wxid_c82ezb72s7cf22
或者
QQ:1871478767
我現在還是一個FPGA小白,在文章中的一些地方的措辭會有一些口語化,而并不是用專業的術語,希望大家理解,相反,我個人還是有點高興,因為如果一個知識能夠用你自己的話說出來,那樣對于知識的理解是非常深刻的,相信在之后的學習中,我自己會逐漸向專業靠攏,為之努力!
加油吧!打工人!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301355.html
標籤:其他
