難理解的習題:
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具有擴展性。