VHDL信号分配
VHDL signal assignment
假设有这段代码和我附上的图表..
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 的初始值是多少?
我无法理解我们分配给它的内容,因为起初 "if" 条件中的 none 为真..
我创建了下图,看起来很糟糕,但希望能解释整个过程以获得答案;
你的逻辑有 5 个时钟上升沿,除了第一个,你有 Reset
值 0
,因此首先你得到 Q_out
值作为 0
,rest 始终是 temp xor Test signal
for Q_out
的结果,我在那里画的线表示这些值之间的异或运算,无论多么丑陋,我希望这有用:)
temp
的初始值是 U
,正如 here 所解释的那样,直到你得到一个时钟上升沿,无论如何你都不应该担心它的值,如果您的实体在硬件上,它的初始输出信号可能是 0
,但在模拟中您只能假设它是 U
,如果您担心时钟事件之前的输出信号,您可以为其分配一些初始值,但显然会在第一个时钟沿后被覆盖。
关于 Q_out
的 "state" 随着波形的进展,我拼凑了一个测试台(使用粗略的时间)来指示输出。
注意温度的 "uninitialised" 状态。
关于为什么当 Reset
被断言时背后的逻辑,我们忽略逻辑的二级分支(即如果 en
为高)。 if
/elsif
类型的语句倾向于推断优先级逻辑。下面通过您的代码生成的 RTL 对此进行了演示。
您可以从逻辑中看出,如果 Reset
信号被断言,temp
翻牌上的 D
输入将始终为 '0'
。
假设有这段代码和我附上的图表..
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 的初始值是多少? 我无法理解我们分配给它的内容,因为起初 "if" 条件中的 none 为真..
我创建了下图,看起来很糟糕,但希望能解释整个过程以获得答案;
你的逻辑有 5 个时钟上升沿,除了第一个,你有 Reset
值 0
,因此首先你得到 Q_out
值作为 0
,rest 始终是 temp xor Test signal
for Q_out
的结果,我在那里画的线表示这些值之间的异或运算,无论多么丑陋,我希望这有用:)
temp
的初始值是 U
,正如 here 所解释的那样,直到你得到一个时钟上升沿,无论如何你都不应该担心它的值,如果您的实体在硬件上,它的初始输出信号可能是 0
,但在模拟中您只能假设它是 U
,如果您担心时钟事件之前的输出信号,您可以为其分配一些初始值,但显然会在第一个时钟沿后被覆盖。
关于 Q_out
的 "state" 随着波形的进展,我拼凑了一个测试台(使用粗略的时间)来指示输出。
注意温度的 "uninitialised" 状态。
关于为什么当 Reset
被断言时背后的逻辑,我们忽略逻辑的二级分支(即如果 en
为高)。 if
/elsif
类型的语句倾向于推断优先级逻辑。下面通过您的代码生成的 RTL 对此进行了演示。
您可以从逻辑中看出,如果 Reset
信号被断言,temp
翻牌上的 D
输入将始终为 '0'
。