Исправление ошибок добавления / смещения тестового стенда Vivado (VHDL)? - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь создать файл тестового стенда для имитации моего модуля добавления / подчинения и получил две следующие ошибки:

  • ОШИБКА: [USF-XSim-62] не удалось выполнить «подробный» шагс ошибкой (ями).Пожалуйста, проверьте выходные данные консоли Tcl для получения дополнительной информации
  • ОШИБКА: [Vivado 12-4473] Обнаружена ошибка во время симуляции.Пожалуйста, исправьте проблему и попробуйте снова выполнить эту операцию

Я пытался сделать мой код более приятным и менее избыточным с помощью STD_LOGIC_VECTOR.Мне интересно, если я реализовал это неправильно или что-то еще не так с моим VHDL-кодом?

Или моя проблема в неправильном объявлении моей сущности?Сначала я создал полный сумматор с кодом VHDL, а затем использовал блок-схемы для создания своего модуля add / sub.Когда я создал блок-схему, мне пришлось применить оболочку, чтобы установить свои ограничения.Таким образом, я никогда не называл сущность, но в «Источниках проектирования» она указана как «AddSub_1_wrapper», а развернутая блок-схема называется «AddSub_1».

В «сложном» файле содержалось следующее:

Vivado Simulator 2018.2
Copyright 1986-1999, 2001-2018 Xilinx, Inc. All Rights Reserved.
Running: C:/Xilinx/Vivado/2018.2/bin/unwrapped/win64.o/xelab.exe -wto 
53289afc3c364a2082c40394db3142eb --incr --debug typical --relax --mt 2 -L 
xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -L xpm --snapshot 
testBench_lab2_behav xil_defaultlib.testBench_lab2 xil_defaultlib.glbl -log 
elaborate.log 
Using 2 slave threads.
Starting static elaboration
ERROR: [VRFC 10-923] index value <3> is out of range [2:0] of array <abc>
[C:/Users/jstev/Desktop/lab_2.1/lab_2.1.srcs/sim_1/new/addSub_TestBench.vhd:41] 
ERROR: [VRFC 10-923] index value <3> is out of range [2:0] of array <def>
[C:/Users/jstev/Desktop/lab_2.1/lab_2.1.srcs/sim_1/new/addSub_TestBench.vhd:42] 
ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) in library work failed.

ПРИМЕЧАНИЕ. Входной контакт OP переходит в «1» для выполнения вычитания, «0» для сложения.Кроме того, модуль add / sub работает, как ожидается, на физическом устройстве FPGA.

-----------------------------------------------------------------
-- Module Name: testBench_lab2
-- Target Devices: FPGA xc7a35tcpg236-1
-----------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity testBench_lab2 is
--  Port ( );
end testBench_lab2;

architecture Behavioral of testBench_lab2 is
    -- declare component teting --
    component AddSub_1_wrapper
       Port (A_0,A_1,A_2 : in STD_LOGIC;
             B_0,B_1,B_2 : in STD_LOGIC;
             OP: in STD_LOGIC;
             S_0,S_1,S_2 : out STD_LOGIC;
             Sign : out STD_LOGIC);
    end component;

    -- declare internal signals --
    signal abc : STD_LOGIC_VECTOR (2 downto 0);
    signal def : STD_LOGIC_VECTOR (2 downto 0);
    signal OP: STD_LOGIC := '0';
    signal S_0,S_1,S_2 : STD_LOGIC := '0';
    signal Sign: STD_LOGIC := '0';

begin
    UTT : AddSub_1_wrapper
        port map(A_0=>abc(3),A_1=>abc(2),A_2=>abc(3),
                 B_0=>def(3),B_1=>def(2),B_2=>def(3),
                 S_0=>S_0,S_1=>S_1,S_2=>S_0,
                 OP=>OP,Sign=>Sign);

    -- start testing process --
    process 
    begin
        -- add --
        wait for 30 ns;
        abc<="000"; def<="000"; wait for 10 ns; -- zero
        abc<="000"; def<="001"; wait for 10 ns; -- one
        abc<="001"; def<="001"; wait for 10 ns; -- one
        abc<="010"; def<="001"; wait for 10 ns; -- three
        abc<="011"; def<="001"; wait for 10 ns; -- four
        abc<="001"; def<="100"; wait for 10 ns; -- five
        abc<="100"; def<="010"; wait for 10 ns; -- six
        abc<="011"; def<="100"; wait for 10 ns; -- seven
        abc<="011"; def<="101"; wait for 20 ns; -- eight

        -- subtract --
        wait for 30 ns;  
        OP<='1';abc<="010"; def<="010"; wait for 10 ns; -- zero
        OP<='1';abc<="100"; def<="101"; wait for 10 ns; -- neg one
        OP<='1';abc<="001"; def<="011"; wait for 10 ns; -- neg two
        OP<='1';abc<="100"; def<="111"; wait for 10 ns; -- neg three 
        OP<='1';abc<="010"; def<="110"; wait for 10 ns; -- neg four
        OP<='1';abc<="001"; def<="110"; wait for 20 ns; -- neg five

    end process;
end Behavioral;
...