Неполный список чувствительности в 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 нет многочастотных, многоканальных регистров.

Другие вопросы по тегам