Concurrency VHDL断言-并发语句
我正在尝试使用VHDL断言。在我的设计中,我直接在DUT中编写了assert语句,因为我想监视内部信号。由于我的断言与指令同时进行,模拟器几乎在每次输入更改时都会生成一个报告 下面我给你一个简单的工作示例(一个简单的加法器)。这不是我的实际设计,只是我问题的一个例证 如何修改代码,使断言不会在不需要的时间触发?这里没有合成约束 提前谢谢你Concurrency VHDL断言-并发语句,concurrency,vhdl,assert,Concurrency,Vhdl,Assert,我正在尝试使用VHDL断言。在我的设计中,我直接在DUT中编写了assert语句,因为我想监视内部信号。由于我的断言与指令同时进行,模拟器几乎在每次输入更改时都会生成一个报告 下面我给你一个简单的工作示例(一个简单的加法器)。这不是我的实际设计,只是我问题的一个例证 如何修改代码,使断言不会在不需要的时间触发?这里没有合成约束 提前谢谢你 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entit
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity Full_Adder is
port( X, Y, Cin : in std_logic;
sum, Cout : out std_logic);
end Full_Adder;
architecture bhv of Full_Adder is
signal s_sum : std_logic:='0'; -- to be used in the assert
signal s_Cout : std_logic:='0'; -- to be used in the assert
begin
s_sum <= (X xor Y) xor Cin;
s_Cout <= (X and (Y or Cin)) or (Cin and Y);
sum<=s_sum;
Cout<=s_Cout;
assert (s_sum =((X xor Y) xor Cin)) report "Erreur de somme" severity note;
assert (s_Cout = ((X and (Y or Cin)) or (Cin and Y))) report "Erreur de retenue" severity note;
end bhv;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_arith.all;
实体全加器是
端口(X、Y、Cin:std_逻辑中;
求和,Cout:out标准逻辑);
端部全加器;
全加器的结构bhv是
信号s_和:标准逻辑:='0';--在断言中使用
信号输出:标准逻辑:='0';--在断言中使用
开始
苏森,
Cout=>Cout
);
过程
开始
A完全清楚地说,问题不在于断言不起作用,而是它们被触发的次数比您预期的要多得多。对吗?如果是这样的话,试着在问题中更清楚地说明这一点。你是对的。我编辑了我的问题,希望现在更清楚。你需要考虑s_sum和s_Cout的信号更新中的增量周期延迟。对于s_和:assert s_和=((X'delayed(0ns)xor Y'delayed(0ns))xor Cin'delayed(0ns))报告“严重性错误”注释代码>或进程开始等待s_和;断言s_sum=(X xor Y xor Cin)报告“严重性错误”说明;结束过程代码>异或是可交换的(不需要括号)。条件在语法上是可区分的,不需要外括号。并发断言语句被细化为包含顺序断言语句的被动进程语句。添加增量周期延迟效果良好。但是wait on
指令不是一个有效的选项:如果输入的更改没有更改输出,则不会评估断言。最后一件不能正常工作的事情(但我想我必须接受它)是在初始化时,当断言被触发时,它不应该被触发。无论如何,非常感谢!!
Library IEEE;
USE IEEE.Std_logic_1164.all;
entity tb_fulladder is
end tb_fulladder;
architecture behavioral of tb_fulladder is
component Full_Adder
port(
X, Y, Cin : in std_logic;
sum, Cout : out std_logic
);
end component;
signal A,B,Cin: std_logic:='0';
signal S,Cout: std_logic;
begin
structural_adder: Full_Adder port map
(
X => A,
Y => B,
Cin => Cin,
sum => S,
Cout => Cout
);
process
begin
A <= '0';
B <= '0';
Cin <= '0';
wait for 100 ns;
A <= '0';
B <= '0';
Cin <= '1';
wait for 100 ns;
A <= '0';
B <= '1';
Cin <= '0';
wait for 100 ns;
A <= '0';
B <= '1';
Cin <= '1';
wait for 100 ns;
A <= '1';
B <= '0';
Cin <= '0';
wait for 100 ns;
A <= '1';
B <= '0';
Cin <= '1';
wait for 100 ns;
A <= '1';
B <= '1';
Cin <= '0';
wait for 100 ns;
A <= '1';
B <= '1';
Cin <= '1';
wait for 100 ns;
end process;
end behavioral;