Vhdl 带进程的触发器实现。[硬件描述语言]
我的问题是关于以下代码:Vhdl 带进程的触发器实现。[硬件描述语言],vhdl,Vhdl,我的问题是关于以下代码: library ieee; use ieee.std_logic_1164.all; entity exam is port ( I,CLK,RESET : in std_logic; Q : out std_logic ); end entity; architecture exam_arc of exam is signal temp_sig : std_logic; begin process (CLK,RESET) b
library ieee;
use ieee.std_logic_1164.all;
entity exam is port (
I,CLK,RESET : in std_logic;
Q : out std_logic
);
end entity;
architecture exam_arc of exam is
signal temp_sig : std_logic;
begin
process (CLK,RESET)
begin
if RESET = '1' then
temp_sig <='0';
elsif CLK'event and CLK='1' then
temp_sig <= I;
end if;
Q <= temp_sig;
end process;
end exam_arc;
ieee库;
使用ieee.std_logic_1164.all;
实体检查是端口(
一、 时钟,复位:在标准逻辑中;
Q:输出标准逻辑
);
终端实体;
建筑考试(以下简称考试)
信号温度信号:标准逻辑;
开始
过程(时钟、复位)
开始
如果重置='1',则
你可以自己合成它
另请参见几乎相同的ffv3
更新
我被丢失的格式误导了——事实上,正如另一个答案已经显示的那样,它实际上是在下降边缘切换
尽管所有ASignment都是按顺序进行的,但信号分配仍发生在过程结束时,因此temp_信号
已过半个时钟周期(下一个下降沿),并且不包含最近分配的值
你可以自己合成它
另请参见几乎相同的ffv3
更新
我被丢失的格式误导了——事实上,正如另一个答案已经显示的那样,它实际上是在下降边缘切换
尽管所有ASignment都是按顺序进行的,但信号分配仍发生在过程结束时,因此temp_信号
已过半个时钟周期(下一个下降沿),并且不包含最近分配的值
你模拟过吗?Q什么时候变化?为什么?信号何时更新?在上升沿期间,Q是否得到I的值?一定要模拟它 你模拟过吗?Q什么时候变化?为什么?信号何时更新?在上升沿期间,Q是否得到I的值?一定要模拟它 这是一个骗人的问题。请注意,进程在上升和下降时钟边缘都会唤醒,并且中间信号temp_sig被分配到上升沿
把它和信号分配(延迟分配)的语义放在一起,看看你得到了什么
按照Jim的建议,通过模拟进行交叉检查…这是一个诡计问题。请注意,进程在上升和下降时钟边缘都会唤醒,并且中间信号temp_sig被分配到上升沿
把它和信号分配(延迟分配)的语义放在一起,看看你得到了什么
按照Jim的建议,通过模拟进行交叉检查…将分配给Q的任务分离到具有相同灵敏度列表的自己的流程语句中。仿真模型的行为将是相同的,尽管它们在进程数量上有所不同
DUT:
process (CLK,RESET)
begin
if RESET = '1' then
temp_sig <='0';
elsif CLK'event and CLK ='1' then
temp_sig <= I;
end if;
-- Q <= temp_sig;
end process;
QDEVICE:
process (CLK, RESET)
begin
Q <= temp_sig;
end process;
DUT:
过程(时钟、复位)
开始
如果重置='1',则
temp_sig使用相同的灵敏度列表将Q的赋值分离到它自己的过程语句中。仿真模型的行为将是相同的,尽管它们在进程数量上有所不同
DUT:
process (CLK,RESET)
begin
if RESET = '1' then
temp_sig <='0';
elsif CLK'event and CLK ='1' then
temp_sig <= I;
end if;
-- Q <= temp_sig;
end process;
QDEVICE:
process (CLK, RESET)
begin
Q <= temp_sig;
end process;
DUT:
过程(时钟、复位)
开始
如果重置='1',则
temp_sig让我们看看以下代码行:
elsif CLK'event and CLK='1' then
CLK是您的计时信号(也称为时钟)
CLK’事件在CLK值发生变化时触发。
CLK='1'表示时钟等于高电平
因此,如果时钟已更改,并且当前处于高状态,那么我们将在该ELSIF语句中执行代码
我们知道位变量只有两种状态,所以如果CLK改变,它变为高状态,那么它最初处于低状态。这意味着只有当时钟从低到高时,代码才会执行
如果希望在从高到低的触发器上执行,则应将语句更改为如下所示:
elsif CLK'event and CLK='0' then
让我们看一下以下代码行:
elsif CLK'event and CLK='1' then
CLK是您的计时信号(也称为时钟)
CLK’事件在CLK值发生变化时触发。
CLK='1'表示时钟等于高电平
因此,如果时钟已更改,并且当前处于高状态,那么我们将在该ELSIF语句中执行代码
我们知道位变量只有两种状态,所以如果CLK改变,它变为高状态,那么它最初处于低状态。这意味着只有当时钟从低到高时,代码才会执行
如果希望在从高到低的触发器上执行,则应将语句更改为如下所示:
elsif CLK'event and CLK='0' then
正确的代码缩进可以预防眼癌——我听说……正确的代码缩进可以预防眼癌——我听说……因此,信号分配似乎是在过程结束时完成的,我做对了吗?谢谢!看来信号分配是在过程结束时完成的,我做对了吗?谢谢!