2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、1,VHDL硬件描述語言及其應(yīng)用-數(shù)字IC前端設(shè)計實例,,2,講授內(nèi)容,數(shù)字IC設(shè)計中的前端設(shè)計內(nèi)容數(shù)字IC前端設(shè)計實例:UART文檔階段編碼階段驗證階段,3,數(shù)字IC設(shè)計流程,4,initial,,frontend,,backend,,physical,,X=A and BY=C nor D,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,A,B,,,,,

2、,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,A,B,,,,X,V,Vss,Vss,Vdd,,,A,B,C,D,X,Y,Z,,X,,,Vdd,VSS,,,Verification,,,,,………SPEC…………,,,idea,,tape out,5,數(shù)字IC前端設(shè)計的層次,前端設(shè)計可分3個階段:文檔階段:SPEC->設(shè)計文檔編碼階段:設(shè)計文檔->HDL 代碼驗證階段:SPE

3、C->驗證平臺->大量的驗證,6,講授內(nèi)容,數(shù)字IC設(shè)計中的前端設(shè)計內(nèi)容數(shù)字集成電路前端設(shè)計實例:UART文檔階段編碼階段驗證階段,7,,8,數(shù)字集成電路前端設(shè)計實例:UART,UART預(yù)期操作環(huán)境,9,數(shù)字集成電路前端設(shè)計實例:UART,實例:通用異步收發(fā)器UARTAPB外圍總線的從設(shè)備硬件流控制模式 :CTSN/RTSN握手協(xié)議采用的數(shù)據(jù)格式是8個數(shù)據(jù)位,1個可選的奇偶校驗位以及1個停止位,UART數(shù)據(jù)格式

4、,10,文檔階段,SPEC->設(shè)計說明定義接口:表格形式->接口一致性子模塊劃分子模塊設(shè)計文檔:設(shè)計描述:子模塊設(shè)計指導(dǎo)->設(shè)計文檔實現(xiàn)方法說明:流程圖、狀態(tài)圖、時序圖寄存器描述,11,1.SPEC,模塊功能:數(shù)據(jù)接收功能數(shù)據(jù)發(fā)送功能波特率生成器APB總線接口數(shù)據(jù)流模式控制……預(yù)期環(huán)境:APB總線其他UART……,12,1.SPEC,UART數(shù)據(jù)發(fā)送功能描述當(dāng)UART發(fā)送器被使能可進行

5、發(fā)送操作。其操作為將待發(fā)送8位數(shù)據(jù)轉(zhuǎn)換成一個串行數(shù)據(jù),按位時鐘輸出到發(fā)送器的串行輸出端口上。在停止位發(fā)送完成后,如果沒有新的數(shù)據(jù)傳送到發(fā)送保持寄存器中,則發(fā)送器串行數(shù)據(jù)輸出端保持高電平。數(shù)據(jù)發(fā)送完成置發(fā)送移位寄存器空標(biāo)識位為1。當(dāng)有新數(shù)據(jù)傳送到空的發(fā)送保持寄存器中時,發(fā)送重新開始,發(fā)送移位寄存器空標(biāo)識位被清0。假如發(fā)送器被禁止,則它將繼續(xù)工作直到當(dāng)前數(shù)據(jù)被完全發(fā)送完成。此時發(fā)送保持寄存器不能夠重新裝載數(shù)據(jù)。如果采用流控制方式,CTS

6、N輸入必須保持低電平,這樣數(shù)據(jù)才能被發(fā)送。如果在發(fā)送過程中,被設(shè)置成高,移位寄存器中的數(shù)據(jù)被發(fā)送,完成后發(fā)送端保持不變直到CTSN被重新設(shè)置成0。,13,2.定義接口,APB接口:PSEL:輸入-- slave selectPENABLE:輸入 -- strobe(選通脈沖)PADDR(7 downto 0):輸入-- address bus (byte)PWRITE:輸入 --writePWDATA(31 do

7、wnto 0):輸入-- write data busPRDATA (31 downto 0) :輸出-- read data busUART接口:RXD:輸入TXD:輸出CTSN:輸入RTSN:輸出其他接口:IRQ:輸出,14,3.子模塊劃分,按功能劃分按層次劃分,,,,,15,4.子模塊設(shè)計文檔:設(shè)計描述,例:數(shù)據(jù)發(fā)送子模塊功能設(shè)計描述輸入信號:發(fā)送時鐘(txtick) :由波特率

8、發(fā)生部件產(chǎn)生的基準(zhǔn)時鐘*8得到的位時鐘,高電平有效發(fā)送器使能(TE):高電平有效發(fā)送器中斷使能(TI):高電平有效奇偶校驗選擇(PS):“0”表示偶校驗,“1”表示奇校驗奇偶校驗使能(PE):高電平有效流控制使能(FL):高電平有效。復(fù)位信號(rst):高電平有效輸出信號:發(fā)送移位寄存器空(TS):說明發(fā)送移位寄存器中的數(shù)據(jù)已經(jīng)發(fā)送完畢發(fā)送保持寄存器空(TH):說明先前的數(shù)據(jù)已經(jīng)發(fā)送完畢,目前沒有新的數(shù)據(jù)待發(fā)送。數(shù)據(jù)

9、發(fā)送輸出端(TXD)中斷輸出信號(IRQ),16,4.子模塊設(shè)計文檔:設(shè)計描述,數(shù)據(jù)發(fā)送:UART發(fā)送器的使能位(TE)控制,高電平有效。數(shù)據(jù)由發(fā)送保持寄存器(thold)傳送到發(fā)送移位寄存器(tshift)中,并且將其轉(zhuǎn)換成一個串行隊列,輸出到發(fā)送器的串行輸出端口TXD上。它將自動在8位有效數(shù)據(jù)前添加開始位,并在數(shù)據(jù)后添加一位可選的奇偶校驗位和一位停止位。在停止位發(fā)送完成后,如果沒有新的數(shù)據(jù)傳送到發(fā)送保持寄存器中,則發(fā)送器串行數(shù)據(jù)

10、輸出端保持高電平,并且設(shè)置發(fā)送移位寄存器空標(biāo)識位(TSRE)為1。當(dāng)有新數(shù)據(jù)傳送到發(fā)送保持寄存器中時,判斷發(fā)送保持寄存器空標(biāo)識位(THRE)是否為1,如果為1且TI=1,則發(fā)出irq中斷;如果TSRE=0,則發(fā)送開始,TSRE被清除。假如發(fā)送器被禁止,則它將繼續(xù)工作直到當(dāng)前數(shù)據(jù)被完全發(fā)送完成。此時發(fā)送保持寄存器不能夠重新裝載數(shù)據(jù)。流控制方式:CTSN輸入必須保持低電平,這樣數(shù)據(jù)才能被發(fā)送。如果在發(fā)送過程中,CTSN被設(shè)置成高,移位寄

11、存器tshift中的數(shù)據(jù)被發(fā)送,完成后發(fā)送端保持高電平不變,直到CTSN被重新設(shè)置成0。,17,4.子模塊設(shè)計文檔:模塊實現(xiàn)方法,數(shù)字IC=數(shù)據(jù)通路+控制邏輯數(shù)據(jù)通路:寄存器提??;存儲器?控制邏輯:有限狀態(tài)機:狀態(tài)圖,狀態(tài)表……硬連邏輯:流程圖,時序圖……,18,例:發(fā)送控制狀態(tài)機,,19,,20,4.子模塊設(shè)計文檔:寄存器描述,寄存器的功能:保持歷史值數(shù)據(jù)通路:寄存器,計數(shù)器,移位器控制輸出信號的行為:命令、控制寄存器如

12、實反映當(dāng)前電路工作狀態(tài):狀態(tài)寄存器方法:保存采樣信號值->歷史值和當(dāng)前值比較必要中間值:例如有限狀態(tài)機的狀態(tài)、跨周期信號等模塊輸出信號寄存器輸出,21,控制寄存器 該寄存器用來控制UART的操作第0位:接收器使能(RE),高電平有效。第1位:發(fā)送器使能(TE),高電平有效。第2位:接收器中斷使能(RI),高電平有效。第3位:發(fā)送器中斷使能(TI),高電平有效。第4位:奇偶校驗選擇(PS),“0”表示偶校驗,“1”

13、表示奇校驗。第5位:奇偶校驗使能(PE),高電平有效。第6位:流控制使能(FL),高電平有效。第7位:回送使能(LB),高電平有效。第8位:外部時鐘使能(EC),高電平有效,此時PIO[3]用作時鐘。,,22,UART狀態(tài)寄存器 用來反映UART的狀態(tài)第0位:接收數(shù)據(jù)就緒(DR),說明在接收保持寄存器中,數(shù)據(jù)已經(jīng)準(zhǔn)備就緒。第1位:發(fā)送移位寄存器空(TS),說明發(fā)送移位寄存器中的數(shù)據(jù)已經(jīng)發(fā)送完畢。第2位:發(fā)送保持寄存器空(T

14、H),說明先前的數(shù)據(jù)已經(jīng)發(fā)送完畢,目前沒有新的數(shù)據(jù)待發(fā)送。第3位:接收到暫停(BR),說明在數(shù)據(jù)接收過程接收到暫停信息。第4位:溢出(OV),說明由于超出限度一個或多個字符而丟失。第5位:奇偶錯(PE),說明檢測到奇偶錯。第6位:格式錯(FE),說明檢測到格式錯。,,23,編碼階段,編程前準(zhǔn)備設(shè)計思路:設(shè)計文檔->RTL代碼?編碼風(fēng)格編碼實例文件層次化管理,24,編程前準(zhǔn)備,遵守工程指定命名及格式規(guī)則版本、設(shè)計日

15、期、編者信息以及注釋的使用標(biāo)識符對應(yīng)具體功能含義:如thempty(transmit hold empty)標(biāo)識符表明信號/變量屬性:如cts_n,cts_,ctsn,25,設(shè)計思路,模塊設(shè)計:考慮電路結(jié)構(gòu)串行:對輸入的處理分步驟進行(process)并行:對到達(dá)的信號同時處理(多個等價process)流水線:多步驟、每個步驟同時處理設(shè)計考慮:在內(nèi)部模塊之間的輸入輸出可采用組合邏輯,不同芯片之間必須采用寄存器輸入輸出(否則

16、增加后端實現(xiàn)難度)盡量將組合電路和時序電路分開,26,編碼風(fēng)格,自頂向下規(guī)劃并發(fā):并行等價進程規(guī)劃順序:串行進程規(guī)劃自底向上編碼獨立功能順序編碼:順序語句->process并發(fā)進程:協(xié)調(diào)信號通信關(guān)系,27,自頂向下:并行等價進程規(guī)劃,baudop : process(rst, r_p, uarti_p ) --baudrate/bitclock process-- baud rate generate -- r

17、x/tx clock -- reset operationend process;apbop : process(rst, r_p, apbi) --apb operation-- read/write registers(APB slave Interface)-- reset operation-- update registers-- drive outputsend process;txrxop : proc

18、ess(rst, r_p, apbi)--transmit/receiver operation-- filter rx data-- transmitter operation-- receiver operation-- reset operation-- update registers-- drive outputsend process;,28,自頂向下:串行進程的規(guī)劃,在最小信號間隔(clk)內(nèi)更新信號及輸出

19、uartop : process(rst, r, apbi, uarti ) --serial processvariable v : uartregs;-- baud rate generate-- read/write registers(APB slave Interface)-- rx/tx clock -- filter rx data-- transmitter operation-- receiver

20、 operation-- reset operation-- update registersrin <= v;-- drive outputsend process;,29,編碼實例:有限狀態(tài)機實現(xiàn),發(fā)送控制狀態(tài)機,30,case r.txstate is when idle =>-- idle state if (r.txtick = '1') then v.

21、tsempty := '1'; end if; if ((r.txen and (not r.thempty) and r.txtick) and (not ctsn)) = '1' then v.tshift := "10" & r.thold & '0'; v.txstate := data

22、; v.tpar := r.parsel; v.irq := r.tirqen; v.thempty := '1'; v.tsempty := '0'; v.txclk := "00" & r.tick; v.txtick := '0'; end if;,數(shù)據(jù)發(fā)送代碼段,編碼實例:有限狀態(tài)機實現(xiàn),31,when data =&

23、gt;-- transmit data frame if r.txtick = '1' thenv.tpar := r.tpar xor r.tshift(1);v.tshift := '1' & r.tshift(10 downto 1); if r.tshift(10 downto 1) = "1111111110" t

24、hen if r.paren = '1' then v.tshift(0) := r.tpar; v.txstate := parity; else v.tshift(0) := '1'; v.txstate := stopbit; end if; end if; end if;,數(shù)據(jù)發(fā)送代碼段(續(xù)),編碼實例:有限狀態(tài)機實現(xiàn),32,when

25、 parity =>-- transmit parity bit if r.txtick = '1' thenv.tshift := '1' & r.tshift(10 downto 1); v.txstate := stopbit; end if;when stopbit =>-- transmit stop bit i

26、f r.txtick = '1' thenv.tshift := '1' & r.tshift(10 downto 1); v.txstate := idle; end if;end case;,數(shù)據(jù)發(fā)送代碼段(續(xù)),編碼實例:有限狀態(tài)機實現(xiàn),33,scaler := r.scaler - 1; --baud rate generate(tick) if

27、(r.rxen or r.txen) = '1' then v.scaler := scaler; v.tick := scaler(11) and not r.scaler(11); if v.tick = '1' then v.scaler := r.brate; end if; end if; txclk := r.txclk + 1;--tx c

28、lk generate(8*tick) if r.tick = '1' then v.txclk := txclk; v.txtick := r.txclk(2) and not txclk(2); end if;,發(fā)送定標(biāo)代碼段:位時鐘,編碼實例:控制信號,34,編碼實例:記錄的使用->信號鎖存,type uartregs is record rxen : st

29、d_logic;-- receiver enabled txen : std_logic;-- transmitter enabled rirqen : std_logic;-- receiver irq enable tirqen : std_logic;-- transmitter irq enable parsel : std_logic;-- parity select pare

30、n : std_logic;-- parity select flow : std_logic;-- flow control enable dready : std_logic;-- data ready rsempty: std_logic;-- receiver shift register empty (internal) tsempty : std_logic;-- trans

31、mitter shift register empty thempty: std_logic;-- transmitter hold register empty break : std_logic;-- break detected rhold : std_logic_vector(7 downto 0); rshift: std_logic_vector(7 downto 0); tshift

32、: std_logic_vector(10 downto 0);,35,編碼實例:記錄的使用->信號鎖存,thold : std_logic_vector(7 downto 0); irq : std_logic;-- tx/rx interrupt (internal) tpar : std_logic;-- tx data parity (internal) txstate:

33、 txfsmtype; txclk : std_logic_vector(2 downto 0); -- tx clock divider txtick : std_logic;-- tx clock (internal) rxstate: rxfsmtype; rxclk : std_logic_vector(2 downto 0); -- rx clock divider rxdb :

34、 std_logic_vector(1 downto 0); -- rx delay dpar : std_logic;-- rx data parity (internal) rxtick : std_logic;-- rx clock (internal) tick : std_logic;-- rx clock (internal) scaler: std_logic_vec

35、tor(11 downto 0); brate : std_logic_vector(11 downto 0); rxf : std_logic_vector(7 downto 0); -- rx data filtering bufferend record;,36,編碼實例:時鐘同步,architecture rtl of uart istype rxfsmtype is (idle, startbi

36、t, data, parity, stopbit);type txfsmtype is (idle, data, parity, stopbit);type uartregs is record……signal r, rin : uartregs;beginuartop : process(rst, r, apbi, uarti ) --serial processvariable v : uartregs;…

37、…rin <= v;end process;regs : process(clk)--signal registered by base clk begin if rising_edge(clk) then r <= rin; end if; end process;end architecture;,37,文件層次化管理,設(shè)計的層次化:頂層->底層:結(jié)構(gòu)描述->行為描述不同用途文件:

38、命名規(guī)則區(qū)分,如_top,_package等目錄的層次化:工作目錄不同目的文件->不同目錄,如src,sim,doc……,38,文件層次化管理,39,驗證階段,驗證環(huán)境和測試方案->testbench根據(jù)設(shè)計文檔確定驗證點(testcase)->驗證文檔:描述每個驗證點的目的、具體實現(xiàn)步驟驗證文檔->testcase提取覆蓋率分析->不理想->回到第2階段記錄驗證結(jié)果->.log文

39、件,40,驗證環(huán)境架構(gòu)及建立方式,基于軟件模擬的層次式架構(gòu)testcase層:由過程(procedure)調(diào)用組成行為模型以及BFM:不可綜合的代碼,描述系統(tǒng)環(huán)境中可能的其他電路模型或行為testbench:驗證配置testbench組織:configurations裝配testcase,行為模型,BFM以及待測模塊DUT,41,UART驗證環(huán)境架構(gòu),42,確定驗證點,testcase提取:procedures激勵:從單一功

40、能到復(fù)雜功能,輔以覆蓋率工具響應(yīng):針對具體testcase描述檢查相關(guān)響應(yīng),43,例:數(shù)據(jù)發(fā)送進程testcase生成testcase1:驗證UART是否能夠正確發(fā)送數(shù)據(jù)a.保持發(fā)送時鐘基準(zhǔn)時鐘*8得到的位時鐘txtick;b.調(diào)用APB_write過程向UART 控制寄存器寫入“000101010”;c.調(diào)用APB_write過程向UART 發(fā)送保持寄存器thold寫入“10101010”;d.調(diào)用TXD

41、_verify過程,并檢測是否正確接收“10101010”testcase2:驗證UART能否檢驗出奇偶校驗錯,并據(jù)此發(fā)出中斷請求a.保持發(fā)送時鐘基準(zhǔn)時鐘*8得到的位時鐘txtick;b.調(diào)用APB_write過程向UART 控制寄存器寫入“000101010”;c. 調(diào)用APB_write過程向UART 發(fā)送保持寄存器thold寫入“10101010”;d.調(diào)用TXD_verify過程,并檢測是否正確接收“

42、10101010”,偶校驗無誤,并接收到IRQ信號;e.調(diào)用APB_write過程向UART 控制寄存器寫入“000111010”;f. 調(diào)用APB_write過程向UART 發(fā)送保持寄存器thold寫入“10101010”;g.調(diào)用TXD_verify過程,并檢測是否正確接收“10101010”,奇校驗無誤,并接收到IRQ信號;testcase3:溢出錯誤檢查testcase4:發(fā)送過程清TEtestca

43、se5:流控制檢查,testcase提取,44,testcase實例-接收過程,--read RXD procedure for testbenchprocedure rxc(signal rxd : in std_logic; d: out std_logic_vector) is variable rxdata : std_logic_vector(7 downto 0); begin wait

44、 until rxd = '0'; wait for TXPERIOD/2; for i in 0 to 7 loop wait for TXPERIOD; rxdata(i):= rxd; end loop; wait for TXPERIOD ; d := rxdata; end; --end rxc,testcase->pr

45、ocedure,45,testcase實例-發(fā)送過程(續(xù)),--transmit td(data) to txd procedure for testbench procedure txc(signal txd : out std_logic; td : integer) is variable txdata : std_logic_vector(10 downto 0); begin txdat

46、a := "11" & std_logic_vector(conv_unsigned(td, 8)) & '0'; for i in 0 to 10 loop wait for TXPERIOD ; txd <= txdata(i); end loop; end; --end txc,46,testcase實例-APB寫數(shù)據(jù)過程(續(xù)),--rea

47、d RXD procedure for testbenchprocedure apbwr(signal pclk : in bit; signal paddr: out std_logic_vector ; signal pwdata: out std_logic_vector ; signal pwrite: out std_logic; signal psel: out std_logic; signal pe

48、nable: out std_logic;tadd: in std_logic_vector ; twdata: out std_logic_vector ) isbegin wait on pclk; if pclk’event and pclk=‘0’ then paddr <= taddr; pwdata <= twdata; pwrite <= ‘1’;pse

49、l <= ‘1’; penable<=‘0’; end if; wait on pclk; if pclk’event and pclk=‘0’ then penable<=‘1’; end if; wait on pclk; if pclk’event and pclk=‘0’ then penable<=‘0’; end if; end; --end

50、 apbwr,47,architecture testbench_UART of testbench is UARTcheck:processvariable data_tmp:std_logic_vecter(7 downto 0);begin rst<=0; wait for 20 ns; rst<=1;wait for 100 ns; rst<=0;--testcase 1apbwr(pclk,pa

51、ddr,pwdata,pwrite,psel,penable,”00000100”,”10101010”);apbwr(pclk,paddr,pwdata,pwrite,psel,penable,”00001000”,” 000101010”);rxc(txd,data_tmp);assert data_tmp =“10101010” report “UART transmit testcase1 error!!” severi

52、ty error; --testcase 2 …………end process; --end UARTcheckend; --end testbench_UART,實例-UART testcase1,48,testbench,1)將上述procedure在testbench的process中排列組合,分別調(diào)度就組成一個面向UART 的 黑盒子testbench generater2)把UART和testbench generat

53、er在頂層模塊配置指定->testbench,則可進行模擬驗證,49,testbench,復(fù)用:將所有過程集中在package中,供所有設(shè)計者使用在testbench中配置,50,覆蓋率分析,代碼覆蓋率: EDA工具 +testcase 驗證施加的激勵使得RTL代碼都被覆蓋了,驗證仍然可能是不完整的如果RTL代碼根本就沒有達(dá)到完整的覆蓋,則驗證肯定是不完整的。功能覆蓋率:邊緣功能點(corner case)多功能交叉、

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論