3 to 8 Decoder with Enable signal Structural Verilog Code
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
module dec3x8struct( bi,enable,d);
input[2:0]bi;
input enable;
output[7:0]d;
wire [7:0]w;
dec2x4en_case dec0 (bi[1:0],bi[2],w[7:4]);
dec2x4en_case dec1 (bi[1:0],~bi[2],w[3:0]);
and(d[7],enable,w[7]);
and(d[6],enable,w[6]);
and(d[5],enable,w[5]);
and(d[4],enable,w[4]);
and(d[3],enable,w[3]);
and(d[2],enable,w[2]);
and(d[1],enable,w[1]);
and(d[0],enable,w[0]);
endmodule
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
module dec2x4en_case(i,en,dec);
input [1:0]i;
input en;
output [3:0]dec;
reg [3:0]dec;
always @ (i or en)
begin
if (en==0) dec=4'b0000;
else if (en==1)
case (i)
0 : dec=4'b0001;
1 : dec=4'b0010;
2 : dec=4'b0100;
3 : dec=4'b1000;
default:dec=4'b1111;
endcase
else dec=4'b1111;
end
endmodule
Test Fixture for 3x8 Decoder with Enable
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
module dec3x8VTF;
reg [2:0] bi;
reg [2:0] ctr;
reg enable;
wire [7:0] d;
reg [7:0] dtc;
reg error;
reg clk;
dec3x8struct uut (
.bi(ctr),
.d(d),
.enable(enable)
);
initial begin
// Initialize Inputs
bi = 0;
clk=0;
ctr=0;
enable=1;
// Wait 100 ns for global reset to finish
#100;
end
always
begin
#20 clk = ~clk;
end
always @ (posedge(clk))
begin
ctr = ctr+1;
end
always @ (ctr)
begin
case(ctr)
0 : dtc=8'b00000001;
1 : dtc=8'b00000010;
2 : dtc=8'b00000100;
3 : dtc=8'b00001000;
4 : dtc=8'b00010000;
5 : dtc=8'b00100000;
6 : dtc=8'b01000000;
7 : dtc=8'b10000000;
default:dtc=8'b11111111;
endcase
end
always @(d,dtc)
begin
if (d==(dtc)) error = 0;
else error = 1;
end
endmodule
No comments:
Post a Comment