mirror of
				https://github.com/Klagarge/Cursor.git
				synced 2025-10-30 21:49:17 +00:00 
			
		
		
		
	Initial commit
This commit is contained in:
		
							
								
								
									
										90
									
								
								Libs/Common/hdl/toggler_RTL.vhd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								Libs/Common/hdl/toggler_RTL.vhd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| -- filename:          toggler.vhd | ||||
| -- kind:              vhdl file | ||||
| -- first created:     05.03.2012 | ||||
| -- created by:        zas | ||||
| -------------------------------------------------------------------------------- | ||||
| -- History: | ||||
| -- v0.1 : cof 22.01.2013 -- Initial version | ||||
| -------------------------------------------------------------------------------- | ||||
| -- Description:  | ||||
| -- Debounces a button on both edges. | ||||
| --             _                            _ | ||||
| -- input  ____/ \__________________________/ \____________ | ||||
| --              _____________________________ | ||||
| -- output _____/                             \____________ | ||||
| -- | ||||
| -- If the generic "counterBitNb" is greater than zero, a debouncer is placed on | ||||
| -- the input signal. | ||||
| -- | ||||
| -------------------------------------------------------------------------------- | ||||
|  | ||||
| ARCHITECTURE rtl OF toggler IS | ||||
|   | ||||
|   signal inputDebounced : std_ulogic; | ||||
|   signal inputDelayed, inputChangedTo1 : std_ulogic; | ||||
|   signal toggle_int : std_ulogic; | ||||
|  | ||||
|   COMPONENT debouncer | ||||
|   GENERIC ( | ||||
|     counterBitNb : positive := 18; | ||||
|     invertInput : std_ulogic := '0' | ||||
|   ); | ||||
|   PORT ( | ||||
|     reset     : IN     std_ulogic ; | ||||
|     clock     : IN     std_ulogic ; | ||||
|     input     : IN     std_ulogic ; | ||||
|     debounced : OUT    std_ulogic  | ||||
|   ); | ||||
|   END COMPONENT; | ||||
|  | ||||
| BEGIN | ||||
|   ------------------------------------------------------------------------------ | ||||
|                                                                -- Debounce input | ||||
|   useInputDirectly: if counterBitNb = 0 generate | ||||
|     inputDebounced <= input; | ||||
|   end generate useInputDirectly; | ||||
|  | ||||
|   debounceInput: if counterBitNb > 0 generate | ||||
|     I_debouncer : debouncer | ||||
|       GENERIC MAP ( | ||||
|         counterBitNb => counterBitNb, | ||||
|         invertInput => invertInput | ||||
|       ) | ||||
|       PORT MAP ( | ||||
|         reset     => reset, | ||||
|         clock     => clock, | ||||
|         input     => input, | ||||
|         debounced => inputDebounced | ||||
|       ); | ||||
|   end generate debounceInput; | ||||
|  | ||||
|   ------------------------------------------------------------------------------ | ||||
|                                                            -- Find edge on input | ||||
|   delayInput: process(reset, clock) | ||||
|   begin | ||||
|     if reset = '1' then | ||||
|       inputDelayed <= '0'; | ||||
|     elsif rising_edge(clock) then | ||||
|       inputDelayed <= inputDebounced; | ||||
|     end if; | ||||
|   end process delayInput; | ||||
|  | ||||
|   inputChangedTo1 <= '1' when (inputDebounced = '1') and (inputDelayed = '0') | ||||
|     else '0'; | ||||
|  | ||||
|   ------------------------------------------------------------------------------ | ||||
|                                                                 -- Toggle output | ||||
|   toggleOutput: process(reset, clock) | ||||
|   begin | ||||
|     if reset = '1' then | ||||
|       toggle_int <= '0'; | ||||
|     elsif rising_edge(clock) then | ||||
|       if inputChangedTo1 = '1' then | ||||
|         toggle_int <= not toggle_int; | ||||
|       end if; | ||||
|     end if; | ||||
|   end process toggleOutput; | ||||
|   | ||||
|    toggle <= toggle_int; | ||||
|   | ||||
| END ARCHITECTURE rtl; | ||||
		Reference in New Issue
	
	Block a user