我需要检查公共汽车活动直到4us。所以我需要数数吧。时钟是8MHz。请帮助我。
以下代码是否有效?
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;
结束过程;
答案 0 :(得分:3)
一般情况下,计算出时钟频率为4us的时钟周期数。
更好的是,让VHDL为您完成工作。如果你的设计有一个全局包,其中有一个常量,它是时钟周期:
constant clock_period : time := 125 ns;
然后你可以这样做:
constant bus_timeout_for_example : natural := 4 us / clock_period;
然后,在您的流程中创建一个整数变量。每个时钟周期递增一次。当它达到你上面计算的数字时,那就是4 us的结束。
编辑: 现在你已经发布了一些代码:
gapen
可以是一个进程中的变量。并查看“计时”部分内的gapen
。if gapcnt = bus_timeout then