Вы не можете иметь if
заявления внутри architecture
. Основная идея architecture
является параллельным выполнением всех операторов Там не существует понятия порядка. например,
architecture Struct of Counter
signal A1: bit;
signal A2: bit;
begin
A1 <= A2 and '1';
A2 <= '1';
end Struct;
Если это был последовательный блок, A1
выводит 0
, так как A2
берет значение по умолчанию 0
. Но алгоритм VHDL выполняет этот блок умно несколько раз, давая эффект, что оба утверждения и A2 <= '1';
произошли одновременно.
Следовательно, если вы запустите этот код, вы получите A1
как 1
и A2
как 1
.
На ваш вопрос, if
- это последовательный оператор и не может быть внутри процесса из-за его последовательного характера. Тем не менее, when
может использоваться непосредственно, давая эффект мультиплексора .
Глядя на ваш код, кажется, вы хотели сделать чувствительную к уровню защелку. Так вы можете это сделать.
architecture behavior of IR_REG is
signal temp: std_logic_vector(1 downto 0);
begin
process(IR_LD, Input, temp, clk)
begin
if IR_LD = '1' and clk = '1' then
temp <= Input;
end if;
if IR_LD = '1' and clk = '0' then
IR <= temp;
end if;
end process;
end behavior;
Этот код даст эффект мультиплексора, но кажется, что вы хотите создать защелку, как показано выше.
architecture behavior of IR_REG is
signal temp: std_logic_vector(1 downto 0);
begin
temp <= Input when clk = '1' and IR_LD = '1' else "00";
IR <= temp when clk = '0' and IR_LD = '1' else "00";
end behavior;
Оператор If является последовательным заявлением. Часть оператора структуры архитектуры будет содержать параллельные операторы. – user1155120
Возможный дубликат [Синтаксис ошибки VHDL рядом с] (http://stackoverflow.com/questions/20435228/vhdl-syntaxe-error-near-if) – sonicwave