HDLBits 是一組小型電路設計習題集,使用 Verilog/SystemVerilog 硬件描述語言 (HDL) 練習數字硬件設計~
網址如下:
https://hdlbits.01xz.net/
關于HDLBits的Verilog實現可以查看下面專欄:
https://www.zhihu.com/column/c_1131528588117385216
縮略詞索引:
- SV:SystemVerilog
Problem 7-Xnorgate
題目說明
創建一個 XNOR 門的模塊。

這個題目的核心就是上面的圖片,模塊和端口已經被定義好了,黑色的框圖以及箭頭代表模塊和端口。我們需要做的工作是完成圖中綠色的部分,即完成一個XNOR 門。
模塊端口聲明
moduletop_module(
inputa,
inputb,
outputout);
題目解析
這個題目重點還是看懂題目的圖片,還是復習一下:

題目中的綠色部分就是上圖的同或門,主要由
這里也可以利用數電邏輯來寫代碼,同或門的邏輯就是同或門 (XNor Gate) 是異或門 (Nor Gate) 的取反輸出。異或門的輸入輸出可以概括為:(輸入)相同(輸出)為 0 ,不同為 1
moduletop_module(
inputlogica,
inputlogicb,
outputlogicout);
assignout=~(a^b);
endmodule

點擊Submit,等待一會就能看到下圖結果:

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅(后面會展示)。
這一題就結束了。
Problem 3-Wire4
題目說明
創建一個具有 3 個輸入和 4 個輸出的模塊,其行為類似于下面演示的這些連線:
a->w
b->x
b->y
c->z

這個題目的核心就是上面的圖片,模塊和端口已經被定義好了,黑色的框圖以及箭頭代表模塊和端口。我們需要做的工作是完成圖中綠色的部分,即完成這條連線。
模塊端口聲明
moduletop_module(
inputa,b,c,
outputw,x,y,z);
題目解析
主要使用assign語句實現上面的連線,難度較低。
moduletop_module(
inputlogica,b,c,
outputlogicw,x,y,z
);
assignw=a;
assignx=b;
assigny=b;
assignz=c;
endmodule

點擊Submit,等待一會就能看到下圖結果:

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅(后面會展示)。
這一題就結束了。
Problem 4-Notgate
題目說明
創建一個實現非門(Notgate)的模塊。

從這個題目開始實現幾個經典組合電路,非門的的核心就是上面的圖片,模塊和端口已經被定義好了,黑色的框圖以及箭頭代表模塊和端口。我們需要做的工作是完成圖中綠色的部分,實現一個非門。
模塊端口聲明
moduletop_module(inputin,outputout);
題目解析
主要使用assign語句實現非門,也很簡單就一個語句“assign out = ~in;”。這里注意一個邏輯取反和逐位取反的區別。
moduletop_module(inputlogicin,
outputlogicout
);
assignout=~in;
endmodule
上面使用“assign out = ~in ;”和“assign out = !in ;”無區別,因為只有一位變量。

點擊Submit,等待一會就能看到下圖結果:

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅(后面會展示)。
這一題就結束了。
Problem 5-Andgate
題目說明
創建一個與門(Andgate)模塊。。

與門的的核心就是上面的圖片,模塊和端口已經被定義好了,黑色的框圖以及箭頭代表模塊和端口。我們需要做的工作是完成圖中綠色的部分,實現一個與門。
模塊端口聲明
moduletop_module(
inputa,
inputb,
outputout);
題目解析
主要使用assign語句實現與門,也很簡單就一個語句“assign out = a & b;”。值得注意的是 & 和 && 的區別。
moduletop_module(
inputlogica,
inputlogicb,
outputlogicout);
assignout=a&b;
endmodule

點擊Submit,等待一會就能看到下圖結果:

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅(后面會展示)。
這一題就結束了。
Problem 6-Norgate
題目說明
創建一個實現 NOR 門的模塊?;蚍情T(Norgate)是一個輸出反相的或門。用 Verilog 編寫的 NOR 門需要兩個運算符。

或非門的的核心就是上面的圖片,模塊和端口已經被定義好了,黑色的框圖以及箭頭代表模塊和端口。我們需要做的工作是完成圖中綠色的部分,實現一個或非門。從圖中可以看出就是一個或門輸出取反,核心就是先實現一個或門,之后再輸出端取反即可,可以使用兩個assign語句或者一個assign語句實現。
模塊端口聲明
moduletop_module(
inputa,
inputb,
outputout);
題目解析
這一題的關鍵是看懂題目給的符號,給大家一個常用的門電路示意圖:

HDLbits網站上的使用的是國外流行圖形符號一欄,從題目給定的符號,對比上一圖就是典型的或非門,由或門和非門組合實現。
moduletop_module(
inputlogica,
inputlogicb,
outputlogicout);
assignout=~(a|b);
endmodule
代碼中(a|b)實現一個或門,然后取反即可~(a | b)。

點擊Submit,等待一會就能看到下圖結果:

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅。
錯誤示范
一開始代碼寫錯了,寫成:
moduletop_module(
inputlogica,
inputlogicb,
outputlogicout);
assignout=~a|b;
endmodule
仿真結果如下:

造成上面結果的主要原因還是因為Verilog/SV中邏輯操作,運算符等有優先級(和數學里的加減乘除乘除一樣),具體優先級如下:

所以上面的代碼會優先做~a然后在和b或,加上括號解決。
總結
今天的5道題就結束了,整體難度不大,后面的題目難度會越來越大~
最后我這邊做題的代碼也是個人理解使用,有錯誤歡迎大家批評指正,祝大家學習愉快~
代碼鏈接:
https://github.com/suisuisi/SystemVerilog/tree/main/SystemVerilogHDLBit
-
模塊
+關注
關注
7文章
2837瀏覽量
53293 -
電路設計
+關注
關注
6741文章
2702瀏覽量
219524
原文標題:HDLBits: 在線學習 SystemVerilog(二)-Problem 7-9
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
9DBL0255/9DBL0455:PCIe Gen1 - 7時鐘扇出緩沖器的設計與應用
PI7C9X110:PCI Express到PCI可逆橋接器的技術剖析與應用指南
維信諾亮相2025上海顯示技術及應用創新展
在線學習SystemVerilog-Problem 7-9
評論