這篇講的是使用 verilog 硬件描述語言編寫一個 3 - 8 譯碼器。
3 - 8 譯碼器是一個簡單的組合邏輯,用於實現並轉串,其輸入輸出關系如下:
| 輸入 | 輸出 |
-----------------
000 --> 0000_0001
001 --> 0000_0010
010 --> 0000_0100
011 --> 0000_1000
100 --> 0001_0000
101 --> 0010_0000
110 --> 0100_0000
111 --> 1000_0000
新建工程,並新建如下的代碼的 verilog HDL 文件
module my38decode ( input wire [2:0] a, output reg [7:0] y ); //*********************// integer i; //*********************// always @ (*) begin for (i=0;i<=7;i=i+1) // a = 0 時,y[0] = 1'b1, y = 8'b0000_0001 if (a == i) // a = 1 時,u[1] = 1'b1, y = 8'b0000_0010 y[i] = 1'b1; else y[i] = 1'b0; end
endmodule
這段代碼其實相當抽象(循環變量操作下標),但好在綜合工具還是能夠理解我們的用意。
建好的工程如下圖:
可以在 Tool --> Netlist Viewers --> RTL Viewer 查看生成的 RTL 網表文件。
下圖為 Tool 菜單和生成的網表文件。可以看出我們寫的代碼生成了幾個比較器,我們的輸入信號被擴大至 32 位(前29位自動填 0);比較器的 B 端口連接的是一些常量,當 32 位比較器在輸入相等時輸出 1,不等則輸出 0;7 個比較器輸出分別連接到 y 的 7 個引腳上。如圖,綜合器在 RTL(寄存器傳輸級)成功的實現了我們的要求。