版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第1章章 eda技術(shù)概述技術(shù)概述 1-1 eda技術(shù)與asic設(shè)計和fpga開發(fā)有什么關(guān)系?fpga在asic設(shè)計中有什么用途?答:eda技術(shù)進行電子系統(tǒng)設(shè)計的最后目標,是完成專用集成電路(asic)的設(shè)計和實現(xiàn),fpga是實現(xiàn)這一途徑的主流器件,。fpga的應(yīng)用是eda技術(shù)有機融合軟硬件電子設(shè)計技術(shù)、asic設(shè)計,以及對自動設(shè)計與自動實現(xiàn)最典型的詮釋。 1-2 與軟件描述語言相比,verilog有什么特點?答:verilog語言的特點:(1)按照設(shè)計目的,verilog程序可以劃分為面向仿真和面向綜合兩類,而可綜合的verilog程序能分別面向fpga和asic開發(fā)兩個領(lǐng)域。(2)能在多個
2、層次上對所設(shè)計的系統(tǒng)加以描述,從開關(guān)級、門級、寄存器傳輸級(rtl)至行為級都可以加以描述。(3)靈活多樣的電路描述風格。1-3 什么是綜合?有哪些類型?綜合在電子設(shè)計自動化中的地位是什么?答:綜合(synthesis),就其字面含義應(yīng)該是:把抽象的實體結(jié)合成單個或統(tǒng)一的實體。 在電子設(shè)計領(lǐng)域,綜合的概念可以表述為:將用行為和功能層次表達的電子系統(tǒng)轉(zhuǎn)換為低層次的、便于具體實現(xiàn)的模塊組合裝配的過程。(1)從自然語言轉(zhuǎn)換到verilog語言算法表述,即自然語言綜合。 (2)從算法表述轉(zhuǎn)換到寄存器傳輸級(register transport level,rtl)表述,即從行為域到結(jié)構(gòu)域的綜合,也稱行
3、為綜合。(3)從rtl級表述轉(zhuǎn)換到邏輯門(包括觸發(fā)器)的表述,即邏輯綜合。(4)從邏輯門表述轉(zhuǎn)換到版圖級表述(如asic設(shè)計),或轉(zhuǎn)換到fpga的配置網(wǎng)表文件,可稱為版圖綜合或結(jié)構(gòu)綜合。 綜合器就是能夠?qū)⒁环N設(shè)計表述形式自動向另一種設(shè)計表述形式轉(zhuǎn)換的計算機程序,或協(xié)助進行手工轉(zhuǎn)換的程序。它可以將高層次的表述轉(zhuǎn)化為低層次的表述,可以將行為域轉(zhuǎn)化為結(jié)構(gòu)域,可以將高一級抽象的電路描述(如算法級)轉(zhuǎn)化為低一級的電路描述(如門級),并可以用某種特定的“技術(shù)”(如cmos)實現(xiàn)。 1-4 ip在eda技術(shù)的應(yīng)用和發(fā)展中的意義是什么?答:ip就是知識產(chǎn)權(quán)核或知識產(chǎn)權(quán)模塊的意思,在eda技術(shù)和開發(fā)中具有十分重
4、要的地位。美國著名的dataquest咨詢公司將半導體產(chǎn)業(yè)的ip定義為“用于asic或fpga中的預(yù)先設(shè)計好的電路功能模塊”。ip分軟ip、固ip和硬ip。 軟軟ipip是用是用hdlhdl等硬件描述語言描述的功能塊,但是并不涉等硬件描述語言描述的功能塊,但是并不涉及用什么具體電路元件實現(xiàn)這些功能。及用什么具體電路元件實現(xiàn)這些功能。固固ipip是完成了綜合的功能塊。它有較大的設(shè)計深度,以網(wǎng)是完成了綜合的功能塊。它有較大的設(shè)計深度,以網(wǎng)表文件的形式提交客戶使用。表文件的形式提交客戶使用。 硬硬ipip提供設(shè)計的最終階段產(chǎn)品提供設(shè)計的最終階段產(chǎn)品掩模。隨著設(shè)計深度的掩模。隨著設(shè)計深度的提高,后續(xù)工
5、序所需要做的事情就越少;當然,靈活性也就越小。提高,后續(xù)工序所需要做的事情就越少;當然,靈活性也就越小。不同的客戶可以根據(jù)自己的需要訂購不同的不同的客戶可以根據(jù)自己的需要訂購不同的ipip產(chǎn)品。產(chǎn)品。 1-5 敘述eda的fpga/cpld設(shè)計流程,以及涉及的eda工具及其在整個流程中的作用。答:完整地了解利用eda技術(shù)進行設(shè)計開發(fā)的流程對于正確地選擇和使用eda軟件、優(yōu)化設(shè)計項目、提高設(shè)計效率十分有益。一個完整的、典型的eda設(shè)計流程既是自頂向下設(shè)計方法的具體實施途徑,也是eda工具軟件本身的組成結(jié)構(gòu)。 基于eda的fpga/cpld開發(fā)流程 1-6 olmc有何功能?說明gal是怎樣實現(xiàn)可
6、編程組合電路與時序電路的。答:輸出邏輯宏單元(output logic macro cell,olmc),此結(jié)構(gòu)使得pld器件在組合邏輯和時序邏輯中的可編程或可重構(gòu)性能都成為可能。gal16v8型號的器件,它包含了8個邏輯宏單元olmc,每一個olmc可實現(xiàn)時序電路可編程,而其左側(cè)的電路結(jié)構(gòu)是與陣列可編程的組合邏輯可編程結(jié)構(gòu)。 gal的的olmc單元設(shè)有多種組態(tài),可配置成專用組合輸出、專用輸單元設(shè)有多種組態(tài),可配置成專用組合輸出、專用輸入、組合輸出雙向口、寄存器輸出、寄存器輸出雙向口等,為邏輯電路設(shè)計入、組合輸出雙向口、寄存器輸出、寄存器輸出雙向口等,為邏輯電路設(shè)計提供了極大的靈活性。提供了極
7、大的靈活性。gal的輸出邏輯宏單元的輸出邏輯宏單元olmc中含有中含有4個多路選擇器,通過不同的選個多路選擇器,通過不同的選擇方式可以產(chǎn)生多種輸出結(jié)構(gòu),分別屬于擇方式可以產(chǎn)生多種輸出結(jié)構(gòu),分別屬于3種模式,一旦確定了某種模式,所種模式,一旦確定了某種模式,所有的有的olmc都將工作在同一種模式下。圖都將工作在同一種模式下。圖1-14即為其中一種輸出模式對應(yīng)的即為其中一種輸出模式對應(yīng)的結(jié)構(gòu)。結(jié)構(gòu)。圖圖1-14 寄存器輸出結(jié)構(gòu)寄存器輸出結(jié)構(gòu) 1-7 什么是基于乘積項的可編程邏輯結(jié)構(gòu)?什么是基于查找表的可編程邏輯結(jié)構(gòu)?答:基于乘積項的可編程結(jié)構(gòu),即由可編程的“與”陣列和固定的“或”陣列組成。 可編程
8、的查找表(可編程的查找表(look up table,lut)結(jié)構(gòu),)結(jié)構(gòu),lut是可編程的最小邏是可編程的最小邏輯構(gòu)成單元。大部分輯構(gòu)成單元。大部分fpga采用基于采用基于sram(靜態(tài)隨機存儲器)的查找表邏(靜態(tài)隨機存儲器)的查找表邏輯形成結(jié)構(gòu),輯形成結(jié)構(gòu),。一個。一個n輸入輸入lut可以實現(xiàn)可以實現(xiàn)n個輸入變量的任何邏輯功能,如個輸入變量的任何邏輯功能,如n輸入輸入“與與”、n輸入輸入“異或異或”等。等。 1-8 就邏輯宏單元而言,gal中的olmc、cpld中的lc、fpga中的lut和le的含義和結(jié)構(gòu)特點是什么?它們都有何異同點?答:輸出邏輯宏單元(output logic macr
9、o cell,olmc),此結(jié)構(gòu)使得pld器件在組合邏輯和時序邏輯中的可編程或可重構(gòu)性能都成為可能。 max7000s系列器件包含32256個邏輯宏單元(logic cell,lc),其單個邏輯宏單元結(jié)構(gòu)如圖1-15所示。 lut即可編程的查找表(look up table,lut)結(jié)構(gòu),是可編程的最小邏輯構(gòu)成單元。大部分fpga采用基于sram(靜態(tài)隨機存儲器)的查找表邏輯形成結(jié)構(gòu),即用sram來構(gòu)成邏輯函數(shù)發(fā)生器。一個n輸入lut可以實現(xiàn)n個輸入變量的任何邏輯功能,如n輸入“與”、n輸入“異或”等。 le是cyclone iii fpga器件的最基本的可編程單元,le主要由一個4輸入的查找
10、表lut、進位鏈邏輯、寄存器鏈邏輯和一個可編程的寄存器構(gòu)成。 1-9 為什么說用邏輯門作為衡量邏輯資源大小的最小單元不準確。答:專業(yè)習慣是將olmc及左側(cè)的可編程與陣列合稱一個邏輯宏單元,即標志pld器件邏輯資源的最小單元,由此可以認為gal16v8器件的邏輯資源是8個邏輯宏單元,而目前最大的fpga的邏輯資源達數(shù)十萬個邏輯宏單元。也有將邏輯門的數(shù)量作為衡量邏輯器件資源的最小單元,如某cpld的資源約2000門等,但此類劃分方法誤差較大。 1-10 標志fpga/cpld邏輯資源的答: cpld( max7000s)系列中的 邏輯宏單元由3個功能塊組成:邏輯陣列、乘積項選擇矩陣和可編程寄存器,
11、它們可以被單獨地配置為時序邏輯和組合邏輯工作方式。其中邏輯陣列實現(xiàn)組合邏輯,可以給每個邏輯宏單元提供5個乘積項?!俺朔e項選擇矩陣”分配這些乘積項作為到“或門”和“異或門”的主要邏輯輸入,以實現(xiàn)組合邏輯函數(shù);或者把這些乘積項作為宏單元中寄存器的輔助輸入:清零(clear)、置位(preset)、時鐘(clock)和時鐘使能控制(clock enable)。fpga(cyclone iii)器件的可編程資源主要來自邏輯陣列塊lab,而每個lab都由多個邏輯宏單元(logic element,le)構(gòu)成。le是cyclone iii fpga器件的最基本的可編程單元,le主要由一個4輸入的查找表lu
12、t、進位鏈邏輯、寄存器鏈邏輯和一個可編程的寄存器構(gòu)成。 1-11 解釋編程與配置這兩個概念。答:基于電可擦除存儲單元的eeprom或flash技術(shù)。cpld一般使用此技術(shù)進行編程(progam)。cpld被編程后改變了電可擦除存儲單元中的信息,掉電后可保持。 alteraaltera的的fpgafpga器件有兩類配置下載方式:主動配置方式和被動配器件有兩類配置下載方式:主動配置方式和被動配置方式。主動配置方式由置方式。主動配置方式由fpgafpga器件引導配置操作過程,它控制著外器件引導配置操作過程,它控制著外部存儲器和初始化過程,而被動配置方式則由外部計算機或控制器部存儲器和初始化過程,而被
13、動配置方式則由外部計算機或控制器控制配置過程。控制配置過程。 對于sram型fpga,在實用中必須利用專用配置器件來存儲編程信息,以便在上電后,該器件能對fpga自動編程配置。 epc器件中的epc2型號的器件是采用flash存儲工藝制作的具有可多次編程特性的配置器件。 第第2章章 verilog程序結(jié)構(gòu)與數(shù)據(jù)類型程序結(jié)構(gòu)與數(shù)據(jù)類型 習習 題題 答:書上答:書上p3335第第2章章 verilog程序結(jié)構(gòu)與數(shù)據(jù)類型程序結(jié)構(gòu)與數(shù)據(jù)類型 線網(wǎng)線網(wǎng)(wire)表示硬件單元之間的連接。就像在真實的電路中一樣,線網(wǎng)由其表示硬件單元之間的連接。就像在真實的電路中一樣,線網(wǎng)由其連接器件的輸出端連續(xù)驅(qū)動。線網(wǎng)
14、不能儲存值,而且它必須受到驅(qū)動器連接器件的輸出端連續(xù)驅(qū)動。線網(wǎng)不能儲存值,而且它必須受到驅(qū)動器(例如門例如門或連續(xù)賦值語句,或連續(xù)賦值語句,assign)的驅(qū)動。如果沒有驅(qū)動源,則線網(wǎng)的值為的驅(qū)動。如果沒有驅(qū)動源,則線網(wǎng)的值為z。 reg寄存器用來表示存儲元件,它保持原有的數(shù)值,通過賦值語句可以改變寄存器用來表示存儲元件,它保持原有的數(shù)值,通過賦值語句可以改變寄存器儲存的值,其作用與改變觸發(fā)器儲存的值相當。寄存器儲存的值,其作用與改變觸發(fā)器儲存的值相當。reg類型數(shù)據(jù)的默認初始類型數(shù)據(jù)的默認初始值為不定值值為不定值x。 定義為定義為net型的變量常被綜合為硬件電路中的物理連接,其特點是輸出的值
15、型的變量常被綜合為硬件電路中的物理連接,其特點是輸出的值緊跟輸入值的變化而變化,因此常被用來表示以緊跟輸入值的變化而變化,因此常被用來表示以assign關(guān)鍵詞引導的組合電路關(guān)鍵詞引導的組合電路描述。描述。 register類型變量必須放在過程語句中,如類型變量必須放在過程語句中,如initial、always引導的語句中,引導的語句中,通過過程賦值語句通過過程賦值語句(包括阻塞與非阻塞語句包括阻塞與非阻塞語句)完成賦值操作,換言之,在完成賦值操作,換言之,在always和和initial等過程結(jié)構(gòu)內(nèi)被賦值的變量必須定義成等過程結(jié)構(gòu)內(nèi)被賦值的變量必須定義成variable類型。類型。 2-3 2
16、-3 以下的標符是否合法?以下的標符是否合法?xorxor、oror、74ls0474ls04、4badder4badder、ascasc、$smd$smd、a5a5加法器、加法器、beginbegin答:正確答:正確xorxor、 begin begin 、 asc(asc(還有一類標識符,即轉(zhuǎn)義標識符還有一類標識符,即轉(zhuǎn)義標識符(escaped (escaped identifiers)identifiers)。轉(zhuǎn)義標識符以斜杠。轉(zhuǎn)義標識符以斜杠“”開頭,以空白符結(jié)尾,可以包含任何字開頭,以空白符結(jié)尾,可以包含任何字符。例如,符。例如,80318031、-gt-gt。 ) )不正確不正確7
17、4ls0474ls04、4badder(4badder() ), a5a5加法器,加法器, or(or(關(guān)鍵詞關(guān)鍵詞) ), $smd($smd(。) )2-2 2-2 下列數(shù)字的表述方式是否正確?下列數(shù)字的表述方式是否正確?4b-11014b-1101、6sb010_11016sb010_1101、5d825d82、bx01bx01、6b10 x1016b10 x101、10d710d7、hzdhzd、- -3b1013b101答:正確答:正確bx01bx01、6b10 x1016b10 x101、10d710d7、hzdhzd、-3b101-3b101不正確不正確4b4b 11011101
18、、6sb6sb 10_110110_1101、5d82(5d82() )2-4 定義以下的變量和常數(shù)。定義以下的變量和常數(shù)。(1) 定義一個名字為定義一個名字為q1的的8位位reg總線??偩€。 (2) 定義一個名字為定義一個名字為asg的整數(shù)。的整數(shù)。 (3) 定義參數(shù)定義參數(shù)s1=3b010,s2=3b110,s3=3b011。 (4) 定義一個容量定義一個容量(深度深度)為為128,字長為,字長為32位的存儲器,存儲器名是位的存儲器,存儲器名是mem32。(5) 定義一個名字為定義一個名字為wbus的的16位位wire總線。總線。 2-5 2-5 設(shè)設(shè)“reg3:0a; reg7:0b;
19、reg15:0c;”,reg3:0a; reg7:0b; reg15:0c;”,(1) (1) 執(zhí)行賦值語句執(zhí)行賦值語句a=8b11011010a=8b11011010后,后,a a實際獲得賦值是多少?實際獲得賦值是多少?(2) (2) 執(zhí)行賦值語句執(zhí)行賦值語句a=8h3456a=8h3456后,后,a a實際獲得賦值是多少?實際獲得賦值是多少? (3) (3) 執(zhí)行賦值語句執(zhí)行賦值語句c=9c=9和和c=-9c=-9,c c分別獲得賦值是什么?什么類型?分別獲得賦值是什么?什么類型?c=9c=9c=-9c=-9(4) (4) 執(zhí)行賦值語句執(zhí)行賦值語句b=38b=38后,后,b b獲得賦值是什
20、么?獲得賦值是什么? 什么類型?什么類型?第第3章章 verilog行為語句行為語句 3-1 3-1 討論討論alwaysalways和和initialinitial異同點。異同點。答:答: verilog支持兩種過程語句,即支持兩種過程語句,即always和和initial語句。語句。通常情況下initial語句語句不可綜合,主要用于仿真程序中的初始化; always語句屬于語句屬于可綜合語句,主要引導行為描述語句,使用頻度非常高。在一個語句,主要引導行為描述語句,使用頻度非常高。在一個verilog程程序模塊序模塊(module)中,中, always和和initial語句被使用的次數(shù)沒有
21、限制,即它語句被使用的次數(shù)沒有限制,即它們本身屬于并行執(zhí)行特征的語句。們本身屬于并行執(zhí)行特征的語句。 過程語句的基本格式如下:過程語句的基本格式如下: always(敏感信號及敏感信號列表或表達式敏感信號及敏感信號列表或表達式) 包括塊語句的各類行為語句包括塊語句的各類行為語句 verilogverilog的過程語句除的過程語句除alwaysalways外,還有外,還有initialinitial過程語句。其基本格式過程語句。其基本格式如下:如下: initialinitial begin begin語句語句1 1;語句;語句2 2;endend 與與alwaysalways結(jié)構(gòu)不同,結(jié)構(gòu)不同
22、,initialinitial過程語句結(jié)構(gòu)中沒有敏感信號列表,即不過程語句結(jié)構(gòu)中沒有敏感信號列表,即不帶觸發(fā)條件。帶觸發(fā)條件。initialinitial過程中的塊語句沿時間方向軸只執(zhí)行一次。過程中的塊語句沿時間方向軸只執(zhí)行一次。(always(always總是可以自動執(zhí)行無限次總是可以自動執(zhí)行無限次) ) initial語句通常用于仿真模塊中對激勵矢量的描述,或用于給寄存器變量賦初值,而在實際電路中,賦初值是沒有意義的。因此這是面向模擬仿真的過程語句,通常不能被綜合工具所接受,或在綜合時被忽略,但卻可以對存儲器加載初始化文件,這是可綜合行為。習習 題題 3-2 3-2 阻塞賦值和非阻塞賦值有
23、何區(qū)別?阻塞賦值和非阻塞賦值有何區(qū)別?在應(yīng)用中應(yīng)注意哪些問題?在應(yīng)用中應(yīng)注意哪些問題? 答:答:verilogverilog中,用普通等號中,用普通等號“=”=”作為阻塞式賦值語句的賦值符號,如作為阻塞式賦值語句的賦值符號,如y=by=b。 verilogverilog中,用普通等號中,用普通等號“=”=”作為非阻塞式賦值語句的賦值符號,如作為非阻塞式賦值語句的賦值符號,如y=by=b。 阻塞式賦值的特點是,一旦執(zhí)行完當前的賦值語句,賦值目標變量阻塞式賦值的特點是,一旦執(zhí)行完當前的賦值語句,賦值目標變量y y即刻即刻獲得來自等號右側(cè)表達式的計算值。如果在一個塊語句中含有多條阻塞式賦值獲得來自等
24、號右側(cè)表達式的計算值。如果在一個塊語句中含有多條阻塞式賦值語句,則當執(zhí)行到其中某條賦值語句時,其他語句將禁止執(zhí)行,即如同被阻塞語句,則當執(zhí)行到其中某條賦值語句時,其他語句將禁止執(zhí)行,即如同被阻塞了一樣。了一樣。 非阻塞式賦值的特點是必須在塊語句執(zhí)行結(jié)束時才整體完成賦值操作。非非阻塞式賦值的特點是必須在塊語句執(zhí)行結(jié)束時才整體完成賦值操作。非阻塞的含義可以理解為在執(zhí)行當前語句時,對于塊中的其他語句的執(zhí)行情況一阻塞的含義可以理解為在執(zhí)行當前語句時,對于塊中的其他語句的執(zhí)行情況一律不加限制,不加阻塞。這也可以理解為,在律不加限制,不加阻塞。這也可以理解為,在begin_endbegin_end塊中的所
25、有賦值語句都塊中的所有賦值語句都可以并行運行??梢圆⑿羞\行。 3-3 用用verilog設(shè)計一個設(shè)計一個3-8譯碼器,要求分別用譯碼器,要求分別用case語句和語句和if_else語句。比語句。比較這兩種方式。較這兩種方式。 3-3 用用verilog設(shè)計一個設(shè)計一個3-8譯碼器,要求分別用譯碼器,要求分別用case語句和語句和if_else語句。比較這兩種語句。比較這兩種方式。方式。module decoder3_8 ( g1 ,y ,g2 ,a ,g3 );input g1, g2, g3;wire g1, g2, g3;input 2:0 a ;wire 2:0 a ;output 7:
26、0 y ;reg 7:0 y ;reg s;always ( a ,g1, g2, g3) begin s = g2 | g3 ; if (g1 = 0) y = 8b1111_1111; else if (s) y = 8b1111_1111; else case ( a ) 3b000: y = 8b11111110; 3b001: y = 8b11111101; 3b010: y = 8b11111011; 3b011: y = 8b11110111; 3b100: y = 8b11101111; 3b101: y = 8b11011111; 3b110: y = 8b10111111;
27、 3b111: y = 8b01111111; default:y = 8bxxxxxxxx; endcase end endmodule 3-3 用用verilog設(shè)計一個設(shè)計一個3-8譯碼器,要求分別用譯碼器,要求分別用case語句和語句和if_else語句。比較這兩種語句。比較這兩種方式。方式。module decoder3_8 ( g1 ,y ,g2 ,a ,g3 ); input g1, g2, g3; wire g1, g2, g3; input 2:0 a ; wire 2:0 a ; output 7:0 y ; reg 7:0 y ; reg s; always ( a ,g
28、1, g2, g3) begin s = g2 | g3 ; if (g1 = 0) y = 8b1111_1111; else if (s) y = 8b1111_1111; else begin if (a=3b000)y=8b11111110; else if (a=3b001)y=8b11111101; else if (a=3b010)y=8b11111011; else if (a=3b011)y=8b11110111; else if (a=3b100)y=8b11101111; else if (a=3b101)y=8b11011111; else if (a=3b110)y=
29、8b10111111; else if (a=3b111)y=8b01111111; else y=8bxxxxxxxx;end endendmodule/測試文件,測試文件,?部分請根據(jù)被測試的文件修改部分請根據(jù)被測試的文件修改module stimulus; reg 2:0a ; wire7:0y ; reg g1 ,g2 ,g3; decoder3_8 dut ( g1 ,y ,g2 ,a ,g3 ); initial begin $monitor($time,a=%d,g1=%b,g2=%b, g3=%b,y= %dn,a, g1, g2, g3, y); endinitial beg
30、in g1=1 ;g2=1 ;g3=1;a=0; #10 g2=0;g1=0; #10 g2=0;g1=1;#10 g2=1;g1=0;g3=0; #10 g1=0;g1=1;g3=1; #10 g1=0;g1=0;g3=0; #10 g1=1;g2=0;g3=0; #50 a= 0; #50 a= 1; #50 a= 2; #50 a= 3; #50 a= 4; #50 a= 5; #50 a= 6; #50 a= 7; #50 $finish; endendmodule習習 題題 3-4圖圖3-26所示的是雙所示的是雙2選選1多路選擇器構(gòu)成的電路多路選擇器構(gòu)成的電路muxk。對于其中。對于
31、其中mux21a,當,當s=0和和s=1時,分別有時,分別有y=a和和y=b。試在一個模塊結(jié)構(gòu)中用兩個過程來表達此電路。試在一個模塊結(jié)構(gòu)中用兩個過程來表達此電路。答:參考實驗答:參考實驗1圖圖3-26 含含2選選1多路選擇器的模塊多路選擇器的模塊module muxk (a1, a2, a3, s0, s1, outy); input a1, a2, a3, s0, s1; output outy; wire outy; wire tmp; mux21a u1 (.a(a2),.b(a3),.s(s0),.y(tmp); mux21a u2 (.a (a1),.b (tmp),.s(s1),.
32、y(outy);endmodule習習 題題3-5 給出一個給出一個4選選1多路選擇器的多路選擇器的verilog描述。選通控制端有描述。選通控制端有4個輸入:個輸入:s0、s1、s2、s3。當且僅當。當且僅當s0=0時:時:y=a;s1=0時:時:y=b;s2=0時:時:y=c;s3=0時:時:y=d。module mux41a (a,b,c,d,s0,s1,s2,s3,y); output y; /定義定義y為輸出信號為輸出信號 input a, b, c, d; input s0,s1,s2,s3; reg y; /定義輸出端口信號定義輸出端口信號y為寄存器型變量為寄存器型變量 alwa
33、ys (a,b,c,s0,s1,s2,s3 )begin /塊語句起始塊語句起始 if (s0=0)y=a; /當當s0 =0成立,即成立,即(s0 =0)=1時,時,y=a; else if (s1=0)y=b; /當當(s1 =1)為真,則為真,則y=b; else if (s2=0)y=c; /當當(s2 =2)為真,則為真,則y=c; else if (s3=0) y=d; /當當(s3 =3)為真,即為真,即y=d; end /塊語句結(jié)束塊語句結(jié)束endmodule sum = 0; cout = 1; end else if (ain = 0 & bin = 0 &
34、 cin = 1 ) begin sum = 1; cout = 0; end else if (ain = 1 & bin = 0 & cin = 1 ) begin sum = 0; cout = 1; end else if (ain = 0 & bin = 1 & cin = 1 ) begin sum = 0; cout = 1; end else begin sum = 1; cout = 1; end end endmodule timescale 1 ns / 1 ps module f_adder ( ain,bin,cin,cout,sum)
35、; input ain,bin,cin; wire ain,bin,cin; output cout,sum; reg cout,sum; always (ain or bin or cin) begin if (ain = 0 & bin = 0 & cin = 0 ) begin sum = 0; cout = 0; end else if (ain = 1 & bin = 0 & cin = 0 ) begin sum = 1; cout = 0; end else if (ain = 0 & bin = 1 & cin = 0 ) beg
36、in sum = 1; cout = 0; end else if (ain =1 & bin = 1 & cin = 0 ) begin 真值表為ainbincinsumcout0000000110010100110110010101011100111111timescale 1 ns / 1 ps module f_adder ( ain,bin,cin,cout,sum); input ain,bin,cin; wire ain,bin,cin; output cout,sum; reg cout,sum; always (ain or bin or cin) begin
37、 if (ain = 0 & bin = 0 & cin = 0 ) begin sum = 0;cout = 0;end else if (ain&(bincin)|(ain&bin&cin) begin sum = 1;cout = 0;end else if (ain&(bincin)|(ain&bin&cin) begin sum =0 ;cout =1 ;end else begin sum = 1;cout = 1;end end endmodule 習習 題題3-7 3-7 設(shè)計一個求補碼的程序,輸入數(shù)據(jù)是一個有符號
38、的設(shè)計一個求補碼的程序,輸入數(shù)據(jù)是一個有符號的8 8位二進制數(shù)。位二進制數(shù)。/設(shè)計一個求補碼的程序,輸入數(shù)據(jù)是一個有符號的設(shè)計一個求補碼的程序,輸入數(shù)據(jù)是一個有符號的8 8位二進制數(shù)位二進制數(shù)module binary_complement(a,b); /module binary_complement(a,b); /二進制數(shù)補碼二進制數(shù)補碼input 7:0 a;input 7:0 a;output 7:0 b;output 7:0 b;integer i;integer i;reg 7:0d;reg 7:0d;reg 6:0c;reg 6:0c;always (a) always (a)
39、beginbegin if(a7=1) if(a7=1) begin begin for(i=0;i7;i=i+1)ci=!ai; for(i=0;i7;i=i+1)ci=!ai; d7:0=a7,(c6:0+7d1); d7:0=a7,(c6:0+7d1); end end else d7:0=a7:0; else d7:0=a7:0;endendassign b7:0=d7:0;assign b7:0=d7:0;endmoduleendmoduletimescale 1ns/1ns include binary_complement.v module stimulus; /測試模塊的名字
40、reg7:0 a;wire7:0b;binary_complement mycount(a,b);/調(diào)用測試對象 initialbegin /激勵信號定義 a=1;#10 a=2;#10 a=-8d8;#10 a=127;#10 a=255;#10 $finish; end /定義結(jié)果顯示格式 initial $monitor($time,a=%b, b=%bn, a,b); endmodule 3-7 設(shè)計一個求補碼的程序,輸入數(shù)據(jù)是一個有符號的設(shè)計一個求補碼的程序,輸入數(shù)據(jù)是一個有符號的8位二進制數(shù)。位二進制數(shù)。3-8 3-8 設(shè)計一個格雷碼至二進制數(shù)的轉(zhuǎn)換器。設(shè)計一個格雷碼至二進制數(shù)的轉(zhuǎn)
41、換器。 格雷碼二進制000000001001011010010011110100111101101110100111 在一組數(shù)的編碼中,若任意兩個相鄰的代碼只有一位二進制數(shù)不同,則稱這種編碼為格雷碼(格雷碼(gray code),另外由于最大數(shù)與最小數(shù)之間也僅一位數(shù)不同,即“首尾相連”,因此又稱循循環(huán)碼或反射碼。環(huán)碼或反射碼。 3-8 3-8 設(shè)計一個格雷碼至二進制數(shù)的轉(zhuǎn)換器。設(shè)計一個格雷碼至二進制數(shù)的轉(zhuǎn)換器。 timescale 1ns/1ns include gry2bin.v module stimulus; reg2:0 gry;wire2:0bin;gry2bin mycount(g
42、ry,bin); initialbegin gry=3b000;#10 gry=3b001;#10 gry=3b011;#10 gry=3b010;#10 gry=3b110;#10 gry=3b111;#10 gry=3b101;#10 gry=3b100;#10 $finish; end initial $monitor($time,gry=%b, bin=%bn,gry,bin); endmodule 習習 題題 3-9 用不同循環(huán)語句分別設(shè)計一個邏輯電路模塊,用以統(tǒng)計一用不同循環(huán)語句分別設(shè)計一個邏輯電路模塊,用以統(tǒng)計一8位二進制數(shù)中含位二進制數(shù)中含1的的數(shù)量。數(shù)量。 module st
43、atistics8(sum,a);output3:0sum;input7:0 a;reg3:0 sum;integer i; always (a) begin sum=0; for(i=0;i1; end endendmoduleforfor循環(huán)語句循環(huán)語句module statistics8(sum,a); parameter s=8; output3:0sum; input7:0 a; regs:1 at; reg3:0 sum; regs:0 ct; always (a) begin at=s1b0,a; sum=0; ct=s; while(ct0) begin if(at1)sum=
44、sum+1;else sum=sum; begin ct= ct-1; at=at1; end end end endmodule 3-9 3-9 用不同循環(huán)語句分別設(shè)計一個邏輯電路模塊,用以統(tǒng)計一用不同循環(huán)語句分別設(shè)計一個邏輯電路模塊,用以統(tǒng)計一8 8位二進制數(shù)位二進制數(shù)中含中含1 1的數(shù)量。的數(shù)量。 module module voter7(pass,vote);output output pass;inputinput6:0 vote;regreg2:0 sum;integer integer i; reg reg pass;always always (vote) begin begi
45、n sum=0; for for(i=0;ib)?a:b;assign sum2=(cd)?c:d;assign mostlarge=(sum1sum2)?sum1:sum2;endmodule3-12 3-12 利用利用casecase語句設(shè)計一個加、減、乘、除語句設(shè)計一個加、減、乘、除4 4功能算術(shù)邏輯單元功能算術(shù)邏輯單元alualu,輸入的,輸入的兩個操用數(shù)都是兩個操用數(shù)都是4 4位進制數(shù);輸入的操作碼是兩位二進制數(shù);輸出結(jié)果是位進制數(shù);輸入的操作碼是兩位二進制數(shù);輸出結(jié)果是8 8位位二進制數(shù)。為了便于記憶和調(diào)試,建議把操作碼用二進制數(shù)。為了便于記憶和調(diào)試,建議把操作碼用paramete
46、rparameter定義為參數(shù)。定義為參數(shù)。 module mux_ alu (a,b,s,y); output 7:0 y; /定義定義y為輸出信號為輸出信號 input 3:0 a, b; input 1:0 s; parameter add = 2b00, reduce = 2b01, multiply = 2b10, trad = 2b11; reg 7:0y; /定義輸出端口信號定義輸出端口信號y為寄存器型變量為寄存器型變量 always (a,b,s ) begin case (s ) 2b00: y = a+b; 2b01: y = a-b; 2b10: y = a*b; 2b1
47、1: y = a/b; default: y = 8bxxxxxxxx; endcase end endmodule module stimulus;reg 3:0a,b;reg 1:0s;wire7:0 y;mux_alu r1(a,b,s,y);initialbegina=4b0100;b=4b0010;s=2b00;#10 s=2b01;#10 s=2b10;#10 s=2b11;#10 $finish;/?end/?initial$monitor($time, s=%b, a=%b, b=%b,y=%d, s, a, b,y);endmodule3-12 3-12 利用利用caseca
48、se語句設(shè)計一個加、減、乘、除語句設(shè)計一個加、減、乘、除4 4功能算術(shù)邏輯單元功能算術(shù)邏輯單元alualu,輸入的,輸入的兩個操用數(shù)都是兩個操用數(shù)都是4 4位進制數(shù);輸入的操作碼是兩位二進制數(shù);輸出結(jié)果是位進制數(shù);輸入的操作碼是兩位二進制數(shù);輸出結(jié)果是8 8位位二進制數(shù)。為了便于記憶和調(diào)試,建議把操作碼用二進制數(shù)。為了便于記憶和調(diào)試,建議把操作碼用parameterparameter定義為參數(shù)。定義為參數(shù)。 習習 題題 3-13 3-13 在在verilogverilog設(shè)計中,給時序電路清零(復位)有兩種不同方法,它們設(shè)計中,給時序電路清零(復位)有兩種不同方法,它們是什么,如何實現(xiàn)?是什么
49、,如何實現(xiàn)?答:同步清零、異步清零,在過程語句敏感信號表中的邏輯表述答:同步清零、異步清零,在過程語句敏感信號表中的邏輯表述posedge clkposedge clk用用于指明正向跳變,或于指明正向跳變,或negedgenegedge用于指明負向跳變實現(xiàn)用于指明負向跳變實現(xiàn) 3-14 3-14 哪一種復位方法必須將復位信號放在敏感信號表中?給出這兩種電路的哪一種復位方法必須將復位信號放在敏感信號表中?給出這兩種電路的verilogverilog描述。描述。答:異步復位必須將復位信號放在敏感信號表中。答:異步復位必須將復位信號放在敏感信號表中。always (posedge clk) alwa
50、ys (posedge clk) /clk/clk上升沿啟動上升沿啟動 q=d; q=d; /當當clkclk有升沿時有升沿時d d被鎖入被鎖入q qalways (posedge clk or always (posedge clk or negedge rstnegedge rst) begin ) begin /塊開始塊開始 if(!rst)q=0; if(!rst)q=0; /如果如果rst=0rst=0條件成立,條件成立,q q被清被清0 0else if(en) q=d;else if(en) q=d;/在在clkclk上升沿處,上升沿處,en=1en=1,則執(zhí)行賦值語句,則執(zhí)行賦
51、值語句endend /塊結(jié)束塊結(jié)束 3-15 舉例說明,為什么使用條件敘述不完整的條件句能導致產(chǎn)生時序模塊的綜合結(jié)果?舉例說明,為什么使用條件敘述不完整的條件句能導致產(chǎn)生時序模塊的綜合結(jié)果?答:答: 當clk發(fā)生了電平變化,但是從1變到0。這時無論d是否變化,都將啟動過程去執(zhí)行if語句;但此時clk=0,無法執(zhí)行if語句,從而無法執(zhí)行賦值語句q=d,于是q只能保持原值不變(這就意味著需要在設(shè)計模塊中引入存儲元件)。 當clk沒有發(fā)生任何變化,且clk一直為0,而敏感信號d發(fā)生了變化。這時也能啟動過程,但由于clk=0,無法執(zhí)行if語句,從而也就無法執(zhí)行賦值語句q=d,導致q只能保持原值(這也意
52、味著需要在設(shè)計模塊中引入存儲元件)。 在以上兩種情況中,由于if語句不滿足條件,于是將跳過賦值表達式q=d,不執(zhí)行此賦值表達式而結(jié)束if語句和過程對于這種語言現(xiàn)象,velilog綜合器解釋為,對于不滿足條件,跳過賦值語句q=d不予執(zhí)行,即意味著保持q的原值不變(保持前一次滿足if條件時q被更新的值)。對于數(shù)字電路來說,當輸入改變后試圖保持一個值不變,就意味著使用具有存儲功能的元件,就是必須引進時序元件來保存q中的原值,直到滿足if語句的判斷條件后才能更新q中的值,于是便產(chǎn)生了時序元件。 module latch1 (clk, d, q); output q; input clk, d; reg
53、 q; always (d or clk) if(clk)q=d; /當clk=1時d被鎖入qendmodule 3-16 3-16 把例把例3-113-11中的中的rstrst和和clkclk在敏感信號中具有同樣的地位,在敏感信號中具有同樣的地位,從語句上解答,為什么綜合的結(jié)果是從語句上解答,為什么綜合的結(jié)果是clkclk成為邊沿觸發(fā)時鐘信成為邊沿觸發(fā)時鐘信號,而號,而rstrst成為電平控制信號?成為電平控制信號?module dff2 (clk, d, q,rst,en); /含異步清含異步清0和時鐘同步使能的和時鐘同步使能的d觸發(fā)器觸發(fā)器 output q; input clk, d,
54、rst,en; reg q; always (posedge clk or negedge rst) begin /塊開始塊開始 if(!rst)q=0; /如果如果rst=0條件成立,條件成立,q被清被清0 else if(en) q=d; /在在clk上升沿處,上升沿處,en=1,則執(zhí)行賦值語句,則執(zhí)行賦值語句 end /塊結(jié)束塊結(jié)束endmodule【例【例3-11】 這里所謂的并非時序的異步,而是指獨立于時鐘控制的復位控制端,即在任何時刻,只要rst=0或1 ,此d觸發(fā)器的輸出端即刻被清0,與時鐘的狀態(tài)無關(guān)。而時鐘使能en的功能是,只有。(“”) 例3-11程序執(zhí)行過程是這樣的,無論c
55、lk是否有跳變,只要rst有一個下降沿動作,即刻啟動過程執(zhí)行if語句,即執(zhí)行語句q=0,對q清0,然后跳出if語句。此后如果rst一直保存為0,則無論是否有clk的邊沿跳變信號,q恒輸出0,這就是rst的異步清0功能。如果rst一直為1,且clk有一次上升沿,則必定執(zhí)行賦值操作q=d,從而更新q值,否則將保持q值不變(條件是rst=1)。 always (posedge clk or negedge rst) begin /塊開始塊開始 if(!rst)q=0; /如果如果rst=0條件成立,條件成立,q被清被清0else if(en) q=d;3-17 把例把例3-17改成一異步清改成一異步
56、清0,同步時鐘使能和異步數(shù)據(jù)加載型,同步時鐘使能和異步數(shù)據(jù)加載型8位二進制位二進制加法計數(shù)器。加法計數(shù)器。【例3-17】含有異步清0同步時鐘使能和同步數(shù)據(jù)加載功能的十進制計數(shù)器module cnt10(clk, rst, en,load,cout,dout,data);input clk, rst, en,load; /時鐘,時鐘使能,復位,數(shù)據(jù)加載控制信號輸入口input 3:0data; /4位并行加載數(shù)據(jù)輸入口output 3:0 dout; /計數(shù)數(shù)據(jù)輸出信號口output cout; /計數(shù)進位輸出reg cout; reg3:0 q1;assign dout=q1; /將內(nèi)部寄存器
57、的計數(shù)結(jié)果輸出至doutalways (posedge clk or negedge rst ) /時序過程 beginif(!rst)q1=0; /rst=0時,對內(nèi)部寄存器單元異步清0 /當load=0,異步向內(nèi)部寄存器加載數(shù)據(jù) /同步使能en=1,則允許加載或計數(shù) /當q1小于9時,允許累加 /否則一個時鐘后清0返回初值end endalways (q1) /組合電路之過程if(q1=4h9)cout=1b1; /當q1=1001時,cout輸出進位標志1else cout=1b0; /否則,輸出進位標志0endmodule 3-18 把例把例3-17改成一個改成一個16位二進制加法計數(shù)
58、器,將其進位輸出位二進制加法計數(shù)器,將其進位輸出cout與異步數(shù)與異步數(shù)據(jù)加載控制據(jù)加載控制load連在一起,構(gòu)成一個自動加載型連在一起,構(gòu)成一個自動加載型16位二進制加法計數(shù)器,也即位二進制加法計數(shù)器,也即一個一個16位可控的分頻器,給出其位可控的分頻器,給出其verilog表述,并說明工作原理。設(shè)輸入頻率表述,并說明工作原理。設(shè)輸入頻率fi=4mhz,輸出頻率輸出頻率fo=516.5hz(允許誤差允許誤差0.1hz),16位加載數(shù)值位加載數(shù)值=?module cnt10(clk, rst, en,load,cout,dout,data);module cnt10(clk, rst, en,
59、load,cout,dout,data);input clk, rst, en,load; input clk, rst, en,load; /時鐘,時鐘使能,復位,數(shù)據(jù)加載控制信號輸入口時鐘,時鐘使能,復位,數(shù)據(jù)加載控制信號輸入口input input 15:015:0data; data; /4/4位并行加載數(shù)據(jù)輸入口位并行加載數(shù)據(jù)輸入口output output 15:015:0 dout; dout; /計數(shù)數(shù)據(jù)輸出信號口計數(shù)數(shù)據(jù)輸出信號口output cout; output cout; /計數(shù)進位輸出計數(shù)進位輸出regreg15:0 q1; q1;assign dout=q1; a
60、ssign dout=q1; /將內(nèi)部寄存器的計數(shù)結(jié)果輸出至將內(nèi)部寄存器的計數(shù)結(jié)果輸出至doutdoutalways (posedge clk or negedge rst) begin always (posedge clk or negedge rst) begin /時序過程時序過程if(!rst)q1=0; if(!rst)q1=0; /rst=0/rst=0時,對內(nèi)部寄存器單元異步清時,對內(nèi)部寄存器單元異步清0 0else if(en)begin else if(en)begin /同步使能同步使能en=1en=1,則允許加載或計數(shù),則允許加載或計數(shù)if(!load)q1=data; if(!load)q1=data; /當當load=1load=1,向內(nèi)部寄存器加載數(shù)據(jù),向內(nèi)部寄存器加載數(shù)據(jù)else if(q1else if(q116h)q1=
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 全國統(tǒng)考2024高考歷史一輪復習第十二單元近現(xiàn)代中國的思想解放理論成果及科技文化第33講20世紀以來中國重大思想理論成果課時作業(yè)含解析新人教版
- 鄉(xiāng)村俱樂部網(wǎng)球場施工合同
- 文化傳媒行業(yè)聘用合同范本
- 書店裝修泥工施工合同模板
- 學校電力設(shè)施施工合同樣本
- 工廠車間內(nèi)墻裝修刮瓷合同
- 地熱能源開發(fā)鉆探合同
- 船舶修造勞務(wù)分包協(xié)議
- 建筑工程師招聘合同樣本
- 外國設(shè)計師家居行業(yè)聘用合同
- 江蘇省示范性縣級教師發(fā)展中心建設(shè)標準
- (完整版)機場報批程序指南(流程)
- 小學低年級數(shù)棋教案
- 長鏈、中鏈脂肪乳區(qū)別
- 起重吊裝作業(yè)指導書
- pMD19-T載體說明書
- 客戶投訴產(chǎn)品質(zhì)量問題處理
- 足球 課件 (共14張PPT)
- 對相對性狀的雜交實驗ppt課件
- 快時尚服裝品牌的營銷策略分析以zara為例
- 能源調(diào)度管理要點
評論
0/150
提交評論