2012年10月15日 星期一

以" 全加器 運算子之使用 " 為例 , 寫testbench簡易說明


//測試程式有Testbench.v , FA_op.v 兩個程式


//op.v  為 運算子之使用 (資料流層敘述) 範例程式

//  4bit 加法器  輸入 :A,B,Ci  輸出: S ,Co


// 運算子之使用 (資料流層敘述)


module FA_op (A, B, Ci, Co, S, X, Y, Z);

    input  [3:0] A, B; // A, B 四位元輸入
    input  Ci;         // Ci 一位元輸入
    output Co;                 // Co 一位元輸出 
    output [3:0] S, X, Y, Z; // S, X, Y, Z 四位元輸出 
    
    assign {Co, S} = A + B + Ci; // 全加法

endmodule



//***************************************************
//testbench 程式




`timescale 1ns/1ps   // reference_time_unit/time_precision


module Testbench;
 
     //將輸入


變成 reg 

    reg [3:0] A = 4'b0000;  //A=0000b

    reg [3:0] B = 4'b0000;  //B=0000b
    reg Ci = 1'b0;                //Ci=0b


    //將輸出變成Wire
    wire Co;
    wire [3:0] S;

    FA_op UUT (
 .A(A),
  .B(B),
 .Ci(Ci),
  .Co(Co),
 .S(S)

);


    initial
    begin
      #1000            // Final time:  1000 ns
        $stop;          //停止Modelsim 程式運轉
    end

    initial begin
        // -------------  Current Time:  100ns
        #100;          //設定輸入A=12 , B=10  Ci=1
        Ci = 1'b1;
        A = 4'b1100;
        B = 4'b1010;
        // -------------------------------------
        // -------------  Current Time:  200ns
        #100;      
 //設定輸入A=9 , B=0  Ci=0 
        Ci = 1'b0;
        A = 4'b1001;
        B = 4'b0000;
        // -------------------------------------
        // -------------  Current Time:  300ns
        #100;      
//設定輸入A=1 , B=9  Ci=1

        Ci = 1'b1;
        A = 4'b0001;
        B = 4'b1001;
        // -------------------------------------
        // -------------  Current Time:  400ns
        #100;        

//設定輸入A=14 , B=4  Ci=0
        Ci = 1'b0;
        A = 4'b1110;
        B = 4'b0100;
        // -------------------------------------
        // -------------  Current Time:  500ns
        #100;          
//設定輸入A=7 , B=5  Ci=1

        Ci = 1'b1;
        A = 4'b0111;
        B = 4'b0101;
        // -------------------------------------
        // -------------  Current Time:  600ns
        #100;            /
/設定輸入A=8 , B=9  Ci=0

        Ci = 1'b0;
        A = 4'b1000;
        B = 4'b1001;
        // -------------------------------------
        // -------------  Current Time:  700ns
        #100;        


 /
/設定輸入A=10 , B=0  Ci=1
        Ci = 1'b1;
        A = 4'b1010;
        B = 4'b0000;
        // -------------------------------------
        // -------------  Current Time:  800ns
        #100;        


/
/設定輸入A=3 , B=3  Ci=0
        Ci = 1'b0;
        A = 4'b0011;
        B = 4'b0011;
        // -------------------------------------
        // -------------  Current Time:  900ns
        #100;        
/
/設定輸入A=15 , B=15  Ci=1
        Ci = 1'b1;
        A = 4'b1111;
        B = 4'b1111;
        // -------------------------------------
        // -------------  Current Time:  1000ns
        #100;          
/
/設定輸入A=13 , B=6  Ci=0
         Ci=1'b0;
        A = 4'b1101;
        B = 4'b0110;

    end

endmodule







//1) 輸入A=0 , B=0  Ci=0  ,輸出 S=0 Co=0

//2) 
輸入A=12 , B=10  Ci=1 

 ,
12+10+1=23
// 
輸出 S=7 Co=1 , 16+7=23    


//3) 
輸入A=9 , B=0  Ci=0   , 9+0+0 = 9
//   
輸出 S=9 Co=0 , 0+9=9 

以下依此類推

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

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