甚高密度脂蛋白 代码,用于反跳FPGA上的按钮

按下按钮时 现场可编程门阵列 ,会有无法预期的反弹。此VHDL代码用于 防抖按钮 在FPGA上按下,保持足够长的时间并释放时,仅在输入时钟周期内产生单个脉冲。 上次 ,我展示了一个简单的Verilog代码,用于消除FPGA上的按钮的反跳。

这个 甚高密度脂蛋白 项目 是要呈现一个 甚高密度脂蛋白 用于消除FPGA上按钮的代码。提供了完整的VHDL代码和测试平台。

 甚高密度脂蛋白 代码,用于反跳FPGA上的按钮

用于消除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;

甚高密度脂蛋白 代码的仿真波形:

 甚高密度脂蛋白 代码,用于反跳FPGA上的按钮

按下输入按钮,保持足够长的时间并释放时,仅会生成一个脉冲,如上面的模拟波形所示。 

  现场可编程门阵列  Verilog  甚高密度脂蛋白 课程

没意见:

发表评论

热门FPGA项目