北郵數電 愛課堂答案 Verilog專題

鴨梨 ̄^ ̄胡發表於2020-12-27

1.在以下的積體電路元件中,無法用Verilog HDL語言描述的是______

A.四或非門CD4001

B.微控制器8051

C.譯碼器74138

D.整合運放uA741

E.電壓比較器LM311

 

積體電路可分為模擬IC和數字IC。模擬IC:處理連續性的聲、光、電、電磁波、速度和溫度等自然模擬訊號的積體電路為通常意義上的模擬IC。

Verilog HDL是一種用於數位電路設計的硬體描述語言(Hardware Description Language,HDL) ,可以進行數位電路的模擬驗證、時序分析、邏輯綜合等。

Verilog只能描述數位電路,無法描述類比電路IC。

 

2.在Verilog HDL中,已知“a=1b'1; b=3b'001;”,那麼{a,b}=____.

{a, b}意思是將a與b相連線,因此{a,b}的結果為4b'1001.

 

3.在Verilog HDL中,不屬於並行語句的是____。

在Verilog HDL語言中, case 語句是一種多分支選擇語句。

 

4. 在begn…end中的變數只能被宣告為reg型別。

 

5. 在Verilog HDL語言中,若a=4b'1011,則&a=____.

&作為單目運算子使用時,表示的是縮減運算子(reduction operator)中的一種,計算過程為: &a=1&0&1&1=0, 故答案為D選項。

 

6.若P、Q、R都是4bit的輸入向量,下面哪一種表達形式是正確的_

A. input P[3:0],Q,R;

B. input P,Q,R[3:0];

C. input P[3:0],Q[3:0],R[3:0];

D. input [3:0]P,Q,R;

 

解析:

I/O說明的格式為:

(1)輸入口: input [訊號位寬-1:0] 埠名;

(2)輸出口: output[訊號位寬-1:0] 埠名;

 

7. Verilog HDL中,b被賦成新值a的操作並不是立刻完成,而是在塊結束時才完成,且塊內多條賦值語句在塊結束時同時賦值的形式,被稱為 非阻塞賦值方式 ,賦值語句為 b<=a

非阻塞賦值(b <= a)的賦值方式:

(1)在語句塊中,上面語句所賦予的變數值不能立即就為下面的語句使用;

(2)塊結束後才能完成這次賦值操作,而所賦的變數值是上一次賦值所得到的;

(3)在編寫可綜合的時序邏輯模組時,這是最常用的賦值方法。

 

8. always塊與assign語句是併發執行的,assign語句一定要放在always塊之外。(對)

 

9.在Verilog HDL中,“a=4'b1001, b=4'bx110"選出正確的運算結果:

A. a&b = 0

B. a&&b = 1

C. b&a = x

D. b&&a = x

 

在Verilog HDL語言中, &代表的是按位與, &&代表的是邏輯與

故本題中,a&b 的結果為4'bx000 (x與1邏輯與運算結果為x),

a&&b的結果為邏輯1 (只要不為0,均視為邏輯1),

綜上B為正確選項。

 

10. 串列埠通訊中可以使用偶校驗檢錯,方法是在要傳送的位元組中加入校驗位,使輸出的9位資料中出現1的次數永遠為偶數。可以實現該校驗的Verilog 描述為____.

A. assign output[8:0] = {1'b1, input[7:0]}; .

B. assign output[8:0] = {1'b0, input[7:0]};

C. assign output[8:0] = {~input[7:0], input[7:0]};

D. assign output[8:0] = {^input[7:0], input[7:0]};

 

由題描述,偶校驗驗錯是指:當輸出資料中有奇數個1時校驗碼為1,

而當輸出資料中有偶數個1時校驗碼為0,

其中校驗碼加在資料末尾。

顯然A、B選項的描述是有失偏頗的。

對於C,~是取反操作,拼接之後會形成16位數,賦值操作將報錯。

對於D,^為縮減運算子(異或操作):偶數個1異或為0,奇數個1異或為1,與題目描述功能符合.

 

11. 資料傳送端使用偶校驗傳送9位資料欄位,在該欄位中,若1的出現次數是偶數次,則資料有效,valid訊號輸出1,則判斷資料是否有效的正確Verilog實現是___。

A. assign valid = ~&input[8:0];

B. assign valid =  ~input[8:0];

C. assign valid =  ^input[8:0];

D. assign valid = ~^input[8:0];

 

本題答案選D。此題在問題10的基礎上需要著重注意操作符順序選取。

對於A,&為縮減運算子(與操作)。只要input中存在一個0則valid就被賦值為1。

而B中右端是一個九位二進位制數,賦值操作會出錯。

D中~^並不是指同或,而是先對input縮減運算異或運算,再取反。

 

12. 低密度FPGA常使用四輸入查詢表實現可程式設計組合邏輯,其原理用Verilog描述如下:

module lut4(in, table, out)

input [3:0] in;

input [15:0] table;

output out;

assign out = table[in];

endmodule

若想實現四輸入與門,in 為輸入,out 為輸出,則table 應該輸入

A.16'b000000000000001

B.16'd1024

C.16'hF000

D.16'h8000

 

四輸入查詢表實現的功能是通過4為input輸入,通過一定對映關係在table表中輸出查詢值。要想實現四輸入與門,即有:當且僅當輸入全為1時table值為1,即table[15]=1。

故table應輸入2'b1000_0000_0000_0000=16'd32768=16'h8000。

 

13.以下Verilog程式碼可實現USB傳輸中的迴圈冗餘校驗,其生成多項式為: x^16+x^15+x^2+1。

module crc16(data, crc, newcrc);

input data;

input [15:0] crc.

output [15:0] newcrc;

wire d = data;

wire c = crc;

assign newcrc[15:0]= {d^c[14]^c[15],c[13:2],d^c[1]^c[15], c[0],d^c[15]};

endmodule

對於該模組,以下理解中正確的是

A.該模組輸入資料data是以位元組為單位的

B.該模組是組合邏輯,不需要時鐘訊號驅動即可輸出結果

C.newcrc是輸出訊號,預設是reg型別

D.該模組複雜冗餘,不可綜合

 

A選項錯誤,1位元組=8bit,1bit代表的是一位二進位制數,資料data是以位元為單位的。

B項正確,任意時刻輸出只與對應時刻的輸入有關。

C選項錯誤,newcrc預設是wire型別,只有在always等模組中變數賦值需要定義為reg型別。

 

14.用組合邏輯可實現一位半加器. a,b為輸入,c為輸出,不正確的Verilog描述是

A. assign = a + b;

B. assign = a ^ b;

C. assign ={a ,b};

D. always @(*)c=a+b;

 

A為或運算子,B為異或運算子,C為拼接運算子,

D為一always模組,其中*代表所有變數,

顯然c若是作為a、b的拼接輸出是錯誤的。

 

 

15. 以下Verilog程式碼可以實現全加器的功能: assign {m,n}= a + b + cin;

對該程式碼理解不正確的是___.

A. m為進位輸出,n是全加器的和

B. m和n一定是wire型變數

C. m == a & b & cin

D. n == a ^ b ^ cin

 

如題所示,assign 實現的是連續賦值語句,

其中m代表進位cout,n代表全加器加法結果sum,即A正確。

assign是對wire型變數賦值,即B正確。

C錯誤,邏輯不正確。

若a、b、cin中有奇數個1則n輸出為1,即為異或關係,D正確。

 

 

16. 在Verilog HDL中,非阻塞賦值是指在過程塊內當前賦值語句不會阻斷其後的語句,該操作只能用於"initial"塊和"always"塊等過程塊中reg型變數賦值。(對)

 

在"initial"和"always"等模組中給變數賦值,變數型別應為reg型,即暫存器型別;

非阻塞賦值就是指賦值會在模組執行結束之後再進行,不會阻斷其後的語句。

 

 

17. 下面的Verilog程式碼實現了___功能。

A.半加器  B.全減器  C.乘法器  D.以上都不對

module SomeModule(a, b, C1, C2, S);

input a,b,C1;

output C2,S;

wire x, y, z;-

xor xor1(x, a, b);

xor2(S, x, C1);-

and andl(y, a, b);

and2(z, C1, x);

or or1(C2, y, z);

endmodule

本題首先要明確輸入輸出變數:其中a、b、C1是輸入,C2、s是輸出變數。

事實上,輸入輸出變數的命名就給我們提供了很大的提示,可以聯想到可能是全加器.

接下來進行具體功能分析:

S輸出的是三個變數的異或運算結果,

C2輸出的是輸入中兩個及兩個以上為高電平的情況,

功能與全加器符合!

 

18. 以下Verilog程式碼是按鍵消抖程式的一部分,實現了按鍵訊號的跨時鐘域同步,其中PB為按鍵訊號輸入,在以下理解中,正確的是___.

A.在數位電路中按鍵消抖只是一種傳說,無法實現

B.按鍵消抖完全可以使用組合邏輯實現

C.PB_sync_1 永遠比PB_sync_0滯後一個clk週期

D.可以使用event訊號識別按鍵訊號PB的下降沿

reg PB_sync_0, PB_sync_1;

always @(posedge clk)

begin

PB_sync_0 <= PB;

PB_sync_1 <= PB_sync_0;

end

wire event = PB_sync_0 & ~PB_sync_1

A選項,按鍵消抖不是傳說,相信很多同學都通過小腳丫實現了按鍵消抖!

B選項,按鍵消抖通過時序邏輯實現;

C選項,注意到是非阻塞賦值,即該賦值語句不會影響下面語句執行,在模組結束後再執行賦值操作,故在PB輸入後PB_sync_1永遠比PB_sync_0滯後一個clk週期。

D選項,識別的目的在於若輸入訊號在clk一個週期後保持不變,則確認為按鍵按下。若用event來識別下降沿,假設PB_sync_0先變為低電平,此時PB_sync_1還為高電平,則輸出為低電平;當一個clk週期後PB_sync_1 變為低電平時,輸出仍不變為低電平(無論PB_sync_1變不變,輸出均為低電平)。

 

19. 在進行邏輯模擬時,某同學使用Verilog HDL實現了模組"testbench0",用來測試現有模組"blackbox"的邏輯功能,對該程式碼正確的理解是___。

A.模組testbench0可用於模擬,不可綜合

B.模組testbench0描述了或門,其中a和b為輸入,c為輸出

C.模擬時,clk 訊號的頻率為100MHz

D.模擬條件過於理想,與現實情況不符,沒有必要進行模擬

`timescale 10ns/1ns

module testbench0;

reg a, b, clk;

wire c;

initial begin

a=0;b= 0;

#10 a= 1;

#10 a=0;b= 1;

#10 a= 1;

#10 $finish;

end

always #1 clk = ~clk;

blackbox bb(clk, a, b, c);

endmodule

選項A,與可綜合Verilog程式碼所不同的是,testbench是在計算機主機.上的模擬器中執行的,其只能用於模擬,而不能綜合。

選項B,別人都是blackbox 了,實現什麼功能我們無從得知。

選項C,對於timescale 10ns/1ns而言,前面的10ns描述的單位時間延遲,即#1 進行時延的單位是10ns,而後面的1ns是指時間精度,可達到1ns, clk訊號是01、01不斷變化,週期為2*10ns,頻率為50MHz。

選項D,對於一個問題的研究往往是由淺入深,從理想到複雜,大躍進般的思想在數電學習中一定是行不通的!

 

20. 某Verilog HDL程式碼如下,則該模組的邏輯功能為___.

A.比較器  B.資料選擇器  C.譯碼器  D.以上都不對

module ex02 (out, a, b, sel);

output out;

input  a, b, sel;

reg out;

always @(a or b or sel )

begin

case (sel)

1'b0: out = a;

1'bl: out = b;

default: out = 'bx;

endcase

end

endmodule

由Verilog程式碼所示功能,當sel為0時,out=a;

當sel=1時,out=b。

實質上代表的是一個資料選擇器。

 

© 2020 北郵學習部,All rights reserved.

筆者編輯整理

相關文章