reformatted, forced tighter timing
Config works, but screen is still scrambled
This commit is contained in:
@@ -17,64 +17,64 @@ INCLUDE "lpm_bustri_BYT.inc";
|
||||
SUBDESIGN interrupt_handler
|
||||
(
|
||||
-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
|
||||
MAIN_CLK : INPUT;
|
||||
nFB_WR : INPUT;
|
||||
nFB_CS1 : INPUT;
|
||||
nFB_CS2 : INPUT;
|
||||
FB_SIZE0 : INPUT;
|
||||
FB_SIZE1 : INPUT;
|
||||
FB_ADR[31..0] : INPUT;
|
||||
PIC_INT : INPUT;
|
||||
E0_INT : INPUT;
|
||||
DVI_INT : INPUT;
|
||||
nPCI_INTA : INPUT;
|
||||
nPCI_INTB : INPUT;
|
||||
nPCI_INTC : INPUT;
|
||||
nPCI_INTD : INPUT;
|
||||
nMFP_INT : INPUT;
|
||||
nFB_OE : INPUT;
|
||||
DSP_INT : INPUT;
|
||||
VSYNC : INPUT;
|
||||
HSYNC : INPUT;
|
||||
DMA_DRQ : INPUT;
|
||||
nIRQ[7..2] : OUTPUT;
|
||||
INT_HANDLER_TA : OUTPUT;
|
||||
ACP_CONF[31..0] : OUTPUT;
|
||||
TIN0 : OUTPUT;
|
||||
FB_AD[31..0] : BIDIR;
|
||||
MAIN_CLK : INPUT;
|
||||
nFB_WR : INPUT;
|
||||
nFB_CS1 : INPUT;
|
||||
nFB_CS2 : INPUT;
|
||||
FB_SIZE0 : INPUT;
|
||||
FB_SIZE1 : INPUT;
|
||||
FB_ADR[31..0] : INPUT;
|
||||
PIC_INT : INPUT;
|
||||
E0_INT : INPUT;
|
||||
DVI_INT : INPUT;
|
||||
nPCI_INTA : INPUT;
|
||||
nPCI_INTB : INPUT;
|
||||
nPCI_INTC : INPUT;
|
||||
nPCI_INTD : INPUT;
|
||||
nMFP_INT : INPUT;
|
||||
nFB_OE : INPUT;
|
||||
DSP_INT : INPUT;
|
||||
VSYNC : INPUT;
|
||||
HSYNC : INPUT;
|
||||
DMA_DRQ : INPUT;
|
||||
nIRQ[7..2] : OUTPUT;
|
||||
INT_HANDLER_TA : OUTPUT;
|
||||
ACP_CONF[31..0] : OUTPUT;
|
||||
TIN0 : OUTPUT;
|
||||
FB_AD[31..0] : BIDIR;
|
||||
-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
|
||||
)
|
||||
|
||||
VARIABLE
|
||||
FB_B[3..0] :NODE;
|
||||
INT_CTR[31..0] :DFFE;
|
||||
INT_CTR_CS :NODE;
|
||||
INT_LATCH[31..0] :DFF;
|
||||
INT_LATCH_CS :NODE;
|
||||
INT_CLEAR[31..0] :DFF;
|
||||
INT_CLEAR_CS :NODE;
|
||||
INT_IN[31..0] :NODE;
|
||||
INT_ENA[31..0] :DFFE;
|
||||
INT_ENA_CS :NODE;
|
||||
ACP_CONF[31..0] :DFFE;
|
||||
ACP_CONF_CS :NODE;
|
||||
PSEUDO_BUS_ERROR :NODE;
|
||||
UHR_AS :NODE;
|
||||
UHR_DS :NODE;
|
||||
RTC_ADR[5..0] :DFFE;
|
||||
ACHTELSEKUNDEN[2..0] :DFFE;
|
||||
WERTE[7..0][63..0] :DFFE; -- WERTE REGISTER 0-63
|
||||
PIC_INT_SYNC[2..0] :DFF;
|
||||
INC_SEC :NODE;
|
||||
INC_MIN :NODE;
|
||||
INC_STD :NODE;
|
||||
INC_TAG :NODE;
|
||||
FB_B[3..0] :NODE;
|
||||
INT_CTR[31..0] :DFFE;
|
||||
INT_CTR_CS :NODE;
|
||||
INT_LATCH[31..0] :DFF;
|
||||
INT_LATCH_CS :NODE;
|
||||
INT_CLEAR[31..0] :DFF;
|
||||
INT_CLEAR_CS :NODE;
|
||||
INT_IN[31..0] :NODE;
|
||||
INT_ENA[31..0] :DFFE;
|
||||
INT_ENA_CS :NODE;
|
||||
ACP_CONF[31..0] :DFFE;
|
||||
ACP_CONF_CS :NODE;
|
||||
PSEUDO_BUS_ERROR :NODE;
|
||||
UHR_AS :NODE;
|
||||
UHR_DS :NODE;
|
||||
RTC_ADR[5..0] :DFFE;
|
||||
ACHTELSEKUNDEN[2..0] :DFFE;
|
||||
WERTE[7..0][63..0] :DFFE; -- WERTE REGISTER 0-63
|
||||
PIC_INT_SYNC[2..0] :DFF;
|
||||
INC_SEC :NODE;
|
||||
INC_MIN :NODE;
|
||||
INC_STD :NODE;
|
||||
INC_TAG :NODE;
|
||||
ANZAHL_TAGE_DES_MONATS[7..0]:NODE;
|
||||
WINTERZEIT :NODE;
|
||||
SOMMERZEIT :NODE;
|
||||
INC_MONAT :NODE;
|
||||
INC_JAHR :NODE;
|
||||
UPDATE_ON :NODE;
|
||||
WINTERZEIT :NODE;
|
||||
SOMMERZEIT :NODE;
|
||||
INC_MONAT :NODE;
|
||||
INC_JAHR :NODE;
|
||||
UPDATE_ON :NODE;
|
||||
|
||||
BEGIN
|
||||
-- BYT SELECT
|
||||
@@ -99,6 +99,7 @@ BEGIN
|
||||
INT_CTR[23..16].ENA = INT_CTR_CS & FB_B1 & !nFB_WR;
|
||||
INT_CTR[15..8].ENA = INT_CTR_CS & FB_B2 & !nFB_WR;
|
||||
INT_CTR[7..0].ENA = INT_CTR_CS & FB_B3 & !nFB_WR;
|
||||
|
||||
-- INTERRUPT ENABLE REGISTER BIT31=INT7,30=INT6,29=INT5,28=INT4,27=INT3,26=INT2
|
||||
INT_ENA[].CLK = MAIN_CLK;
|
||||
INT_ENA_CS = !nFB_CS2 & FB_ADR[27..2]==H"4001"; -- $10004/4
|
||||
@@ -107,6 +108,7 @@ BEGIN
|
||||
INT_ENA[23..16].ENA = INT_ENA_CS & FB_B1 & !nFB_WR;
|
||||
INT_ENA[15..8].ENA = INT_ENA_CS & FB_B2 & !nFB_WR;
|
||||
INT_ENA[7..0].ENA = INT_ENA_CS & FB_B3 & !nFB_WR;
|
||||
|
||||
-- INTERRUPT CLEAR REGISTER WRITE ONLY 1=INTERRUPT CLEAR
|
||||
INT_CLEAR[].CLK = MAIN_CLK;
|
||||
INT_CLEAR_CS = !nFB_CS2 & FB_ADR[27..2]==H"4002"; -- $10008/4
|
||||
@@ -114,8 +116,10 @@ BEGIN
|
||||
INT_CLEAR[23..16] = FB_AD[23..16] & INT_CLEAR_CS & FB_B1 & !nFB_WR;
|
||||
INT_CLEAR[15..8] = FB_AD[15..8] & INT_CLEAR_CS & FB_B2 & !nFB_WR;
|
||||
INT_CLEAR[7..0] = FB_AD[7..0] & INT_CLEAR_CS & FB_B3 & !nFB_WR;
|
||||
|
||||
-- INTERRUPT LATCH REGISTER READ ONLY
|
||||
INT_LATCH_CS = !nFB_CS2 & FB_ADR[27..2]==H"4003"; -- $1000C/4
|
||||
|
||||
-- INTERRUPT
|
||||
!nIRQ2 = HSYNC & INT_ENA[26];
|
||||
!nIRQ3 = INT_CTR0 & INT_ENA[27];
|
||||
@@ -139,6 +143,7 @@ PSEUDO_BUS_ERROR = !nFB_CS1 & (FB_ADR[19..4]==H"F8C8" -- SCC
|
||||
# FB_ADR[19..4]==H"F890" -- DMA SOUND
|
||||
# FB_ADR[19..4]==H"F891" -- DMA SOUND
|
||||
# FB_ADR[19..4]==H"F892"); -- DMA SOUND
|
||||
|
||||
-- IF VIDEO ADR CHANGE
|
||||
TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR HIGH 0xFFFF8201/2
|
||||
|
||||
@@ -176,6 +181,7 @@ TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR H
|
||||
INT_IN29 = INT_LATCH[]!=H"00000000";
|
||||
INT_IN30 = !nMFP_INT;
|
||||
INT_IN31 = DMA_DRQ;
|
||||
|
||||
--***************************************************************************************
|
||||
-- ACP CONFIG REGISTER: BIT 31-> 0=CF 1=IDE
|
||||
ACP_CONF[].CLK = MAIN_CLK;
|
||||
@@ -337,28 +343,34 @@ TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR H
|
||||
WERTE[1][11] = VCC; -- IMMER 24H FORMAT
|
||||
WERTE[0][11] = VCC; -- IMMER SOMMERZEITKORREKTUR
|
||||
WERTE[7][13] = VCC; -- IMMER RICHTIG
|
||||
|
||||
-- SOMMER WINTERZEIT: BIT 0 IM REGISTER D IST DIE INFORMATION OB SOMMERZEIT IST (BRAUCHT MAN F<>R R<>CKSCHALTUNG)
|
||||
SOMMERZEIT = WERTE[][6]==1 & WERTE[][4]==1 & WERTE[][8]==4 & WERTE[][7]>23; --LETZTER SONNTAG IM APRIL
|
||||
WERTE[0][13] = SOMMERZEIT;
|
||||
WERTE[0][13].ENA = INC_STD & (SOMMERZEIT # WINTERZEIT);
|
||||
WINTERZEIT = WERTE[][6]==1 & WERTE[][4]==1 & WERTE[][8]==10 & WERTE[][7]>24 & WERTE[0][13]; --LETZTER SONNTAG IM OKTOBER
|
||||
|
||||
-- ACHTELSEKUNDEN
|
||||
ACHTELSEKUNDEN[].CLK = MAIN_CLK;
|
||||
ACHTELSEKUNDEN[] = ACHTELSEKUNDEN[]+1;
|
||||
ACHTELSEKUNDEN[].ENA = PIC_INT_SYNC[2] & UPDATE_ON;
|
||||
|
||||
-- SEKUNDEN
|
||||
INC_SEC = ACHTELSEKUNDEN[]==7 & PIC_INT_SYNC[2] & UPDATE_ON;
|
||||
WERTE[][0] = (WERTE[][0]+1) & WERTE[][0]!=59 & !(RTC_ADR[]==0 & UHR_DS & !nFB_WR); -- SEKUNDEN Z<>HLEN BIS 59
|
||||
WERTE[][0].ENA = INC_SEC & !(RTC_ADR[]==0 & UHR_DS & !nFB_WR);
|
||||
|
||||
-- MINUTEN
|
||||
INC_MIN = INC_SEC & WERTE[][0]==59; --
|
||||
WERTE[][2] = (WERTE[][2]+1) & WERTE[][2]!=59 & !(RTC_ADR[]==2 & UHR_DS & !nFB_WR); -- MINUTEN Z<>HLEN BIS 59
|
||||
WERTE[][2].ENA = INC_MIN & !(RTC_ADR[]==2 & UHR_DS & !nFB_WR); --
|
||||
|
||||
-- STUNDEN
|
||||
INC_STD = INC_MIN & WERTE[][2]==59;
|
||||
WERTE[][4] = (WERTE[][4]+1+(1 & SOMMERZEIT)) & WERTE[][4]!=23 & !(RTC_ADR[]==4 & UHR_DS & !nFB_WR); -- STUNDEN Z<>HLEN BIS 23
|
||||
WERTE[][4].ENA = INC_STD & !(WINTERZEIT & WERTE[0][12]) & !(RTC_ADR[]==4 & UHR_DS & !nFB_WR); -- EINE STUNDE AUSLASSEN WENN WINTERZEITUMSCHALTUNG UND NOCH SOMMERZEIT
|
||||
-- WOCHENTAG UND TAG
|
||||
|
||||
INC_TAG = INC_STD & WERTE[][2]==23;
|
||||
WERTE[][6] = (WERTE[][6]+1) & WERTE[][6]!=7 & !(RTC_ADR[]==6 & UHR_DS & !nFB_WR) -- WOCHENTAG Z<>HLEN BIS 7
|
||||
# 1 & WERTE[][6]==7 & !(RTC_ADR[]==6 & UHR_DS & !nFB_WR); -- DANN BEI 1 WEITER
|
||||
@@ -370,15 +382,18 @@ TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR H
|
||||
WERTE[][7] = (WERTE[][7]+1) & WERTE[][7]!=ANZAHL_TAGE_DES_MONATS[] & !(RTC_ADR[]==7 & UHR_DS & !nFB_WR) -- TAG Z<>HLEN BIS MONATSENDE
|
||||
# 1 & WERTE[][7]==ANZAHL_TAGE_DES_MONATS[] & !(RTC_ADR[]==7 & UHR_DS & !nFB_WR); -- DANN BEI 1 WEITER
|
||||
WERTE[][7].ENA = INC_TAG & !(RTC_ADR[]==7 & UHR_DS & !nFB_WR); --
|
||||
|
||||
-- MONATE
|
||||
INC_MONAT = INC_TAG & WERTE[][7]==ANZAHL_TAGE_DES_MONATS[]; --
|
||||
WERTE[][8] = (WERTE[][8]+1) & WERTE[][8]!=12 & !(RTC_ADR[]==8 & UHR_DS & !nFB_WR) -- MONATE Z<>HLEN BIS 12
|
||||
# 1 & WERTE[][8]==12 & !(RTC_ADR[]==8 & UHR_DS & !nFB_WR); -- DANN BEI 1 WEITER
|
||||
WERTE[][8].ENA = INC_MONAT & !(RTC_ADR[]==8 & UHR_DS & !nFB_WR);
|
||||
|
||||
-- JAHR
|
||||
INC_JAHR = INC_MONAT & WERTE[][8]==12; --
|
||||
WERTE[][9] = (WERTE[][9]+1) & WERTE[][9]!=99 & !(RTC_ADR[]==9 & UHR_DS & !nFB_WR); -- JAHRE Z<>HLEN BIS 99
|
||||
WERTE[][9].ENA = INC_JAHR & !(RTC_ADR[]==9 & UHR_DS & !nFB_WR);
|
||||
|
||||
-- TRISTATE OUTPUT
|
||||
|
||||
FB_AD[31..24] = lpm_bustri_BYT(
|
||||
@@ -460,6 +475,7 @@ TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR H
|
||||
# INT_CLEAR_CS & INT_IN[23..16]
|
||||
# ACP_CONF_CS & ACP_CONF[23..16]
|
||||
,(UHR_DS # UHR_AS # INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE);
|
||||
|
||||
FB_AD[15..8] = lpm_bustri_BYT(
|
||||
INT_CTR_CS & INT_CTR[15..8]
|
||||
# INT_ENA_CS & INT_ENA[15..8]
|
||||
@@ -467,6 +483,7 @@ TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR H
|
||||
# INT_CLEAR_CS & INT_IN[15..8]
|
||||
# ACP_CONF_CS & ACP_CONF[15..8]
|
||||
,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE);
|
||||
|
||||
FB_AD[7..0] = lpm_bustri_BYT(
|
||||
INT_CTR_CS & INT_CTR[7..0]
|
||||
# INT_ENA_CS & INT_ENA[7..0]
|
||||
|
||||
Reference in New Issue
Block a user