3-8 譯碼器真值表
創建工程
按照真值表定義編寫Verilog程序
module my3_8(a,b,c,out);
input a;
input b;
input c;
output reg [7:0]out;//定義一個8位的位寬.只要是在always塊中進行賦值的都要定義為reg類型。
always@(a,b,c)
begin
case ({a,b,c})//{}位為位拼接,將信號拼接成一個三位的信號
3'b000: out=8'b0000_0001;
3'b001: out=8'b0000_0010;
3'b010: out=8'b0000_0100;
3'b011: out=8'b0000_1000;
3'b100: out=8'b0001_0000;
3'b101: out=8'b0010_0000;
3'b110: out=8'b0100_0000;
3'b111: out=8'b1000_0000;
endcase
end
endmodule
編寫testbench信號
`timescale 1ns/1ns
module my3_8_tb;
reg a,b,c;
wire [7:0] out ;
my3_8 u1(
.a(a),
.b(b),
.c(c),
.out(out));
initial begin
a=0;b=0;c=0;
#200;
a=0;b=0;c=1;
#200;
a=0;b=1;c=0;
#200;
a=0;b=1;c=1;
#200;
a=1;b=0;c=0;
#200;
a=1;b=0;c=1;
#200;
a=1;b=1;c=0;
#200;
a=1;b=1;c=1;
#200;
$stop;
end
endmodule
將testbench文件鏈接到仿真工具
點擊 前仿按鈕進行仿真驗證,仿真結果波形 如下, 與真值表對照發現波形是對的,說明 設計沒有問題
點擊全編譯按鈕后點擊
進行后仿,后仿結果如下
至此,整個3-8譯碼器就設計完成了,下面既需要對照開發板進行管腳設置和程序下載。
設置管腳,SW0~SW2對應a~c,LED7~0對應out【7:0】
點擊全編譯按鈕后,上電鏈接開發板,點擊programmer,將系統生成的.sof文件燒寫到開發板中。
實驗現象:按順序波動撥動撥碼開關,燈會按真值表的輸出亮。