"Interrupt Controller" -> VHDL

B

bobcat1

Guest
Hoi

Hoi ik nodig om een eenvoudige interrupt controller op een CPLD

een kan helpen alstublieft

2 tot 3 bron van onderbreken om toegang te krijgen tot een enkel onderbroken lijn op de processor

en het lezen van de status van het gebruik van de bus

Ik
ben codering in VHDLTHANKSBOBI

 
Hoi,

Ik denk dat je dit kan doen met een simpele state machine.Zijn interrupts hebben verschillende prioriteit?Precies wat je nodig hebt, dan kan ik schrijf de VHDL bron voor u!

Phytex

 
Hoi

Deze code is niet getest en gesimuleerd.Controleer de syntaxis en het simuleren.
Het kan een uitgangspunt voor uw werk.

entiteit Interrupt_controller is
haven
(
CLK_IN: in std_logic; - Klok input
CS_IN: in std_logic; - Externe Chip Selecteer input
IN_0: in std_logic; - Eerste irq broningang
IN_1: in std_logic; - Tweede irq broningang
IN_2: in std_logic; - Derde irq broningang
RD_IN: in std_logic; - Externe Lees input
RST_IN: in std_logic; - Externe Reset-ingang

DATA_OUT:
Out std_logic_vector (2 downto 0); - Externe data bus uitgang
IRQ_PIN: out std_logic; - IRQ-uitgang (aangesloten op LP's IRQ-ingang)
);

- De klok (CLK_IN) moet ten minste 4 keer lager (of 4 keer hoger in frequentie) dan de LP's lezen cyclus.
- De IRQ uitgang (IRQ_PIN) actief is op een lage stand veranderen op een van de drie ingangen (IN_0, IN_1, IN_2).
- Het lezen van de status wist (ingesteld op 1) de IRQ-uitgang (IRQ_PIN).
- Het lezen van de status geven van de toestand van de drie ingangen.Software moet controleren heks input veranderingen staat.
- Waarschuwing: IN_0 via IN_2 niet debounced.Het veranderen niet state tussen IRQ pin laag en LP's lezen

beginnen

einde Interrupt_controller;architectuur Arch1 van Interrupt_controller is

signaal COMPAR_OUT: std_logic;
signaal FIRST_LATCH_OUT: std_logic_vector (2 downto 0);
signaal IRQ_OUT: std_logic;
signaal READ_EN: STD logica;
signaal SECOND_LATCH_OUT: std_logic_vector (2 downto 0);

beginnen

- Lees inschakelen.Actieve laag CS_IN = 0 en RD_IN = 0

READ_EN <= CS_IN of RD_IN;- Eerste niveau vergrendeling van gegevens

First_latch: proces (CLK_IN, RST_IN)
beginnen
indien RST_IN ='1 ', dan
FIRST_LATCH_OUT <= (others =>'0 ');
elsif CLK_IN'event en CLK_IN ='1 ', dan
FIRST_LATCH_OUT (0) <= IN_0;
FIRST_LATCH_OUT (1) <= IN_1;
FIRST_LATCH_OUT (2) <= IN_2;
end if;
einde proces First_latch;- Tweede niveau klinkinrichting

Second_latch: proces (CLK_IN, FIRST_LATCH_OUT, READ_EN, RST_IN)
beginnen
indien RST_IN ='1 ', dan
SECOND_LATCH_OUT <= (others =>'0 ');
elsif CLK_IN'event en CLK_IN ='0 ', dan
indien READ_EN ='0 ', dan
SECOND_LATCH_OUT <= FIRST_LATCH_OUT;
end if;
end if;
einde proces Second_latch;- Omvang vergelijking tussen de eerste en tweede klinkinrichting data.

Vergelijkbaar: proces (FIRST_LATCH_OUT, SECOND_LATCH_OUT)
beginnen
indien FIRST_LATCH_OUT = SECOND_LATCH_OUT vervolgens
COMPAR_OUT <='0 ';
anders
COMPAR_OUT <='1 ';
end if;
einde proces vergelijkbaar;- Interne interrupt signaal.Actieve hoog, is reseted via RST_IN of LP's lezen (CS_IN = 0 en RD_IN = 0)

Irq: proces (CLK_IN, COMPAR_OUT, READ_EN, RST_IN)
beginnen
indien RST_IN ='1 'of READ_EN ='0', dan
IRQ_OUT <='0 ';
elsif CLK_IN'event en CLK_IN ='0 ', dan
IRQ_OUT <= IRQ_OUT of COMPAR_OUT;
end if;
einde proces IRQ;- Output interruptsignaal op interrupt pin, actieve laag.Als je het actieve hoog, verwijderen 'niet'.

IRQ_PIN <= niet (IRQ_OUT);- Output eerste klinkinrichting data op externe bus met Tristate.IN_0 via IN_2 moet niet veranderen tijdens lezen

Data_tristate: proces (FIRST_LATCH_OUT, READ_EN)
beginnen
indien READ_EN ='0 ', dan
DATA_OUT <= FIRST_LATCH_OUT;
anders
DATA_OUT <= (others => 'Z');
end if;
einde proces Data_tristate;

einde Arch_1;

 

Welcome to EDABoard.com

Sponsor

Back
Top