создание ALU в Verilog

Мне было интересно, возможно ли иметь операторы if, поэтому для ALU я пытаюсь построить. Я передаю значения из испытательного стенда пути данных в путь данных, из пути данных в АЛУ и из АЛУ обратно в путь данных. Я пытаюсь создать блок управления, который будет передавать значения только через определенный компонент, если активирован соответствующий control_ALU.

Вот мой код Verilog:

module ALU (
  input en_ALU, clk_ALU,
  input [31:0]  inputA, inputB, control_ALU,
  output [31:0] resultc
);
wire [31:0] res_out;

always @(control_ALU)
begin       
  if(control_ALU[1])    begin       
    andLogic  andLogic_component(
      .dataA (inputA),
      .dataB (inputB) ,
      .resultA (res_out)
    );
  end
  if(control_ALU[2])    begin
    negate m0(
      .inputnegate  (inputA), 
      .resultnegate (res_out)
    );
  end   
end 

reg64bit z(
  .clk(clk_ALU) ,
  .clr(clr),
  .enable(en_ALU),
  .inputd(res_out),
  .outputq(resultc)
);      

endmodule

person harman litt    schedule 25.02.2015    source источник
comment
который будет передавать значения только через определенный компонент, если соответствующий control_ALU активирован. Нет, вы всегда должны управлять сигналами или их три состояния. Экземпляр модуля представляет собой аппаратное обеспечение, его нельзя создать или уничтожить на лету, как это подразумевает наличие экземпляра внутри if.   -  person Morgan    schedule 25.02.2015


Ответы (1)


Не уверен, что вы можете поместить экземпляр в оператор IF.

Но я знаю, что вы можете сначала объявить свой экземпляр, затем дать каждому из них другое имя вывода, а затем использовать оператор CASE или оператор IF, чтобы выбрать другой вывод в качестве вывода вашего верхнего модуля ALU.

case(funct)

3'b000: //ALU control signal
ALU_out = add;

3'b001: 
ALU_out = sub;

3'b010:
ALU_out = andlogic;

 ...
 ...
 ...

endcase

Не забудьте указать значение по умолчанию, если оператор case не завершен.

Надеюсь, это полезно. :-)

person Shuaiyu Jiang    schedule 25.02.2015