Vhdl Isim模拟中未显示信号
我正在编写一个vhdl代码,该代码应该可以完成许多功能。我的代码和测试平台都运行良好。但在模拟中,没有初始化任何内容。我真的不明白我的错误到底是什么,在哪里。如果有人能帮我解决问题,我将不胜感激。 “当enable为'1'且处于上升沿clk时,该代码应能工作。对于不同的S值,它应执行不同的操作 我的模拟中的错误有: 错误:在0 ps时:目标信号a的分配中,延迟20000 fs不大于先前的波形元素延迟20000 fs 错误:正在处理MyProject_tb。vhd:34 我的代码是:Vhdl Isim模拟中未显示信号,vhdl,xilinx,digital,xilinx-ise,vhd,Vhdl,Xilinx,Digital,Xilinx Ise,Vhd,我正在编写一个vhdl代码,该代码应该可以完成许多功能。我的代码和测试平台都运行良好。但在模拟中,没有初始化任何内容。我真的不明白我的错误到底是什么,在哪里。如果有人能帮我解决问题,我将不胜感激。 “当enable为'1'且处于上升沿clk时,该代码应能工作。对于不同的S值,它应执行不同的操作 我的模拟中的错误有: 错误:在0 ps时:目标信号a的分配中,延迟20000 fs不大于先前的波形元素延迟20000 fs 错误:正在处理MyProject_tb。vhd:34 我的代码是: LIBRAR
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY 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 ALU;
ARCHITECTURE Project of ALU is
signal mult : STD_LOGIC_VECTOR(7 DOWNTO 0);
signal temp : std_logic_vector(3 DOWNTO 0);
begin
p1: PROCESS(enable, clk, s)
BEGIN
IF (enable = '1' AND (clk'EVENT AND clk = '1') AND s = "00") THEN
-- cyclic shift on B
carry <= '0';
c(0) <= B(3);
l1: FOR i IN 1 TO 3 LOOP
c(i) <= B(i-1);
END LOOP;
END IF;
END PROCESS;
p2 : PROCESS(enable, clk, s)
BEGIN
IF (enable = '1') THEN
IF (clk'EVENT AND clk = '1') THEN
IF (s = "01") THEN
--Multiply A and B
c <= "0000";
carry <= '0';
mult <= std_logic_vector(unsigned(A) * unsigned(B));
c <= ("0000" & c);
c <= mult;
END IF;
END IF;
END IF;
END PROCESS;
p3: PROCESS(enable, clk, s)
BEGIN
IF (enable = '1') THEN
IF (clk'EVENT AND clk = '1') THEN
IF (s = "10") THEN
--Two's Compliment of A
carry <= '0';
temp <= not A;
c <= std_logic_vector(unsigned(temp) + 1);
END IF;
END IF;
END IF;
END PROCESS;
p4: PROCESS(A , B, enable, clk, s)
BEGIN
IF (enable = '1') THEN
IF (clk'EVENT AND clk = '1') THEN
IF (s = "11") THEN
--4-bit Comparator
c <= "0011";
IF (unsigned(A) > unsigned(B)) THEN
c <= "1111";
elsif (unsigned(A) < unsigned(B)) THEN
c <= "0000";
END IF;
END IF;
END IF;
END IF;
END PROCESS;
end Project;
ieee库;
使用ieee.std_logic_1164.all;
使用IEEE.NUMERIC_STD.ALL;
使用IEEE.STD_LOGIC_UNSIGNED.ALL;
实体ALU是
港口(
A:标准逻辑向量(3到0);
B:标准逻辑向量(3到0);
启用:在STD_逻辑中;
clk:标准逻辑中;
s:标准逻辑向量(1到0);
执行:执行标准逻辑;
c:INOUT标准逻辑向量(3到0)
);
末端ALU;
ALU的架构项目是
信号多:标准逻辑向量(7到0);
信号温度:标准逻辑向量(3到0);
开始
p1:进程(启用、时钟、s)
开始
如果(enable='1'和(clk'事件和clk='1')和s=“00”),则
--B上的循环移位
执行命令
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;
我更喜欢使用wait
语句(在进程内部)来摆动刺激信号,例如:
process
begin
a <= "0001";
wait for 20 ns;
a <= "1101";
-- and so on...
过程
开始
a请在此处提供ALU和ALU_测试的上下文子句(库子句)、use子句以及ALU_测试的实体声明。一个最小的、可复制的示例还包括问题中的任何控制台错误消息和警告文本。您的代码既不能成功分析(编译)、阐述(链接和加载)也不能成功运行(模拟)。该警告反映了预期的运行时错误,应予以解决。这些错误需要更正。@user1155120我的错误。我编辑了我的代码。这些错误来自标准(例如IEEE Std 1076-2008 10.5.2.2执行简单的赋值语句)…对波形的评估会产生一系列事务,其中每个事务对应于波形中的一个波形元素。这些事务称为新事务。如果新事务的顺序不按时间升序排列,则为错误。“)从赋值开始的增量时间。对于警告,C有4个元素,而“*”结果的长度等于左操作数的长度加上右操作数的长度(8)。14.7.3.4“信号更新”对于复合信号R,对R的子类型执行隐式子类型转换;对于R的每个元素,驱动值和有效值中应有一个匹配元素,反之亦然。”(在模拟期间)。非常感谢。是的,我几乎修复了所有错误,除了一个我不知道是否可以修复的错误。我声明我的输出“c”为4位。在我的代码中,我需要它为8位(当A*B时)。我想这是不可能的。我的乘法结果应该有另一个输出,还是有办法用我的4位输出来显示?这是另一个问题。我建议打开一个新的问题,并指出问题所在。
a <= "0001" , "1101" AFTER 20 NS, "1110" AFTER 40 NS;
process
begin
a <= "0001";
wait for 20 ns;
a <= "1101";
-- and so on...