夏宇聞-第三章-verilogHDL基本語法習題


難理解的習題:

7)請根據以下兩條語句,從選項中找出正確答案。

7.1) reg [7:0] A;

A=2'hFF;

1) 8'b0000_0011  2) 8'h03  3) 8'b1111_1111  4) 8'b11111111

標准答案:1)

7.2) reg [7:0] B;

B=8'bZ0;

1)  8'0000_00Z0    2) 8'bZZZZ_0000 

3) 8'b0000_ZZZ0   4) 8'bZZZZ_ZZZ0

標准答案:4)

8)請指出下面幾條語句中變量的類型。

8.1) assign A=B;

8.2) always #1

 Count=C+1;

標准答案:

A(wire) B(wire/reg) Count(reg) C(wire/reg)

 

9)指出下面模塊中Cin,Cout,C3,C5,的類型。

module  FADD(A,B,Cin,Sum,Cout);

input  A, B, Cin;

output Sum, Cout;

....

endmodule

module Test;

...

FADDM(C1,C2,C3,C4,C5);

...

endmodule

標准答案:

Cin(wire)  Cout(wire/reg)  C3(wire/reg)  C5(wire)

10〕在下一個程序段中,當ADDRESS的值等於5'b0X000時,問casex執行完后A和B的值是多少。

A=0;

B=0;

casex(ADDRESS)

5'b00???:  A=1;

5'b01???:  B=1;

5'b10?00,5'b11?00:

begin

A=1;

B=1;

end

endcase

標准答案:  A=1 and B=0;     casex的用法

9)指出下面模塊中Cin,Cout,C3,C5,的類型。

module  FADD(A,B,Cin,Sum,Cout);

input  A, B, Cin;

output Sum, Cout;

....

endmodule

module Test;

...

FADDM(C1,C2,C3,C4,C5);

...

endmodule

標准答案:

Cin(wire)  Cout(wire/reg)  C3(wire/reg)  C5(wire)

 

10〕在下一個程序段中,當ADDRESS的值等於5'b0X000時,問casex執行完后A和B的值是多少。

A=0;

B=0;

casex(ADDRESS)

5'b00???:  A=1;

5'b01???:  B=1;

5'b10?00,5'b11?00:

begin

A=1;

B=1;

end

endcase

標准答案:  A=1 and B=0;

 

11)在下題中,事件A分別在10,20,30發生,而B一直保持X狀態,問在50時Count的值是多少。

reg [7:0] Count;

initial

Count=0;

always

begin

@(A)  Count=Count+1;

@(B)  Count=Count+1;

end

標准答案:Count=1;

(這是因為當A第一次發生時,Count的值由0變為1,然后事件控制 @(B) 阻擋了進程。)

 

12)在下題中initial塊執行完后I,J,A,B的值會是多少。

reg [2:0] A;

reg [3:0] B;

integer I, J;

initial

begin

I=0;

A=0;

I=I-1;

J=I;

A=A-1;

B=A;

J=J+1;

B=B+1;

end

標准答案:

I=-1        (整數可為負數)

J=0

A=7     (A為reg型為非負數,又因為A為3位即為111)

B=8     (在B=A時,B=0111,然后B=B+1,所以B=4’b1000)

 

13)在下題中,當V的值發生變化且為-1時,執行完always塊后

Count的值應是多少?

reg[7:0]V;

reg[2:0]Count;

 

always @(V)

begin

Count=0;

while(~V[Count])

Count=Count+1;

end

標准答案:Count=0;

 

14)在下題中循環執行完后,V的值是多少?

reg [3:0] A;

reg V ,W;

integer K;

....

A=4'b1010;

for(K=2;K>=0;K=K-1)

begin

V=V^A[k];

W=A[K]^A[K+1];

end

標准答案:V的值是它進人循環體前值的取反。

(因為V的值與0,1,0 進行了異或,與1的異或改變了V的值。)

 

15)在下題中,給出了幾種硬件實現,問以下的模塊被綜合后可能是哪一種?

always @(posedge Clock)

if(A)

C=B;

1.不能綜合。

2.一個上升沿觸發器和一個多路器。

3.一個輸入是A,B,Clock的三輸入與門。

4.一個透明鎖存器。

5.一個帶clock有始能引腳的上升沿觸發器。

標准答案:2,5

 

16)在下題中,always狀態將描述一個帶異步Nreset和Nset輸入端的上升沿觸發器,則空括號內應填入什么,可從以下五種答案中選擇。

always @(          )

if(!Nreset)

Q<=0;

else if(!Nset)

Q<=1;

else

Q<=D;

1.negedge Nset or posedge Clock

2.posedge Clock

3.negedge Nreset or posedge Clock

4.negedge Nreset or negedge Nset or posedge Clock

5.negedge Nreset or negedge Nset

標准答案:4

 

17)在下題中,給出了幾種硬件實現,問以下的模塊被綜合后可能是哪一種?

1.帶異步復位端的觸發器。

2.不能綜合或與預先設想的不一致。

3.組合邏輯。

4.帶邏輯的透明鎖存器。

5.帶同步復位端的觸發器。

1.always @(posedge Clock)

begin

A<=B;

if(C)

A<=1'b0;

end

標准答案:5

 

2.always @( A or B)

case(A)

1'b0: F=B;

1'b1: G=B;

endcase

標准答案:2

 

3.always @( posedge  A or posedge B )

if(A)

C<=1'b0;

else

C<=D;

標准答案:1

 

4.always @(posedge Clk or negedge Rst)

if(Rst)

  A<=1'b0;

else

  A<=B;

標准答案:2 (產生了異步邏輯)

 

18)在下題中,模塊被綜合后將產生幾個觸發器?

always @(posedge Clk)

begin: Blk

reg B, C;

C = B;

D <= C;

B = A;

end

1.  2個寄存器 B 和 D

2.  2個寄存器 B和 C

3.  3個寄存器 B, C 和 D

4.  1個寄存器 D

5.  2個寄存器 C 和D

標准答案:2

 

 
   


19)在下題中,各條語句的順序是錯誤的。請根據電路圖調整好它們的次序。

 

 

 

標准答案:

reg FF1,FF2,FF3;

always @(posedge Clock)

begin

Output= FF3;

FF3 = FF2;

FF2 = FF1;

 
   


FF1 = Input;

end

 

20)根據左表中SEL與OP的對應關系,在右邊模塊的空括號中填入相應的值。

SEL:OP

000:1

001:3       casex(SEL)

010:1       3'b(  ):  OP=3;

011:3       3'b(  ):  OP=1;

100:0       3'b(  ):  OP=0;

101:3       endcase

110:0

111:3

標准答案:

casex(SEL)

3'bXX1: OP=3;

3'b0X0: OP=1;

3'b1X0: OP=0;

endcase

 

 

21)在以下表達式中選出正確的.

 

1) 4'b1010 & 4'b1101 = 1'b1

2) ~4'b1100 = 1'b1

3) !4'b1011 || !4'b0000 = 1'b1

4) & 4'b1101 = 1'b1

5) 1b'0 || 1b'1 = 1'b1

6) 4'b1011 && 4'b0100 = 4'b1111

7) 4'b0101<<1 =5'b01011

8) !4'b0010 is 1'b0

9) 4'b0001 || 4'b0000 = 1'b1

標准答案:3), 5), 8), 9)

 

22)在下一個模塊旁的括號中填入display的正確值。

integerI;

reg[3:0]A;

reg[7:0]B;

initial

begin

I=-1;A=I;B=A;

$display("%b",B);(    )

A=A/2;

$display("%b",A);(    )

B=A+14

$diaplay("%d",B);(    )

A=A+14;

$display("%d",A);(    )

A=-2;I=A/2;

$display("%d",I);(    )

end

標准答案:

I=-1;A=I;B=A;

$display("%b",B);(00001111)

A=A/2;

$display("%b",A);(0111)

B=A+14

$diaplay("%d",B);(21)

A=A+14;

$display("%d",A);(5)(A為4位,所以21被截為5)

A=-2;I=A/2;

$display("%d",I);(7)(A=-2,則是1110)

 

 

23)請問{1,0}與下面哪一個值相等。

1). 2'b01 2). 2'b10   3). 2'b00

4). 64'H000000000002  5). 64'H0000000100000000

標准答案:5

(位拼接運算符必須指明位數,若不指明則隱含着為32位的 二進制數[即整數]。)

 

24)根據下題給出的程序,確定應將哪一個選項填入尖括號內。

1. defs.Reset          2."defs.v".Reset

3. M.Reset             4.Reset

 

 


 

1 標准答案:1

(模塊間調用時,若引用其他模塊定義的參數,要加上其他模塊名,做為這個參數的前綴。)

module M

'include "defs.v"

....

if(OP==<defs.Reset>)

Bus=0;

endmodule

 

2. 標准答案:4

parameter Reset=8'b10100101; (File defs.v)

module M

'include "defs.v"

....

if(OP==<Reset>)

Bus=0;

endmodule

 

25)如果調用Pipe時,想把Depth的值變為8,問程序中的空括號內應填入何值?

Module Pipe(IP,OP)

parameter Option=1;

parameter Depth=1;

...

endmodule

Pipe( ) P1(IP1,OP1);

標准答案:#(1,8)

(其中1對應參數Option,8對應參數Depth.)

 

26)若想使P1中的Depth的值變為16,則應向空括號中填入哪個選項。

 

module Pipe (IP ,OP);

parameter Option =1;

parameter Depth = 1;

…………

endmodule

 

module

Pipe P1(IP1 ,OP1);

(             );

endmodule

 

1.defparam  P1.Depth=16;

2.parameter P1.Depth=16;

3.parameter Pipe.Depth=16;

4.defparam  Pipe.Depth=16;

標准答案:1

(用后綴改變引用模塊的參數要用defparam及用本模塊名作為引用參數的前綴,如p1.Depth。)

 

27)如果我們想在Test的monitor語句中觀察Count的值,則在空括號中應填入什么?

Module Test

Top T();

initial

$monitor(    )

endmodule

 

module Top;

Block B1();

Block B2();

endmodule

 

module Block;

Counter C();

endmodule

 

module Counter;

reg [3:0] Count;

....

endmodule

 

標准答案:T.B1.C.Countor  Test.T.B1.C.Count

 

 

28) 下題中用initial塊給reg[7:0]V符值,請指明每種情況下V的8位都是什值。

這道題說明在數的表示時,已標明字寬的數若用XZ表示某些位,只有在最左邊的X或Z具有擴展性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM