Использование параметра модуля в назначении Continuos (Systemverilog) - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь использовать генерацию в этом параметризованном модуле, но получаю неправильный вывод.

module constant_gen #( 
     parameter [4:0]round = 5'b00
   )
   (
     output [31:0] con
    );
        
    assign con = {round};//{round,5'b00000,round,2'b00,round,5'b00000,round} ^ 32'h6547a98b;    
endmodule
// Testbench
module constGen_tb;

    logic clk_i = 1;
    typedef logic [31:0] data_m [20:0];
    
    localparam period = 2;
    data_m const_table;
    

    //simulate the clock
    always 
    begin
      clk_i= 1; #period; clk_i= 0; #period;  // // 40ns period at each clock edge
    end
    
    genvar i;
    generate
        for (i=0; i < 20; i++) begin : con_gen
            constant_gen #(.RN(i)) dut (const_table[i]);
        end
    endgenerate   
    
    
    
    always @(negedge clk_i)
    begin
       
       for (integer i = 0; i <= 20; i = i + 1) begin
            $display("const: %h",const_table[i]);
       end       
       $finish;
   
    
    end   

endmodule

Вывод

const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 
const: 00000000 

Edaplayground: код игровой площадки здесь

1 Ответ

0 голосов
/ 03 августа 2020

В вашем примере имя параметра round отличается от того, которое вы используете при создании экземпляра: RN. Это должно работать:

          constant_gen #(.round(p)) dut (const_table[i]);

при компиляции есть предупреждение, на которое вы должны обратить внимание:

# ELBREAD: Warning: ELBREAD_0097 testbench.sv (21): Parameter 'RN' not found in work.constant_gen instantiated in unit work.const_gen_tb.
...