module SOP_decoder4x16(Din,e,Y);
input [3:0]Din;
input e;
output [3:0]Y;
wire [15:0]Dout;
assign Dout[0]= (~Din[3]) & (~Din[2]) &(~Din[1]) & (~Din[0]) & (e) ;
assign Dout[1]= (~Din[3]) & (~Din[2]) &(~Din[1]) & (Din[0]) & (e) ;
assign Dout[2]= (~Din[3]) & (~Din[2]) &(Din[1]) & (~Din[0]) & (e) ;
assign Dout[3]= (~Din[3]) & (~Din[2]) &(Din[1]) & (Din[0]) & (e) ;
assign Dout[4]= (~Din[3]) & (Din[2]) &(~Din[1]) & (~Din[0]) & (e) ;
assign Dout[5]= (~Din[3]) & (Din[2]) &(~Din[1]) & (Din[0]) & (e) ;
assign Dout[6]= (~Din[3]) & (Din[2]) &(Din[1]) & (~Din[0]) & (e) ;
assign Dout[7]= (~Din[3]) & (Din[2]) &(Din[1]) & (Din[0]) & (e) ;
assign Dout[8]= (Din[3]) & (~Din[2]) &(~Din[1]) & (~Din[0]) & (e) ;
assign Dout[9]= (Din[3]) & (~Din[2]) &(~Din[1]) & (Din[0]) & (e) ;
assign Dout[10]= (Din[3]) & (~Din[2]) &(Din[1]) & (~Din[0]) & (e) ;
assign Dout[11]= (Din[3]) & (~Din[2]) &(Din[1]) & (Din[0]) & (e) ;
assign Dout[12]= (Din[3]) & (Din[2]) &(~Din[1]) & (~Din[0]) & (e) ;
assign Dout[13]= (Din[3]) & (Din[2]) &(~Din[1]) & (Din[0]) & (e) ;
assign Dout[14]= (Din[3]) & (Din[2]) &(Din[1]) & (~Din[0]) & (e) ;
assign Dout[15]= (Din[3]) & (Din[2]) &(Din[1]) & (Din[0]) & (e) ;
assign Y[3]=Dout[5] | Dout[6] | Dout[7] | Dout[8] | Dout[9];
assign Y[2]=Dout[4] | Dout[6] | Dout[7] | Dout[8] | Dout[9];
assign Y[1]=Dout[2] | Dout[3] | Dout[5] | Dout[8] | Dout[9];
assign Y[0]=Dout[1] | Dout[3] | Dout[5] | Dout[7] | Dout[9];
endmodule
// 時間單位 100ns, 時間精確度100 ps
`timescale 100ns/100ps
module Test_bench;
reg [3:0]Din = 4'b0000; // 暫存器資料初值為‘0000’
reg e=1'b0;
wire [3:0]Y;
integer j;
SOP_decoder4x16 DUT(
.Din(Din),
.e(e),
.Y(Y) );
// initial程序結構區塊, 產生輸入信號波形
initial begin
$monitor(Din,e,Y);
for (j=0; j<16; j=j+1) begin
{Din} = j;
e=1'b1; //enable active
#20;
end
for (j=0; j<16; j=j+1) begin
{Din} = j;
e=1'b0; //enable deactive
#20;
end
end
initial
begin
#680; // 模擬終止時間 680 ns
$stop;
end
endmodule
沒有留言:
張貼留言