问题描述
我正在编写一个 vhdl 代码,它应该可以完成许多功能。我的代码和我的测试平台都运行良好。但在模拟中什么都没有初始化。我真的不明白为什么以及我的错误到底在哪里。如果有人帮助我解决我的问题,我将不胜感激。 “当启用为'1'并且在上升沿时钟中时代码应该工作。并且使用不同的S值它应该做不同的事情。
我的模拟错误是:
ERROR: at 0 ps: Delay 20000 fs 不大于先前分配给目标信号 a 的波形元素延迟 20000 fs 错误:正在处理 MyProject_tb.vhd:34
我的代码是:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY alu_test IS
END alu_test;
ARCHITECTURE test of alu_test IS
COMPONENT ALU IS
port(
A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
enable : IN STD_LOGIC;
clk : IN STD_LOGIC;
s : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
carry : OUT STD_LOGIC;
c : INOUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END COMPONENT;
SIGNAL a : STD_LOGIC_VECTOR(3 downto 0);
SIGNAL b : STD_LOGIC_VECTOR(3 downto 0);
SIGNAL c : STD_LOGIC_VECTOR(3 downto 0);
SIGNAL s : STD_LOGIC_VECTOR(1 downto 0) := "00";
SIGNAL en : STD_LOGIC := '1';
SIGNAL cl : STD_LOGIC := '1';
SIGNAL car : STD_LOGIC;
BEGIN
uut : ALU PORT MAP(a,b,en,cl,s,car,c);
en <= '1';
cl <= not cl AFTER 20 NS;
a <= "0001","1101" AFTER 20 NS,"1110" AFTER 20 NS;
b <= "1101","0101" AFTER 20 NS,"1111" AFTER 20 NS;
s <= "01","00" AFTER 20 NS,"10" AFTER 20 NS;
END test;
还有我的测试台:
Error in names(filedatatypelist_DHS) <- paste0("filedatatypelist_",qdapRegex::rm_between(filedatatypelist_DHS_line,: 'names' attribute [1] must be the same length as the vector [0]
以及我的模拟的样子: enter image description here
解决方法
线条
a <= "0001","1101" AFTER 20 NS,"1110" AFTER 20 NS;
b <= "1101","0101" AFTER 20 NS,"1111" AFTER 20 NS;
s <= "01","00" AFTER 20 NS,"10" AFTER 20 NS;
不要做你最有可能期望他们做的事情。
对于信号 a
,您很可能需要“0001”、“1101”和“1110”的序列,其间有 20 ns。否则(如错误消息所示),您将同时将“1101”和“1110”分配给 a
(在 20 ns 之后),这是不可能的。因此,将您的行重新格式化为:
a <= "0001","1110" AFTER 40 NS;
不过,我更喜欢使用 wait
语句(在进程内)来摆动刺激信号,例如:
process
begin
a <= "0001";
wait for 20 ns;
a <= "1101";
-- and so on...
在此之后,您的设计 (ALU) 中会出现一些错误,但修复它们将是另一个问题...