2019年12月30日 星期一

Verilog 8421 BCD To 2421 BCD (Using 4 to 16 decoder)

Verilog  8421 BCD To 2421 BCD (Using 4 to 16 decoder) 






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



沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...