Vhdl Isim模拟中未显示信号

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

我正在编写一个vhdl代码,该代码应该可以完成许多功能。我的代码和测试平台都运行良好。但在模拟中,没有初始化任何内容。我真的不明白我的错误到底是什么,在哪里。如果有人能帮我解决问题,我将不胜感激。 “当enable为'1'且处于上升沿clk时,该代码应能工作。对于不同的S值,它应执行不同的操作

我的模拟中的错误有:

错误:在0 ps时:目标信号a的分配中,延迟20000 fs不大于先前的波形元素延迟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 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...