數字邏輯與EDA設計丁磊課后參考答案_第1頁
數字邏輯與EDA設計丁磊課后參考答案_第2頁
數字邏輯與EDA設計丁磊課后參考答案_第3頁
數字邏輯與EDA設計丁磊課后參考答案_第4頁
數字邏輯與EDA設計丁磊課后參考答案_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

習題答案第1章一、單選題(1)B (2)C (3)B (4)C(5)D (6)D (7)B (8)C(9)D (10)C (11)C (12)D(13)D (14)A (15)D二、判斷題(1)√ (2)√ (3)× (4)√(5)× (6)× (7)× (8)×(9)√ (10)×三、填空題(1)10000111.101、207.5、87.A(2)185.75(3)10010100(4)、、、(5)(6)(7)(8)2n(9)1(10)1四、綜合題(1)①00110001(49)+00100101(37)=01010110(86)②00111000(56)+10011001(-103)=11010001(-47)(2)①②③(2)①②③(3)邏輯表達式如下真值表如下ABCY00010011010101101000101111011111標準與或式如下(4)根據表達式畫出邏輯圖如下

第2章一、單選題(1)B (2)CDA (3)D (4)C(5)C (6)B (7)C (8)B(9)A (10)D二、判斷題(1)√ (2)√ (3)× (4)√(5)× (6)√ (7)× (8)×(9)√ (10)√ 三、綜合題(1)圖2-34CoutS3~S0圖2-36S4~S0圖2-37S3~S0圖2-38S3~S0①0110+1011+0100010000100010001②0110+0011+1010100101001110101③1001+1011+0101001010010001010(2)(3)(4)(5)真值表ABY000011100110表達式:Y=A?B邏輯圖略(6)解:真值表輸入輸入輸出A3B3A2B2A1B1A0B0GESA3<B3××××××100A3=B3A2>B2××××100A3=B3A2=B2A1>B1××100A3=B3A2=B2A1=B1A0>B0100A3=B3A2=B2A1=B1A0=B0010A3>B3××××××001A3=B3A2<B2××××001A3=B3A2=B2A1<B1××001A3=B3A2=B2A1=B1A0<B0001邏輯表達式邏輯圖(7)(8)

第3章一、單選題(1)C (2)C (3)A (4)A(5)A (6)D (7)C (8)A(9)C (10)D (11)C (12)C(13)C (14)D (15)B二、判斷題(1)× (2)× (3)× (4)√(5)√ (6)× (7)√ (8)×(9)√ (10)×三、填空題(1)保持、置0、置1,

Clk有效邊沿(2)保持、置0、置1、翻轉,

Clk有效邊沿(3)置0、置1,

Clk↑有效(4)保持、翻轉,

Clk有效邊沿(5)翻轉(6)有效狀態(tài)(7)能自啟動(8)時序電路(9)4(10)6四、綜合題(1)解:(2)解:(3)解:(4)邏輯圖時序圖(5)邏輯圖時序圖(6)狀態(tài)圖:時序圖:(7)(8)(9)略答案第4章選擇題12345678910ADCACACADA11121314151617AAAAABD判斷題12345678910××××√×√×√×填空題1234567a&b;a^b;monitor%t$time64第5章12345678910ADCCBCDDCB111215141516CBBBAB第6章一、答案(簡短)(1)改為:更具體見“詳細分析”內容(2)頂層實例名與測試平臺的名稱一樣(testbench_8_3encoder),會導致仿真出錯移位運算符為<<,不是<(3)見“詳細分析”(4)4位串行進位加法器更具體見“詳細分析”(5)不能處理有符號乘法測試平臺同6.7(二維碼):`timescale1ns/10psmoduletestbench;reg[3:0]ina,inb;wire[7:0]mult;initialbeginina=0;repeat(20)#20ina=$random;endinitialbegininb=0;repeat(10)#40inb=$random;endsign_mult_4sign_mult_tb(ina,inb,mult);endmodule設置為有符號數顯示結果:設置為無符號數顯示結果:該代碼實現(xiàn)的是無符號數乘法。(6)4選1數據選擇器modulemux4_1_c(D0,D1,D2,D3,Sel0,Sel1,Result);inputD0,D1,D2,D3;inputSel0,Sel1;outputResult;wireAT,BT;assignAT=Sel0?D3:D2; assignBT=Sel0?D1:D0; assignResult=(Sel1?AT:BT); endmodule程序說明:(1)程序采用數據流方式描述,與4.5.1中例子所用方法相同。(2)當Sel0為1時,{Sel1,Sel0}選擇的是D1或D3,當Sel0為0時,{Sel1,Sel0}選擇的是D0或D2;然后根據Sel1為0或1,選擇到底輸出的是哪個。(7)代碼邏輯分析見課本二維碼鏈接(6.9.1)測試平臺設計同課本內容(6.9.1)(8)4.7.3的代碼:modulehalf_adder(A,B,S,C);inputA,B;outputS,C;xorgate1(S,A,B);andgate2(C,A,B);endmodulemodulefulladder(DataA,DataB,Cin,Sum,Cout);inputDataA,DataB,Cin;outputSum;outputCout;wires1,c1,c2;half_adderu1(DataA,DataB,s1,c1);half_adderu2(.A(s1),.B(Cin),.S(Sum),.C(c2));oru3(Cout,c1,c2); endmodule測試平臺`timescale1ns/1nsmoduletestbench;regpa,pb,pCin;wireSum,Cout;fulladder_1testadder(pa,pb,pCin,Sum,Cout);initialbeginpa=0; pb=0;pCin=0;#5pCin=1;#5pb=1;#5pCin=0;#5pa=1;#5pCin=1;#5pb=0;#5pCin=0;#5;$finish;endendmodule仿真結果(9)-(11)見“詳細分析”(12)在第2章中,全加器的邏輯表達式為:S的表達式可變?yōu)椋焊鶕摫磉_式可寫出如下設計:modulefulladder_3(DataA,DataB,Cin,Sum,Cout);inputDataA,DataB,Cin;outputSum,Cout;assignSum=DataA^DataB^Cin;assignCout=(DataA&DataB)|(DataA&Cin)|(DataB&Cin);endmodule(13)modulemux4_1_b(D0,D1,D2,D3,Sel0,Sel1,Result);inputD0,D1,D2,D3;inputSel0,Sel1;outputResult;regResult;reg[1:0]SEL;always@(D0,D1,D2,D3,Sel1,Sel0)beginSEL={Sel1,Sel0}; //將2個選擇輸入連接為SELif(SEL==0)Result=D0;elseif(SEL==1)Result=D1;elseif(SEL==2)Result=D2;elseif(SEL==3)Result=D3;elseResult=1'bx;endendmodule二、答案(詳細分析)(1)紅色藍色部分,被當成兩個獨立的if語句。紅色部分的代碼執(zhí)行后,結果會被藍色部分代碼的執(zhí)行效果覆蓋。如編寫測試平臺如下:`timescale1ns/1nsmoduletestbench;regIn0,In1,In2,In3,In4,In5,In6,In7;regEI;reg[7:0]in;wireA0,A1,A2;wireEO,GS;initialbegin{In7,In6,In5,In4,In3,In2,In1,In0}='b11111111;#10;EI=1;#20;EI=0;#20;in='b00000001;repeat(9)begin{In7,In6,In5,In4,In3,In2,In1,In0}=~in;#20in=in<<1; endendHC_148test_74HC148(In0,In1,In2,In3,In4,In5,In6,In7,EI,GS,A0,A1,A2,EO);endmodule仿真結果(EI=1,{In7,In6,In5,In4,In3,In2,In1,In0}='b11111111時結果都不正確,其它編碼正常):代碼修正為(藍色部分為修改過的):moduleHC_148(In0,In1,In2,In3,In4,In5,In6,In7,EI,EO,A0,A1,A2,GS);inputIn0,In1,In2,In3,In4,In5,In6,In7;inputEI;outputEO,GS;outputA0,A1,A2;reg[4:0]Outvec;wireA0,A1,A2,GS,EO;always@(In0orIn1orIn2orIn3orIn4orIn5orIn6orIn7orEI)beginif(EI)Outvec=5'b11111;elseif(In0&In1&In2&In3&In4&In5&In6&In7)Outvec=5'b01111;elseif(!In7)Outvec=5'b10000;elseif(!In6)Outvec=5'b10001;elseif(!In5)Outvec=5'b10010;elseif(!In4)Outvec=5'b10011;elseif(!In3)Outvec=5'b10100;elseif(!In2)Outvec=5'b10101;elseif(!In1)Outvec=5'b10110;elseif(!In0)Outvec=5'b10111;elseOutvec=5'b00000;endassign{EO,GS,A2,A1,A0}=Outvec;//原來的代碼沒錯,只是不夠精簡endmodule仿真結果:(3)代碼用不同方法設計,在RTL視圖中也會體現(xiàn)出來,但工藝視圖有可能是一樣的。課本代碼(6.4,p203)綜合結果:二維碼鏈接代碼(6.4,p204)綜合結果:本題代碼綜合結果:代碼中有中間量AT……,故圖左邊為選擇結構,右邊是result表達式的結果。三種方法的RTL視圖不一樣,但工藝視圖結果都一樣:(4)題目代碼:modulefulladder_4_c(DataA,DataB,Cin,Sum,Cout);parameterN=4;input[N-1:0]DataA,DataB;inputCin;output[N-1:0]Sum;reg[N-1:0]Sum,p,g;outputCout;regCout;reg[N:0]q;always@(DataAorDataBorCin)begin:adderintegeri;q[0]=Cin;for(i=0;i<N;i=i+1)beginp[i]=DataA[i]^DataB[i]; //語句1g[i]=DataB[i]; //語句2q[i+1]=(p[i])?q[i]:g[i]; //語句3Sum[i]=p[i]^q[i]; //語句4endCout=q[N];endendmodule程序說明:采用和方法6.6.1方法2相同的程序結構,只是計算Sum和Cout的方法不同;根據語句1和語句4,其實相當于:Sum[i]=DataA[i]^DataB[i]^q[i];語句3中,根據p[i]即DataA[i]^DataB[i]進行選擇。當DataA[i]和DataB[i]均為0或均為1時,p[i]為0,g[i]即DataB[i]的值作為進位(因為為0時無進位,為1時進位為1);當DataA[i]和DataB[i]有一個為1時,p[i]為1,q[i]的值就作為進位(因為為0時無進位,為1時產生進位1)。綜合結果:測試平臺和驗證結果與6.6的一致(課本沒有列出)。`timescale1ns/10psmoduleadder4_testbench;reg[3:0]ina,inb;regcin;wire[3:0]sum;wirecout;fulladder_4_cadder4_tb(ina,inb,cin,sum,cout);initialbeginina=0;repeat(20)#20ina=$random;endinitialbegininb=0;repeat(10)#40inb=$random;endinitialbegincin=0;#200cin=1;endendmodule(9)符合電路方法一:modulefit2_2(a,b,c,y);inputa,b,c;outputy;regy;always@(a,b,c)y=(~a&&~b&&~c)||(a&&b&&c);//按照邏輯表達式寫出endmodule測試平臺設計moduletestbench;regpa,pb,pc;integerI;wirepy;fit2_2test_fit2_2(pa,pb,pc,py);initialbeginfor(I=0;I<=7;I=I+1)begin{pa,pb,pc}=I;#10;endendendmodule綜合結果:功能驗證:方法二:modulefit2_2_2(a,b,c,y);inputa,b,c;outputy;regy;always@(a,b,c)beginif((a==b)&&(b==c))y=1;elsey=0;endendmodule綜合結果Technology(工藝)視圖、測試平臺設計、仿真結果與方法1相同。(10)裁判電路方法一:modulejudgement_2_3(a,b,c,y);inputa,b,c;outputy;regy;always@(a,b,c)y=(a&&b)||(b&&c)||(a&&c);//按照邏輯表達式寫出endmodule測試平臺設計moduletestbench;regpa,pb,pc;integerI;wirepy;judgement_2_3test_judgement_2_3(pa,pb,pc,py);initialbeginfor(I=0;I<=7;I=I+1)begin{pa,pb,pc}=I;#10;endendendmodule綜合結果功能驗證方法二:modulejudgement_2_3_2(a,b,c,y);inputa,b,c;outputy;regy;always@(a,b,c)beginif((a+b+c)>1)y=1;elsey=0;endendmodule綜合結果Technology(工藝)視圖、測試平臺設計、仿真結果與方法一同。方法三:modulejudgement_2_3_3(a,b,c,y);inputa,b,c;outputy;regy;always@(a,b,c)//y=(a+b+c);//錯誤,獲得了低位//y=(a+b+c)>>1;//錯誤,結果全部為0y=(a+b+c+0)>>1;endmoduleRTL視圖與方法二相同。Technology(工藝)視圖、測試平臺設計、仿真結果與方法一相同。(11)交通燈錯誤檢測電路方法一:modulerag_detect(r,a,g,w);inputr,a,g;outputw;regw;always@(r,a,g)w=(~r&&~a&&~g)||(r&&~a&&g)||(r&&a&&~g)||(a&&g);//按照邏輯表達式寫出endmodule測試平臺設計moduletestbench;regpr,pa,pg;integerI;wirepw;rag_detecttest_rag_detect(pr,pa,pg,pw);initialbeginfor(I=0;I<=7;I=I+1)begin{pr,pa,pg}=I;#10;endendendmodule綜合結果功能驗證方法二:modulerag_detect(r,a,g,w);inputr,a,g;outputw;regw;always@(r,a,g)beginif((r+a+g)==1)w=0;elsew=1;endendmodule綜合結果Technology(工藝)視圖、測試平臺設計、仿真結果與方法一相同。(14)按照2.3.2的描述設計數碼顯示譯碼器,根據表2-8寫出代碼:moduledecoder(I,Y);inputI;outputY;wire[3:0]I;reg[6:0]Y;always@(I)beginif(I==0)Y=126;//1111110,按a~g順序elseif(I==1)Y=48;elseif(I==2)Y=109;elseif(I==3)Y=121;elseif(I==4)Y=51;elseif(I==5)Y=91;elseif(I==6)Y=95;elseif(I==7)Y=112;elseif(I==8)Y=127;elseif(I==9)Y=123;endendmodule測試平臺:`timescale1ns/1nsmoduletestbench;reg[3:0]I;wire[6:0]Y;decodertest(I,Y);initialbeginI=3;#5I=1;#5I=1;#5I=0;#5I=0;#5I=5;#5I=6;#5I=7;#5I=8;#5I=9;endendmodule(15)modulesoet4(ra,rb,rc,rd,a,b,c,d);output[3:0]ra,rb,rc,rd;input[3:0]a,b,c,d;reg[3:0]ra,rb,rc,rd;reg[3:0]va,vb,vc,vd;always@(aorborcord)begin{va,vb,vc,vd}={a,b,c,d};sort2(va,vc); //Va與Vc互換sort2(vb,vd); //Vb與Vd互換sort2(va,vb); //Va與Vb互換sort2(vc,vd); //Vc與Vd互換sort2(vb,vc); //Vb與Vc互換{ra,rb,rc,rd}={va,vb,vc,vd};endtasksort2;inout[3:0]x,y;/* 任務中的變量定義與模塊中的變量定義不盡相同,它們不受輸入輸出類型的限制,雖然x,y對tasksort2來說是inout型,但實際上它們對應的是always塊中的變量,屬于reg型變量 */reg[3:0]tmp;if(x>y)begintmp=x; //阻塞賦值,順序執(zhí)行,x與y變量的內容互換x=y;y=tmp;endendtaskendmodule綜合結果測試平臺設計`timescale1ns/1nsmoduletestbench;reg[3:0]a,b,c,d;wire[3:0]ra,rb,rc,rd;initialbegina=0;b=0;c=0;d=0;repeat(20)begin#20;a={$random}%15;b={$random}%15;c={$random}%15;d={$random}%15;end#10$stop;endsoet4test_st4(.a(a),.b(b),.c(c),.d(d),.ra(ra),.rb(rb),.rc(rc),.rd(rd));endmodule功能驗證第7章(1)modulefunction_ex(clk,D,Q);parameterMAX_BITS=8;inputclk;input[MAX_BITS:1]D;outputreg[MAX_BITS:1]Q;function[MAX_BITS:1]reverse_bits;//函數的定義input[MAX_BITS:1]data;integerK;for(K=0;K<MAX_BITS;K=K+1)reverse_bits[MAX_BITS-K]=data[K+1];//調用函數并傳遞輸入變量給函數,其調用通過將函數作為表達式中的操作數來實現(xiàn)endfunctionalways@(posedgeclk)Q<=reverse_bits(D);endmodule測試平臺設計`timescale1ns/100ps`defineclk_cycle50moduletestbench;reg[7:0]D;wire[7:0]Q;regclk;integerI;initialbeginclk=0;D=0;for(I=0;I<=15;I=I+1)#200D=I;#100$stop;endalways#`clk_cycleclk=~clk; //注意書寫方式function_extest_fun(.clk(clk),.D(D),.Q(Q));endmodule(2)moduletask_ex(clk,D,Q);parameterMAX_BITS=8;inputclk;input[MAX_BITS:1]D;outputreg[MAX_BITS:1]Q;taskreverse_bits; //任務的定義input[MAX_BITS:1]data;output[MAX_BITS:1]result;integerK;for(K=0;K<MAX_BITS;K=K+1)result[MAX_BITS-K]=data[K+1];endtaskalways@(posedgeclk)reverse_bits(D,Q); //調用任務并傳遞輸入、輸出變量給任務。endmodule(3)moduleHC74(SD1N,RD1N,CP1,D1,Q1,Q1N,SD2N,RD2N,CP2,D2,Q2,Q2N);inputD1,D2;inputRD1N,SD1N,CP1;inputRD2N,SD2N,CP2;outputQ1,Q1N,Q2,Q2N;regQ1,Q2;assignQ1N=~Q1;assignQ2N=~Q2;always@(posedgeCP1,negedgeRD1N,negedgeSD1N)beginif(!RD1N)Q1<=0;elseif(!SD1N)Q1<=1;elseQ1<=D1;endalways@(posedgeCP2,negedgeRD2N,negedgeSD2N)beginif(!RD2N)Q2<=0;elseif(!SD2N)Q2<=1;elseQ2<=D2;endendmodule測試平臺:`timescale1ns/1nsmoduletestbench;regD1,D2,RD1N,RD2N,CP1,CP2,SD1N,SD2N;wireQ1,Q2,Q1N,Q2N;initialbeginCP1=0;CP2=0;endparameterclock_period=20;always#(clock_period/2)CP1=~CP1;always#(clock_period/2)CP2=~CP2;initialbeginD1=0;repeat(20)#15D1=$random;endinitialbeginSD1N=0;RD1N=0;#70RD1N=1;#70SD1N=1;#70RD1N=0;endinitialbeginD2=0;repeat(20)#15D2=$random;endinitialbeginRD2N=0;SD2N=0;#70SD2N=1;#70RD2N=1;#70SD2N=0;endHC74test_74(SD1N,RD1N,CP1,D1,Q1,Q1N,SD2N,RD2N,CP2,D2,Q2,Q2N);initialbegin#300$finish;endendmodule(4)moduleseqdet(x,z,clk,rst,state);inputx,clk,rst;outputz;output[2:0]state;wirez;reg[2:0]state;parameterIDLE=’d0,A=’d1,B=’d2,C=’d3,D=’d4,E=‘d5;assignz=(state==E);//當狀態(tài)state變?yōu)镋時,z同時變?yōu)?,表示檢測到序列,否則z為0

溫馨提示

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

評論

0/150

提交評論