Используете параметр для непрерывного присвоения в Verilog?

Можете ли вы использовать значение параметра для присвоения в Verilog? Могу ли я как-то определить ширину переменной параметра?

Ex:

module mymodule #(parameter type =2)
    (...
    output [(3+type)-1:0] out);
    wire [2:0] rate;
    ...
    assign out = {rate, {1'b0{type}} };
endmodule

Скажем просто type = 2. Тогда я бы хотел иметь длину в битах 5. Скорость по-прежнему имеет длину в битах 3 (скажем так, 3'b100), когда я назначаю, я хочу, чтобы она была 100 000.

Аналогично, если type = 6. Тогда я хотел бы иметь длину в битах 9. скорость по-прежнему имеет длину в битах 3 (опять же, скажем, ее 3'b100), когда я назначаю, я хочу, чтобы она была 100 000000.

Я не получаю никаких синтаксических ошибок, но когда я пытаюсь смоделировать это, я получаю: «ошибка: тип операнда конкатенации» имеет неопределенную ширину »

Как вы, ребята, подойдете к такой дизайнерской проблеме?


person Newbie    schedule 01.02.2013    source источник


Ответы (1)


У вас есть оператор повторения в обратном направлении. Должно быть

{type{1'b0}}, а не {1'b0{type}}

Я удивлен, что вы не видите здесь никаких синтаксических ошибок.

person Tim    schedule 01.02.2013