欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4573|回復: 1
打印 上一主題 下一主題
收起左側

FPGA的UART深析

[復制鏈接]
跳轉到指定樓層
樓主
ID:50962 發表于 2013-6-17 12:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
        鑒于以前對51單片機和STM32單片機串口的編程,對UART的了解僅僅停留在控制寄存器、波特率控制、以及數據緩存區這個層次,直到利用FPGA實現UART之后才對串口的工作流程有了更加深入細致的了解,以發散的思維去學習的話也會對其他通信協議以及數據的采集類FPGA的設計有一定的鋪墊意義,接下來就讓我們深度解析UART的運行機制。
       對于異步串行數據傳輸協議(UART)我們首先要解決的也要關注的就是串口波特率,波特率——BAUD bpsbit per second)那么對于一個時鐘頻率為clkFPGA首先需要進行分頻以及確定接收數據的采樣點,分頻數就為clk/BAUD,那么采樣點就應該在clk/BAUD/2為數據持續時間的中間,那么就需要在在這個時鐘周期產生一個采樣標志,或者稱作采樣觸發,另外我們不能讓波特率信號不停的差生,因為是異步串行傳輸所以只有當有數據需要接收或者需要發送時,按照需要產生波特率信號,這就需要有一個波特率啟動標志信號。異步串行的物理接口有兩個信號線RXD(數據接收),TXD(數據發送),在沒有數據傳輸時兩個信號線都保持高電平,當有數據需要接受時,RXD將被數據的起始位拉低,我們在verilog中用脈沖邊沿檢測法來檢測接口的邊沿,就在他的下降沿我們置位波特率啟動標志,進而啟動波特率發生以接收數據。與此同時只為數據接收標志位用以觸發中斷或者查詢用,并對波特率信號進行計數,因為異步串口傳輸每一次傳輸的數據位數都是一定的,當數據位被完全接收完成清空接收標志,同時將數據存入數據接收緩存。
         對于數據的發送首先應該有一個觸發信號,當有數據需要發送時首先對此信號進行置位,同時置位波特率起始標志位以啟動波特率發生。另外也需要對波特率的個數進行計數,當所有的數據位都被發送完成后清除波特率啟動標志位關閉波特率發生,并將觸發信號清零以標志數據發送完成。
脈沖邊沿檢測:
對于數據的采集與接收一般都屬于時序邏輯,可以利用觸發器的時鐘延遲來進行檢測,
首先定義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,那么edge0edge1剛好相差一個時鐘,這樣就可以用下面的描述語言檢測出信號腳的邊沿

Assign edge=edge0^edge1;(上升沿和下降沿都可以檢測)
Assign edge=edge0&~edge1;(上升沿可以檢測)
Assign edge=edge1&~edge0;(下降沿檢測)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2013-6-17 21:03 | 只看該作者
講解得很透徹
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表