Как присвоить начальное значение входному регистру: Design compiler удалить назначение - PullRequest
0 голосов
/ 23 февраля 2019

Я новичок в дизайне ASIC.У меня есть дизайн, например, с двумя входами а, б.Я использую следующий код для инициализации этих двух сигналов.Но компилятор Design генерирует предупреждение о том, что регистр «a» является константой и будет удален.Когда я пытаюсь выполнить симуляцию после синтеза, все эти два сигнала - «z».Так, как я могу применить начальное назначение сигнала, чтобы избежать такой проблемы?

always @(posedge(clk) or posedge (rst)) begin
 if (rst) begin
     a<=4d'5;
     b  <=4'd10;
  end
end

1 Ответ

0 голосов
/ 23 февраля 2019

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

Вы можете думать о модуле как о блоке, который имеет входы и выходы.Значения выходных сигналов определяются входным сигналом + логика внутри коробки.Однако модуль не может решить, какими должны быть его входные данные.Это возможно только при наличии обратной связи, и даже в этом случае она будет зависеть от других сигналов, которые находятся вне контроля модуля.

В результате выходные сигналы могут быть объявлены как output reg, но это не относится к входам.Однако есть решение вашей проблемы, я думаю, что вы хотите, может быть разработан с использованием следующего метода:

module your_module(
input clk,
input rst,
//other inputs and outputs that you might need
input [3:0] a,
input [3:0] b
);
//define registers 
reg [3:0] a_register;
reg [3:0] b_register;
/* 
These registers are defined to make it possible to
to give any value to that logics when posedge rst 
is detected, otherwise you can use them as your
input logics
*/ 
//use initial block if you need
always@(posedge clk or posedge rst) begin
  if(rst) begin
    a_register <= 4'd5;
    b_register <= 4'd10;
  end
  else
    begin
      a_register <= a;
      b_register <= b;
      // and use a_register and b_register as you want to use a and b
    end
end
endmodule
...