2016-02-22 3 views
-1

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

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

+0

Ваш вопрос в стороне от использования 'defparam' в verilog? –

+0

Возможный дубликат [Передача параметров в модули Verilog] (http://stackoverflow.com/questions/27555273/passing-parameters-to-verilog-modules) – wilcroft

+0

Не могли бы вы проверить ответы ниже приятеля? –

ответ

0

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

  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

Вы можете напрямую назначить параметр во время ввода и вывода задания. например: «параметр 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». Возможно, вам придется инициализировать a до 0.

0

Другой способ.

`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` 
Смежные вопросы