问:关于上升沿和下降沿触发的讨论
問:關于上升沿和下降沿觸發的討論
?? 答:發現一些同仁提出上升沿和下降沿計數的問題,工作中也碰到一些同事問及此問題。現在我把我多年
來一直采用的辦法奉上,但愿對初學者有所幫助。?
以一個最簡單的計數器為例:
? Port(
???? clock:in std_logic;?
??? pulse:in std_logic;
?? q:out std_logic_vector(3 downto 0)
);
q輸出為對pulse跳變沿的遞增計數。clock為系統高速時鐘。?
Process(clock) begin
if rising_edge(clock) then
dly1pul <= pulse;
dly2pul <= dly1pul;
end if;
End process;
?en <= dly1pul and not dly2pul;--上升沿
--en <= not dly1pul and dly2pul;--下降沿
--en <= dly1pul xor dly2pul;--上升沿和下降沿
Process(clock) begin
if rising_edge(clock) then
if en = '1' then
cnt <= cnt + 1;
end if;
end if;
End process;
q <= cnt;
單對于此小問題,當然采用倍頻實現雙沿計數也是可行的,但是我們不要忘記,倍頻器在很多CPLD
或FPGA中是不支持的,即便支持其資源也是很寶貴的。?
我看到的一些設計中,動輒采用某一信號作為時鐘,應該說這種做法是欠妥的。因為不是全局時鐘的
時鐘信號最大扇出是有限的,其很難保證時鐘延時應小于信號延時的基本要求。當遇到要對某個信號
的跳變沿處理時,建議采用上述小例子中en信號的處理辦法。
轉載于:https://www.cnblogs.com/FPGA_DSP/archive/2010/03/09/1681485.html
總結
以上是生活随笔為你收集整理的问:关于上升沿和下降沿触发的讨论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel公式中的$(美元符号)的作用
- 下一篇: 根据方法名执行方法的例子