Я пишу модуль в Verilog, который использует параметры. Позже мне нужно будет несколько раз реализовать это в моем проекте, используя разные параметры, поэтому вместо создания нескольких модулей я хочу передать параметры, как если бы они были входными, хотя они указаны в компиляции.

Я думаю, что это можно сделать в VHDL, так что я думаю, что это можно сделать и в Verilog, хотя я ничего не могу найти.

0
Rodrigo Serna Pérez 22 Фев 2016 в 19:25

3 ответа

Лучший ответ

Модуль parameters можно переопределить двумя способами:

  1. Использование оператора defparam:

    module Stack;
    
    parameter param1 =  1;
    parameter param2 = 12;
    
    endmodule
    
    module Test;
    
    defparam s1.param1 =  6;
    defparam s1.param2 = 32;
    
    Stack s1();
    
    endmodule
    
  2. Передача параметров во время создания экземпляра: в этом методе параметры должны быть переопределены в том порядке, в котором они были определены, поэтому код ниже такой же, как и выше.

    module Stack;
    
    parameter param1 =  1;
    parameter param2 = 12;
    
    endmodule
    
    module Test;
    
    Stack #(6, 32) s1();
    
    endmodule
    
    • В Verilog 2001 есть новая функция, которая делает его более читабельным (обратите внимание, что все вышеперечисленные коды работают в Verilog 2001).

      module Stack;
      
      parameter param1 =  1;
      parameter param2 = 12;
      
      endmodule
      
      module Test;
      
      Stack #(.param1(6), .param2(32)) s1();
      
      endmodule
      
0
Mehran Torki 22 Фев 2016 в 18:39

По-другому.

`module top #(
parameter N, // Number of instance
parameter [(N*32-1):0] A, // First Parameter
parameter [(N*2-1):0] B   // second parameter
);
generate
for (int i=0; i<N; i++) begin: instance
  s #(.A(A[(i*32-1):0]),
      .B(B[(i*2-1):0])
     ) s_i;
end
endgenerate`
0
Sourabh 25 Фев 2016 в 07:32

Вы можете напрямую назначить параметр во время назначения входа и выхода. например: «параметр i0 = 0, i1 = 1;» и вызовите эти значения в коде, например: «a [0] = N [i0];» => 0-й бит входа N; будет храниться в 0-м бите reg a; "a [1] = N [i1];" => 1-й бит входа N; будет храниться в 1-м бите reg a; если ваш N равен 4'b1011, тогда значение «a = 0011». Возможно, вам придется инициализировать значение 0.

0
Satheesh.R 25 Фев 2016 в 06:27