#vhdl #test-bench #active-hdl
Вопрос:
здесь кодируется некоторое предупреждение, но ошибок не обнаружено, но тестовый стенд этой полной выходной формы сигнала суммируется и не отображается. там показано u в выводе переноса и суммы, но не входы в порядке, только вывод суммы и переноса-это проблема, почему здесь есть некоторое предупреждение, иногда я сомневаюсь в этом предупреждении , здесь я прикрепил изображение, на которое вы ссылаетесь, и дайте мне несколько советов по решению этой проблемы. введите описание изображения здесь
-- 1-bit full adder testbench
-- A testbench is used to rigorously tests a design that you have made.
-- The output of the testbench should allow the designer to see if
-- the design worked. The testbench should also report where the testbench
-- failed.
LIBRARY IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Declare a testbench. Notice that the testbench does not have any input
-- or output ports.
entity tb_1bitfulladder is
end tb_1bitfulladder;
-- Describes the functionality of the tesbench.
architecture MY_TEST of tb_1bitfulladder is
-- The object that we wish to test is declared as a component of
-- the test bench. Its functionality has already been described elsewhere.
-- This simply describes what the object's inputs and outputs are, it
-- does not actually create the object.
component FULL_ADDER
port( x, y, Cin : in STD_LOGIC;
s, Cout : out STD_LOGIC );
end component;
-- Specifies which description of the adder you will use.
--for U1: FULL_ADDER use entity WORK.FULL_ADDER(MY_DATAFLOW);
-- Create a set of signals which will be associated with both the inputs
-- and outputs of the component that we wish to test.
signal X_s, Y_s : STD_LOGIC:='0';
signal CIN_s : STD_LOGIC:='0';
signal SUM_s : STD_LOGIC;
signal COUT_s : STD_LOGIC;
-- This is where the testbench for the FULL_ADDER actually begins.
BEGIN
-- Create a 1-bit full adder in the testbench.
-- The signals specified above are mapped to their appropriate
-- roles in the 1-bit full adder which we have created.
UUT: FULL_ADDER port map (x=>X_s, --(//this line has some warning i put it below END Othecode)
y=>Y_s,
Cin=>CIN_s,
s => SUM_s,
Cout=> COUT_s
);
-- The process is where the actual testing is done.
-- stimulus process
stim_proc:process
begin
-- We are now going to set the inputs of the adder and test
-- the outputs to verify the functionality of our 1-bit full adder.
-- Case 0 : 0 0 with carry in of 0.
-- Set the signals for the inputs.
X_s <= '0';
Y_s <= '0';
CIN_s <= '0';
-- Wait a short amount of time and then check to see if the
-- outputs are what they should be. If not, then report an error
-- so that we will know there is a problem.
wait for 10 ns;
assert ( SUM_s = '0' ) report "Failed Case 0 - SUM" severity error;
assert ( COUT_s = '0' ) report "Failed Case 0 - COUT" severity error;
wait for 40 ns;
-- Carry out the same process outlined above for the other 7 cases.
-- Case 1 : 0 0 with carry in of 1.
X_s <= '0';
Y_s <= '0';
CIN_s <= '1';
wait for 10 ns;
assert ( SUM_s = '1' ) report "Failed Case 1 - SUM" severity error;
assert ( COUT_s = '0' ) report "Failed Case 1 - COUT" severity error;
wait for 40 ns;
-- Case 2 : 0 1 with carry in of 0.
X_s <= '0';
Y_s <= '1';
CIN_s <= '0';
wait for 10 ns;
assert ( SUM_s = '1' ) report "Failed Case 2 - SUM" severity error;
assert ( COUT_s = '0' ) report "Failed Case 2 - COUT" severity error;
wait for 40 ns;
-- Case 3 : 0 1 with carry in of 1.
X_s <= '0';
Y_s <= '1';
CIN_s <= '1';
wait for 10 ns;
assert ( SUM_s = '0' ) report "Failed Case 3 - SUM" severity error;
assert ( COUT_s = '1' ) report "Failed Case 3 - COUT" severity error;
wait for 40 ns;
-- Case 4 : 1 0 with carry in of 0.
X_s <= '1';
Y_s <= '0';
CIN_s <= '0';
wait for 10 ns;
assert ( SUM_s = '1' ) report "Failed Case 4 - SUM" severity error;
assert ( COUT_s = '0' ) report "Failed Case 4 - COUT" severity error;
wait for 40 ns;
-- Case 5 : 1 0 with carry in of 1.
X_s <= '1';
Y_s <= '0';
CIN_s <= '1';
wait for 10 ns;
assert ( SUM_s = '0' ) report "Failed Case 5 - SUM" severity error;
assert ( COUT_s = '1' ) report "Failed Case 5 - COUT" severity error;
wait for 40 ns;
-- Case 6 : 1 1 with carry in of 0.
X_s <= '1';
Y_s <= '1';
CIN_s <= '0';
wait for 10 ns;
assert ( SUM_s = '0' ) report "Failed Case 6 - SUM" severity error;
assert ( COUT_s = '1' ) report "Failed Case 6 - COUT" severity error;
wait for 40 ns;
-- Case 7 : 1 1 with carry in of 1.
X_s <= '1';
Y_s <= '1';
CIN_s <= '1';
wait for 10 ns;
assert ( SUM_s = '1' ) report "Failed Case 7 - SUM" severity error;
assert ( COUT_s = '1' ) report "Failed Case 7 - COUT" severity error;
wait for 40 ns;
end process;
END MY_TEST;
Warning: ELAB1_0026: tb_1bitfulladder.vhd : (35, 0): There is no default binding for component "FULL_ADDER". (No entity named "FULL_ADDER" was found).
Комментарии:
1. Ошибка заключается в том, что он не может найти код для
FULL_ADDER
. Вам нужно будет добавить его перед моделированием.2. это не ошибка, это предупреждение , если это будет ошибка, то я не смогу запустить симуляцию, как на прикрепленном изображении выше.
3. Нет ничего противозаконного в том, чтобы разработать иерархию дизайна с одним или несколькими несвязанными экземплярами компонентов, думайте об этом как о макетной доске с не установленным компонентом. Это специально разрешено стандартом VHDL. У вас нет явной привязки, и привязка по умолчанию не идентифицирует сущность FULL_ADDER как непосредственно видимую, она не была успешно проанализирована (скомпилирована) и добавлена в рабочую библиотеку, и нет предложения библиотеки и предложения использования, делающего ее видимой в другой справочной библиотеке. Поставщики симуляторов добавляют предупреждение для тех, кто не намерен оставлять компоненты несвязанными.
4. Это
--for U1: FULL_ADDER use entity WORK.FULL_ADDER(MY_DATAFLOW);
без комментариев и UUT, замененное на U1, будет спецификацией конфигурации, предоставляющей явное указание на привязку. Ваш преподаватель курса хотел, чтобы вы успешно проанализировали поток данных entity FULL_ADDER и архитектуры в текущей рабочей библиотеке. С явным указанием привязки вы получите сообщение об ошибке.5. IEEE Std 1076-2008 13.5 Порядок анализа «Если при попытке анализа конструкторской единицы обнаруживается какая-либо ошибка, то попытка анализа отклоняется и не оказывает никакого влияния на текущую рабочую библиотеку». Вы пытались проанализировать FULL_ADDER и его архитектуру в текущей рабочей библиотеке и потерпели неудачу?