版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、譯文基于FPGA的串行控制器設(shè)計Thomas Oelsner QuickLogic Europe 應(yīng)用注釋:QAN20簡介目前設(shè)計開發(fā)和驗證FPGA系統(tǒng)時,硬件描述語言HDL的使用變得越來越主流。采用行為級描述不僅提高了產(chǎn)品的設(shè)計效率,而且在設(shè)計驗證中顯示出其獨特的優(yōu)勢。目前最流行的HDL語言是Verilog和VHDL語言。本文介紹了采用verilog語言對數(shù)字異步串行收發(fā)器進行設(shè)計和驗證。UART 通用異步串行收發(fā)器(UART)由二個獨立的HDL模塊組成。一個模塊實現(xiàn)發(fā)射功能,而另一個模塊則實現(xiàn)接收功能。發(fā)射和接收功能模塊在頂層設(shè)計時組合到一起,這種接收和發(fā)射的組合是通信所必需的。數(shù)據(jù)寫入發(fā)
2、射器,從接收器讀出,所有的數(shù)據(jù)是以二進制8字節(jié)的形式通過一個雙向CPU接口。由地址映射的發(fā)射機和接收機通道可以很容易地建立接口。兩個模塊共用一個主控時鐘,該時鐘為mclkx16,在每個模塊里,主控時鐘mclkx16被分頻成獨立的波特率時鐘。所有英文的圖和表的標(biāo)題要翻譯成中文圖1 通用異步串行收發(fā)器通用異步串行收發(fā)器的特點是否具有全雙工操作標(biāo)準(zhǔn)UART數(shù)據(jù)幀格式偶校驗或奇校驗?zāi)J狡媾煎e誤校驗幀錯誤校驗溢出錯誤校驗數(shù)據(jù)接收準(zhǔn)備中斷數(shù)據(jù)發(fā)送準(zhǔn)備中斷是是是是是是是是表 UART功能概述UART的功能概況注意下面所有圖標(biāo)的格式,統(tǒng)一是居中,字體要一樣。UART的基本功能概況見下圖。左邊為“發(fā)送寄存器”、
3、“發(fā)送移位寄存器”以及“發(fā)送控制邏輯模塊”,這些模塊包含在發(fā)送模塊”txmix”中。右邊為“接收移位寄存器”、“接收寄存器”和“接收控制邏輯模塊”,這些模塊包含在發(fā)送模塊”rxmix”中。這兩個模塊有單獨的輸入和輸出的控制線路,只有雙向的數(shù)據(jù)總線、主時鐘和復(fù)位線是共享的是共享的。圖的標(biāo)題翻譯圖2 UART框圖頂層UART系統(tǒng)的I/O功能描述符 號類型描 述mclkx16輸入用于主控時鐘波特率的生產(chǎn)。reset輸入主復(fù)位輸入信號。parityerr輸出表明被檢測的數(shù)據(jù)幀有無奇偶校驗錯誤。校驗編碼可以基于偶數(shù)或奇數(shù)模式。framingerr輸出表明從rx輸入的數(shù)據(jù)串是否符合如圖2所示的UART數(shù)據(jù)
4、幀格式。overrun輸出表明接收模塊準(zhǔn)備接收新數(shù)據(jù)是,模塊中仍然有數(shù)據(jù)未讀取。rxrdy輸出表明接收模塊已經(jīng)接收新數(shù)據(jù),并準(zhǔn)備讀取。txrdy輸出表明數(shù)據(jù)已準(zhǔn)備好加載到發(fā)送模塊。read輸入低電平有效的讀選通信號,用于從接收模塊中讀取數(shù)據(jù)。write輸入低電平有效的寫選通信號,用于將數(shù)據(jù)寫入發(fā)送模塊。data7:0輸入雙向數(shù)據(jù)總線。數(shù)據(jù)通過該總線進行發(fā)送或接收。tx輸出發(fā)送模塊串行輸出。復(fù)位或閑置時為高電平。rx輸入接收模塊串行輸入。復(fù)位或閑置時為高電平。表 2 UART的IO接口UART的標(biāo)準(zhǔn)數(shù)據(jù)格式圖3 UART數(shù)據(jù)幀格式圖的標(biāo)題要翻譯圖3為UART的串行數(shù)據(jù)格式,在串行數(shù)據(jù)幀中包含8位
5、數(shù)據(jù)位以及編碼比特的信息。在連續(xù)傳輸線路之間,傳輸線路處于高電平。傳輸從低位的起始比特開始,接下來的是8比特的數(shù)據(jù)信息,低位對于后邊高位有重要的作用。然后是1比特的奇偶校驗位,對之前的8比特的數(shù)據(jù)位進行奇偶校驗。奇偶校驗位由奇校驗或偶校驗的形式進行編碼。奇偶校驗位之后是高位停止比特,標(biāo)志數(shù)據(jù)幀的結(jié)束。UART時序圖下面顯示了數(shù)據(jù)是如何寫入“發(fā)送寄存器”并如何加載給“發(fā)送移位寄存器”,及在波特率時鐘上升沿時如何傳輸?shù)絫x端進行輸出的。圖的標(biāo)題要翻譯圖4 發(fā)送時序圖下圖顯示了數(shù)據(jù)如何從rx端輸入寫入“接收移位寄存器”并加載到“接收寄存器”。最后接收模塊發(fā)出rxrdty標(biāo)志位。同上圖5 接收時序圖發(fā)
6、送模塊主控時鐘稱為mclkx16,被分頻成等于mclkx16/16的稱為txclk的時鐘頻率。數(shù)據(jù)以并行的形式寫入模塊,而按照波特率時鐘的頻率以串行的形式從tx端輸出。從tx端輸出的數(shù)據(jù)按照圖3所示的UART數(shù)據(jù)幀格式發(fā)送。同上圖6 發(fā)送模塊表的標(biāo)題和內(nèi)容要翻譯。符號類型描 述mclkx16輸入用于生成主控時鐘波特率。reset輸入主復(fù)位輸入信號write輸入低電平有效的寫選通信號,將數(shù)據(jù)寫入發(fā)送模塊。data7:0輸入數(shù)據(jù)傳輸是通過數(shù)據(jù)總線寫入發(fā)送模塊。在寫選通脈沖的上升沿,數(shù)據(jù)總線的內(nèi)容鎖定在一個內(nèi)部的“發(fā)送寄存器”。tx輸出串行數(shù)據(jù)輸出。串行數(shù)據(jù)幀通過這個端口發(fā)送,當(dāng)復(fù)位或閑置時,tx保
7、持高電平。txrdy輸出表明數(shù)據(jù)鎖存到“發(fā)送寄存器”,同時加載到“發(fā)送移位寄存器”,“發(fā)送寄存器”準(zhǔn)備好接收新數(shù)據(jù)。表 2 發(fā)送模塊IO接口功能同上符號類型內(nèi)部標(biāo)志或信號的描述thrreg7:08位“發(fā)送寄存器”,用于鎖存發(fā)送模塊接收到的數(shù)據(jù)。tsrreg7:08位“發(fā)送移位寄存器”,發(fā)送模塊的數(shù)據(jù)通過此輸出。paritymodewire奇偶校驗?zāi)J轿槐砻髁税l(fā)送模塊進行奇偶校驗的模式。值為“1”時,為奇校驗,為“0”時,偶校驗。txparityreg輸出tx奇偶校驗的結(jié)果。tag1,tag2reg此標(biāo)志位表明發(fā)送模塊的狀態(tài)。txclkreg波特率時鐘,根據(jù)時鐘頻率將數(shù)據(jù)通過tx輸出。txdon
8、ewire表明一個數(shù)據(jù)串發(fā)送完成。txdatardyreg表明“發(fā)送寄存器”已鎖存新數(shù)據(jù),準(zhǔn)備好進行發(fā)送。paritycyclewire表明tx輸出端接收到txparity的值時,發(fā)送模塊的狀態(tài)。cntreg3:0暫存器,用于將clkx16時鐘分頻為txclk時鐘。表3 發(fā)送模塊的內(nèi)部信號發(fā)送模塊的行為描述發(fā)送模塊等待新的數(shù)據(jù)來寫入模塊,新的數(shù)據(jù)在發(fā)送模塊初始化后發(fā)送。以并行形式寫入模塊的數(shù)據(jù)轉(zhuǎn)換成串行的形式并由tx端輸出。當(dāng)沒有傳輸序列的時候, tx端輸出高電平。圖的標(biāo)題要翻譯圖 7發(fā)送的流程發(fā)送模塊的實現(xiàn)用Verilog語言聲明模塊端口,這里定義的信號,是來自于模塊并在這里輸出的。在這里并
9、沒有詳細(xì)地說明方向。module txmit(mclkx16,write,reset,tx,txrdy,data);圖8 發(fā)送模塊的聲明同上端口定義之后是端口的方向,方向為輸入、輸出或輸入(雙向) ,這在表1中已說明。描述端口方向之后是聲明內(nèi)部信號,內(nèi)部信號在Verilog語言中內(nèi)部信號聲明為“wire”或“reg”數(shù)據(jù)類型,wire類型用于連續(xù)的賦值,也叫做組合聲明。reg類型在Verilog語言中用于“always”塊,常常用于時序邏輯的賦值,但有時并不是這樣,進一步解釋見Verilog參考書。模塊內(nèi)部信號的數(shù)據(jù)類型說明見表3 。我們現(xiàn)在已經(jīng)進行所有必要的聲明,并作好準(zhǔn)備看看實際的執(zhí)行情況
10、。硬件描述語言使我們可以用更多的行為模式來描述發(fā)送模塊的功能,而不是把重點放在門一級的實際實現(xiàn)上。軟件編程語言,函數(shù)和過程將龐雜的程序變得更具可讀性和易于維護。Verilog語言提供類似的函數(shù)和任務(wù)結(jié)構(gòu)類似于軟件編程語言的函數(shù)和過程。一個Verilog語言的函數(shù)和任務(wù)相當(dāng)于幾行Verilog代碼,這些代碼使得輸入信號影響輸出信號或變量。函數(shù)和任務(wù)通常用在多行代碼都是重復(fù)出現(xiàn)的地方, 從而使得設(shè)計易于閱讀和維護。一個Verilog的函數(shù)可以有多個輸入,但始終只有一個輸出,而Verilog的任務(wù)在某些情況下可以同時有多個輸入和多個輸出。下圖顯示了Verilog的任務(wù)格式,保留了所有必要的語句,用來
11、描述發(fā)送模塊的傳輸模式。圖的標(biāo)題要翻譯圖9 發(fā)送傳輸模式我們可以看到在移位寄存器有2個標(biāo)志位tag1和tag2,創(chuàng)建類似的任務(wù)來描述發(fā)送模塊的“閑置”和“負(fù)載”模式。使用Verilog語言,現(xiàn)在我們可以創(chuàng)建一個“容易閱讀”的行為模型的空穴傳輸過程。如在波特率時鐘的上升沿,tsr中的內(nèi)容傳輸?shù)絫x端輸出。在tsr傳輸?shù)耐瑫r,奇偶校驗位也產(chǎn)生了,如圖10所示。重要的一點,就是在傳輸過程中tsr會進行補零。不同的后置標(biāo)志位tag 和tsr補零位的組合表示不同的傳輸模式。如果奇偶校驗循環(huán)周期的第二個周期是高電平,這意味著以標(biāo)志位tg2的值對tsr1賦值。這是圖還是表?當(dāng)傳輸結(jié)束時,Txdone置高電平
12、,這意味著以標(biāo)志位tg2的置對tx賦值?;谒鰝鬏斝蛄兄械牟煌瑺顟B(tài),“數(shù)據(jù)位”,“奇偶校驗位”或“停止位”被多路復(fù)用到tx輸出。圖的標(biāo)題要翻譯圖10 發(fā)送傳輸過程傳輸序列模擬在寫操作信號上升沿時數(shù)據(jù)總線被鎖存,在txclk的下一個上升沿,thr的內(nèi)容加載到tsr,tx端輸出低電平的起始位,同時txrdy標(biāo)志位表明,該thr再次準(zhǔn)備好要寫入新的數(shù)據(jù)。在txclk的每個上升沿,tsr的內(nèi)容被轉(zhuǎn)移到totx。在數(shù)據(jù)傳輸?shù)耐瑫r,奇偶校驗位也隨之產(chǎn)生。在第一個奇偶校驗周期,tx持續(xù)為高電平,在第二個周期,tx端獲得奇偶校驗的結(jié)果。傳輸結(jié)束時內(nèi)部的txdone信號為高電平,tx端也持續(xù)高電平。同上圖11
13、 波特率為2Mhz時的發(fā)送時序圖接收模塊主控時鐘mclkx16分頻到合適的波特率時鐘頻率,即rxclk時鐘,它等于mclkx16/16。串行數(shù)據(jù)在rx端接收輸入模塊,其中串行數(shù)據(jù)以如圖3所示的UART數(shù)據(jù)幀格式傳輸,收到的數(shù)據(jù)通過8位數(shù)據(jù)總線以并行的形式輸出。同上圖13 接收模塊符號類型IO接口描述mclkx16輸入用于輸入主控時鐘波特率的生成。reset輸入主復(fù)位輸入信號。read輸入低電平有效的讀選通信號,用于從接收模塊中讀取數(shù)據(jù)。data7:0輸出數(shù)據(jù)總線,數(shù)據(jù)以并行的形式從總線中讀取。在讀選通信號的下降沿,數(shù)據(jù)加載到數(shù)據(jù)總線。rx輸入接收信號,處于閑置狀態(tài)時,保持為高電平。rxrdy輸
14、出表明已接收新數(shù)據(jù),并準(zhǔn)備將其讀取。parityerr輸出表明無論是否發(fā)生奇偶校驗錯誤,都可以進行奇偶校驗編碼。framingerr輸出表明發(fā)送到rx的串行信號的數(shù)據(jù)格式是否符合如圖3所示的UART數(shù)據(jù)幀格式。overrun輸出表明新數(shù)據(jù)準(zhǔn)備傳輸?shù)浇邮漳K時,接收模塊仍然有數(shù)據(jù)未讀取。表4 接收模塊IO接口信號符號類型內(nèi)部標(biāo)志或信號的描述rhrreg7:08位“接收寄存器”,用于鎖存接收模塊接收到的數(shù)據(jù)。rsrreg7:08位“接收移位寄存器”,接收模塊的數(shù)據(jù)通過此輸入。paritymodewire奇偶校驗?zāi)J轿槐砻髁税l(fā)送模塊進行奇偶校驗的模式。值為“1”時,為奇校驗,為“0”時,偶校驗。rx
15、parityreg輸出rsr奇偶校驗的結(jié)果。paritygenreg表明數(shù)據(jù)幀奇偶校驗后,發(fā)生錯誤。rxclkreg波特率時鐘,根據(jù)時鐘頻率進行數(shù)據(jù)傳輸。rxstopwire獲取從rx接收到的數(shù)據(jù)幀的結(jié)束位。idlereg接收模塊的狀態(tài)位。huntreg接收模塊的狀態(tài)位。rxdatardyreg表明新數(shù)據(jù)以接收,并準(zhǔn)備讀取。rxcntreg3:0暫存器,用于將clkx16時鐘分頻為rxclk時鐘。表5 接收模塊的內(nèi)部信號接收模塊行為描述在連續(xù)發(fā)送時,傳輸線保持高電平,根據(jù)異步串行UART標(biāo)準(zhǔn),接收模塊在等待“閑置”模式的rx端變?yōu)榈碗娖?。在rx的下降沿時,接收模塊進入“捕獲”模式,因為現(xiàn)在正在
16、尋找一個新的數(shù)據(jù)幀的有效起始位。當(dāng)有效的開始位被檢測到時,接收器進入“數(shù)據(jù)傳輸”模式。如果檢測到無效的起始位,接收模塊則進入“閑置”模式。當(dāng)接收到一個數(shù)據(jù)幀時,各種校驗和檢查同時進行。接收模塊接收到一個完整的數(shù)據(jù)幀時,接收端返回待機模式,接收模塊基本運作如下所示。圖13接收的流程圖的標(biāo)題要翻譯表的標(biāo)題和內(nèi)容要翻譯接收頻率為mclkx16,和第一上升沿的rxclk常常發(fā)生在中心點開始位,如下圖顯示,對于中心點的起始位及后邊的數(shù)據(jù)字節(jié),波特率時鐘是同步。圖的標(biāo)題要翻譯圖14 同步時鐘rxclk起始位的中心點接收器模塊的實現(xiàn)為了創(chuàng)建一個易讀易操作的接收模塊,用兩個Verilog任務(wù)來描述不同的接收方
17、式,當(dāng)接收在空閑狀態(tài)時,其中一個Verilog稱為“空閑復(fù)位”,下圖中有用來描述該接收機復(fù)位條件的必要的語句。同上圖15 復(fù)位條件和閑置模式下的接收模塊當(dāng)接收模塊不在復(fù)位狀態(tài),也不在空閑狀態(tài)下,接收模塊在rx輸入端采樣數(shù)據(jù),傳輸?shù)揭莆患拇嫫髦?,同時根據(jù)輸入的數(shù)據(jù)產(chǎn)生奇偶校驗位。這個Verilog任務(wù)稱為“數(shù)據(jù)傳輸”,下圖包括所有以描述上述行為的必要語句。圖的標(biāo)題要翻譯圖16 接收模塊數(shù)據(jù)的傳輸利用兩個Verilog任務(wù)實現(xiàn)上述功能,現(xiàn)我們可以在接收模塊的復(fù)位狀態(tài)、空閑狀態(tài)或者數(shù)據(jù)傳輸狀態(tài)對接收模塊進行行為級的描述,所有上述行為是和一個叫做rxclk的波特率時鐘同步的,它們的實現(xiàn)如下所示。同上圖
18、17 接收模塊進程當(dāng)?shù)碗娖狡鹗嘉坏竭_rsr0時,一個完整的數(shù)據(jù)幀將會被接收,在下一個接收時鐘上升沿到來時,接收模塊又回到空閑狀態(tài)。當(dāng)返回空閑狀態(tài)時,接收模塊發(fā)出“數(shù)據(jù)接收準(zhǔn)備”中斷,表明新的數(shù)據(jù)可以以并行的方式讀取。返回空閑狀態(tài)時,對錯誤的標(biāo)志位進行更新,并清除已經(jīng)讀取的數(shù)據(jù)。在讀信號的下降沿,rhr的內(nèi)容被鎖存到數(shù)據(jù)總線。在表8中列舉接收模塊進行的各種錯誤檢查。錯誤類型描 述奇偶校驗錯誤檢查接收數(shù)據(jù)時,奇偶校驗即已經(jīng)開始。奇偶校驗寄存器預(yù)先設(shè)置為空閑模式(1=奇校驗,0=偶校驗)。經(jīng)過一次完整的傳輸過程,奇偶校驗寄存器的值表明是否在傳輸過程中發(fā)生奇偶校驗錯誤。幀傳輸錯誤如果接收到的數(shù)據(jù)幀的結(jié)
19、束位不為1,可以認(rèn)為發(fā)生了幀傳輸錯誤。數(shù)據(jù)的格式不符合如圖2所示的UART數(shù)據(jù)幀格式。溢出新數(shù)據(jù)通過rsr接收時,之前接收的數(shù)據(jù)仍未讀取,可以認(rèn)為發(fā)生了溢出錯誤。Rsr的內(nèi)容無法加載到rhr中。表8 接收模塊支持的錯誤檢查接收序列的模擬在連續(xù)傳輸時線路保持高電平,在rx輸入的下降沿,內(nèi)部信號rxcnt開始計數(shù),保持和mclkx16同步。如果rx輸入在mclkx16的8個循環(huán)周期內(nèi)保持低電平,內(nèi)部空閑標(biāo)志位復(fù)位,這由 rxclk信號進行。這時,Rxclk信號與低位的起始位中心點同步,在接受時鐘上升沿,數(shù)據(jù)從rx傳輸?shù)絩sr。當(dāng)?shù)臀黄鹗嘉坏竭_rsr0時,在下一個接收時鐘上升沿時,空閑標(biāo)志位被強行置
20、為高電平。在接收序列時,產(chǎn)生rxclk的11個周期,主要是為了采樣1位低位起始位,8位數(shù)據(jù)位,1位奇偶位,1位高位停止位。在返回空閑狀態(tài),rsr的內(nèi)容加載至rhr,內(nèi)部標(biāo)志位更新,“rxrdy”標(biāo)志位表明,rhr的內(nèi)容可以讀出,在讀信號的下降沿,rhr的內(nèi)容鎖存到數(shù)據(jù)總線。圖的要求同上圖18 波特率為2Mhz時接收模塊的時序仿真硬件描述語言仿真在這里,我們研究如何將HDL用于行為級設(shè)計,實現(xiàn)數(shù)字UART設(shè)計。利用HDL進行設(shè)計可以使設(shè)計更容易閱讀,更容易理解,它還提供了能夠方便地描述在一個復(fù)雜的事件系統(tǒng)中相互緊密結(jié)合的各種過程,例如UART。我們將了解到這種依靠各種進程來描述復(fù)雜系統(tǒng)的能力對于
21、仿真而言是必需的。在Verilog語言中仿真激勵叫做“測試工具”。測試工具是Verilog的一個模塊,擁有要生成仿真激勵所需的所有HDL代碼。進行仿真時,模塊端口將會把信號映射到進行仿真的設(shè)計中。端口映射是由將UART頂層模塊的模塊分層實例化應(yīng)用到“測試工具”中實現(xiàn)的,如下所示。同上圖19 頂層UART模塊實例化這使得仿真激勵可以用來表示設(shè)計的輸入,并同時檢測該輸入條件下設(shè)計的輸出情況。可以有條件地通過輸出激勵對輸入激勵的響應(yīng)對設(shè)計進行調(diào)試,圖19顯示說明測試工具端口如何映射到UART的頂層。同上圖20 UART模型和測試工具通過測試工具,發(fā)送模塊輸出端返回到接收模塊輸入端,這使得發(fā)送模塊的信
22、號可以用來作為接收模塊的測試信號。數(shù)據(jù)以并行的方式從發(fā)送模塊發(fā)送,同時以串行的形式回送到接收模塊的輸入端,收到的數(shù)據(jù)最終從接收模塊以并行形式讀出。為了盡可能實現(xiàn)UART的自動化測試, Verilog任務(wù)樹如下,“寫入發(fā)送”任務(wù)提供了將并行數(shù)據(jù)寫入發(fā)送模塊的一切必要的聲明和語句,以完成“寫入發(fā)送”功能,并將數(shù)據(jù)鎖存到內(nèi)部,供測試工具進行分析。“讀取接收”任務(wù)提供了將并行的數(shù)據(jù)從接收模塊讀取出來的一切必要的聲明和語句,“讀取接收”任務(wù)來完成讀出功能,并得到鎖存在內(nèi)部的數(shù)據(jù)并供測試工具進行分析。“數(shù)據(jù)比較”任務(wù)提供了一切必要的聲明來比較寫入到發(fā)送模塊的數(shù)據(jù)和接收到的相應(yīng)的數(shù)據(jù)。接收到的數(shù)據(jù)和接收模塊
23、讀出的數(shù)據(jù)進行比較,如果發(fā)生任何誤差,數(shù)據(jù)比較標(biāo)志將發(fā)送數(shù)據(jù)錯誤標(biāo)志。當(dāng)誤差發(fā)生時,“比較數(shù)據(jù)”任務(wù)將立即停止仿真。除了上面提到的Verilog任務(wù)樹,測試工具還提供程序語句生成mclkx16、主復(fù)位信號、以及“tx to rx”環(huán)回功能。該語句不是很重要,并且這里將不加以說明,但可在測試工具本身內(nèi)作參考。測試工具的核心是一個“for循環(huán)”。通過這個“for循環(huán)”,執(zhí)行上述任務(wù)的Verilog樹才能將所有可能的數(shù)據(jù)組合寫入發(fā)送模塊,并確保相同的數(shù)據(jù)被正確接收。For循環(huán)如圖21所示。同上圖21 測試工具的核心代碼上圖所示for循環(huán)使用了Verilog“等待”聲明?!暗却甭暶魇且粋€并發(fā)進程聲明
24、。在它的條件表達式變?yōu)檎鏁r,聲明開始執(zhí)行。這種情況下,該循環(huán)等待接收模塊完成序列的接收后,以“rxrdy”標(biāo)志位變高電平來表示完成數(shù)據(jù)序列的接收。For循環(huán)的停止,是以 “rxrdy”標(biāo)志位變?yōu)楦唠娖阶鳛闃?biāo)志。當(dāng)“rxrdy”變?yōu)楦唠娖?,for循環(huán)立即執(zhí)行“讀取接收”任務(wù),其次是“比較數(shù)據(jù)”的任務(wù)。根據(jù)如圖3所示的UART數(shù)據(jù)幀格式顯示,測試工具必須測試多種不同的數(shù)據(jù)組合,以測試所有可能的數(shù)據(jù)組合格式。當(dāng)for循環(huán)處理完所有的數(shù)據(jù)組合,“數(shù)據(jù)比較”任務(wù)沒有反饋任何錯誤標(biāo)志時,測試工具成功完成測試,并停止運行。同上圖22 頂層UART時序仿真圖22表示使用2Mhz波特率的仿真序列,其執(zhí)行了如圖2
25、1所示的for循環(huán)。測試的流程1、發(fā)送模塊執(zhí)行“寫入發(fā)送”任務(wù),數(shù)據(jù)寫入發(fā)送模塊。2、在“寫”信號的上升沿,寫入的數(shù)據(jù)被自動地加載到 “data_written7:0”的信號中。 3、txrdy標(biāo)志位表示發(fā)送模塊已經(jīng)準(zhǔn)備好要寫入新的數(shù)據(jù)。4、根據(jù)所選擇的波特率,數(shù)據(jù)以并行的形式寫入發(fā)送模塊,并以串行的形式通過tx輸出。5、tx的輸出反饋到接收模塊的rx的輸入。6、Rxrdy標(biāo)志位表示接收模塊已接收新數(shù)據(jù)。7、在rxrdy標(biāo)志位信號的上升沿,“for循環(huán)”執(zhí)行“讀取接收”任務(wù)。在讀信號的下降沿,接收到的數(shù)據(jù)被自動鎖存到 “data_received7:0”的信號中。8、Data_received
26、7:0信號與 data_writen7:0信號進行比較。測試工具的不同我們已經(jīng)簡要地討論了UART測試工具以及Verilog語言的仿真方式。上述的UART測試工具采用由設(shè)計者選擇的信號序列來進行讀寫測試,但對于更具體的系統(tǒng)級集成的UART仿真,“寫入發(fā)送”任務(wù)和“讀取接收”任務(wù)可以很容易地通過任何給定的CPU的讀寫周期信號進行調(diào)試修改。如果在實際應(yīng)用中,本文提到的仿真功能無法完成實際需要,你可以修改測試工具,來實現(xiàn)需要的仿真功能。這是一個鍛煉自己的好機會。綜合HDL作為設(shè)計方法比傳統(tǒng)的FPGA設(shè)計方式(如原理圖設(shè)計)有若干優(yōu)勢,它同時需要擁有極大的靈活性以及高性能的實現(xiàn)綜合流程的裝置,UART
27、綜合流程專門將兩個靈活的和高性能的可編程邏輯器件FPGA系列作為服務(wù)對象,如pASIC-1和pASIC-2家族。UART設(shè)計和仿真的文件通過Saros公司的Turbo Writer 技術(shù)加載到HDL語言編輯器,其中HDL語言編輯器集成了Synplicity公司的快速高效的綜合工具。綜合以后,設(shè)計布局仿真使用QuickLogic公司的SpDE布局布線工具。經(jīng)過布局布線,UART設(shè)計采用“back-annotated”的時序模型進行模擬布局。QuickLogic公司的QuickWorks工具套件提供了仿真需要的所有工具,布線仿真也可以使用Simucad公司的Silos III快速Verilog仿真
28、工具。同上圖24 QuickWorks工具套件The serial controller design based on FPGAIntroductionThe use of hardware description language (HDL) is becoming a more dominant factor, when designing and verifying FPGA designs. The use of behavior level description not only increases the design productivity, but also provid
29、es unique advantages in the design verification. The most dominant HDL stoday are called Verilog and VHDL. This application note will illustrate the use of Verilog in design and verification of a digital UART (Universal Asynchronous Receiver & Transmitter).Defining the UART.The UART consists of
30、two independent HDL modules. One module implements thetransmitter, while the other module implements the receiver. The transmitter and receivermodules can be combined at the top level of the design, for any combinations of transmitter and receiver channels required. Data can be written to the transm
31、itter and read out from the receiver, all through a single 8 bit bi-directional CPU interface. Address mapping for the transmitter and receiver channels can easily be build intothe interface at the top level of the design. Both modules share a common master clock called mclkx16. Within each module m
32、clkx16 are divided down to independent baud rate clocks.UART functional overview.A basic overview of the UART is shown below. At the left hand side is shown “transmit hold register”, “transmit shift register” and the transmitter “control logic” block, all contained within the transmitter module call
33、ed “txmit”. At the right hand side is shown the “receive shift register”, “receive hold register” and the receiver “control logic” block, all contained within the receiver module called “rxcver”. The two modules have separate inputs and outputs for most of their control lines, only the bi-directiona
34、l data bus, master clock and reset lines are shared by both modules.The UART standard data format.In figure 3 is shown the UART serial data format. Serial data are contained within frames of 8 data bits, as well as coded information bits. Between successive transmissions, the transmission line is he
35、ld high. A transmission is initialized by a leading low start bit. Next to the leading low start bit comes 8 bits of data information, beginning with the LSB and afterwards represented at increasing significance order up to the MSB. Next to the 8 data bits comes the parity bit, representing the pari
36、ty result of the 8 data bits. The parity bit can be encoded true based on even parity or odd parity mode. Next to the parity bit comes atrailing high stop bit indicating the end of a data frame.UART timing diagrams.Below is shown, how data written to the “transmit hold register” gets loaded into the
37、 “transmit shift register”, and at the rising edge of the baud rate clock, shifted to tx output.Below is shown, how data gets shifted from rx input to the “receive shift register”, and afterwards loaded into the “receive hold register”. Finally the receiver raises “rxrdy” flag.The Transmitter module
38、.The master clock called mclkx16 are divided down to the proper baud rate called txclk and equals to mclkx16/16. Data written in parallel format to the module are latched internally, and shifted in serial format to the tx output at the frequency of the baud rate clock. Data shifted to the tx output
39、follows the UART data format shown in fig. 3.Behavioral description of the transmitter.The transmitter waits for new data to be written to the module. When new data are written a transmit sequence is initialized. Data that was written in parallel to the module gets transmitted as serial data frames
40、at the tx output. When no transmit sequence are in place, the tx output is held high.Implementation of the transmitter module.Creating logic in Verilog starts with the module port declaration. Here defines signals, that are ported to and from the module. No direction are specified at this point.Next
41、 to port definitions comes port directions. Directions are specified as input, output or inout (bidirectional), and can be referred to in table 1. Next to the specification of port directions comes declaration of internal signals. Internal signals in Verilog are declared as “wire” or “reg” data type
42、s. Signals of the “wire” type are used for continuos assignments, also called combinatorial statements. Signals of the “reg” type are used for assignments within the Verilog “always” block, often use forsequential logic assignments, but not necessarily. For further explanation see aVerilog reference
43、 book. Data types of the internal signals of the module can be referred to in table 3.We have now passed by all necessary declarations, and are now ready to look at the actual implementation. Using hardware description language allows us to describe the function of the transmitter in a more behavior
44、al manner, rather than focus on its actual implementation at gate level In software programming language, functions and procedures breaks larger programs into more readable, manageable and certainly maintainable pieces. The Verilog language provides functions and tasks asconstructs, analogous to sof
45、tware functions and procedures. A Verilog function and task are used as the equivalent to multiple lines of Verilog code, where certain inputs or signals affects certain outputs or variables. The use of functions and tasks usually takes place where multiple lines of code are repeatedly used in a des
46、ign, and hence makes the design easier to read and certainly maintain. A Verilog functioncan have multiple inputs, but always have only one output, while the Verilog task can have both multiple inputs, and multiple outputs and even in some cases, non of each. Below is shown the Verilog task, that ho
47、ld all necessary sequential statements, to describe the transmitter in the “shift” mode.We here see the two tag bits called tag1 and tag2 concatenated to the “transmit shift register. Similar tasks were created to describe the transmitter in “idle” and “l(fā)oad”modes. By using these Verilog tasks, we c
48、an now create a very“ easy to read” behavioral model of the hole transmit process.If txdone and tx datardy both are true, the transmitter enter load mode. Next to the load mode, the transmitter enters shift mode. At the rising edge of the baud rate clock, the contents of tsr are shifted to the tx ou
49、tput. Parity generation takes place during shifting of the tsr, as shown below.Its important to note, that the tsr are zero filled during transmission. The combination of the two trailing tag bits and the zero filled tsr indicates the different states during shifting. Paritycycle is high on cycle ne
50、xt to last cycle, that means when tsr1 gets tag2.Txdone is high when shifting is over, this means when tx gets tag2.Based on the different states during the transmission sequence, “data bits”, “parity bit” or “stop bit” are ultiplexed to the tx output.Simulation of a transmit sequenceThe contents of
51、 the data bus are latched into thr at the rising edge of write. At the next rising edge of txclk, the contents of thr are loaded into tsr, the active low start bit is asserted to tx, and the txrdy flag indicates, that thr again is ready for new data to be written. At each rising edge of txclk, the c
52、ontents of tsr is shifted totx. Parity generation takes place during shifting of data. Parity cycle is high one cycle next to last cycle, and tx gets the parity result. The internal txdone is high when shifting is over, and the active high stopbit is asserted to tx.For further details on the impleme
53、ntation can be referred to in the design source file available fromThe Receiver module.The master clock mclkx16 are divided down to the proper baud rate clock called rxclk, and equals to mclkx16/16. Serial data to be received at the rx input of the module, must follow the UART data format shown in f
54、ig. 3. Data received in serial format can be read out in parallel format, through the 8 bit data bus.Behavioral description of the receiver.Between successive transmissions, the transmission line is held high, according to standard UART behavior. The receiver waits in “idle” mode for the rx input to
55、 go low. At the falling edge of rx the receiver enter “hunting” mode, now searching for a valid start bit of a new data frame to be received. If a valid start bit is detected, the receiver enter “shift data” mode. If an invalid start bit is detected, the receiver returns to “idle” mode. During recei
56、ve of a data frame, various parity and error checks are performed. When a complete data frame has been received the receiver returns to idle mode. The basic operation of the receiver works as shown below,The frequency of rxclk are equal to mclkx16/16, and the first rising edge of the rxclk will alwa
57、ys occur at the center point of the start bit. Below is shown, how generation of the baud rate clock rxclk are synchronized to the center points of the start bit and the following data bits.Implementation of the receiver module.In order to create an easy to read and easy to maintain behavioral model of the receiver, two Verilog tasks are written to describe th
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生態(tài)旅游場承包經(jīng)營合作協(xié)議范本4篇
- 2025年度大棚農(nóng)業(yè)保險合作協(xié)議3篇
- 二手房交易標(biāo)準(zhǔn)協(xié)議樣本(2024個人版)版
- 2025年度叉車租賃與租賃物租賃期限調(diào)整合同4篇
- 2025年昌月離婚協(xié)議書婚姻解除及財產(chǎn)清算范本4篇
- 2025年度航空航天材料質(zhì)量保證協(xié)議4篇
- 2024年重慶地區(qū)標(biāo)準(zhǔn)離婚合同模板一
- 2024私募股權(quán)投資居間協(xié)議
- 專項舞臺效果策劃與實施協(xié)議版A版
- 2024年食堂運營合作協(xié)議標(biāo)準(zhǔn)文本版
- 考級代理合同范文大全
- 2024解析:第三章物態(tài)變化-講核心(原卷版)
- DB32T 1590-2010 鋼管塑料大棚(單體)通 用技術(shù)要求
- 安全行車知識培訓(xùn)
- 2024年安徽省高校分類對口招生考試數(shù)學(xué)試卷真題
- 第12講 語態(tài)一般現(xiàn)在時、一般過去時、一般將來時(原卷版)
- 2024年采購員年終總結(jié)
- 2024年新疆區(qū)公務(wù)員錄用考試《行測》試題及答案解析
- 肺動脈高壓的護理查房課件
- 2025屆北京巿通州區(qū)英語高三上期末綜合測試試題含解析
- 公婆贈予兒媳婦的房產(chǎn)協(xié)議書(2篇)
評論
0/150
提交評論