版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
VHDL硬件描述語言及其應用
-數字IC前端設計實例1VHDL硬件描述語言及其應用
-數字IC前端設計實例1講授內容數字IC設計中的前端設計內容數字IC前端設計實例:UART文檔階段編碼階段驗證階段2講授內容數字IC設計中的前端設計內容2數字IC設計流程3數字IC設計流程3initialfrontendbackendphysical
X=AandBY=CnorDABABXVVssVssVddABCDXYZXVddVSSVerification………SPEC…………ideatapeout4initialfrontendbackendphysical數字IC前端設計的層次前端設計可分3個階段:文檔階段:SPEC->設計文檔編碼階段:設計文檔->HDL代碼驗證階段:SPEC->驗證平臺->大量的驗證5數字IC前端設計的層次前端設計可分3個階段:5講授內容數字IC設計中的前端設計內容數字集成電路前端設計實例:UART文檔階段編碼階段驗證階段6講授內容數字IC設計中的前端設計內容6實例來源:某SoC平臺7實例來源:某SoC平臺7數字集成電路前端設計實例:UARTUART預期操作環(huán)境8數字集成電路前端設計實例:UARTUART預期操作環(huán)境8數字集成電路前端設計實例:UART實例:通用異步收發(fā)器UARTAPB外圍總線的從設備硬件流控制模式:CTSN/RTSN握手協(xié)議采用的數據格式是8個數據位,1個可選的奇偶校驗位以及1個停止位UART數據格式9數字集成電路前端設計實例:UART實例:通用異步收發(fā)器UAR文檔階段SPEC->設計說明定義接口:表格形式->接口一致性子模塊劃分子模塊設計文檔:設計描述:子模塊設計指導->設計文檔實現方法說明:流程圖、狀態(tài)圖、時序圖寄存器描述10文檔階段SPEC->設計說明101.SPEC模塊功能:數據接收功能數據發(fā)送功能波特率生成器APB總線接口數據流模式控制……預期環(huán)境:APB總線其他UART……111.SPEC模塊功能:111.SPECUART數據發(fā)送功能描述當UART發(fā)送器被使能可進行發(fā)送操作。其操作為將待發(fā)送8位數據轉換成一個串行數據,按位時鐘輸出到發(fā)送器的串行輸出端口上。在停止位發(fā)送完成后,如果沒有新的數據傳送到發(fā)送保持寄存器中,則發(fā)送器串行數據輸出端保持高電平。數據發(fā)送完成置發(fā)送移位寄存器空標識位為1。當有新數據傳送到空的發(fā)送保持寄存器中時,發(fā)送重新開始,發(fā)送移位寄存器空標識位被清0。假如發(fā)送器被禁止,則它將繼續(xù)工作直到當前數據被完全發(fā)送完成。此時發(fā)送保持寄存器不能夠重新裝載數據。如果采用流控制方式,CTSN輸入必須保持低電平,這樣數據才能被發(fā)送。如果在發(fā)送過程中,被設置成高,移位寄存器中的數據被發(fā)送,完成后發(fā)送端保持不變直到CTSN被重新設置成0。121.SPECUART數據發(fā)送功能描述122.定義接口APB接口:PSEL: 輸入--slaveselectPENABLE: 輸入--strobe(選通脈沖)PADDR(7downto0):輸入--addressbus(byte)PWRITE: 輸入--writePWDATA(31downto0):輸入--writedatabusPRDATA(31downto0):輸出--readdatabusUART接口:RXD: 輸入TXD: 輸出CTSN: 輸入RTSN: 輸出其他接口:IRQ: 輸出132.定義接口APB接口:133.子模塊劃分按功能劃分按層次劃分143.子模塊劃分按功能劃分144.子模塊設計文檔:設計描述例:數據發(fā)送子模塊功能設計描述輸入信號:發(fā)送時鐘(txtick):由波特率發(fā)生部件產生的基準時鐘*8得到的位時鐘,高電平有效發(fā)送器使能(TE):高電平有效發(fā)送器中斷使能(TI):高電平有效奇偶校驗選擇(PS):“0”表示偶校驗,“1”表示奇校驗奇偶校驗使能(PE):高電平有效流控制使能(FL):高電平有效。復位信號(rst):高電平有效輸出信號:發(fā)送移位寄存器空(TS):說明發(fā)送移位寄存器中的數據已經發(fā)送完畢發(fā)送保持寄存器空(TH):說明先前的數據已經發(fā)送完畢,目前沒有新的數據待發(fā)送。數據發(fā)送輸出端(TXD)中斷輸出信號(IRQ)154.子模塊設計文檔:設計描述例:數據發(fā)送子模塊功能設計描述14.子模塊設計文檔:設計描述數據發(fā)送:UART發(fā)送器的使能位(TE)控制,高電平有效。數據由發(fā)送保持寄存器(thold)傳送到發(fā)送移位寄存器(tshift)中,并且將其轉換成一個串行隊列,輸出到發(fā)送器的串行輸出端口TXD上。它將自動在8位有效數據前添加開始位,并在數據后添加一位可選的奇偶校驗位和一位停止位。在停止位發(fā)送完成后,如果沒有新的數據傳送到發(fā)送保持寄存器中,則發(fā)送器串行數據輸出端保持高電平,并且設置發(fā)送移位寄存器空標識位(TSRE)為1。當有新數據傳送到發(fā)送保持寄存器中時,判斷發(fā)送保持寄存器空標識位(THRE)是否為1,如果為1且TI=1,則發(fā)出irq中斷;如果TSRE=0,則發(fā)送開始,TSRE被清除。假如發(fā)送器被禁止,則它將繼續(xù)工作直到當前數據被完全發(fā)送完成。此時發(fā)送保持寄存器不能夠重新裝載數據。流控制方式:CTSN輸入必須保持低電平,這樣數據才能被發(fā)送。如果在發(fā)送過程中,CTSN被設置成高,移位寄存器tshift中的數據被發(fā)送,完成后發(fā)送端保持高電平不變,直到CTSN被重新設置成0。164.子模塊設計文檔:設計描述數據發(fā)送:UART發(fā)送器的使能位4.子模塊設計文檔:模塊實現方法數字IC=數據通路+控制邏輯數據通路:寄存器提??;存儲器?控制邏輯:有限狀態(tài)機:狀態(tài)圖,狀態(tài)表……硬連邏輯:流程圖,時序圖……174.子模塊設計文檔:模塊實現方法數字IC=數據通路+控制邏輯例:發(fā)送控制狀態(tài)機18例:發(fā)送控制狀態(tài)機18當前態(tài)次態(tài)轉移條件操作輸出IDLEIDLErst=1寄存器復位TXD=tshift(0)DATAtxen,txtick=1且thempty,ctsn=0thold->tshiftDATAIDLErst=1寄存器復位DATAtxtick=1求校驗位;tshift移位PARITYtshift數據移空;txtick=1且paren=1求校驗位;tshift移位tshift(0)=tparSTOPBITtshift數據移空;txtick=1且paren=0tshift移位tshift(0)=1PARITYIDLErst=1寄存器復位STOPBITtxtick=1tshift移位STOPBITIDLErst=1txtick=1寄存器復位tshift移位19當前態(tài)次態(tài)轉移條件操作輸出IDLEIDLErst=1寄存器復4.子模塊設計文檔:寄存器描述寄存器的功能:保持歷史值數據通路:寄存器,計數器,移位器控制輸出信號的行為:命令、控制寄存器如實反映當前電路工作狀態(tài):狀態(tài)寄存器方法:保存采樣信號值->歷史值和當前值比較必要中間值:例如有限狀態(tài)機的狀態(tài)、跨周期信號等模塊輸出信號寄存器輸出204.子模塊設計文檔:寄存器描述寄存器的功能:保持歷史值20控制寄存器該寄存器用來控制UART的操作第0位:接收器使能(RE),高電平有效。第1位:發(fā)送器使能(TE),高電平有效。第2位:接收器中斷使能(RI),高電平有效。第3位:發(fā)送器中斷使能(TI),高電平有效。第4位:奇偶校驗選擇(PS),“0”表示偶校驗,“1”表示奇校驗。第5位:奇偶校驗使能(PE),高電平有效。第6位:流控制使能(FL),高電平有效。第7位:回送使能(LB),高電平有效。第8位:外部時鐘使能(EC),高電平有效,此時PIO[3]用作時鐘。21控制寄存器該寄存器用來控制UART的操作21UART狀態(tài)寄存器用來反映UART的狀態(tài)第0位:接收數據就緒(DR),說明在接收保持寄存器中,數據已經準備就緒。第1位:發(fā)送移位寄存器空(TS),說明發(fā)送移位寄存器中的數據已經發(fā)送完畢。第2位:發(fā)送保持寄存器空(TH),說明先前的數據已經發(fā)送完畢,目前沒有新的數據待發(fā)送。第3位:接收到暫停(BR),說明在數據接收過程接收到暫停信息。第4位:溢出(OV),說明由于超出限度一個或多個字符而丟失。第5位:奇偶錯(PE),說明檢測到奇偶錯。第6位:格式錯(FE),說明檢測到格式錯。22UART狀態(tài)寄存器用來反映UART的狀態(tài)22編碼階段編程前準備設計思路:設計文檔->RTL代碼?編碼風格編碼實例文件層次化管理23編碼階段編程前準備23編程前準備遵守工程指定命名及格式規(guī)則版本、設計日期、編者信息以及注釋的使用標識符對應具體功能含義:如thempty(transmitholdempty)標識符表明信號/變量屬性:如cts_n,cts_,ctsn24編程前準備遵守工程指定命名及格式規(guī)則24設計思路模塊設計:考慮電路結構串行:對輸入的處理分步驟進行(process)并行:對到達的信號同時處理(多個等價process)流水線:多步驟、每個步驟同時處理設計考慮:在內部模塊之間的輸入輸出可采用組合邏輯,不同芯片之間必須采用寄存器輸入輸出(否則增加后端實現難度)盡量將組合電路和時序電路分開25設計思路模塊設計:考慮電路結構25編碼風格自頂向下規(guī)劃并發(fā):并行等價進程規(guī)劃順序:串行進程規(guī)劃自底向上編碼獨立功能順序編碼:順序語句->process并發(fā)進程:協(xié)調信號通信關系26編碼風格自頂向下規(guī)劃26自頂向下:并行等價進程規(guī)劃baudop:process(rst,r_p,uarti_p)--baudrate/bitclockprocess--baudrategenerate--rx/txclock--resetoperationendprocess;apbop:process(rst,r_p,apbi) --apboperation--read/writeregisters(APBslaveInterface)--resetoperation--updateregisters--driveoutputsendprocess;txrxop:process(rst,r_p,apbi) --transmit/receiveroperation--filterrxdata--transmitteroperation--receiveroperation--resetoperation--updateregisters--driveoutputsendprocess;27自頂向下:并行等價進程規(guī)劃baudop:process(自頂向下:串行進程的規(guī)劃在最小信號間隔(clk)內更新信號及輸出uartop:process(rst,r,apbi,uarti)--serialprocess variablev:uartregs;--baudrategenerate--read/writeregisters(APBslaveInterface)--rx/txclock--filterrxdata--transmitteroperation--receiveroperation--resetoperation--updateregisters rin<=v;--driveoutputsendprocess;28自頂向下:串行進程的規(guī)劃在最小信號間隔(clk)內更新信號及編碼實例:有限狀態(tài)機實現
發(fā)送控制狀態(tài)機29編碼實例:有限狀態(tài)機實現
發(fā)送控制狀態(tài)機29caser.txstateis
whenidle=> --idlestateif(r.txtick='1')thenv.tsempty:='1';endif;
if((r.txenand(notr.thempty)andr.txtick)and (notctsn))='1'then
v.tshift:="10"&r.thold&'0'; v.txstate:=data; v.tpar:=r.parsel;v.irq:=r.tirqen; v.thempty:='1';v.tsempty:='0'; v.txclk:="00"&r.tick;v.txtick:='0';endif;數據發(fā)送代碼段編碼實例:有限狀態(tài)機實現30caser.txstateis數據發(fā)送代碼段編碼實例:whendata=> --transmitdataframeifr.txtick='1'then v.tpar:=r.tparxorr.tshift(1); v.tshift:='1'&r.tshift(10downto1);
ifr.tshift(10downto1)="1111111110"then
ifr.paren='1'then v.tshift(0):=r.tpar;v.txstate:=parity; else v.tshift(0):='1';v.txstate:=stopbit; endif; endif;endif;數據發(fā)送代碼段(續(xù))編碼實例:有限狀態(tài)機實現31whendata=> --transmitdatawhenparity=> --transmitparitybitifr.txtick='1'then v.tshift:='1'&r.tshift(10downto1); v.txstate:=stopbit;endif;whenstopbit=> --transmitstopbitifr.txtick='1'then v.tshift:='1'&r.tshift(10downto1); v.txstate:=idle;endif;endcase;數據發(fā)送代碼段(續(xù))編碼實例:有限狀態(tài)機實現32whenparity=> --transmitpa
scaler:=r.scaler-1; --baudrategenerate(tick)if(r.rxenorr.txen)='1'thenv.scaler:=scaler;v.tick:=scaler(11)andnotr.scaler(11);ifv.tick='1'thenv.scaler:=r.brate;endif;endif;txclk:=r.txclk+1; --txclkgenerate(8*tick)ifr.tick='1'thenv.txclk:=txclk;v.txtick:=r.txclk(2)andnottxclk(2);endif;發(fā)送定標代碼段:位時鐘編碼實例:控制信號33scaler:=r.scaler-1; --b編碼實例:記錄的使用->信號鎖存typeuartregsisrecordrxen :std_logic; --receiverenabledtxen :std_logic; --transmitterenabledrirqen :std_logic; --receiverirqenabletirqen :std_logic; --transmitterirqenableparsel :std_logic; --parityselectparen:std_logic; --parityselectflow :std_logic; --flowcontrolenabledready :std_logic; --datareadyrsempty :std_logic; --receivershiftregisterempty(internal)tsempty :std_logic; --transmittershiftregisteremptythempty :std_logic; --transmitterholdregisteremptybreak :std_logic; --breakdetectedrhold :std_logic_vector(7downto0);rshift :std_logic_vector(7downto0);tshift :std_logic_vector(10downto0);34編碼實例:記錄的使用->信號鎖存typeuartregs編碼實例:記錄的使用->信號鎖存
thold :std_logic_vector(7downto0);irq :std_logic; --tx/rxinterrupt(internal)tpar :std_logic; --txdataparity(internal)txstate :txfsmtype;txclk :std_logic_vector(2downto0);--txclockdividertxtick:std_logic; --txclock(internal)rxstate :rxfsmtype;rxclk :std_logic_vector(2downto0);--rxclockdividerrxdb :std_logic_vector(1downto0);--rxdelaydpar:std_logic; --rxdataparity(internal)rxtick :std_logic; --rxclock(internal)tick :std_logic; --rxclock(internal)scaler :std_logic_vector(11downto0);brate :std_logic_vector(11downto0);rxf :std_logic_vector(7downto0);--rxdatafilteringbufferendrecord;35編碼實例:記錄的使用->信號鎖存thold :編碼實例:時鐘同步architecturertlofuartistyperxfsmtypeis(idle,startbit,data,parity,stopbit);typetxfsmtypeis(idle,data,parity,stopbit);typeuartregsisrecord……signalr,rin:uartregs;begin uartop:process(rst,r,apbi,uarti)--serialprocess variablev:uartregs; ……
rin<=v; endprocess; regs:process(clk) --signalregisteredbybaseclk beginifrising_edge(clk)thenr<=rin;endif;endprocess;endarchitecture;36編碼實例:時鐘同步architecturertlofu文件層次化管理設計的層次化:頂層->底層:結構描述->行為描述不同用途文件:命名規(guī)則區(qū)分,如_top,_package等目錄的層次化:工作目錄不同目的文件->不同目錄,如src,sim,doc……37文件層次化管理設計的層次化:37文件層次化管理
testbenchSourcetopTestbenchgeneratetestcaseharnesspackagesource38文件層次化管理testbenchSourcetopTe驗證階段驗證環(huán)境和測試方案->testbench根據設計文檔確定驗證點(testcase)->驗證文檔:描述每個驗證點的目的、具體實現步驟驗證文檔->testcase提取覆蓋率分析->不理想->回到第2階段記錄驗證結果->.log文件39驗證階段驗證環(huán)境和測試方案->testbench39驗證環(huán)境架構及建立方式基于軟件模擬的層次式架構testcase層:由過程(procedure)調用組成行為模型以及BFM:不可綜合的代碼,描述系統(tǒng)環(huán)境中可能的其他電路模型或行為testbench:驗證配置testbench組織:configurations裝配testcase,行為模型,BFM以及待測模塊DUT40驗證環(huán)境架構及建立方式基于軟件模擬的層次式架構40UART驗證環(huán)境架構41UART驗證環(huán)境架構41確定驗證點testcase提?。簆rocedures激勵:從單一功能到復雜功能,輔以覆蓋率工具響應:針對具體testcase描述檢查相關響應42確定驗證點testcase提取:procedures42例:數據發(fā)送進程testcase生成
testcase1:驗證UART是否能夠正確發(fā)送數據 a.保持發(fā)送時鐘基準時鐘*8得到的位時鐘txtick; b.調用APB_write過程向UART控制寄存器寫入“000101010”; c.調用APB_write過程向UART發(fā)送保持寄存器thold寫入“10101010”; d.調用TXD_verify過程,并檢測是否正確接收“10101010”
testcase2:驗證UART能否檢驗出奇偶校驗錯,并據此發(fā)出中斷請求 a.保持發(fā)送時鐘基準時鐘*8得到的位時鐘txtick; b.調用APB_write過程向UART控制寄存器寫入“000101010”; c.調用APB_write過程向UART發(fā)送保持寄存器thold寫入“10101010”; d.調用TXD_verify過程,并檢測是否正確接收“10101010”,偶校驗無誤,并接收到IRQ信號; e.調用APB_write過程向UART控制寄存器寫入“000111010”; f.調用APB_write過程向UART發(fā)送保持寄存器thold寫入“10101010”; g.調用TXD_verify過程,并檢測是否正確接收“10101010”,奇校驗無誤,并接收到IRQ信號;
testcase3:溢出錯誤檢查 testcase4:發(fā)送過程清TE testcase5:流控制檢查testcase提取43例:數據發(fā)送進程testcase生成testcase提取43testcase實例-接收過程--readRXDprocedurefortestbenchprocedurerxc(signalrxd:instd_logic; d:outstd_logic_vector)isvariablerxdata:std_logic_vector(7downto0);beginwaituntilrxd='0';waitforTXPERIOD/2;foriin0to7loop waitforTXPERIOD; rxdata(i):=rxd;endloop;waitforTXPERIOD;d:=rxdata;end;--endrxctestcase->procedure44testcase實例-接收過程testcase->procetestcase實例-發(fā)送過程(續(xù))--transmittd(data)totxdprocedurefortestbenchproceduretxc(signaltxd:outstd_logic; td:integer)isvariabletxdata:std_logic_vector(10downto0);begintxdata:="11"&std_logic_vector(conv_unsigned(td,8))&'0';foriin0to10loop waitforTXPERIOD; txd<=txdata(i);endloop;end;--endtxc45testcase實例-發(fā)送過程(續(xù))--transmitttestcase實例-APB寫數據過程(續(xù)) --readRXDprocedurefortestbenchprocedureapbwr(signalpclk:inbit; signalpaddr:outstd_logic_vector; signalpwdata:outstd_logic_vector; signalpwrite:outstd_logic; signalpsel:outstd_logic; signalpenable:outstd_logic; tadd:instd_logic_vector; twdata:outstd_logic_vector)isbeginwaitonpclk;
ifpclk’eventandpclk=‘0’thenpaddr<=taddr;pwdata<=twdata;pwrite<=‘1’;psel<=‘1’;penable<=‘0’;endif;
waitonpclk;
ifpclk’eventandpclk=‘0’thenpenable<=‘1’;endif;
waitonpclk;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手機器轉讓簡單合同范本年
- 施工工程運輸合同范本
- 購買二手房買賣合同范本
- 2025cc直播平臺主播轉公會合同
- 二手商品房買賣合同
- 水泥銷售合同范本
- 石料買賣合同
- 2025續(xù)訂勞動合同通知書模板
- 2025建筑企業(yè)流動資金借款合同范本版
- 廣告發(fā)布投放合同
- 新《學前教育法》知識講座課件
- 公文寫作題庫(500道)
- 學校教學常規(guī)管理學習活動課件
- 2024-2030年中國大閘蟹養(yǎng)殖行業(yè)運營形勢分析及未來銷售格局研究報告
- 集成墻板購銷合同范本(2024版)
- 2023九年級歷史下冊 第三單元 第一次世界大戰(zhàn)和戰(zhàn)后初期的世界第10課《凡爾賽條約》和《九國公約》教案 新人教版
- 骨髓穿刺課件
- 2024中國保險發(fā)展報告-中南大風險管理研究中心.燕道數科
- 元素的用途完整版本
- 建筑設計工程設計方案
- 供熱行業(yè)環(huán)境保護管理辦法
評論
0/150
提交評論