массив параметров systemverilog в модуле, как установить один элемент массива параметров при создании экземпляра модуля

я пытаюсь создать модуль, который имеет другой модуль памяти, я пытаюсь иметь один параметр, который из массива, и с помощью этого параметра следующий код будет генерировать экземпляр модулей, теперь я пытаюсь создать экземпляр этого модуля с установкой только одного элемента этот массив параметров только одного индекса

Теперь приведенный ниже код даст вам представление о том, что я пробовал, но компилятор выдает ошибку, поскольку -- "" MEM_AT_CS не является массивом""

/////////////////////////////////////////////////////////

typedef enum   {NONE , SSRAM_X16 , SSRAM_X32 , SDRAM_X8 , SDRAM_X16 , 
                SDRAM_X32 , SYNC , ASYNC} memory_config_type;

module MEM_MODEL_WRAPPER (mem_intf intf , input logic mc_clk);

  parameter no_of_chip_select = 8;
  parameter memory_config_type MEM_AT_CS[no_of_chip_select-1 :0] = 
         '{NONE ,NONE ,NONE ,NONE ,NONE ,NONE ,NONE ,NONE  };


  genvar i;

  generate
    for(i=0 ; i<no_of_chip_select;i++) begin    

       case(MEM_AT_CS[i]) 
       SDRAM_X8:begin       
             .
             .
             .

теперь верхний модуль

module top ;

  //////////here i want to set the parameter array by index 

  defparam mem_dut.MEM_AT_CS[2] = SSRAM_X16;

  MEM_MODEL_WRAPPER  mem_dut(mem_intf , mc_clk);

endmodule       

Я тоже пробовал это

MEM_MODEL_WRAPPER #( .MEM_AT_CS[2] (SSRAM_X16) ) 
                                    mem_dut(mem_intf , mc_clk);

person Ganesh Rahate    schedule 15.01.2019    source источник


Ответы (2)


Вы не можете сделать это для части параметра. Вам нужно установить весь массив. Вот пример:

module M#(parameter int array[2] = '{1,2})();
   initial $display("%m {%0d,%0d}", array[0], array[1]);
endmodule // M

module top();
   M m1();

   M m2();
   defparam m2.array = '{3, 4};

   M #(.array('{5,6}))m3()   ;
endmodule // top
person Serge    schedule 15.01.2019
comment
Кстати, я предлагаю держаться подальше от defparam. - person Serge; 16.01.2019

SystemVerilog не позволяет использовать частичный массив параметров (т. е. просто назначать один индекс массива параметров). Вы можете назначить весь массив сразу:

MEM_MODEL_WRAPPER #(.MEM_AT_CS('{NONE, NONE, SSRAM_X16, NONE, NONE, NONE, NONE, NONE})) mem_dut(mem_intf , mc_clk);
person Unn    schedule 15.01.2019