欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
FPGA的UART深析
[打印本頁]
作者:
liuz
時間:
2013-6-17 12:00
標題:
FPGA的UART深析
鑒于以前對
51
單片機和
STM32
單片機串口的編程,對
UART
的了解僅僅停留在控制寄存器、波特率控制、以及數(shù)據(jù)緩存區(qū)這個層次,直到利用
FPGA
實現(xiàn)
UART
之后才對串口的工作流程有了更加深入細致的了解,以發(fā)散的思維去學習的話也會對其他通信協(xié)議以及數(shù)據(jù)的采集類
FPGA
的設計有一定的鋪墊意義,接下來就讓我們深度解析
UART
的運行機制。
對于異步串行數(shù)據(jù)傳輸協(xié)議(
UART
)我們首先要解決的也要關注的就是串口波特率,波特率——
BAUD bps
(
bit per second
)那么對于一個時鐘頻率為
clk
的
FPGA
首先需要進行分頻以及確定接收數(shù)據(jù)的采樣點,分頻數(shù)就為
clk/BAUD
,那么采樣點就應該在
clk/BAUD/2
為數(shù)據(jù)持續(xù)時間的中間,那么就需要在在這個時鐘周期產(chǎn)生一個采樣標志,或者稱作采樣觸發(fā),另外我們不能讓波特率信號不停的差生,因為是異步串行傳輸所以只有當有數(shù)據(jù)需要接收或者需要發(fā)送時,按照需要產(chǎn)生波特率信號,這就需要有一個波特率啟動標志信號。異步串行的物理接口有兩個信號線
RXD
(數(shù)據(jù)接收),
TXD
(數(shù)據(jù)發(fā)送),在沒有數(shù)據(jù)傳輸時兩個信號線都保持高電平,當有數(shù)據(jù)需要接受時,
RXD
將被數(shù)據(jù)的起始位拉低,我們在
verilog
中用
脈沖邊沿檢測法
來檢測接口的邊沿,就在他的下降沿我們置位波特率啟動標志,進而啟動波特率發(fā)生以接收數(shù)據(jù)。與此同時只為數(shù)據(jù)接收標志位用以觸發(fā)中斷或者查詢用,并對波特率信號進行計數(shù),因為異步串口傳輸每一次傳輸?shù)臄?shù)據(jù)位數(shù)都是一定的,當數(shù)據(jù)位被完全接收完成清空接收標志,同時將數(shù)據(jù)存入數(shù)據(jù)接收緩存。
對于數(shù)據(jù)的發(fā)送首先應該有一個觸發(fā)信號,當有數(shù)據(jù)需要發(fā)送時首先對此信號進行置位,同時置位波特率起始標志位以啟動波特率發(fā)生。另外也需要對波特率的個數(shù)進行計數(shù),當所有的數(shù)據(jù)位都被發(fā)送完成后清除波特率啟動標志位關閉波特率發(fā)生,并將觸發(fā)信號清零以標志數(shù)據(jù)發(fā)送完成。
脈沖邊沿檢測:
對于數(shù)據(jù)的采集與接收一般都屬于時序邏輯,可以利用觸發(fā)器的時鐘延遲來進行檢測,
首先定義
2
個寄存器
Input singnal;
reg edge0
;
reg edge1
;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
……………….
Else
Edge0<=signal;
Edge1<=edge1;
end
上面的硬件描述在時鐘的上升沿將信號腳的邏輯值賦給
edge0
,同時將
edge0
的值給
edge1
,那么
edge0
與
edge1
剛好相差一個時鐘,這樣就可以用下面的描述語言檢測出信號腳的邊沿
Assign edge=edge0^edge1;(
上升沿和下降沿都可以檢測
)
Assign edge=edge0&~edge1;(
上升沿可以檢測
)
Assign edge=edge1&~edge0;(
下降沿檢測
)
作者:
admin
時間:
2013-6-17 21:03
講解得很透徹
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1