跳转到主内容
极星编程网:以代码为星,赴技术山海!

Verilog实现三八译码器转四-十六译码器

用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; end endmodule

三八译码器测试文件代码:

`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; end always #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 end else 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 end end endmodule

测试代码:

`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

运行结果:

相关文章