Verilog: определение значений параметров в операторе case?

Мне нужно определить значения параметров, которые зависят от некоторых других входных данных. Я пробовал следующим образом, но он не работает. любые другие альтернативные методы?

 module (...)
...
input sel ;
..
case (sel)
0: parameter data1 =5;
1: parameter data1 =5;
endcase
...

Спасибо


person vlsi2013    schedule 26.02.2013    source источник
comment
Можете ли вы опубликовать свой полный код? Непонятно, почему вы используете параметр (постоянный), который зависит от входного порта.   -  person    schedule 26.02.2013


Ответы (1)


Параметры являются константами, поэтому их нельзя изменить во время выполнения, и они не будут работать с динамическими структурами.

Если вам нужно установить значения на основе входных данных, которые меняются во время выполнения, и вам просто нужно определить провод или рег правильной ширины.

В качестве альтернативы для констант вы можете использовать иерархические параметры, в которых вы передаете значения, но все они должны быть основаны на параметрах или константах.

module top();
  localparam DATA_WIDTH = 32;

  middle #(
    .DATA_WIDTH( DATA_WIDTH )
  ) middle_0();

endmodule

module middle #(
  parameter DATA_WIDTH = -1

  //DO NOT MODIFY
  parameter DATA_OUT_WIDTH = DATA_WIDTH + 10;
)(
  output [DATA_OUT_WIDTH-1:0] data_tx
);
endmodule

Для вашего случая:

module (...)
...
input sel ;
..
  reg [3:0] data1;
  always @*
    case (sel)
      0: data1 =5;
      1: data1 =5;
    endcase
  end

endmodule
person Morgan    schedule 26.02.2013
comment
Спасибо за помощь . но мне нужно определить параметр, так как у меня уже есть модуль, написанный с использованием параметра. Если я изменю параметр на reg, мне, возможно, придется изменить весь код? Я попытался перегрузить параметр, но это дает ошибку, так как создаваемый модуль не ожидает параметр. Пожалуйста, предложите - person vlsi2013; 26.02.2013
comment
Если он используется для определения ширины пути данных, он не будет работать, если он используется только для констант справа от назначений, тогда он должен работать. - person Morgan; 26.02.2013
comment
Да, мое требование только для констант, а не для определения ширины пути данных - person vlsi2013; 26.02.2013
comment
reg будет работать, но если я перейду на reg, мне придется изменить другие аспекты кода. В любом случае попробую - person vlsi2013; 26.02.2013
comment
@ Adam12 — параметр зависит от другого модуля. Таким образом, это постоянное значение определяется из другого модуля. Я не могу публиковать код из-за проблем с IP. Кроме того, код достаточно большой и не может быть опубликован. Поэтому я просто дал пример кода. - person vlsi2013; 27.02.2013