我試圖寫具有輸入(開始)和三個輸出的計數器被斷言(TSY,TSR,TLG)1 clk_period
後4,6和16分別爲clk_period
。以下代碼適用於單個開始斷言。怪異延遲輸出行爲兩次
library ieee ;
use ieee.std_logic_1164.all ;
use ieee.numeric_std.all ;
entity proj_test is
port (
clk, start : in bit;
tsy, tsr, tlg : out bit
) ;
end entity ; -- proj_test
architecture behav of proj_test is
constant clk_period : time := 100 ns;
begin
process (start)
begin
if (start='1') then
tsy <= '1' after 4*clk_period, '0' after 5*clk_period;
tsr <= '1' after 6*clk_period, '0' after 7*clk_period;
tlg <= '1' after 16*clk_period, '0' after 17*clk_period;
end if;
end process;
end architecture ; -- behav
的start
脈衝是400個納秒間隔,如通過下面的代碼從動:
library ieee ;
use ieee.std_logic_1164.all ;
use ieee.numeric_std.all ;
entity proj_test_test is
end entity proj_test_test;
architecture behav of proj_test_test is
constant clk_period : time := 100 ns;
signal clk, start : bit;
signal tsy, tsr, tlg : bit;
begin
P : entity work.proj_test port map (clk, start, tsy, tsr, tlg);
start <= '0',
'1' after 2*clk_period,
'0' after 3*clk_period,
'1' after 6*clk_period,
'0' after 7*clk_period,
'1' after 42*clk_period;
end architecture behav;
或以下模擬器命令:
force -freeze sim:/proj_test/clk 0 0, 1 {50 ns} -r 100
force -freeze sim:/proj_test/start 1 0, 0 100, 1 400, 0 500
然而,當我斷言輸入start
第二時間,tsy
跨越多個時鐘週期。
我試圖理解爲什麼。我的猜測是第二個過程調用「刷新」第一個過程的任務。另外,有沒有更好的方法來編寫這個櫃檯的行爲?
您是否正在編寫可合成的代碼? –
@scary_jeff不,它是用於測試平臺的。 – usfmohy
請發佈[MCVE](http://stackoverflow.com/help/mcve)。奇怪的行爲看起來在這個代碼之外。 –