⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer_counter.vhd

📁 Synthesizable model of Atmel ATmega103 microcontroller. (VHDL IP)
💻 VHD
📖 第 1 页 / 共 3 页
字号:
--**********************************************************************************************-- Timers/Counters Block Peripheral for the AVR Core-- Version 1.01 -- Modified 20.05.2003-- Synchronizer for EXT1/EXT2/Tosc1 inputs was added-- Designed by Ruslan Lepetenok--**********************************************************************************************library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;use WORK.AVRuCPackage.all;entity Timer_Counter is port(	                   -- AVR Control               ireset         : in std_logic;               cp2	          : in std_logic;               adr            : in std_logic_vector(5 downto 0);               dbus_in        : in std_logic_vector(7 downto 0);               dbus_out       : out std_logic_vector(7 downto 0);               iore           : in std_logic;               iowe           : in std_logic;               out_en         : out std_logic;                        --Timer/Counters               EXT1           : in std_logic;               EXT2           : in std_logic;			   Tosc1	      : in std_logic;			   OC0_PWM0       : out std_logic;			   OC1A_PWM1A     : out std_logic;			   OC1B_PWM1B     : out std_logic;			   OC2_PWM2       : out std_logic;			   		   			           --IRQ               TC0OvfIRQ      : out std_logic;			   TC0OvfIRQ_Ack  : in std_logic;			   TC0CmpIRQ      : out std_logic;			   TC0CmpIRQ_Ack  : in std_logic;			   TC2OvfIRQ      : out std_logic;			   TC2OvfIRQ_Ack  : in std_logic;			   TC2CmpIRQ      : out std_logic;			   TC2CmpIRQ_Ack  : in std_logic;			   TC1OvfIRQ      : out std_logic;			   TC1OvfIRQ_Ack  : in std_logic;			   TC1CmpAIRQ     : out std_logic;			   TC1CmpAIRQ_Ack : in std_logic;			   TC1CmpBIRQ     : out std_logic;			   TC1CmpBIRQ_Ack : in std_logic;			   			   TC1ICIRQ       : out std_logic;			   TC1ICIRQ_Ack   : in std_logic);end Timer_Counter;architecture rtl of Timer_Counter is-- Copies of the external signalssignal OC0_PWM0_Int   :	std_logic := '0';signal OC2_PWM2_Int   :	std_logic := '0';-- Registerssignal TCCR0  : std_logic_vector(7 downto 0) := (others => '0');signal TCCR1A : std_logic_vector(7 downto 0) := (others => '0');signal TCCR1B : std_logic_vector(7 downto 0) := (others => '0');signal TCCR2  : std_logic_vector(7 downto 0) := (others => '0');signal ASSR   : std_logic_vector(7 downto 0) := (others => '0'); -- Asynchronous status register (for TCNT0)signal TIMSK  : std_logic_vector(7 downto 0) := (others => '0');signal TIFR   : std_logic_vector(7 downto 0) := (others => '0');signal TCNT0  : std_logic_vector(7 downto 0) := (others => '0');signal TCNT2  : std_logic_vector(7 downto 0) := (others => '0');signal OCR0   : std_logic_vector(7 downto 0) := (others => '0');signal OCR2   : std_logic_vector(7 downto 0) := (others => '0');signal TCNT1H : std_logic_vector(7 downto 0) := (others => '0');signal TCNT1L : std_logic_vector(7 downto 0) := (others => '0');signal OCR1AH : std_logic_vector(7 downto 0) := (others => '0');signal OCR1AL : std_logic_vector(7 downto 0) := (others => '0');signal OCR1BH : std_logic_vector(7 downto 0) := (others => '0');signal OCR1BL : std_logic_vector(7 downto 0) := (others => '0');signal ICR1AH : std_logic_vector(7 downto 0) := (others => '0');signal ICR1AL : std_logic_vector(7 downto 0) := (others => '0');signal TCCR0_Sel  : std_logic := '0';signal TCCR1A_Sel : std_logic := '0';signal TCCR1B_Sel : std_logic := '0';signal TCCR2_Sel  : std_logic := '0';signal ASSR_Sel   : std_logic := '0';signal TIMSK_Sel  : std_logic := '0';signal TIFR_Sel   : std_logic := '0';signal TCNT0_Sel  : std_logic := '0';signal TCNT2_Sel  : std_logic := '0';signal OCR0_Sel   : std_logic := '0';signal OCR2_Sel   : std_logic := '0';signal TCNT1H_Sel : std_logic := '0';signal TCNT1L_Sel : std_logic := '0';signal OCR1AH_Sel : std_logic := '0';signal OCR1AL_Sel : std_logic := '0';signal OCR1BH_Sel : std_logic := '0';signal OCR1BL_Sel : std_logic := '0';signal ICR1AH_Sel : std_logic := '0';signal ICR1AL_Sel : std_logic := '0';  -- TCCR0 Bitsalias CS00  : std_logic is TCCR0(0);alias CS01  : std_logic is TCCR0(1);alias CS02  : std_logic is TCCR0(2);alias CTC0  : std_logic is TCCR0(3);alias COM00 : std_logic is TCCR0(4);alias COM01 : std_logic is TCCR0(5);alias PWM0  : std_logic is TCCR0(6);  -- TCCR1A Bitsalias PWM10  : std_logic is TCCR1A(0);alias PWM11  : std_logic is TCCR1A(1);alias COM1B0 : std_logic is TCCR1A(4);alias COM1B1 : std_logic is TCCR1A(5);alias COM1A0 : std_logic is TCCR1A(4);alias COM1A1 : std_logic is TCCR1A(5);  -- TCCR1B Bitsalias CS10  : std_logic is TCCR1A(0);alias CS11  : std_logic is TCCR1A(1);alias CS12  : std_logic is TCCR1A(2);alias CTC1  : std_logic is TCCR1A(3);alias ICES1 : std_logic is TCCR1A(6);alias ICNC1 : std_logic is TCCR1A(7);  -- TCCR2 Bitsalias CS20  : std_logic is TCCR2(0);alias CS21  : std_logic is TCCR2(1);alias CS22  : std_logic is TCCR2(2);alias CTC2  : std_logic is TCCR2(3);alias COM20 : std_logic is TCCR2(4);alias COM21 : std_logic is TCCR2(5);alias PWM2  : std_logic is TCCR2(6);-- ASSR bitsalias TCR0UB  : std_logic is ASSR(0);alias OCR0UB  : std_logic is ASSR(1);alias TCN0UB  : std_logic is ASSR(2);alias AS0     : std_logic is ASSR(3);-- TIMSK bitsalias TOIE0     : std_logic is TIMSK(0);alias OCIE0     : std_logic is TIMSK(1);alias TOIE1     : std_logic is TIMSK(2);alias OCIE1B    : std_logic is TIMSK(3);alias OCIE1A    : std_logic is TIMSK(4);alias TICIE1    : std_logic is TIMSK(5);alias TOIE2     : std_logic is TIMSK(6);alias OCIE2     : std_logic is TIMSK(7);-- TIFR bitsalias TOV0     : std_logic is TIFR(0);alias OCF0     : std_logic is TIFR(1);alias TOV1     : std_logic is TIFR(2);alias OCF1B    : std_logic is TIFR(3);alias OCF1A    : std_logic is TIFR(4);alias ICF1     : std_logic is TIFR(5);alias TOV2     : std_logic is TIFR(6);alias OCF2     : std_logic is TIFR(7);-- Prescaler1 signalssignal CK8    : std_logic := '0';signal CK64   : std_logic := '0';signal CK256  : std_logic := '0';signal CK1024 : std_logic := '0';signal Pre1Cnt : std_logic_vector(9 downto 0) := (others => '0'); -- Prescaler 1 counter (10-bit)signal EXT1RE : std_logic := '0'; -- Rising edge of external input EXT1 (for TCNT1 only)signal EXT1FE : std_logic := '0'; -- Falling edge of external input EXT1 (for TCNT1 only)signal EXT2RE : std_logic := '0'; -- Rising edge of external input EXT2	(for TCNT2 only)signal EXT2FE : std_logic := '0'; -- Falling edge of external input EXT2 (for TCNT2 only)-- Risign/falling edge detectors	signal EXT1Latched : std_logic := '0';	signal EXT2Latched : std_logic := '0';	-- Prescalers outputs signal TCNT0_En : std_logic := '0'; -- Output of the prescaler 0signal TCNT1_En : std_logic := '0';	-- Output of the prescaler 1signal TCNT2_En : std_logic := '0';	-- Output of the prescaler 1-- Prescaler0 signals	signal PCK0     : std_logic := '0';signal PCK08    : std_logic := '0';signal PCK032   : std_logic := '0';signal PCK064   : std_logic := '0';signal PCK0128  : std_logic := '0';signal PCK0256  : std_logic := '0';signal PCK01024 : std_logic := '0';signal Tosc1RE      : std_logic := '0'; -- Rising edge detector for TOSC1 inputsignal Tosc1Latched : std_logic := '0';signal Pre0Cnt      : std_logic_vector(9 downto 0) := (others => '0'); -- Prescaler 0 counter (10-bit)signal PCK0_Del     : std_logic := '0';-- Timer/counter 0 signalssignal TCNT0_Tmp     : std_logic_vector(7 downto 0) := (others => '0');signal TCNT0_In      : std_logic_vector(7 downto 0) := (others => '0');signal TCNT0_Imm_In  : std_logic_vector(7 downto 0) := (others => '0'); -- Immediate data input signal TCCR0_Tmp     : std_logic_vector(7 downto 0) := (others => '0');signal TCCR0_In      : std_logic_vector(7 downto 0) := (others => '0');signal OCR0_Tmp      : std_logic_vector(7 downto 0) := (others => '0');signal OCR0_In       : std_logic_vector(7 downto 0) := (others => '0');signal TCNT0_Cnt_Dir : std_logic := '0'; -- Count up(0) down (1)signal TCNT0_Clr     : std_logic := '0'; -- Clear (syncronously) TCNT0signal TCNT0_Ld_Imm  : std_logic := '0'; -- Load immediate value (syncronously) TCNT0signal TCNT0_Cmp_Out : std_logic := '0'; -- Output of the comparatorsignal TCNT0_Inc     : std_logic := '0'; -- Increment (not load) took place-- For asynchronous mode onlysignal TCR0UB_Tmp     : std_logic := '0';signal OCR0UB_Tmp     : std_logic := '0';signal TCN0UB_Tmp     : std_logic := '0';-- Timer/counter 2 signalssignal TCNT2_In      : std_logic_vector(7 downto 0) := (others => '0');signal OCR2_Tmp      : std_logic_vector(7 downto 0) := (others => '0');signal TCNT2_Cnt_Dir : std_logic := '0'; -- Count up(0) down (1)signal TCNT2_Clr     : std_logic := '0'; -- Clear (syncronously) TCNT0signal TCNT2_Imm_In  : std_logic_vector(7 downto 0) := (others => '0'); -- Immediate data input signal TCCR2_Tmp     : std_logic_vector(7 downto 0) := (others => '0');signal OCR2_In       : std_logic_vector(7 downto 0) := (others => '0');signal TCNT2_Ld_Imm  : std_logic := '0'; -- Load immediate value (syncronously) TCNT2signal TCNT2_Cmp_Out : std_logic := '0'; -- Output of the comparatorsignal TCNT2_Inc     : std_logic := '0'; -- Increment (not load) took place-- Synchronizer signalssignal EXT1SA  : std_logic := '0';signal EXT1SB  : std_logic := '0'; -- Output of the synchronizer for EXT1signal EXT2SA  : std_logic := '0';signal EXT2SB  : std_logic := '0'; -- Output of the synchronizer for EXT1signal Tosc1SA : std_logic := '0';signal Tosc1SB : std_logic := '0'; -- Output of the synchronizer for Tosc1-- TBD-- Timer/counter 1 signals-- TBD-- Additonal signals (These signals are added in order to emulate the behaviour of the real chip )-- !!! TBD !!!--signal PORTB4_Out : std_logic := '0';--signal PORTB5_Out : std_logic := '0';--signal PORTB6_Out : std_logic := '0';--signal PORTB7_Out : std_logic := '0';begin	-- SynchronizersSyncDFFs:process(cp2,ireset)	begin	 if ireset='0' then      -- Reset  EXT1SA <= '0';    EXT1SB <= '0';     EXT2SA <= '0';     EXT2SB <= '0';     Tosc1SA <= '0';    Tosc1SB <= '0';     elsif cp2='1' and cp2'event then -- Clock    EXT1SA <= EXT1;      EXT1SB <= EXT1SA;       EXT2SA <= EXT2;       EXT2SB <= EXT2SA;       Tosc1SA <= Tosc1;      Tosc1SB <= Tosc1SA; end if;	 end process;	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -