2015-03-12 4 views
-1

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

module Reg8bit(
    input CLK, 
    input En, 
    input CLR, 
    input [7:0] in, 
    output [7:0] out 
    ); 

    reg[7:0] temp; 

    always @(posedge CLK) 
    begin 
     if (En) 
     begin 
      if (CLR) 
       out = 8'b0000_0000; 
      else 
       out = in; 
     end 
    end 

    assign out = tempQ; 

endmodule 

Edit: температура должна быть tempQ, извините за опечатку

+1

Что такое tempQ? Вы только объявили reg temp. – Atomix

+1

Также вы, вероятно, захотите написать temp <= внутри инструкции else. – Atomix

ответ

2

вероятно Вы имели в виду, чтобы написать

module Reg8bit(
    input CLK, 
    input En, 
    input CLR, 
    input [7:0] in, 
    output reg [7:0] out // out is a variable, not a wire 
    ); 

    always @(posedge CLK) 
    begin 
     if (En) 
     begin 
      if (CLR) 
       out <= 8'b0000_0000; // use Non-blocking assignments 
      else 
       out <= in; 
     end 
    end 
endmodule 
+0

Imho - это то, чего он хочет достичь, но это не то, что он хотел написать;) – Qiu

+0

Почему <= work и = нет, это не логика, содержащаяся в if else так почему бы <= быть чем-то иным, чем = после, если оценивается как true или false? – Urler

+0

out <= in; означает, что «выход» будет принимать значение «in» на следующем фронте. out = in означает, что 'out' немедленно примет значение 'in' (по крайней мере в этих обстоятельствах) – Atomix

0

Ваш код не имеет особого смысла. Вы назначаете два раза и не используете свой временный регистр.

вероятно Вы имели в виду, чтобы написать что-то вроде этого:

reg[7:0] temp; 

always @(posedge CLK) 
begin 
    if (En) 
    begin 
     if (CLR) 
      temp <= 0; 
     else 
      temp <= in; 
    end 
end 

assign out = temp; 

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

+0

Также 'temp <= 8'b0000_0000;' – Qiu

0

В LHS из Назначают заявления всегда должен быть провод. Вы заявили как reg, и хорошо использовать тип данных reg в LHS внутри всегда блока.

Смежные вопросы