我目前正在尝试使用VHDL来设计交通灯控制器,我在Altera EPM240T100C5上编程,并使用自定义扩展板显示交通信号灯。由于电路板上最慢的时钟设置仍然比我想要的快,我需要写一个时钟分频器,我这样做:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
entity clockdivider is
port
(
clkin : in std_logic;
dividedclk : out std_logic
);
end clockdivider;
architecture divider of clockdivider is
signal J : std_logic;
signal K : std_logic;
begin
J <= '1';
K <= '1';
process(clkin)
variable tempdividedclk : std_logic;
begin
if (rising_edge(clkin)) then
tempdividedclk := (NOT(tempdividedclk) AND J) OR (tempdividedclk AND (NOT(K)));
end if;
dividedclk <= '0';
dividedclk <= tempdividedclk;
end process;
END divider;
这在主板上运行良好,但在模拟器(ModelSim)中,&#34; divideclk&#34;输出无法初始化为任何东西。我想知道是否有人知道为什么?
答案 0 :(得分:5)
在模拟开始时,“tempdividedclk”被初始化为“unitialized”。 当出现时钟边沿时,tempdividedclk将被分配给(不是(U)和1)或(U和0),这是“未定义”。要正确模拟,必须通过复位或仅在模拟级别初始化tempdividedclk。它可以在硅片上找到,因为“U”状态将是1或0。