这个问题有点不清楚,但我认为目的是使 计数器在时钟的上升沿和下降沿都增加。
通常的FPGA和ASIC原语确实包括触发器,它们在上升沿和下降沿都改变状态,所以假设目标技术 只有触发器对上升沿或下降沿敏感。
如果LSB 直接由时钟产生,并且其余计数器位作为常规计数器生成 ,则可以创建在每个边沿上有效递增的计数器。代码可以像下面,与最后的计数输出上 z_o
:
-- Resulting counter output combined from ordinary counter and clk_i
z_o <= cnt(cnt'left downto 1) & (not clk_i);
-- Ordinary counter for top of resulting counter
process (clk_i, rst_i) is
begin
if rising_edge(clk_i) then
cnt(cnt'left downto 1) <= std_logic_vector(unsigned(cnt(cnt'left downto 1)) + 1);
end if;
if rst_i = '1' then
cnt(cnt'left downto 1) <= (others => '0');
end if;
end process;
波可以在下面看到:
注意,最终计数器上z_o
时间将不作为一个普通的 计数器,其中所有位都来自触发器,所以时序分析设置可能不同,这取决于如何使用结果计数器。
因此,除了创建一个计数器在两个边上递增的方法外,可能需要重新考虑解决方案,并使用普通计数器 代替,因为这样会简化计时设置。
我在这里找不到现有的问题,但我确实找到了[这edaboard线程](http://www.edaboard.com/thread133082.html)。 – fru1tbat 2014-10-02 11:51:58