vhdl中的时分(Period)选择

时间:2016-04-26 19:34:36

标签: process case vhdl clock period

我目前正在用VHDL进行一个项目,其中我有一个需要在100ms内更新的计数器,如果按下一个键则需要在1000毫秒内更新。

示例:

on_create

我想知道如何在VHDL中做到这一点。

我相信我应该使用一个进程(时钟,Key3),但我不知道如何根据时间段使计数器增加。

提前感谢!

2 个答案:

答案 0 :(得分:1)

我认为你是那里的一部分:

  

我相信我应该使用一个进程(时钟,Key3),但我不知道如何根据时间段使计数器增加。

将问题视为数字设计问题,而不是编码问题。您将用什么来衡量真实数字系统中的时间流逝?从那里使用它作为参考来确定是否已经过了100ms或1000ms。

一旦你可以衡量时间,你如何确定特定事件的持续时间?

答案 1 :(得分:0)

如果c是类型时间的变量(在进程中),那么

if some_condition then 
   c := c + 100 ms;
else
   c := c + 1000 ms;
end if;

是有效的VHDL,并且可以在模拟中工作,虽然时间不太适合合成。

最简单的解决方案是C计算时间步长 - 例如时钟周期的倍数,并添加1或10个。

例如,如果您有10MHz时钟:

constant Clock_Period : time := 100 ns;

constant ms_100 : natural := 100 ms / Clock_Period;
constant ms_1000 : natural := 1000 ms / Clock_Period;
signal c : natural;
...

    if some_condition then 
       c <= c + ms_100;
    else
       c := c + ms_1000;
    end if;

如果您更改时钟频率,请调整clock_period声明以匹配。