Неполный список чувствительности в VHDL с редактором Sigasi
В настоящее время я пытаюсь развить свои навыки VHDL и поэтому использую плагин Sigasi для Eclipse для написания некоторого кода VHDL. Сигаши - отличный инструмент, но есть одна вещь, которая меня беспокоит. Постоянно Sigasi выбрасывает предупреждения о неполных списках чувствительности в определениях процессов, которые не оправданы с моей точки зрения. Одним из примеров является следующий объект с соответствующей архитектурой. Это описание регистра сдвига кольца
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity RingShiftReg is
generic(
WIDTH : integer := 8
);
port(
clock : in std_ulogic;
reset : in std_ulogic;
set : in std_ulogic;
initValue : in std_ulogic_vector(WIDTH - 1 downto 0);
value : out std_ulogic_vector(WIDTH - 1 downto 0)
);
end;
architecture ringShiftRegArch of RingShiftReg is
signal innerValue : std_ulogic_vector(WIDTH - 1 downto 0);
begin
P1: process(clock, reset)
begin
if reset = '1' then
innerValue <= (others => '0');
elsif rising_edge(clock) then
if set = '1' then
innerValue <= initValue;
end if;
else
innerValue <= innerValue(WIDTH - 2 downto 0) & innerValue(WIDTH - 1);
end if;
end process;
value <= innerValue;
end ringShiftRegArch;
Sigasi Linter утверждает, что список чувствительности процесса P1
неполный, потому что сигнал innerValue
пропал, отсутствует. Но по моему, ставить не обязательно innerValue
в списке чувствительности, потому что это полностью зависит от clock
а также reset
,
Что сейчас правильно?
2 ответа
Возможно, вы имели в виду это?
elsif rising_edge(clock) then
if set = '1' then
innerValue <= initValue;
else
innerValue <= innerValue(WIDTH - 2 downto 0) & innerValue(WIDTH - 1);
end if;
end if;
Короче говоря, ваш
else
innerValue <= ...
end if;
не имеет смысла в классическом цифровом оборудовании, потому что в этом контексте ваш else
средства:
clock
или жеreset
(или оба) изменились, иreset
не равно'1'
, а также- это не передний край
clock
,
Итак, это может быть:
- падающий край
reset
, или же - падающий край
clock
в то время какreset
равняется'0'
,
Вероятно, не то, что вы хотели. Если это то, что вы намеревались, вы должны попытаться найти другую целевую технологию. Классическое цифровое оборудование не может этого достичь, потому что в библиотеках стандартных ячеек ASIC или в FPGA нет многочастотных, многоканальных регистров.