Verilog實現三八解碼器轉四 十六解碼器

2021-10-06 12:52:54 字數 3628 閱讀 9582

用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...