色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x

零基礎(chǔ)學(xué)FPGA(九)牛刀小試——串行口通信電路設(shè)計(jì)

發(fā)布時(shí)間:2016-2-24 09:55    發(fā)布者:designapp
關(guān)鍵詞: FPGA , 狀態(tài)機(jī)
  以前在學(xué)單片機(jī)的時(shí)候,覺得串口通信其實(shí)很簡(jiǎn)單,只要一個(gè)指令數(shù)據(jù)就能輕易的接收或者發(fā)送。前幾天試著用FPGA實(shí)現(xiàn),發(fā)現(xiàn)里面的學(xué)問還不少,并沒有想象的那么簡(jiǎn)單。當(dāng)然代碼肯定是參考別人的,不過我還是認(rèn)真研究了整段代碼的,下面的程序就是我在看懂了別人代碼后自己敲的,花了也不少時(shí)間,理解的也差不多,下面我就在這里給那些和我一樣的初學(xué)者介紹一下吧,解釋的不對(duì)的地方還望各位大神指正,大家好一起學(xué)習(xí)~
  1、頂層模塊
  寫程序都一樣,不能多有的程序都寫在一個(gè)模塊里,那樣看起來(lái)很麻煩,出了錯(cuò)誤也不好維護(hù),對(duì)于一些小的程序我們可以寫在一個(gè)模塊里,但程序一旦復(fù)雜起來(lái)還是要懂得模塊化編程的,對(duì)于頂層模塊,最好是只寫接口就好了,例如:
  


  這段代碼中,rx_232是我們的底層模塊名,后面跟著的那個(gè)rx呢是我們自己取的名字,是任意的。后面的一大串呢就是接口,為了直觀呢,建議大家采用我的這種寫法,看上去比較清楚明白,括號(hào)里面的接口是我們頂層文件的接口,括號(hào)外面的是我們調(diào)用底層模塊的接口,這些接口要一一對(duì)應(yīng)正確才能保證數(shù)據(jù)之間的傳輸。
  在頂層模塊中,我們只定義了數(shù)據(jù)輸入接口,用來(lái)接收數(shù)據(jù),數(shù)據(jù)輸出接口,用于發(fā)送數(shù)據(jù),時(shí)鐘接口,和復(fù)位接口。這四個(gè)接口是有輸入輸出關(guān)系的,對(duì)于其他的接口,是屬于我們整個(gè)模塊內(nèi)部的接口,是模塊與模塊之間的接口,既非輸入,也非輸出,相當(dāng)于一根導(dǎo)線一樣,所以我們把他們定義成wire型變量
  


  2、波特率選擇模塊
  單片機(jī)或者計(jì)算機(jī)在串口通信時(shí)的傳輸速率用波特率表示,9600bps表示的就是每秒鐘傳送9600位的數(shù)據(jù)
  這里之所以計(jì)數(shù)到5027,在這里算一下。
  1秒傳送9600位,那么傳送一位的時(shí)間就可以算出,即1s=1000_000_000ns,所以傳送一位數(shù)據(jù)需要1000_000_000/9600=
  104166ns,而我們的時(shí)鐘周期為20ns,因此需要計(jì)數(shù)到104166/20=5028個(gè)時(shí)鐘周期
  下面是串口通信時(shí)序圖
  


  我再來(lái)解釋一下這個(gè)圖吧,我當(dāng)時(shí)學(xué)單片機(jī)的時(shí)候還真是沒怎么重視這張圖,只知道只要一個(gè)指令就可以發(fā)送,沒有真正搞清楚是怎么發(fā)送和接受的,那就在這里復(fù)習(xí)一下吧
  計(jì)算機(jī)和單片機(jī)之間進(jìn)行通信,這里用的是rs232通信方式,即通信之前,計(jì)算機(jī)和單片機(jī)之前要設(shè)定好相同的波特率,只有波特率相同了才能進(jìn)行通信。
  其次,計(jì)算機(jī)發(fā)送數(shù)據(jù)時(shí)要先發(fā)送一個(gè)起始位,一般是低電平,后面跟著的是8位數(shù)據(jù)位,奇偶校驗(yàn)位,停止位等,當(dāng)起始位低電平信號(hào)傳送到我們的接收端口時(shí),在接收模塊中會(huì)發(fā)送一個(gè)命令給波特率時(shí)鐘計(jì)數(shù)器,開始計(jì)時(shí),計(jì)時(shí)到一半的時(shí)候會(huì)產(chǎn)生一個(gè)采樣高脈沖信號(hào),當(dāng)接收模塊檢測(cè)到這個(gè)高脈沖之后就會(huì)將數(shù)據(jù)存到寄存器中,當(dāng)檢測(cè)到第11個(gè)脈沖信號(hào)時(shí),也就是代表一幀的數(shù)據(jù)接收完畢,發(fā)送模塊就給波特率選擇模塊發(fā)送一個(gè)停止信號(hào)告訴它停止計(jì)時(shí)。同時(shí),當(dāng)數(shù)據(jù)接收完畢之后也會(huì)產(chǎn)生一個(gè)信號(hào)告訴發(fā)送模塊,信號(hào)已經(jīng)接收完畢,準(zhǔn)備發(fā)送,這個(gè)時(shí)候發(fā)送模塊再給波特率計(jì)時(shí)模塊發(fā)送一個(gè)信號(hào)開始計(jì)時(shí),計(jì)數(shù)到某一位的中間時(shí)產(chǎn)生一個(gè)采樣信號(hào),當(dāng)發(fā)送模塊檢測(cè)到采樣信號(hào)之后就將寄存器里的數(shù)據(jù)送到發(fā)送端,每次只送一位,這樣就實(shí)現(xiàn)了數(shù)據(jù)的接收與發(fā)送。
  下面是波特率計(jì)時(shí)模塊的主要程序部分
  


  3、數(shù)據(jù)接收模塊
  在接收模塊中,為了準(zhǔn)確的檢測(cè)計(jì)算機(jī)發(fā)送來(lái)的數(shù)據(jù)起始位的那個(gè)低電平信號(hào),用到了邊沿脈沖檢測(cè)法,可以有效的避免毛刺現(xiàn)象帶來(lái)的問題
  


  下面是發(fā)送部分的主要程序段
  


  4、數(shù)據(jù)發(fā)送模塊
  發(fā)送模塊原理上和接受模塊是一樣的,不同點(diǎn)就是接收模塊通過邊沿檢測(cè)法檢測(cè)起始位低電平信號(hào)來(lái)啟動(dòng)接收數(shù)據(jù),而發(fā)送模塊是通過檢測(cè)數(shù)據(jù)發(fā)送完畢后,我們認(rèn)為的置一個(gè)低電平信號(hào),發(fā)送模塊通過檢測(cè)這個(gè)低電平信號(hào)來(lái)啟動(dòng)發(fā)送。見下圖
  


  下面是生成的RTL視圖
  


  下面是測(cè)試結(jié)果
  

                               
               
本文地址:http://www.54549.cn/thread-161110-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表