"인터럽트 컨트롤러"-> VHDL

B

bobcat1

Guest
안녕

안녕, 난 단순한 CPLD에 대한 인터럽트 컨트롤러를 구현해야합니다

어느 한시기 바랍니다 도울 수

하나의 프로세서에 액세스하는 인터럽트 인터럽트 라인의 2 - 3 소스

읽기와 상태가 버스를
사용하여
내가 VHDL 코딩
해요감사합니다Bobi

 
안녕,

난 당신이 간단한 상태 머신이 할 수 있다고 생각합니다.인터럽트 다른 우선순위를 가지고 있습니까??정확하게, 그럼 내가 당신을 위해 무엇이 필요 VHDL 소스를 쓸 수있습니다!!

Phytex

 
안녕

이 코드를 테스트하지 않고, 시뮬레이션된.구문을 확인하고 그것을 시뮬레이션할 수있습니다.
그것은 당신의 작업에 대한 출발점이 될 수있다.

엔티티 Interrupt_controller입니다
포트
(
CLK_IN : std_logic; - 클럭 입력
CS_IN : std_logic; - 칩 외부 입력을 선택
IN_0 : std_logic; - 먼저 IRQ를 소스 입력
IN_1 : std_logic; - 둘째는 IRQ 소스 입력
IN_2 : std_logic; - 셋째 IRQ를 소스 입력
RD_IN : std_logic; - 외부 읽기 입력
RST_IN : std_logic; - 외부 리셋 입력

DATA_OUT : std_logic_vector (2 downto 0); - 외부 데이터 버스 출력
IRQ_PIN : std_logic; - IRQ를 출력 (천자의 IRQ를 입력)를 연결
);

- 시계 (CLK_IN) 기간이 최소
4 배 낮은해야한다 (또는 4 배 더 높은 주파수에서) LP로 읽어주기보다.
- IRQ를 출력 (IRQ_PIN)은 3 개의 입력의 활성이 낮은 상태 변경 (IN_0, IN_1, IN_2)에있습니다.
-)
IRQ를 출력 (IRQ_PIN) (1로 설정 상태를 독서를 지웁니다.
- 독서의 상태를 세 가지 입력의 상태를 제공합니다.소프트웨어 마녀 입력 변화 상태를 확인합니다.
- 경고 : IN_0 IN_2 통해 debounced없습니다.낮은 및 LP는 IRQ를 읽어 핀 사이의 상태를 변경하지 마십시오

시작

최종 Interrupt_controller;Interrupt_controller의 건축물 Arch1입니다

신호 COMPAR_OUT : std_logic;
신호 FIRST_LATCH_OUT : std_logic_vector (2 downto 0);
신호 IRQ_OUT : std_logic;
신호 READ_EN : 표준 논리;
신호 SECOND_LATCH_OUT : std_logic_vector (2 downto 0);

시작

- 읽기를 활성화하십시오.활성이 낮은 = 0과 RD_IN = 0 때 CS_IN

READ_EN <= CS_IN 또는 RD_IN;- 첫번째 레벨 입력 데이터의 래치

First_latch : (CLK_IN, RST_IN)
프로세스시작
=
'1 '을 누른 경우 RST_IN
FIRST_LATCH_OUT <= (다른 => '0 ');
elsif CLK_IN'event과 CLK_IN = '1 '을
선택한 다음
FIRST_LATCH_OUT (0) <= IN_0;
FIRST_LATCH_OUT (1) <= IN_1;
FIRST_LATCH_OUT (2) <= IN_2;
끝;
엔드 프로세스 First_latch;- 둘째 수준 래치

Second_latch : (CLK_IN, FIRST_LATCH_OUT, READ_EN, RST_IN)
프로세스시작
=
'1 '을 누른 경우 RST_IN
SECOND_LATCH_OUT <= (다른 => '0 ');
elsif CLK_IN'event과 CLK_IN = '0 '다음
READ_EN = '0 '을 누른 경우
SECOND_LATCH_OUT <= FIRST_LATCH_OUT;
끝;
끝;
엔드 프로세스 Second_latch;첫 번째와 두 번째 datas 래치 사이 - Magnitude 비교.

Compar : 프로세스 (FIRST_LATCH_OUT, SECOND_LATCH_OUT)
시작
만약 다음 FIRST_LATCH_OUT = SECOND_LATCH_OUT
COMPAR_OUT <= '0 ';
그 밖의
COMPAR_OUT <= '1 ';
끝;
엔드 프로세스 Compar;- 내부의 신호를 방해했다.하이, 액티브 RST_IN 또는 천자의 읽기를 통해 = 0과 RD_IN = 0 () CS_IN reseted입니다

IRQ가 : (CLK_IN, COMPAR_OUT, READ_EN, RST_IN)
프로세스시작
= '1 '또는 READ_EN
= '0'누른 경우 RST_IN
IRQ_OUT <= '0 ';
elsif CLK_IN'event과 CLK_IN = '0 '다음
IRQ_OUT <= IRQ_OUT 또는 COMPAR_OUT;
끝;
엔드 프로세스 IRQ를;- 출력, 활성 낮은 핀 방해에 신호를 방해했다.활성이 높은 경우, '제거 싶지 않다'.

IRQ_PIN <= 안 (IRQ_OUT);- 출력 첫 Tristate와 외부 버스에 datas 래치.IN_2 통해 읽을 동안 IN_0 상태를 변경해서는 안된다

Data_tristate : (FIRST_LATCH_OUT, READ_EN)
프로세스시작
READ_EN = '0 '을 누른 경우
DATA_OUT <= FIRST_LATCH_OUT;
그 밖의
DATA_OUT <= (기타 => "부터 Z ');
끝;
엔드 프로세스 Data_tristate;

최종 Arch_1;

 

Welcome to EDABoard.com

Sponsor

Back
Top