按下按钮时 现场可编程门阵列 ,会有无法预期的反弹。此VHDL代码用于 防抖按钮 在FPGA上按下,保持足够长的时间并释放时,仅在输入时钟周期内产生单个脉冲。 上次 ,我展示了一个简单的Verilog代码,用于消除FPGA上的按钮的反跳。
这个 甚高密度脂蛋白 项目 是要呈现一个 甚高密度脂蛋白 用于消除FPGA上按钮的代码。提供了完整的VHDL代码和测试平台。

用于消除FPGA上按钮的VHDL代码:
--fpga4student.com: 现场可编程门阵列 projects, Verilog projects, 甚高密度脂蛋白 项目 -- 甚高密度脂蛋白 项目 : 甚高密度脂蛋白 代码,用于反跳FPGA上的按钮 -- Generate Slow clock enable for debouncing buttons library IEEE; use IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; 实体 clock_enable _debouncing_button is port( clk: in std_logic; -- input clock on 现场可编程门阵列 100Mhz
-- Change counter threshold accordingly slow_clk_enable: out std_logic ); 结束 clock_enable _debouncing_button; architecture 行为的 of clock_enable _debouncing_button is signal counter: std_logic_vector(27 downto 0):=(others => '0' ); begin process(clk) begin if(rising_edge(clk)) then counter <= counter + x"0000001"; if(counter>=x"003D08F") then -- reduce this number for simulation counter <= (others => '0' ); 结束 if; 结束 if; 结束 process; slow_clk_enable <= '1' when counter=x"003D08F" else '0'; -- reduce this number for simulation
结束 行为的 ; --fpga4student.com: 现场可编程门阵列 projects, Verilog projects, 甚高密度脂蛋白 项目 -- 甚高密度脂蛋白 项目 : 甚高密度脂蛋白 代码,用于反跳FPGA上的按钮 -- 甚高密度脂蛋白 D-flip-flop with clock enable signal for debouncing buttons library IEEE; use IEEE.STD_LOGIC_1164.ALL; 实体 DFF_Debouncing_Button is port( clk: in std_logic; clock_enable : in std_logic; D: in std_logic; Q: out std_logic:='0' ); 结束 DFF_Debouncing_Button; architecture 行为的 of DFF_Debouncing_Button is begin process(clk) begin if(rising_edge(clk)) then if(clock_enable='1') then Q <= D; 结束 if; 结束 if; 结束 process; 结束 行为的 ; --fpga4student.com: 现场可编程门阵列 projects, Verilog projects, 甚高密度脂蛋白 项目 -- 甚高密度脂蛋白 项目 : 甚高密度脂蛋白 代码,用于反跳FPGA上的按钮 -- 甚高密度脂蛋白 code for button debouncing on 现场可编程门阵列 library IEEE; use IEEE.STD_LOGIC_1164.ALL; 实体 Debouncing_Button_VHDL is port( button: in std_logic; clk: in std_logic; debounced_button : out std_logic ); 结束 Debouncing_Button_VHDL; architecture 行为的 of Debouncing_Button_VHDL is signal slow_clk_enable: std_logic; signal Q1,Q2,Q2_bar,Q0: std_logic; begin clock_enable_generator: 实体 工作 .clock_enable_debouncing_button 港口 地图 (clk => k slow_clk_enable => slow_clk_enable );
Debouncing_FF0: 实体 工作 .DFF_Debouncing_Button 港口 地图 (clk => k clock_enable => slow_clk_enable, D => button, Q => Q0 );Debouncing_FF1 : 实体 工作 .DFF_Debouncing_Button 港口 地图 (clk => k clock_enable => slow_clk_enable, D => Q0, Q => Q1 ); Debouncing_FF2: 实体 工作 .DFF_Debouncing_Button 港口 地图 (clk => k clock_enable => slow_clk_enable, D => Q1, Q => Q2 ); Q2_bar <= 不 Q2; debounced_button <= Q1 和 Q2_bar; 结束 行为的 ;
Testbench 甚高密度脂蛋白 代码 现场可编程门阵列 上的反跳按钮:
LIBRARY ieee; USE ieee.std_logic_1164.ALL; --fpga4student.com: 现场可编程门阵列 projects, Verilog projects, 甚高密度脂蛋白 项目 -- 甚高密度脂蛋白 code for button debouncing on 现场可编程门阵列 -- Testbench 甚高密度脂蛋白 代码 button debouncing ENTITY tb_debouncing_button_VHDL IS END tb_debouncing_button_VHDL; ARCHITECTURE behavior OF tb_debouncing_button_VHDL IS -- Component Declaration for 甚高密度脂蛋白 code for button debouncing COMPONENT Debouncing_Button_VHDL 港口 ( button : IN std_logic; clk : IN std_logic; debounced_button : OUT std_logic ); END COMPONENT; signal button : std_logic := '0'; signal clk : std_logic := '0'; signal debounced_button : std_logic; constant clk_period : time := 10 ns; BEGIN -- Instantiate 甚高密度脂蛋白 code for button debouncing uut: Debouncing_Button_VHDL 港口 地图 ( button => button, clk => k debounced_button => debounced_button ); clk_process :process begin clk <= '0'; wait for clk_period; clk <= '1'; wait for clk_period; 结束 process; -- Stimulus process stim_proc: process begin -- hold reset state for 100 ns. wait for 100 ns; wait for clk_period*10; button <= '0'; wait for 10 ns; button <= '1'; wait for 20 ns; button <= '0'; wait for 10 ns; button <= '1'; wait for 30 ns; button <= '0'; wait for 10 ns; button <= '1'; wait for 40 ns; button <= '0'; wait for 10 ns; button <= '1'; wait for 30 ns; button <= '0'; wait for 10 ns; button <= '1'; wait for 1000 ns; button <= '0'; wait for 10 ns; button <= '1'; wait for 20 ns; button <= '0'; wait for 10 ns; button <= '1'; wait for 30 ns; button <= '0'; wait; 结束 process; END;
甚高密度脂蛋白 代码的仿真波形:
按下输入按钮,保持足够长的时间并释放时,仅会生成一个脉冲,如上面的模拟波形所示。
推荐的 甚高密度脂蛋白 项目 :
1. 什么是FPGA? 甚高密度脂蛋白 如何在FPGA上工作
2. FIFO存储器的VHDL代码
3. FIR滤波器的VHDL代码
4. 8位微控制器的VHDL代码
5. 矩阵乘法的VHDL代码
6. 开关尾环计数器的VHDL代码
7. 现场可编程门阵列 上数字闹钟的VHDL代码
8. 8位比较器的VHDL代码
9. 如何使用VHDL将文本文件加载到FPGA中
10。 D触发器的VHDL代码
11。 完整加法器的VHDL代码
12 具有可变占空比的VHDL中的PWM发生器
13 ALU的VHDL代码
14。 带测试平台的计数器的VHDL代码
15 16位ALU的VHDL代码
16。 甚高密度脂蛋白 中的移位器设计
17。 非线性的 VHDL中的查找表实现
18岁 甚高密度脂蛋白 中的密码协处理器设计
1. 什么是FPGA? 甚高密度脂蛋白 如何在FPGA上工作
2. FIFO存储器的VHDL代码
3. FIR滤波器的VHDL代码
4. 8位微控制器的VHDL代码
5. 矩阵乘法的VHDL代码
6. 开关尾环计数器的VHDL代码
7. 现场可编程门阵列 上数字闹钟的VHDL代码
8. 8位比较器的VHDL代码
9. 如何使用VHDL将文本文件加载到FPGA中
10。 D触发器的VHDL代码
11。 完整加法器的VHDL代码
12 具有可变占空比的VHDL中的PWM发生器
13 ALU的VHDL代码
14。 带测试平台的计数器的VHDL代码
15 16位ALU的VHDL代码
16。 甚高密度脂蛋白 中的移位器设计
17。 非线性的 VHDL中的查找表实现
18岁 甚高密度脂蛋白 中的密码协处理器设计
没意见:
发表评论