VHDL中如何表示在一段時間內僅訊號有效

時間 2021-09-12 17:38:28

1樓:匿名使用者

3個取樣,兩個相同才變!

2樓:

一般消抖電路用多次取樣,再比較的方法實現。下面給個例子,每1毫秒取樣一次,把最後10次取樣值存下來,如果都一致,再翻轉。如果需要更長時間的消抖,可以加大取樣間隔,比如每10毫秒取樣一次,比較最後5次取樣值就可以消除50ms的抖動。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity debounce is

generic (

clk_freq_mhz : integer := 20; --in mhz

button_press_status : std_logic := '0'

);port (

reset_n : in std_logic;

clk : in std_logic;

btnin : in std_logic;

btnpressed : out std_logic

);end debounce;

architecture debounce_arch of debounce is

constant max_ms_cnt : integer := clk_freq_mhz * 1000 - 1;

signal mscnt : integer range 0 to max_ms_cnt;

signal msclk : std_logic; --做乙個毫秒脈衝,每1毫秒對按鈕取樣一次

signal btnin_q : std_logic_vector(9 downto 0); --記住最後10次取樣

signal btn : std_logic;

signal btn_q : std_logic;

begin

--產生毫秒脈衝

process(reset_n, clk)

begin

if reset_n = '0' then

mscnt <= 0;

msclk <= '0';

elsif rising_edge(clk) then

if mscnt >= max_ms_cnt then

mscnt <= 0;

msclk <= '1';

else

mscnt <= mscnt + 1;

msclk <= '0';

end if;

end if;

end process;

--記住最後10次取樣

process(reset_n, clk)

begin

if reset_n = '0' then

btnin_q <= (others => not button_press_status);

elsif rising_edge(clk) then

if msclk = '1' then

btnin_q <= btnin_q(btnin_q'left-1 downto 0) & btnin;

else

btnin_q <= btnin_q;

end if;

end if;

end process;

process(reset_n, clk)

variable all_samples_are_pressed : std_logic_vector(btnin_q'left downto 0) := (others => button_press_status);

begin

if reset_n = '0' then

btn <= '0';

btn_q <= '0';

elsif rising_edge(clk) then

if btnin_q = all_samples_are_pressed then

btn <= '1'; --最後10次取樣都是按下狀態,就確認按鈕按下(10ms消抖)

elsif btnin_q = not all_samples_are_pressed then

btn <= '0'; --最後10次取樣都是抬起狀態,就確認按鈕抬起(10ms消抖)

else

btn <= btn; --否則保持不變

end if;

btn_q <= btn;

end if;

end process;

btnpressed <= '1' when btn = '1' and btn_q = '0' else '0'; --按鈕按下上公升沿檢測

end debounce_arch;

面部進行除皺後一段時間內會反彈嗎

赤峰麗都美容醫院 不會發生這種情況。以保妥適為例,保妥適會放鬆引起表情皺紋的面部肌肉,皺紋將在3 4個月期間逐漸重現,但不會引起更多皺紋形成。如果停止了保妥適 您的肌肉將會恢復正常活動,同時您的皺紋也將逐漸恢復到 前水平。多次 往往帶來更持久的療效。 面部除皺的方法很多,而針對皺紋的情況選擇不同的方...

電腦開機後一段時間內反應很慢是怎麼回事

豐山蘭堯越 系統啟動載入一個一個的程序當然會卡.你看看工作管理員裡有多少個程序在跑 我win8系統一般有6 7十個程序,想象一下,從0個啟動到幾十個程序 卡是必然的,再好的機器也卡,只是有的卡的時間短而已 禹英飆納哲 因為在載入很多服務,所以會很卡,和360本身確實有關係,但是忍了吧,就幾分鐘,把3...

怎樣才能短時間內忘掉一段沒有結果的感情

忘記.一個心痛的問題。說到底忘記過去是在騙自己,也是在騙別人,只要有一點點可以聯絡到過去的事的東西,你就不可能忘記過去的。不要逃,後悔也沒有用。有一句話不是這麼說嗎?你可能在1秒鐘的時間遇到一個人,用一天的時間愛上一個人,卻要用一生的時間忘記一個人。這就是愛情!刻意去忘記,會記的更深,所以別刻意的去...