Я написал программу для modelsim, которая добавляет к числам и помещает результат в Ra / Sum.Я использовал буфер с тремя состояниями, но получаю следующее: Fatal: (vsim-3420) Длина массива не совпадает.Слева 16 (15 до 0).Справа 8 (7 до 0).Я понимаю, что это потому, что они имеют разную длину.Но они также не могут иметь одинаковую длину, потому что тогда я получаю ошибку при добавлении add1 и add2 и размещении их в Sum.Так что я могу сделать, чтобы заставить эту работу?
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.numeric_std.all;
entity MAC is
generic (width: integer := 8);
port(
clk, reset : in STD_LOGIC;
MLS_select : in STD_LOGIC;
Rn, Rm, Ra : in STD_LOGIC_VECTOR(width-1 downto 0);
Rd : out STD_LOGIC_VECTOR(width-1 downto 0)
);
end;
architecture behavioral of MAC is
signal mul1, mul2, add1 : UNSIGNED(width-1 downto 0);
signal add2, sum : UNSIGNED(width*2-1 downto 0);
begin
process(clk, reset)
begin
if reset = '1' then Rd <= (others => '0');
elsif rising_edge(clk) then
Rd <= STD_LOGIC_VECTOR(sum(width-1 downto 0));
end if;
end process;
mul1 <= UNSIGNED(Rn);
mul2 <= UNSIGNED(Rm);
add1 <= UNSIGNED(Ra);
add2 <= mul1*mul2;
sum <= add2 when clk = '1' else add2;
sum <= add1+add2;
end architecture;