用verilog實現三八解碼器**:
module decoder(data_out,en,data_in);
input [2:0] data_in;
input en;
output reg [7:0] data_out;
always @(en or data_in)
begin
if(en==1)
case(data_in)
3'b000:data_out=8'b0000_0001;
3'b001:data_out=8'b0000_0010;
3'b010:data_out=8'b0000_0100;
3'b011:data_out=8'b0000_1000;
3'b100:data_out=8'b0001_0000;
3'b101:data_out=8'b0010_0000;
3'b110:data_out=8'b0100_0000;
3'b111:data_out=8'b1000_0000;
endcase
else
data_out=8'b0000_0000;
endendmodule
三八解碼器測試檔案**:
`timescale 1ns/1ps
module decoder_test();
reg [2:0] data_in;
reg en;
wire [7:0] data_out;
decoder i1(.data_in(data_in),
.data_out(data_out),
.en(en)
);initial
#100 $stop;
initial
#10 data_in=0;
initial
#10 en=0;
initial
#15 en=1;
always
#10 data_in=data_in+1;
endmodule
利用三八解碼器轉四-十六解碼器:
module decoder4_16(data_out1,data_out2,data_in1,data_in2);
input [2:0] data_in1;
input data_in2;
output [7:0] data_out1,data_out2;
wire [7:0] data_out1,data_out2;
assign data_in3=~data_in2;
decoder l(data_out1,data_in2,data_in1);
decoder h(data_out2,data_in3,data_in1);
endmodule
四-十六解碼器測試**(採用呼叫子模組的方法):
`timescale 1ns/1ps
module decoder4_16_test();
reg [2:0] data_in1;
reg data_in2;
wire [7:0] data_out1,data_out2;
decoder4_16 i1(
data_out1,
data_out2,
data_in1,
data_in2
);initial
begin
data_in1=3'b000;
data_in2=1'b0;
endalways #80 data_in2=~data_in2;
always
#10 data_in1=data_in1+1;
endmodule
執行結果:
熊哥的方法:
module decoder(data_in, data_out1,data_out2);
input [3:0] data_in;
reg [2:0] data_in1;
output reg [7:0] data_out1;
output reg [7:0] data_out2;
always @*
begin
data_in1=data_in[2:0];
if(data_in[3]==0)
begin
data_out2=8'b0000_0000;
case(data_in1)
3'b000:data_out1=8'b0000_0001;
3'b001:data_out1=8'b0000_0010;
3'b010:data_out1=8'b0000_0100;
3'b011:data_out1=8'b0000_1000;
3'b100:data_out1=8'b0001_0000;
3'b101:data_out1=8'b0010_0000;
3'b110:data_out1=8'b0100_0000;
3'b111:data_out1=8'b1000_0000;
endcase
endelse
begin
data_out1=8'b0000_0000;
case(data_in1)
3'b000:data_out2=8'b0000_0001;
3'b001:data_out2=8'b0000_0010;
3'b010:data_out2=8'b0000_0100;
3'b011:data_out2=8'b0000_1000;
3'b100:data_out2=8'b0001_0000;
3'b101:data_out2=8'b0010_0000;
3'b110:data_out2=8'b0100_0000;
3'b111:data_out2=8'b1000_0000;
endcase
endendendmodule
測試**:
`timescale 1ns/1ps
module decoder_test();
reg [3:0] data_in;
wire [7:0] data_out1;
wire [7:0] data_out2;
decoder i1(.data_in(data_in),
.data_out1(data_out1),
.data_out2(data_out2)
);initial
#180 $stop;
initial
#10 data_in=0;
always
#10 data_in=data_in+1;
endmodule
執行結果:
Verilog 實現74138解碼器
首先明確有哪些輸入和輸出 enable 使能 en0 en1 en2 input 輸入 i0 i1 i2 output 輸出 o0 o7 然後把資料型別用verilog實現 使能端為三個 只有當使能為1 0 0的時候晶元才正常解碼 input wire 2 0 en 輸入端為三個二進位制位,對應2 ...
Verilog設計解碼器 計數器
實驗1 設計4 16解碼器 1.module decoder4 16a out,in output 15 0 out input 3 0 in reg 15 0 out out為16位暫存器 always in 迴圈輸入 begin case in 輸入4位十進位制數,輸出16位二進位制數 4 d0...
3 5 74HC138三八解碼器的應用
在我們設計微控制器電路的時候,微控制器的 io 口數量是有限的,有時並滿足不了我們的設計需求,比如我們的 stc89c52 一共有 32 個 io 口,但是我們為了控制更多的器件,就要使用一些外圍的數字晶元,這種數字晶元由簡單的輸入邏輯來控制輸出邏輯,比如 74hc138這個三八解碼器,圖 3 15...