Как избавиться от предупреждения списка чувствительности при синтезе кода Verilog? - PullRequest
3 голосов
/ 22 апреля 2010

Я получаю предупреждение:

Один или несколько сигналов отсутствуют в список чувствительности блока всегда.

always@(Address)begin
  ReadData = instructMem[Address];
end

Как мне избавиться от этого предупреждения?

Ответы [ 4 ]

6 голосов
/ 22 апреля 2010

Verilog не требует имен сигналов в списке чувствительности. Используйте синтаксис @*, чтобы указать, что блок always должен запускаться при изменении любого из его входных сигналов:

always @* begin 
    ReadData = instructMem[Address]; 
end 
1 голос
/ 22 апреля 2010

Добавьте InstructMem в список чувствительности.

0 голосов
/ 26 мая 2010

Я не уверен, как выглядит объявление instructMem. В любом случае, ReadData = instructMem [address] приведет к мультиплексору с адресом, который рассматривается как логика выбора, а instructMem как к линиям данных мультиплексора с использованием типичного инструмента синтеза. Вам нужно было бы добавить instructMem в список чувствительности, так как всякий раз, когда это меняется, также следует читать данные.

Я попробовал Icarus, и вы в любом случае не можете делать что-то вроде всегда @ (instructMem или address), где instructMem имеет объявление типа reg [7: 0] instructMem [255: 0] -> подразумевающее память.

Примечание: не пытайтесь синтезировать память Verilog таким способом, обычно вы должны создавать экземпляры IP-адресов памяти и подключаться к их портам. Продавцы предоставляют модели памяти для таких целей.

0 голосов
/ 02 мая 2010

Объявите ReadData как провод вместо reg, а затем замените свой блок всегда назначением.

assign ReadData = instructMem[Address];
...