ontdendering de bouw van een circuit?

B

bara00

Guest
Hi to all

Ik heb een elektronica lab waar ik op te bouwen en een schakelaar ontdendering circuit met behulp van FPGA boord en het gebruik van slechts een enkele input test.Ik heb geen idee wat te doen kan iemand me helpen alstublieft???

Ik moet het circuit test met een drukknop teller die ik al heb gebouwd.

Bedankt

 
Hieronder vindt u mijn PWM design met enkele bedieningsknoppen die worden gebufferd.
U kunt eenvoudig uittreksel naar de debouncing deel van het ontwerp.
Vraag me niet hoe het precies werkt.Dit ontwerp is enkele jaren oud en ik kan me niet herinneren alle details meer.
Misschien is het iets voor jou.Code:

library IEEE;

gebruik IEEE.STD_LOGIC_1164.ALL;

gebruik IEEE.STD_LOGIC_ARITH.ALL;

gebruik IEEE.STD_LOGIC_UNSIGNED.ALL;

-------------------------------------------------- -----------------------------

entiteit ontdendering is

Port :) db_clk in std_logic; - een 10 ms ontdendering klok

db_res: in std_logic; --

db_key_in: in std_logic; - RAW (stuiteren) toets input; een toets wordt actief LO

db_key_out: out std_logic); - "gebufferd" sleutel uit (gepulseerd ____ _______ ------------)

einde ontdendering;

-------------

architectuur van debounce_arch ontdendering is

signaal K00: std_logic;

signaal K01: std_logic;

signaal K02: std_logic;

beginnen

debounce_proc: proces (db_clk, db_res)

beginnen

indien db_res = '0 'dan

K00 <= '0 ';

K01 <= '0 ';

K02 <= '0 ';

elsif rising_edge (db_clk) dan

K02 <= K01;

K01 <= K00;

K00 <= niet db_key_in;

end if;

einde proces debounce_proc;

db_key_out <= K00 en K01 en K02;

einde debounce_arch;

- ================================================ ===============================

library IEEE;

gebruik IEEE.STD_LOGIC_1164.ALL;

gebruik IEEE.STD_LOGIC_ARITH.ALL;

gebruik IEEE.STD_LOGIC_UNSIGNED.ALL;-------------------------------------------------- ------------------------------

entiteit PWM is

Port (pwm_cntr: in std_logic_vector (5 Downto 0);

pwm_clk: in std_logic; -.

pwm_res: in std_logic; --

- Pwm_db_change: in std_logic; --

pwm_change: in std_logic; --

- Pwm_db_dir: in std_logic; --

pwm_dir: in std_logic; --

pwm_cntr17: in std_logic; - 10ms klok

pwm_out: out std_logic); - PWM-uitgang

einde PWM;

--------

architectuur arch_pwm van PWM is

COMPONENT ontdendering

PORT (

db_clk: IN std_logic;

db_res: IN std_logic;

db_key_in: IN std_logic;

db_key_out: OUT std_logic

)

End component;

-----------------

signaal pwm_reg: std_logic_vector (5 Downto 0);

signaal pwm_db_change: std_logic;

signaal pwm_db_dir: std_logic;

beginnen

Inst_debounce1: ontdendering PORT MAP (

db_clk => pwm_cntr17,

db_res => pwm_res,

db_key_in => pwm_change,

db_key_out => pwm_db_change

)

Inst_debounce2: ontdendering PORT MAP (

db_clk => pwm_cntr17,

db_res => pwm_res,

db_key_in => pwm_dir,

db_key_out => pwm_db_dir

)pwm_proc: proces (pwm_db_change, pwm_res)

beginnen

indien pwm_res = '0 'dan

pwm_reg <= "000000";

elsif rising_edge (pwm_db_change) dan

indien pwm_db_dir = '1 'dan

indien pwm_reg / = 63 dan

pwm_reg <= pwm_reg 1;

anders

pwm_reg <= pwm_reg;

end if;

elsif pwm_reg / = 0 dan

pwm_reg <= pwm_reg - 1;

anders

pwm_reg <= pwm_reg;

end if;

end if;

einde proces pwm_proc;

-----------------------

pwm_out_proc: proces (pwm_clk, pwm_res)

beginnen

indien pwm_res = '0 'dan

pwm_out <= '0 ';

elsif rising_edge (pwm_clk) dan

if (pwm_cntr> pwm_reg) then

pwm_out <= '1 ';

anders

pwm_out <= '0 ';

end if;

end if;

einde proces pwm_out_proc;

einde arch_pwm;

- ================================================ ===============================

library IEEE;

gebruik IEEE.STD_LOGIC_1164.ALL;

gebruik IEEE.STD_LOGIC_ARITH.ALL;

gebruik IEEE.STD_LOGIC_UNSIGNED.ALL;-------------------------------------------------- ------------------------------

entiteit multipwm is

Port (

klok: in std_logic; - Algemene PWM klok, voor 16MHz PWM zal worden 250kHz.

reset: in std_logic; --

change1: in std_logic; --

map1: in std_logic; --

OUT1: out std_logic; --

change2: in std_logic; --

map2: in std_logic; --

OUT2: out std_logic; --

change3: in std_logic; --

map3: in std_logic; --

out3: out std_logic); --

einde multipwm;

--------------

architectuur arch_multipwm van multipwm is

component PWM

port (

pwm_cntr: in std_logic_vector (5 Downto 0);

pwm_clk: in std_logic; --.

pwm_res: in std_logic; --

pwm_change: in std_logic; --

pwm_dir: in std_logic; --

pwm_cntr17: in std_logic; --

pwm_out: out std_logic); --

end component;

signaal counter: std_logic_vector (17 Downto 0);

beginnen - een loket voor alle PWMs

counter_proc: Process (klok, reset)

beginnen

indien reset = '0 'dan

counter <= "000000000000000000";

elsif rising_edge (klok) dan

counter <= counter 1;

end if;

einde proces counter_proc;

-------------------------------------------------- ------------------------------

Inst_pwm1: PWM PORT MAP (

pwm_cntr => counter (5 Downto 0),

pwm_clk => klok,

pwm_res => reset,

pwm_change => change1,

pwm_dir => map1,

pwm_cntr17 => counter (17),

pwm_out => OUT1);

------------------------------------

Inst_pwm2: PWM PORT MAP (

pwm_cntr => counter (5 Downto 0),

pwm_clk => klok,

pwm_res => reset,

pwm_change => change2,

pwm_dir => map2,

pwm_cntr17 => counter (17),

pwm_out => OUT2);

------------------------------------

Inst_pwm3: PWM PORT MAP (

pwm_cntr => counter (5 Downto 0),

pwm_clk => klok,

pwm_res => reset,

pwm_change => change3,

pwm_dir => map3,

pwm_cntr17 => counter (17),

pwm_out => out3);

------------------------------------

einde arch_multipwm;
 
Code:

library IEEE;

gebruik ieee.std_logic_1164.all;-------------------------------------------------- -------------------------------------------------- ----------------entiteit ontdendering is

port (

RAW: in std_logic;

Schoon: out std_logic;

clk: in std_logic

)

einde ontdendering;RTL architectuur van ontdendering is

-------------------------------------------------- -------------------------------------------------- ----------------signaal current_s, next_s: std_logic_vector (1 Downto 0);

-------------------------------------------------- -------------------------------------------------- ----------------beginnen- Combinatorische logica voor de volgende staat

next_s <= "00" wanneer (ruwe = '1 ') else

"01" wanneer current_s = "00" anders

"10";- Combinatorische logica voor de uitgang

clean <= '0 'wanneer current_s = "10" else '1';- Sequentiële logica

proces (CLK)

beginnen

if (clk'event en clk = '1 ') then

current_s <= next_s;

end if;

einde proces

end RTL;

-------------------------------------------------- -------------------------------------------------- ----------------
 
Een schakelaar debouncer behoeften tien of twintig milliseconden van de vertraging.Uw code ziet eruit als een vallende-edge detector, niet een debouncer.

Hier is een eenvoudige debouncer in Verilog:
http://www.edaboard.com/viewtopic.php?p=492226 # 492226

 
Van Altera HDL voorbeelden.
U kunt gebruik maken Xilinx XPort voor vertalen naar VHDL of Verilog

Code:%********************************

*

Mechanische Switch Debouncer

*

********************************%SUBDESIGN ontdendering

(

CLK: INPUT;

key_pressed: INPUT;

pulse: OUTPUT;

)VARIABELE

count_reg [7 .. 0]: DFF;

at_zero: NODE;BEGINPreset% tot 255 wanneer sleutel stuitert of niet%

% Ingedrukt. Decrement wanneer toets wordt ingedrukt.
%

count_reg []. clk = clk;

count_reg []. prn = key_pressed;

count_reg []. d = count_reg []. q - (0,! at_zero);% Emit enkele puls wanneer teller bereikt 1.
%

puls = count_reg []. q == h "01";% Laat teller decrement onder nul.
%

at_zero = count_reg []. q == h "00";END;

 

Welcome to EDABoard.com

Sponsor

Back
Top