Мои входные данные являются комплиментом 2, и я разработал входное число со знаком, а вся операция использует число со знаком, библиотеку, которую я использовал ieee.numeric_std.all, но когда я делаю «+», возникает ошибка «найдены определения» 0 оператора "+", не может определить точное определение перегруженного сопоставления для "+"". Поэтому я изменил другую на другую библиотеку ieee.std_logic_arith.all и сделал операцию добавления как компонент, она работает. когда я имитировал свой код с помощью тестового стенда, произошла ошибка: порт объекта xin не соответствует типу, подписанному портом компонента. Я думаю, что эта ошибка связана с моей библиотекой. Может кто-нибудь помочь мне ?
новый
я не использую сумматор в качестве компонента, и приведенный ниже код работает
adder: process(clk)
begin
if (clk'event and clk = '1')then
if enable1='1' then
add1 <= (x0(7)&x0) + (x15(8)&x15);
add2 <= (x1(7)&x1) + (x14(8)&x14);
add3 <= (x2(7)&x2) + (x13(8)&x13);
add4 <= (x3(7)&x3) + (x12(8)&x12);
add5 <= (x4(7)&x4) + (x11(8)&x11);
add6 <= (x5(7)&x5) + (x10(8)&x10);
add7 <= (x6(7)&x6) + (x9(8)&x9);
add8 <= (x7(7)&x7) + (x8(8)&x8);
end if;
end if;
end process adder;
и библиотека моего тестового стенда использует use ieee.numeric_std.all;
USE ieee.std_logic_1164.ALL;
use ieee.numeric_std.all;
use ieee.std_logic_textio.all;
use std.textio.all;
ENTITY tb_signedinput IS
END tb_signedinput;
ARCHITECTURE behavior OF tb_signedinput IS
-- Component Declaration
COMPONENT signedinput is
port( Clk : in std_logic;
reset : in std_logic;
enable1 : in std_logic;
Xin : in signed(7 downto 0);
Yout : out signed(19 downto 0)
);
END COMPONENT;
--Inputs
signal Clk : std_logic := '0';
signal reset : std_logic := '0';
signal Xin : signed(7 downto 0) := (others => '0');
signal enable1 : std_logic := '0';
--Outputs
signal Yout : signed(19 downto 0);
-- Array
constant MEMSIZE: integer :=99;
type testarray is array (MEMSIZE downto 0) of signed(7 DOWNTO 0);
signal testvectors: testarray;
shared variable vectornum,outnum: integer;
-- Clock period definitions
constant Clk_period : time := 10 ns;
BEGIN
-- Component Instantiation
uut: signedinput PORT MAP( Clk => Clk,
reset => reset,
Xin => Xin,
enable1 =>enable1,
Yout => Yout );
ошибка все еще возникает:
Entity port xin does not match with type std_logic_vector of component port
Entity port yout does not match with type std_logic_vector of component port
поэтому я снова изменил свой сумматор на
add1 <= resize(x0,9) + x15;
синтаксис хороший, но та же ошибка в тестовом стенде..
Ошибка связана с моим типом ISE или типом библиотеки? Спасибо!