繁体   English   中英

VHDL中的简单振荡器

[英]Simple oscillator in VHDL

我刚开始使用VHDL,但在理解过程如何精确运行方面存在问题。 这是一个简单振荡器的示例:

timer_1Hz: process(clk) is
    variable timer : integer := 0;
    constant period : integer := 50E6;
begin
--if rising_edge(clk) then
    timer := (timer+1) rem period;
    if (timer=0) then
        led <= not led;
    end if;
--end if;
end process timer_1Hz;

clk是具有50 MHz频率和50%占空比的输入(时钟)信号。

现在,据我所知, clk信号的任何变化(无论是从01还是从10的转变)都会触发流程timer_1Hz

从上面的示例中,我期望以0.5 Hz的频率对LED进行闪烁,因为注释掉了rising_edge测试。 换句话说,我希望在一个时钟周期内,在上升沿和下降沿触发两次该主体。 但是,这似乎不起作用,即LED永远不会打开。

如果我包括了rising_edge测试,LED rising_edge以1 Hz的频率闪烁,正如我所期望的那样。

有人可以解释一下意外情况下我缺少的内容吗?

没有删除的上升沿部分,代码将无法工作。 它可能在仿真中起作用,但在实际的fpga板上却不起作用。 为什么? 因为灵敏度列表对于仿真而言(主要)是重要的,而对于合成而言则不那么重要。

出于综合目的,您必须始终考虑要实现的硬件。 从实际意义上讲,当某些事件发生时,流程不是“运行”的。

如果您确实想要0.5 Hz的输出,只需使用25E6而不是原始代码的50E6。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM