EDA課后習題答案_第1頁
EDA課后習題答案_第2頁
EDA課后習題答案_第3頁
EDA課后習題答案_第4頁
EDA課后習題答案_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第1章

EDA技術概述1精選可編輯ppt1-1EDA技術與ASIC設計和FPGA開發(fā)有什么關系?FPGA在ASIC設計中有什么用途?答:EDA技術進行電子系統(tǒng)設計的最后目標,是完成專用集成電路(ASIC)的設計和實現(xiàn),F(xiàn)PGA是實現(xiàn)這一途徑的主流器件,它們的特點是直接面向用戶、具有極大的靈活性和通用性、使用方便、硬件測試和實現(xiàn)快捷、開發(fā)效率高、成本低、上市時間短、技術維護簡單、工作可靠性好等。FPGA的應用是EDA技術有機融合軟硬件電子設計技術、ASIC設計,以及對自動設計與自動實現(xiàn)最典型的詮釋。

1-2與軟件描述語言相比,Verilog有什么特點?答:Verilog語言的特點:(1)按照設計目的,Verilog程序可以劃分為面向仿真和面向綜合兩類,而可綜合的Verilog程序能分別面向FPGA和ASIC開發(fā)兩個領域。(2)能在多個層次上對所設計的系統(tǒng)加以描述,從開關級、門級、寄存器傳輸級(RTL)至行為級都可以加以描述。(3)靈活多樣的電路描述風格。2精選可編輯ppt1-3什么是綜合?有哪些類型?綜合在電子設計自動化中的地位是什么?答:綜合(Synthesis),就其字面含義應該是:把抽象的實體結合成單個或統(tǒng)一的實體。在電子設計領域,綜合的概念可以表述為:將用行為和功能層次表達的電子系統(tǒng)轉換為低層次的、便于具體實現(xiàn)的模塊組合裝配的過程。(1)從自然語言轉換到Verilog語言算法表述,即自然語言綜合。

(2)從算法表述轉換到寄存器傳輸級(RegisterTransportLevel,RTL)表述,即從行為域到結構域的綜合,也稱行為綜合。(3)從RTL級表述轉換到邏輯門(包括觸發(fā)器)的表述,即邏輯綜合。(4)從邏輯門表述轉換到版圖級表述(如ASIC設計),或轉換到FPGA的配置網(wǎng)表文件,可稱為版圖綜合或結構綜合。綜合器就是能夠將一種設計表述形式自動向另一種設計表述形式轉換的計算機程序,或協(xié)助進行手工轉換的程序。它可以將高層次的表述轉化為低層次的表述,可以將行為域轉化為結構域,可以將高一級抽象的電路描述(如算法級)轉化為低一級的電路描述(如門級),并可以用某種特定的“技術”(如CMOS)實現(xiàn)。

3精選可編輯ppt1-4IP在EDA技術的應用和發(fā)展中的意義是什么?答:IP就是知識產權核或知識產權模塊的意思,在EDA技術和開發(fā)中具有十分重要的地位。美國著名的Dataquest咨詢公司將半導體產業(yè)的IP定義為“用于ASIC或FPGA中的預先設計好的電路功能模塊”。IP分軟IP、固IP和硬IP。

軟IP是用HDL等硬件描述語言描述的功能塊,但是并不涉及用什么具體電路元件實現(xiàn)這些功能。

固IP是完成了綜合的功能塊。它有較大的設計深度,以網(wǎng)表文件的形式提交客戶使用。

硬IP提供設計的最終階段產品——掩模。隨著設計深度的提高,后續(xù)工序所需要做的事情就越少;當然,靈活性也就越小。不同的客戶可以根據(jù)自己的需要訂購不同的IP產品。4精選可編輯ppt1-5敘述EDA的FPGA/CPLD設計流程,以及涉及的EDA工具及其在整個流程中的作用。答:完整地了解利用EDA技術進行設計開發(fā)的流程對于正確地選擇和使用EDA軟件、優(yōu)化設計項目、提高設計效率十分有益。一個完整的、典型的EDA設計流程既是自頂向下設計方法的具體實施途徑,也是EDA工具軟件本身的組成結構。

基于EDA的FPGA/CPLD開發(fā)流程

5精選可編輯ppt1-6OLMC有何功能?說明GAL是怎樣實現(xiàn)可編程組合電路與時序電路的。答:輸出邏輯宏單元(OutputLogicMacroCell,OLMC),此結構使得PLD器件在組合邏輯和時序邏輯中的可編程或可重構性能都成為可能。GAL16V8型號的器件,它包含了8個邏輯宏單元OLMC,每一個OLMC可實現(xiàn)時序電路可編程,而其左側的電路結構是與陣列可編程的組合邏輯可編程結構。

GAL的OLMC單元設有多種組態(tài),可配置成專用組合輸出、專用輸入、組合輸出雙向口、寄存器輸出、寄存器輸出雙向口等,為邏輯電路設計提供了極大的靈活性。

GAL的輸出邏輯宏單元OLMC中含有4個多路選擇器,通過不同的選擇方式可以產生多種輸出結構,分別屬于3種模式,一旦確定了某種模式,所有的OLMC都將工作在同一種模式下。圖1-14即為其中一種輸出模式對應的結構。圖1-14寄存器輸出結構6精選可編輯ppt1-7什么是基于乘積項的可編程邏輯結構?什么是基于查找表的可編程邏輯結構?答:基于乘積項的可編程結構,即由可編程的“與”陣列和固定的“或”陣列組成。

可編程的查找表(LookUpTable,LUT)結構,LUT是可編程的最小邏輯構成單元。大部分FPGA采用基于SRAM(靜態(tài)隨機存儲器)的查找表邏輯形成結構,即用SRAM來構成邏輯函數(shù)發(fā)生器。一個N輸入LUT可以實現(xiàn)N個輸入變量的任何邏輯功能,如N輸入“與”、N輸入“異或”等。1-8就邏輯宏單元而言,GAL中的OLMC、CPLD中的LC、FPGA中的LUT和LE的含義和結構特點是什么?它們都有何異同點?答:輸出邏輯宏單元(OutputLogicMacroCell,OLMC),此結構使得PLD器件在組合邏輯和時序邏輯中的可編程或可重構性能都成為可能。

MAX7000S系列器件包含32~256個邏輯宏單元(LogicCell,LC),其單個邏輯宏單元結構如圖1-15所示。

LUT即可編程的查找表(LookUpTable,LUT)結構,是可編程的最小邏輯構成單元。大部分FPGA采用基于SRAM(靜態(tài)隨機存儲器)的查找表邏輯形成結構,即用SRAM來構成邏輯函數(shù)發(fā)生器。一個N輸入LUT可以實現(xiàn)N個輸入變量的任何邏輯功能,如N輸入“與”、N輸入“異或”等。

LE是CycloneIIIFPGA器件的最基本的可編程單元,LE主要由一個4輸入的查找表LUT、進位鏈邏輯、寄存器鏈邏輯和一個可編程的寄存器構成。

7精選可編輯ppt1-9為什么說用邏輯門作為衡量邏輯資源大小的最小單元不準確。答:專業(yè)習慣是將OLMC及左側的可編程與陣列合稱一個邏輯宏單元,即標志PLD器件邏輯資源的最小單元,由此可以認為GAL16V8器件的邏輯資源是8個邏輯宏單元,而目前最大的FPGA的邏輯資源達數(shù)十萬個邏輯宏單元。也有將邏輯門的數(shù)量作為衡量邏輯器件資源的最小單元,如某CPLD的資源約2000門等,但此類劃分方法誤差較大。

1-10標志FPGA/CPLD邏輯資源的邏輯宏單元包含哪些結構?答:CPLD(MAX7000S)系列中的

邏輯宏單元由3個功能塊組成:邏輯陣列、乘積項選擇矩陣和可編程寄存器,它們可以被單獨地配置為時序邏輯和組合邏輯工作方式。其中邏輯陣列實現(xiàn)組合邏輯,可以給每個邏輯宏單元提供5個乘積項。“乘積項選擇矩陣”分配這些乘積項作為到“或門”和“異或門”的主要邏輯輸入,以實現(xiàn)組合邏輯函數(shù);或者把這些乘積項作為宏單元中寄存器的輔助輸入:清零(Clear)、置位(Preset)、時鐘(Clock)和時鐘使能控制(ClockEnable)。FPGA(CycloneIII)器件的可編程資源主要來自邏輯陣列塊LAB,而每個LAB都由多個邏輯宏單元(LogicElement,LE)構成。LE是CycloneIIIFPGA器件的最基本的可編程單元,LE主要由一個4輸入的查找表LUT、進位鏈邏輯、寄存器鏈邏輯和一個可編程的寄存器構成。

8精選可編輯ppt1-11解釋編程與配置這兩個概念。答:基于電可擦除存儲單元的EEPROM或Flash技術。CPLD一般使用此技術進行編程(Progam)。CPLD被編程后改變了電可擦除存儲單元中的信息,掉電后可保持。

Altera的FPGA器件有兩類配置下載方式:主動配置方式和被動配置方式。主動配置方式由FPGA器件引導配置操作過程,它控制著外部存儲器和初始化過程,而被動配置方式則由外部計算機或控制器控制配置過程。對于SRAM型FPGA,在實用中必須利用專用配置器件來存儲編程信息,以便在上電后,該器件能對FPGA自動編程配置。

EPC器件中的EPC2型號的器件是采用Flash存儲工藝制作的具有可多次編程特性的配置器件。

9精選可編輯ppt第2章

Verilog程序結構與數(shù)據(jù)類型10精選可編輯ppt習題

2-1wire型變量與reg型變量的什么本質區(qū)別,它們可用于什么類型語句中?答:書上P33~35《第2章Verilog程序結構與數(shù)據(jù)類型

》線網(wǎng)(wire)表示硬件單元之間的連接。就像在真實的電路中一樣,線網(wǎng)由其連接器件的輸出端連續(xù)驅動。線網(wǎng)不能儲存值,而且它必須受到驅動器(例如門或連續(xù)賦值語句,assign)的驅動。如果沒有驅動源,則線網(wǎng)的值為z。reg寄存器用來表示存儲元件,它保持原有的數(shù)值,通過賦值語句可以改變寄存器儲存的值,其作用與改變觸發(fā)器儲存的值相當。reg類型數(shù)據(jù)的默認初始值為不定值x。定義為Net型的變量常被綜合為硬件電路中的物理連接,其特點是輸出的值緊跟輸入值的變化而變化,因此常被用來表示以assign關鍵詞引導的組合電路描述。Register類型變量必須放在過程語句中,如initial、always引導的語句中,通過過程賦值語句(包括阻塞與非阻塞語句)完成賦值操作,換言之,在always和initial等過程結構內被賦值的變量必須定義成Variable類型。11精選可編輯ppt2-3以下的標符是否合法?XOR、or、74LS04、4Badder、\ASC、$SMD、A5加法器、BEGIN答:正確XOR、BEGIN、\ASC(還有一類標識符,即轉義標識符(EscapedIdentifiers)。轉義標識符以斜杠“\”開頭,以空白符結尾,可以包含任何字符。例如,\8031、\-@Gt。)不正確74LS04、4Badder(起始為數(shù)字),A5加法器,or(關鍵詞),$SMD(任何標識符必須以英文字母或下劃線開頭。)2-2下列數(shù)字的表述方式是否正確?4’b-1101、6’sb010_1101、5’d82、’bx01、6’b10x101、10’d7、’HzD、-3’b101答:正確’bx01、6’b10x101、10’d7、’HzD、-3’b101不正確4’b-1101、6’sb010_1101、5’d82(1010010)注意:關鍵字都是小寫的。如reg是關鍵字,但REG不屬于關鍵字,所以可用作普通標識符。12精選可編輯ppt2-4定義以下的變量和常數(shù)。(1)定義一個名字為Q1的8位reg總線。(reg[7:0]Q1;)(2)定義一個名字為asg的整數(shù)。(

integenasg;)(3)定義參數(shù)s1=3’b010,s2=3’b110,s3=3’b011。

parameters1=3’b010,s2=3’b110,s3=3’b011;(4)定義一個容量(深度)為128,字長為32位的存儲器,存儲器名是MEM32。(reg[31:0]mem[127:0]MEM32;)(5)定義一個名字為WBUS的16位wire總線。(wire[15:0]WBUS)2-5設“reg[3:0]A;reg[7:0]B;reg[15:0]C;”,(1)執(zhí)行賦值語句A<=8B’11011010后,A實際獲得賦值是多少?(1010)(2)執(zhí)行賦值語句A<=8H’3456后,A實際獲得賦值是多少?(6、0110)(3)執(zhí)行賦值語句C<=9和C<=-9,C分別獲得賦值是什么?什么類型?

C<=9(0000_0000_0000_1001)無符整數(shù)、C<=-9(1111_1111_1111_0111)有符整數(shù)(4)執(zhí)行賦值語句B<=38后,B獲得賦值是什么?(0010_0110)什么類型?無符整數(shù)13精選可編輯ppt第3章

Verilog行為語句

14精選可編輯ppt3-1討論always和initial異同點。答:Verilog支持兩種過程語句,即always和initial語句。通常情況下initial語句不可綜合,主要用于仿真程序中的初始化;always語句屬于可綜合語句,主要引導行為描述語句,使用頻度非常高。在一個Verilog程序模塊(module)中,always和initial語句被使用的次數(shù)沒有限制,即它們本身屬于并行執(zhí)行特征的語句。過程語句的基本格式如下:always@(敏感信號及敏感信號列表或表達式)包括塊語句的各類行為語句Verilog的過程語句除always外,還有initial過程語句。其基本格式如下:initialbegin語句1;語句2;...end與always結構不同,initial過程語句結構中沒有敏感信號列表,即不帶觸發(fā)條件。initial過程中的塊語句沿時間方向軸只執(zhí)行一次。(always總是可以自動執(zhí)行無限次)

initial語句通常用于仿真模塊中對激勵矢量的描述,或用于給寄存器變量賦初值,而在實際電路中,賦初值是沒有意義的。因此這是面向模擬仿真的過程語句,通常不能被綜合工具所接受,或在綜合時被忽略,但卻可以對存儲器加載初始化文件,這是可綜合行為。15精選可編輯ppt習題

3-2阻塞賦值和非阻塞賦值有何區(qū)別?在應用中應注意哪些問題?

答:Verilog中,用普通等號“=”作為阻塞式賦值語句的賦值符號,如y=b。Verilog中,用普通等號“<=”作為非阻塞式賦值語句的賦值符號,如y<=b。阻塞式賦值的特點是,一旦執(zhí)行完當前的賦值語句,賦值目標變量y即刻獲得來自等號右側表達式的計算值。如果在一個塊語句中含有多條阻塞式賦值語句,則當執(zhí)行到其中某條賦值語句時,其他語句將禁止執(zhí)行,即如同被阻塞了一樣。非阻塞式賦值的特點是必須在塊語句執(zhí)行結束時才整體完成賦值操作。非阻塞的含義可以理解為在執(zhí)行當前語句時,對于塊中的其他語句的執(zhí)行情況一律不加限制,不加阻塞。這也可以理解為,在begin_end塊中的所有賦值語句都可以并行運行。16精選可編輯ppt3-3用Verilog設計一個3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。17精選可編輯ppt

3-3用Verilog設計一個3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。moduledecoder3_8(G1,Y,G2,A,G3);inputG1,G2,G3;wireG1,G2,G3;input[2:0]A;wire[2:0]A;output[7:0]Y;reg[7:0]Y;regs;always@(A,G1,G2,G3)begins<=G2|G3;if(G1==0)Y<=8'b1111_1111;elseif(s)Y<=8'b1111_1111;elsecase(A)3'b000:Y=8'b11111110; 3'b001:Y=8'b11111101; 3'b010:Y=8'b11111011; 3'b011:Y=8'b11110111; 3'b100:Y=8'b11101111; 3'b101:Y=8'b11011111; 3'b110:Y=8'b10111111; 3'b111:Y=8'b01111111; default:Y=8'bxxxxxxxx;endcaseendendmodule18精選可編輯ppt

3-3用Verilog設計一個3-8譯碼器,要求分別用case語句和if_else語句。比較這兩種方式。moduledecoder3_8(G1,Y,G2,A,G3);inputG1,G2,G3;wireG1,G2,G3;input[2:0]A;wire[2:0]A;output[7:0]Y;reg[7:0]Y;regs;always@(A,G1,G2,G3)begins<=G2|G3;if(G1==0)Y<=8'b1111_1111;elseif(s)Y<=8'b1111_1111; elsebeginif(A==3'b000)Y=8'b11111110; elseif(A==3'b001)Y=8'b11111101; elseif(A==3'b010)Y=8'b11111011; elseif(A==3'b011)Y=8'b11110111; elseif(A==3'b100)Y=8'b11101111; elseif(A==3'b101)Y=8'b11011111; elseif(A==3'b110)Y=8'b10111111; elseif(A==3'b111)Y=8'b01111111; elseY=8'bxxxxxxxx;endendendmodule19精選可編輯ppt//測試文件,??部分請根據(jù)被測試的文件修改modulestimulus;reg[2:0]A;wire[7:0]Y;regG1,G2,G3;decoder3_8DUT(G1,Y,G2,A,G3);initialbegin$monitor($time,"A=%d,G1=%b,G2=%b,G3=%b,Y=%d\n",A,G1,G2,G3,Y);endinitialbeginG1=1;G2=1;G3=1;A=0;#10G2=0;G1=0;#10G2=0;G1=1;#10G2=1;G1=0;G3=0;#10G1=0;G1=1;G3=1;#10G1=0;G1=0;G3=0;#10G1=1;G2=0;G3=0;#50A=0;#50A=1;#50A=2;#50A=3;#50A=4;#50A=5;#50A=6;#50A=7;#50$finish;endendmodule20精選可編輯ppt習題

3-4圖3-26所示的是雙2選1多路選擇器構成的電路MUXK。對于其中MUX21A,當s=0和s=1時,分別有y=a和y=b。試在一個模塊結構中用兩個過程來表達此電路。答:參考實驗1圖3-26含2選1多路選擇器的模塊moduleMUXK(a1,a2,a3,s0,s1,outy);inputa1,a2,a3,s0,s1;outputouty;wireouty;wiretmp;mux21au1(.a(a2),.b(a3),.s(s0),.y(tmp));mux21au2(.a(a1),.b(tmp),.s(s1),.y(outy));endmodule21精選可編輯ppt習題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。moduleMUX41a(A,B,C,D,S0,S1,S2,S3,Y);outputY;//定義Y為輸出信號inputA,B,C,D;inputS0,S1,S2,S3;regY;//定義輸出端口信號Y為寄存器型變量always@(A,B,C,S0,S1,S2,S3)begin//塊語句起始if(S0==0)Y=A;//當S0==0成立,即(S0==0)=1時,Y=A;elseif(S1==0)Y=B;//當(S1==1)為真,則Y=B;elseif(S2==0)Y=C;//當(S2==2)為真,則Y=C;elseif(S3==0)Y=D;//當(S3==3)為真,即Y=D;end//塊語句結束endmodule22精選可編輯ppt3-6利用if語句設計一個全加器。sum<=0;cout<=1;endelseif(ain

==0&&bin==0&&cin

==1)beginsum<=1;cout<=0;endelseif(ain

==1&&bin==0&&cin

==1)beginsum<=0;cout<=1;endelseif(ain

==0&&bin==1&&cin

==1)beginsum<=0;cout<=1;endelsebeginsum<=1;cout<=1;endendendmodule

`timescale1ns/1psmodulef_adder(ain,bin,cin,cout,sum);inputain,bin,cin;wireain,bin,cin;outputcout,sum;regcout,sum;always@(ainorbinorcin)beginif(ain

==0&&bin==0&&cin==0)beginsum<=0;cout<=0;endelseif(ain

==1&&bin==0&&cin==0)beginsum<=1;cout<=0;endelseif(ain

==0&&bin==1&&cin

==0)beginsum<=1;cout<=0;endelseif(ain

==1&&bin==1&&cin==0)begin

23精選可編輯ppt真值表為ainbincinsumcout00000001100101001101100101010111001111113-6利用if語句設計一個全加器。`timescale1ns/1psmodulef_adder(ain,bin,cin,cout,sum);inputain,bin,cin;wireain,bin,cin;outputcout,sum;regcout,sum;always@(ainorbinorcin)beginif(ain==0&&bin==0&&cin==0)beginsum<=0;cout<=0;endelseif((~ain&(bin^cin))|(ain&~bin&~cin))beginsum<=1;cout<=0;endelseif((ain&(bin^cin))|(~ain&bin&cin))beginsum<=0;cout<=1;endelsebeginsum<=1;cout<=1;endendendmodule

24精選可編輯ppt習題3-7設計一個求補碼的程序,輸入數(shù)據(jù)是一個有符號的8位二進制數(shù)。//設計一個求補碼的程序,輸入數(shù)據(jù)是一個有符號的8位二進制數(shù)moduleBinary_complement(a,b);//二進制數(shù)補碼input[7:0]a;output[7:0]b;integeri;reg[7:0]d;reg[6:0]c;always@(a)beginif(a[7]==1)beginfor(i=0;i<7;i=i+1)c[i]=!a[i];d[7:0]={a[7],(c[6:0]+7'd1)};endelsed[7:0]=a[7:0];endassignb[7:0]=d[7:0];endmodule25精選可編輯ppt`timescale1ns/1ns`include"Binary_complement.v"modulestimulus;//測試模塊的名字reg[7:0]a;wire[7:0]b;Binary_complementmycount(a,b);//調用測試對象initialbegin//激勵信號定義a=1;#10a=2;#10a=-8'd8;#10a=127;#10a=255;#10$finish;end//定義結果顯示格式initial$monitor($time,"a=%b,b=%b\n",a,b);endmodule

3-7設計一個求補碼的程序,輸入數(shù)據(jù)是一個有符號的8位二進制數(shù)。26精選可編輯ppt3-8設計一個格雷碼至二進制數(shù)的轉換器。

格雷碼二進制000000001001011010010011110100111101101110100111在一組數(shù)的編碼中,若任意兩個相鄰的代碼只有一位二進制數(shù)不同,則稱這種編碼為格雷碼(GrayCode),另外由于最大數(shù)與最小數(shù)之間也僅一位數(shù)不同,即“首尾相連”,因此又稱循環(huán)碼或反射碼。格雷碼轉二進制碼格雷碼轉換為二進制碼:從左邊第二位起,將每一位與左邊一位解碼后的值“異或”,作為該解碼后的值(最左邊的一位依然不變)。27精選可編輯ppt3-8設計一個格雷碼至二進制數(shù)的轉換器。

modulegry2bin(Gry,Bin);parameterlength=3;output[length-1:0]Bin;input[length-1:0]Gry;reg[length-1:0]Bin;integeri;always@(Gry)beginBin[length-1]=Gry[length-1];for(i=length-2;i>=0;i=i-1)Bin[i]=Bin[i+1]^Gry[i];endendmodule`timescale1ns/1ns`include"gry2bin.v"modulestimulus;reg[2:0]Gry;wire[2:0]Bin;gry2binmycount(Gry,Bin);initialbeginGry=3'b000;#10Gry=3'b001;#10Gry=3'b011;#10Gry=3'b010;#10Gry=3'b110;#10Gry=3'b111;#10Gry=3'b101;#10Gry=3'b100;#10$finish;endinitial$monitor($time,"Gry=%b,Bin=%b\n",Gry,Bin);endmodule28精選可編輯ppt習題

3-9用不同循環(huán)語句分別設計一個邏輯電路模塊,用以統(tǒng)計一8位二進制數(shù)中含1的數(shù)量。

moduleStatistics8(sum,A);output[3:0]sum;input[7:0]A;reg[3:0]sum;integeri;always@(A)beginsum=0;for(i=0;i<=8;i=i+1)//for語句if(A[i])sum=sum+1;elsesum=sum;endendmodulemoduleStatistics8(sum,A);parameterS=4;output[3:0]sum;input[7:0]A;reg[3:0]sum;reg[2*S:1]TA;integeri;always@(A)beginTA=A;sum=0;repeat(2*S)beginif(TA[1])sum=sum+1;TA=TA>>1;endendendmodulerepeat循環(huán)語句for循環(huán)語句29精選可編輯pptmoduleStatistics8(sum,A);parameterS=8;output[3:0]sum;input[7:0]A;reg[S:1]AT;reg[3:0]sum;reg[S:0]CT;always@(A)beginAT={{S{1'b0}},A};sum=0;CT=S;while(CT>0)beginif(AT[1])sum=sum+1;elsesum=sum;beginCT=CT-1;AT=AT>>1;endendendendmodule

3-9用不同循環(huán)語句分別設計一個邏輯電路模塊,用以統(tǒng)計一8位二進制數(shù)中含1的數(shù)量。

while循環(huán)語句30精選可編輯pptmodulevoter7(pass,vote);outputpass;input[6:0]vote;reg[2:0]sum;integeri;regpass;always@(vote)beginsum=0;for(i=0;i<=6;i=i+1)//for語句if(vote[i])sum=sum+1;if(sum[2])pass=1;//若超過4人贊成,則pass=1elsepass=0;endendmodule習題3-10用循環(huán)語句設計一個7人投票表決器。31精選可編輯ppt習題3-11Verilog設計一個4位4輸入最大數(shù)值檢測電路。//Verilog設計一個4位4輸入最大數(shù)值檢測電路moduleMaximum_value_detection(Mostlarge,a,b,c,d);//4位4輸入最大數(shù)值檢測電路output[3:0]Mostlarge;input[3:0]a,b,c,d;wire[3:0]sum1,sum2,sum3;assignsum1=(a>b)?a:b;assignsum2=(c>d)?c:d;assignMostlarge=(sum1>sum2)?sum1:sum2;endmodule32精選可編輯ppt3-12利用case語句設計一個加、減、乘、除4功能算術邏輯單元ALU,輸入的兩個操用數(shù)都是4位進制數(shù);輸入的操作碼是兩位二進制數(shù);輸出結果是8位二進制數(shù)。為了便于記憶和調試,建議把操作碼用parameter定義為參數(shù)。moduleMUX_ALU(A,B,S,Y);output[7:0]Y;//定義Y為輸出信號input[3:0]A,B;input[1:0]S;

parameteradd=2'b00,reduce=2'b01,multiply=2'b10,Trad=2'b11;reg[7:0]Y;//定義輸出端口信號Y為寄存器型變量always@(A,B,S)begincase(S)2'b00:Y=A+B;2'b01:Y=A-B;2'b10:Y=A*B;2'b11:Y=A/B;default:Y=8'bxxxxxxxx;endcaseendendmodule33精選可編輯pptmodulestimulus;reg[3:0]A,B;reg[1:0]S;wire[7:0]Y;MUX_ALUr1(A,B,S,Y);initialbeginA=4'b0100;B=4'b0010;S=2'b00;#10S=2'b01;#10S=2'b10;#10S=2'b11;#10$finish; //????end//????initial$monitor($time,"S=%b,A=%b,B=%b,Y=%d,",S,A,B,Y);endmodule3-12利用case語句設計一個加、減、乘、除4功能算術邏輯單元ALU,輸入的兩個操用數(shù)都是4位進制數(shù);輸入的操作碼是兩位二進制數(shù);輸出結果是8位二進制數(shù)。為了便于記憶和調試,建議把操作碼用parameter定義為參數(shù)。34精選可編輯ppt習題

3-13在Verilog設計中,給時序電路清零(復位)有兩種不同方法,它們是什么,如何實現(xiàn)?答:同步清零、異步清零,在過程語句敏感信號表中的邏輯表述posedgeCLK用于指明正向跳變,或negedge用于指明負向跳變實現(xiàn)

3-14哪一種復位方法必須將復位信號放在敏感信號表中?給出這兩種電路的Verilog描述。答:異步復位必須將復位信號放在敏感信號表中。同步清零:always@(posedgeCLK) //CLK上升沿啟動Q<=D; //當CLK有升沿時D被鎖入Q異步清零:always@(posedgeCLKornegedgeRST)begin//塊開始if(!RST)Q<=0; //如果RST=0條件成立,Q被清0 elseif(EN)Q<=D; //在CLK上升沿處,EN=1,則執(zhí)行賦值語句 end //塊結束35精選可編輯ppt3-15舉例說明,為什么使用條件敘述不完整的條件句能導致產生時序模塊的綜合結果?答:●當CLK發(fā)生了電平變化,但是從1變到0。這時無論D是否變化,都將啟動過程去執(zhí)行if語句;但此時CLK=0,無法執(zhí)行if語句,從而無法執(zhí)行賦值語句Q<=D,于是Q只能保持原值不變(這就意味著需要在設計模塊中引入存儲元件)。●當CLK沒有發(fā)生任何變化,且CLK一直為0,而敏感信號D發(fā)生了變化。這時也能啟動過程,但由于CLK=0,無法執(zhí)行if語句,從而也就無法執(zhí)行賦值語句Q<=D,導致Q只能保持原值(這也意味著需要在設計模塊中引入存儲元件)。在以上兩種情況中,由于if語句不滿足條件,于是將跳過賦值表達式Q<=D,不執(zhí)行此賦值表達式而結束if語句和過程.對于這種語言現(xiàn)象,Velilog綜合器解釋為,對于不滿足條件,跳過賦值語句Q<=D不予執(zhí)行,即意味著保持Q的原值不變(保持前一次滿足if條件時Q被更新的值)。對于數(shù)字電路來說,當輸入改變后試圖保持一個值不變,就意味著使用具有存儲功能的元件,就是必須引進時序元件來保存Q中的原值,直到滿足if語句的判斷條件后才能更新Q中的值,于是便產生了時序元件。

moduleLATCH1(CLK,D,Q);outputQ;inputCLK,D;regQ;always@(DorCLK)if(CLK)Q<=D; //當CLK=1時D被鎖入Qendmodule

36精選可編輯ppt3-16把例3-11中的RST和CLK在敏感信號中具有同樣的地位,從語句上解答,為什么綜合的結果是CLK成為邊沿觸發(fā)時鐘信號,而RST成為電平控制信號?moduleDFF2(CLK,D,Q,RST,EN);//含異步清0和時鐘同步使能的D觸發(fā)器outputQ;inputCLK,D,RST,EN;regQ;always@(posedgeCLKornegedgeRST)begin//塊開始if(!RST)Q<=0; //如果RST=0條件成立,Q被清0elseif(EN)Q<=D; //在CLK上升沿處,EN=1,則執(zhí)行賦值語句end //塊結束endmodule【例3-11】37精選可編輯ppt這里所謂的“異步”并非時序的異步,而是指獨立于時鐘控制的復位控制端,即在任何時刻,只要RST=0或1(“時鐘異步”)

,此D觸發(fā)器的輸出端即刻被清0,與時鐘的狀態(tài)無關。而時鐘使能EN的功能是,只有當ED=1時,時鐘上升沿才有效。(“時鐘同步”)

例3-11程序執(zhí)行過程是這樣的,無論CLK是否有跳變,只要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@(posedgeCLKornegedgeRST)begin//塊開始if(!RST)Q<=0; //如果RST=0條件成立,Q被清0 elseif(EN)Q<=D;38精選可編輯ppt3-17把例3-17改成一異步清0,同步時鐘使能和異步數(shù)據(jù)加載型8位二進制加法計數(shù)器?!纠?-17】含有異步清0同步時鐘使能和同步數(shù)據(jù)加載功能的十進制計數(shù)器moduleCNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);inputCLK,RST,EN,LOAD;//時鐘,時鐘使能,復位,數(shù)據(jù)加載控制信號輸入口input[3:0]DATA;//4位并行加載數(shù)據(jù)輸入口output[3:0]DOUT;//計數(shù)數(shù)據(jù)輸出信號口outputCOUT;//計數(shù)進位輸出regCOUT;

reg[3:0]Q1;assignDOUT=Q1;//將內部寄存器的計數(shù)結果輸出至DOUTalways@(posedgeCLKornegedgeRSTornegedgeLOAD)//時序過程begin if(!RST)Q1<=0;//RST=0時,對內部寄存器單元異步清0

elseif(!LOAD)Q1<=DATA;//當LOAD=0,異步向內部寄存器加載數(shù)據(jù)

elseif(EN)begin//同步使能EN=1,則允許加載或計數(shù)

if(Q1<9)Q1<=Q1+1;//當Q1小于9時,允許累加

elseQ1<=4'b0000;//否則一個時鐘后清0返回初值 endendalways@(Q1)//組合電路之過程 if(Q1==4'h9)COUT=1'b1;//當Q1=1001時,COUT輸出進位標志1 elseCOUT=1'b0;

//否則,輸出進位標志0endmodule

39精選可編輯ppt3-18把例3-17改成一個16位二進制加法計數(shù)器,將其進位輸出COUT與異步數(shù)據(jù)加載控制LOAD連在一起,構成一個自動加載型16位二進制加法計數(shù)器,也即一個16位可控的分頻器,給出其Verilog表述,并說明工作原理。設輸入頻率fi=4MHz,輸出頻率fo=516.5±Hz(允許誤差±0.1Hz),16位加載數(shù)值=?moduleCNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);inputCLK,RST,EN,LOAD;//時鐘,時鐘使能,復位,數(shù)據(jù)加載控制信號輸入口input[15:0]DATA;//4位并行加載數(shù)據(jù)輸入口output[15:0]DOUT;//計數(shù)數(shù)據(jù)輸出信號口outputCOUT;//計數(shù)進位輸出reg[15:0]Q1;regCOUT;assignDOUT=Q1;//將內部寄存器的計數(shù)結果輸出至DOUTalways@(posedgeCLKornegedgeRST)begin//時序過程 if(!RST)Q1<=0;//RST=0時,對內部寄存器單元異步清0 elseif(EN)begin//同步使能EN=1,則允許加載或計數(shù) if(!LOAD)Q1<=DATA;//當LOAD=1,向內部寄存器加載數(shù)據(jù) elseif(Q1<16'hFFFF)Q1<=Q1+1;//當Q1小于9時,允許累加 elseQ1<=16'h0000;//否則一個時鐘后清0返回初值 endendalways@(Q1)//組合電路之過程 if(Q1==16'hFFFF)COUT=1'b1;//當Q1=1001時,COUT輸出進位標志1 elseCOUT=1'b0;//否則,輸出進位標志0endmodule【例3-17】//含有異步清0同步時鐘使能和同步數(shù)據(jù)加載功能的十進制計數(shù)(FFFF-7744=E1BF)40精選可編輯pptmoduleCNT10(CLK,RST,EN,COUT,DOUT);//LOAD,,LOAD,DATAinputCLK,RST,EN;//時鐘,時鐘使能,復位,數(shù)據(jù)加載控制信號輸入口//input[3:0]DATA;//4位并行加載數(shù)據(jù)輸入口output[3:0]DOUT;//計數(shù)數(shù)據(jù)輸出信號口outputCOUT;//計數(shù)進位輸出regCOUT;reg[3:0]Q1;parameterDATA=5;assignDOUT=Q1;//將內部寄存器的計數(shù)結果輸出至DOUTassignLOAD=~CO

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論