首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在VHDL中用8 8MHz的时钟计数4us?

如何在VHDL中用8 8MHz的时钟计数4us?
EN

Stack Overflow用户
提问于 2011-05-24 13:10:43
回答 1查看 377关注 0票数 0

我要检查一下公交车的活动,直到美国时间4点。所以我需要数一数。时钟频率为8 8MHz。在这方面请帮帮我。

下面的代码可以工作吗?

代码语言:javascript
复制
process(sync_dw_reg,data_edge) 
begin 
 if(rst_n='1' or data_edge='1' )then 
    gapen<='0'; 
 elsif(falling_edge(sync_dw_reg))then 
    gapen<='1'; 
 end if; 
 end process; 

 process(dec_clk,sync_dw_reg,rst_n,gapen) 
 begin 
 if(rst_n='1')then 
    gapcnt<="000000"; 
 elsif(gapen='1')then 
  if(dec_clk'event and dec_clk='1')then
     if(gapcnt="111111")then 
        gaperr_bit<='1'; 
     elsif(data_edge='1')then --if this condition comes within 4us then no setting of error 
        gaperr_bit<='0'; 
        gapcnt<="000000"; 
     else gapcnt<=gapcnt+'1';
     end if; 
  end if; 
 end if;

结束进程;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-24 16:21:12

通常,计算出在您的时钟频率下4us有多少个时钟周期。

更好的是,让VHDL为你做这项工作。如果你的设计有一个全局包,里面有一个常数,那就是时钟周期:

代码语言:javascript
复制
constant clock_period : time := 125 ns;

然后,您可以执行以下操作:

代码语言:javascript
复制
constant bus_timeout_for_example : natural := 4 us / clock_period;

然后,在您的流程中创建一个整数变量。每个时钟周期递增它。当它达到你上面计算的数字时,你的4us就结束了。

编辑:现在你已经发布了一些代码和评论:

  • 不要使用std_logic_vectors进行算术运算--同步到一个时钟信号(即dec_clk是你在灵敏度列表中的全部)--如果你需要检测其他信号上的“边缘”,存储它们并在下一个时钟周期比较它们,看看它们是否发生了变化。让*_edge在你的整个设计中调用不止一个信号是自找麻烦(作为一个新手)。那么gapen可以是一个进程中的一个变量。并检查"clocked“部分中的数字。if gapcnt = bus_timeout then

使用我描述的整数类型的变量进行计算--然后您可以与gapen

  • 进行比较。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6105927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档