我正在尝试使用VHDL中的'延迟属性创建信号('s')的延迟版本('s_dlyd')。
我的代码(下面)编译和模拟(使用Xilinx webpack,ISIM)并且's'经历了预期的'0/1'转换。
但是,s_dlyd只是坐在'1'(即它不是5s延迟的's'副本我想(天真地?!)预期。我猜我错过了VHDL调度转换方式的基本信息。我已经尝试了很多代码的变化(将行“s< = ...”分成3个;在11 ns之后尝试“s_dlyd< = s'delayed(5 ns)”之类的东西等但是没有给出我是s的延迟副本。
任何帮助表示赞赏。谢谢你
architecture Behavioral of five_three is
signal s : STD_LOGIC := '1';
signal s_dlyd: STD_LOGIC;
begin
my_process : process is
begin
s <= '1', '0' after 10 ns, '1' after 20 ns;
s_dlyd <= s'delayed(5 ns);
wait for 50 ns;
s <= '0' ;
wait;
end process;
end architecture;
答案 0 :(得分:1)
我希望s_dlyd成为&#39; 1&#39;在5 ns之后,之前是&#39; U&#39;
等于信号S的信号延迟了T个时间单位。的价值 S&#39; DELAYED(t)在时间Tn总是等于S的值 TN-T
在这种情况下,s的当前有效值将在5 ns后分配给s_dyld。 s(Now = 0 ns)的当前值是默认值(&#39; 1&#39;)。
由于等待语句(最后一个wait ;
),您的进程只会被调用一次。
等效的顺序信号赋值语句是
s_dyld <= transport s after 5 ns;
您可以将s_dyld分配给对s敏感的单独进程或作为并发信号赋值语句,或者使用更多等待和更多s_dyld赋值重构当前的等待语句。