假设有这个代码和附加的图表..
entity t_trigger is
port (Test, Reset, clk, en : in std_logic;
Q_out: out std_logic);
end t_trigger;
architecture beh_t_trigger of t_trigger is
signal temp: std_logic ;
begin
process (Reset, clk)
begin
if (clk'event and clk='1') then
if Reset='1' then
temp <= '0';
elsif en = '1' then
temp <= Test xor temp;
end if;
end if;
end process;
Q_out <= temp;
end beh_t_trigger;
序列结束时Q_out的状态是什么?如果第一个条件为真,那么我们跳过第二个条件? temp的初始值是多少? 我无法理解我们分配给它的东西,因为起初没有&#34; if&#34;条件是真的..
答案 0 :(得分:2)
我创建了以下图片,看起来很糟糕,但希望能够解释答案的整个过程;
您的逻辑有5个时钟上升沿,除了第一个,您有Q_out
值0
,因此首先得到temp xor Test signal
值{{1对于Q_out
,rest总是temp
的结果,我在那里绘制的线表示这些值之间的xor运算,无论多么丑陋,我希望这很有用:)
U
的初始值为0
,正如here所解释的那样,直到你的时钟上升为止,你不应该担心它的价值,你的实体的初始输出信号可能是U
,如果它在硬件上,但在模拟时你可以假设它只是<%
name=request(name)
address=request(address)
result=name&" "&address
%>
,如果你担心时钟事件之前的输出信号,你可以为它分配一些初始值,但显然会在第一个时钟沿之后被覆盖。
答案 1 :(得分:2)