Abi*_*n K 1 simulation counter delay vhdl
下面是一个简单的3位计数器.
当复位(rst)为0时,计数器值为"000",否则每个时钟的上升沿递增1.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.numeric_std.all;
---------------------------------------------
ENTITY counter IS
PORT (clk : IN STD_LOGIC;
rst : in std_logic;
digit : out std_logic_vector (2 downto 0)
);
END counter;
---------------------------------------------
ARCHITECTURE counter OF counter IS
BEGIN
count: PROCESS(clk,rst)
VARIABLE temp : std_logic_vector(2 downto 0);
BEGIN
IF (clk'EVENT AND clk='1') THEN
if (rst = '1') then
temp := temp + "001";
else
temp := "000";
END IF;
END IF;
digit <= temp;
END PROCESS count;
END counter;
Run Code Online (Sandbox Code Playgroud)
以下是我得到的模拟结果:

在结果中,输出是正确的.但是在时间rst = 1和输出='001'之间存在一个时钟延迟.即,当rst ='1'时,计数器不会立即增加.
根据我的理解,每当clk或rst发生变化时,都会执行流程.因此,当rst从低变为高时,会发生事件.进程检查clk的上升沿是否为YES.然后检查rst = 1,是.所以通常计数器必须在clk本身中递增.但事实并非如此.
问题:
"rst"的最可能原因是由一个时钟进程产生,由相同的"clk"信号计时.
所以"rst"在"clk"之后出现一个delta周期.当"rst"发生变化时,它会唤醒进程,但"clk'event"处于上一个delta周期,因此"if"语句将不会执行.
在下一个时钟边沿,rst = 1,因此计数器按预期工作.
三个小问题:
| 归档时间: |
|
| 查看次数: |
4689 次 |
| 最近记录: |