這個問題有點不清楚,但我認爲目的是使 計數器在時鐘的上升沿和下降沿都增加。
通常的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