Я пишу код для множителя 8x8. Я использую вложенные операторы if. С помощью приведенного ниже кода, когда условие для a = x "02" истинно, тогда вывод c
становится неопределенным (U
).
1) Является ли мое вложение правильными?
2) Есть ли какие-либо синтаксические ошибки в моем коде во время вложения?
entity mul is
Port (
a : in STD_LOGIC_VECTOR (7 downto 0);
b : in STD_LOGIC_VECTOR (7 downto 0);
c : out STD_LOGIC_VECTOR (7 downto 0)
);
end mul;
architecture Behavioral of mul is
signal s1,s2: STD_LOGIC_VECTOR(7 DOWNTO 0);
begin
process(b)
begin
s2 <= x"1B";
if a = x"01" then
c <= b;
-- ERROR OCCURING HERE
elsif a = x"02" then
if b(7) = '1' then
s1(7) <= b(6);
s1(6) <= b(5);
s1(5) <= b(4);
s1(4) <= b(3);
s1(3) <= b(2);
s1(2) <= b(1);
s1(1) <= b(0);
s1(0) <= '0';
c <= s1 xor s2;
else
s1(7) <= b(6);
s1(6) <= b(5);
s1(5) <= b(4);
s1(4) <= b(3);
s1(3) <= b(2);
s1(2) <= b(1);
s1(1) <= b(0);
s1(0) <= '0';
c <= s1;
end if;
elsif a = x"03" then
if b(7) = '1' then
s1(7) <= b(6);
s1(6) <= b(5);
s1(5) <= b(4);
s1(4) <= b(3);
s1(3) <= b(2);
s1(2) <= b(1);
s1(1) <= b(0);
s1(0) <= '0';
c <= (s1 xor s2) xor b;
else
s1(7) <= b(6);
s1(6) <= b(5);
s1(5) <= b(4);
s1(4) <= b(3);
s1(3) <= b(2);
s1(2) <= b(1);
s1(1) <= b(0);
s1(0) <= '0';
c <= s1 xor b;
end if;
end if;
end process;
end Behavioral;