2015-08-25 110 views
1

在參數覆蓋期間,參數my_secret被2.3.4.5覆蓋。我想強制一個條件覆蓋my_secret爲2爲count = 0至10,my_secret爲3爲count = 10至20,my_secret爲4爲count = 20至30,my_secret爲5爲計數= 40至50?Verilog參數覆蓋

試驗檯:

module tb_def_param; 

    // Inputs 
    reg CLK; 
    reg RST; 
    reg [4:0] a; 
    reg [4:0] b; 
    reg [5:0] count; 
    parameter my_secret = 4'd0; 
wire [6:0] sum; 

    initial 
    begin 
     // Initialize Inputs 
     a = 0; 
     b = 0; 
     CLK = 1; 
     RST = 1; 

     // Wait 100 ns for global reset to finish 
     #100 RST = 1; 
     #100 RST = 0; 

     // Add stimulus here 
     a = 5'd2; 
     b = 5'd3; 
    end 

always @ (posedge CLK) 
    begin 
    if(RST) 
     count <= 6'd0; 
     else 
     count <= count + 1; 
    end 

secret_number #(2) U0(.CLK(CLK), .RST(RST), .a(a),.b(b),.sum(sum)); 
secret_number #(3) U1(.CLK(CLK), .RST(RST), .a(a),.b(b),.sum(sum)); 
secret_number #(4) U2(.CLK(CLK), .RST(RST), .a(a),.b(b),.sum(sum)); 
secret_number #(5) U3(.CLK(CLK), .RST(RST), .a(a),.b(b),.sum(sum)); 

always 
    begin 
     #10 CLK <= ~CLK; 
    end 

endmodule 

主要模塊:

module secret_number(CLK,RST,a,b,sum); 
input CLK, RST; 
input [4:0]a,b; 
output [6:0]sum; 
reg [6:0] sum; 
parameter my_secret = 0; 
[email protected](posedge CLK)  
    sum = a + b + my_secret; 
    initial begin 
    $display("%d", my_secret); 
      end 
    endmodule 

這是可能的???

回答

1

如果我理解正確,您想使用count來確定在計算sum時使用了哪個值my_secret。您現在已經掌握了測試平臺模塊所需的大部分功能,您只需要在各種secret_number模塊的結果值之間選擇一些邏輯即可。您目前擁有的所有這些模塊驅動同一矢量sum的,但他們確實應該找到不同的載體中,然後使用組合邏輯來選擇所需的結果:

wire [6:0] sum2, sum3, sum4, sum5; 
reg [6:0] sum; 
secret_number #(2) U0(.CLK(CLK), .RST(RST), .a(a),.b(b),.sum(sum2)); 
secret_number #(3) U1(.CLK(CLK), .RST(RST), .a(a),.b(b),.sum(sum3)); 
secret_number #(4) U2(.CLK(CLK), .RST(RST), .a(a),.b(b),.sum(sum4)); 
secret_number #(5) U3(.CLK(CLK), .RST(RST), .a(a),.b(b),.sum(sum5)); 

always @(*) begin 
    if (count <= 10) begin // Not sure if you want inclusive of 10, if not, do < 
    sum = sum2; 
    end 
    else if (count <= 20) begin 
    sum = sum3; 
    end 
    else if (count <= 30) begin 
    sum = sum4; 
    end 
    else 
    sum = sum5; 
    end 
end 

但是,你也可以有my_secret是輸入到模塊而不是參數,除非您需要在count大於10時使用my_secret = 2塊。如果您將其作爲輸入進行輸入,它將節省大量的面積。

(現在也是,在模塊內部應該是sum <= a + b + my_secret,使用NBA(<=)對於計時塊)

+0

感謝您的評論。總和是「wire」類型,它不能在always塊下聲明。任何建議來解決這個問題? – user2344774

+0

你說得對;抱歉;將'sum'改爲'reg',它會起作用(編輯上面的內容) – Unn

+0

這就是問題了...... sum應該是一個輸出,即它應該是一個線型。 – user2344774