diff --git a/FPGA_by_Fredi/.sopc_builder/filters.xml b/FPGA_by_Fredi/.sopc_builder/filters.xml
new file mode 100644
index 0000000..47a9392
--- /dev/null
+++ b/FPGA_by_Fredi/.sopc_builder/filters.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/FPGA_by_Fredi/.sopc_builder/preferences.xml b/FPGA_by_Fredi/.sopc_builder/preferences.xml
new file mode 100644
index 0000000..80f9764
--- /dev/null
+++ b/FPGA_by_Fredi/.sopc_builder/preferences.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FPGA_by_Fredi/BLITTER.tdf b/FPGA_by_Fredi/BLITTER.tdf
deleted file mode 100644
index 536bd9a..0000000
--- a/FPGA_by_Fredi/BLITTER.tdf
+++ /dev/null
@@ -1,314 +0,0 @@
--- WARNING: Do NOT edit the input and output ports in this file in a text
--- editor if you plan to continue editing the block that represents it in
--- the Block Editor! File corruption is VERY likely to occur.
-
--- Copyright (C) 1991-2010 Altera Corporation
--- Your use of Altera Corporation's design tools, logic functions
--- and other software and tools, and its AMPP partner logic
--- functions, and any output files from any of the foregoing
--- (including device programming or simulation files), and any
--- associated documentation or information are expressly subject
--- to the terms and conditions of the Altera Program License
--- Subscription Agreement, Altera MegaCore Function License
--- Agreement, or other applicable license agreement, including,
--- without limitation, that your use is for the sole purpose of
--- programming logic devices manufactured by Altera and sold by
--- Altera or its authorized distributors. Please refer to the
--- applicable agreement for further details.
-
-
--- Generated by Quartus II Version 9.1 (Build Build 350 03/24/2010)
--- Created on Sat Jan 15 11:06:17 2011
-INCLUDE "lpm_bustri_WORD.inc";
-INCLUDE "VIDEO/BLITTER/lpm_clshift0.INC";
-INCLUDE "VIDEO/BLITTER/altsyncram0.INC";
-
-CONSTANT BL_SKEW_LF = 255;
-
--- Title Statement (optional)
-TITLE "Blitter";
-
-
--- Parameters Statement (optional)
-
--- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE!
--- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE!
-
-
--- Subdesign Section
-
-SUBDESIGN BLITTER
-(
- -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
- nRSTO : INPUT;
- MAIN_CLK : INPUT;
- FB_ALE : INPUT;
- nFB_WR : INPUT;
- nFB_OE : INPUT;
- FB_SIZE0 : INPUT;
- FB_SIZE1 : INPUT;
- VIDEO_RAM_CTR[15..0] : INPUT;
- BLITTER_ON : INPUT;
- FB_ADR[31..0] : INPUT;
- nFB_CS1 : INPUT;
- nFB_CS2 : INPUT;
- nFB_CS3 : INPUT;
- DDRCLK0 : INPUT;
- BLITTER_DIN[127..0] : INPUT;
- BLITTER_DACK[4..0] : INPUT;
- SR_BLITTER_DACK : INPUT;
- BLITTER_RUN : OUTPUT;
- BLITTER_DOUT[127..0] : OUTPUT;
- BLITTER_ADR[31..0] : OUTPUT;
- BLITTER_SIG : OUTPUT;
- BLITTER_WR : OUTPUT;
- BLITTER_TA : OUTPUT;
- FB_AD[31..0] : BIDIR;
- -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
-)
-
-VARIABLE
- FB_B[3..0] :NODE;
- FB_16B[1..0] :NODE;
- BLITTER_CS :NODE;
- BL_BUSY :NODE;
- BL_HRAM_CS :NODE;
- BL_HRAM_ADR[3..0] :NODE;
- BL_HRAM_OUT[15..0] :NODE;
- BL_HRAM_BE[1..0] :NODE;
- BL_SRC_X_INC_CS :NODE;
- BL_SRC_X_INC[15..0] :DFFE;
- BL_SRC_Y_INC_CS :NODE;
- BL_SRC_Y_INC[15..0] :DFFE;
- BL_ENDMASK1_CS :NODE;
- BL_ENDMASK1[15..0] :DFFE;
- BL_ENDMASK2_CS :NODE;
- BL_ENDMASK2[15..0] :DFFE;
- BL_ENDMASK3_CS :NODE;
- BL_ENDMASK3[15..0] :DFFE;
- BL_SRC_ADRH_CS :NODE;
- BL_SRC_ADRL_CS :NODE;
- BL_SRC_ADR[31..0] :DFFE;
- BL_DST_X_INC_CS :NODE;
- BL_DST_X_INC[15..0] :DFFE;
- BL_DST_Y_INC_CS :NODE;
- BL_DST_Y_INC[15..0] :DFFE;
- BL_DST_ADRH_CS :NODE;
- BL_DST_ADRL_CS :NODE;
- BL_DST_ADR[31..0] :DFFE;
- BL_X_CNT_CS :NODE;
- BL_X_CNT[15..0] :DFFE;
- BL_Y_CNT_CS :NODE;
- BL_Y_CNT[15..0] :DFFE;
- BL_HT_OP_CS :NODE;
- BL_HT_OP[7..0] :DFFE;
- BL_LC_OP[7..0] :DFFE;
- BL_LN_CS :NODE;
- BL_LN[7..0] :DFFE;
- BL_SKEW[7..0] :DFFE;
-
- BL_SKEW_EXT[6..0] :NODE;
- BL_SKEW_IN[255..0] :DFFE;
- BL_SKEW_OUT[255..0] :NODE;
-
- BL_DATA_DDR_READY :DFF; -- 1 WENN DATEN GESCHRIEBEN ODER LESBAR
- BL_READ_SRC :DFFE;
- BL_DST_BUFFER[127..0] :DFFE;
- BL_READ_DST :DFFE;
-
- HOP_OUT[127..0] :NODE;
-
- COUNT[18..0] :DFF;
-
-BEGIN
--- BYT SELECT 32 BIT
- FB_B0 = FB_ADR[1..0]==0; -- ADR==0
- FB_B1 = FB_ADR[1..0]==1 -- ADR==1
- # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B2 = FB_ADR[1..0]==2 -- ADR==2
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B3 = FB_ADR[1..0]==3 -- ADR==3
- # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
--- BYT SELECT 16 BIT
- FB_16B0 = FB_ADR[0]==0; -- ADR==0
- FB_16B1 = FB_ADR[0]==1 -- ADR==1
- # !(!FB_SIZE1 & FB_SIZE0); -- NOT BYT
--- BLITTER CS
- BLITTER_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..6]==H"3E28"; -- FFFF8A00-3F/40
- BLITTER_TA = BLITTER_CS;
--- REGISTER
- -- HALFTON RAM
- BL_HRAM_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..5]==H"7C50"; -- $F8A00/20
- BL_HRAM_BE1 = BL_HRAM_CS & FB_16B0 # !BL_HRAM_CS;
- BL_HRAM_BE0 = BL_HRAM_CS & FB_16B1 # !BL_HRAM_CS;
- BL_HRAM_ADR[] = BL_HRAM_CS & FB_ADR[4..1]
- # !BL_HRAM_CS & BL_LN[3..0];
- BL_HRAM_OUT[] = altsyncram0(BL_HRAM_ADR[],BL_HRAM_BE[],DDRCLK0,FB_AD[31..16],BL_HRAM_CS & !nFB_WR);
- -- SRC X INC
- BL_SRC_X_INC[].CLK = MAIN_CLK;
- BL_SRC_X_INC[] = !BL_BUSY & FB_AD[31..16];
- BL_SRC_X_INC_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C510"; -- $F8A20/2
- BL_SRC_X_INC[15..8].ENA = BL_SRC_X_INC_CS & !nFB_WR & FB_16B0;
- BL_SRC_X_INC[7..0].ENA = BL_SRC_X_INC_CS & !nFB_WR & FB_16B1;
- -- SRC Y INC
- BL_SRC_Y_INC[].CLK = MAIN_CLK;
- BL_SRC_Y_INC[] = !BL_BUSY & FB_AD[31..16];
- BL_SRC_Y_INC_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C511"; -- $F8A22/2
- BL_SRC_Y_INC[15..8].ENA = BL_SRC_Y_INC_CS & !nFB_WR & FB_16B0;
- BL_SRC_Y_INC[7..0].ENA = BL_SRC_Y_INC_CS & !nFB_WR & FB_16B1;
- -- SRC ADR HIGH
- BL_SRC_ADR[].CLK = MAIN_CLK;
- BL_SRC_ADR[31..16] = !BL_BUSY & FB_AD[31..16];
- BL_SRC_ADRH_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C512"; -- $F8A24/2
- BL_SRC_ADR[31..24].ENA = BL_SRC_ADRH_CS & !nFB_WR & FB_16B0;
- BL_SRC_ADR[23..16].ENA = BL_SRC_ADRH_CS & !nFB_WR & FB_16B1;
- -- SRC ADR LOW
- BL_SRC_ADR[].CLK = MAIN_CLK;
- BL_SRC_ADR[15..0] = !BL_BUSY & FB_AD[31..16];
- BL_SRC_ADRL_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C513"; -- $F8A26/2
- BL_SRC_ADR[15..8].ENA = BL_SRC_ADRL_CS & !nFB_WR & FB_16B0;
- BL_SRC_ADR[7..0].ENA = BL_SRC_ADRL_CS & !nFB_WR & FB_16B1;
- -- ENDMASK 1
- BL_ENDMASK1[].CLK = MAIN_CLK;
- BL_ENDMASK1[] = FB_AD[31..16];
- BL_ENDMASK1_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C514"; -- $F8A28/2
- BL_ENDMASK1[15..8].ENA = BL_ENDMASK1_CS & !nFB_WR & FB_16B0;
- BL_ENDMASK1[7..0].ENA = BL_ENDMASK1_CS & !nFB_WR & FB_16B1;
- -- ENDMASK 2
- BL_ENDMASK2[].CLK = MAIN_CLK;
- BL_ENDMASK2[] = FB_AD[31..16];
- BL_ENDMASK2_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C515"; -- $F8A2A/2
- BL_ENDMASK2[15..8].ENA = BL_ENDMASK2_CS & !nFB_WR & FB_16B0;
- BL_ENDMASK2[7..0].ENA = BL_ENDMASK2_CS & !nFB_WR & FB_16B1;
- -- ENDMASK 3
- BL_ENDMASK3[].CLK = MAIN_CLK;
- BL_ENDMASK3[] = FB_AD[31..16];
- BL_ENDMASK3_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C516"; -- $F8A2C/2
- BL_ENDMASK3[15..8].ENA = BL_ENDMASK3_CS & !nFB_WR & FB_16B0;
- BL_ENDMASK3[7..0].ENA = BL_ENDMASK3_CS & !nFB_WR & FB_16B1;
- -- DST X INC
- BL_DST_X_INC[].CLK = MAIN_CLK;
- BL_DST_X_INC[] = !BL_BUSY & FB_AD[31..16];
- BL_DST_X_INC_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C517"; -- $F8A2E/2
- BL_DST_X_INC[15..8].ENA = BL_DST_X_INC_CS & !nFB_WR & FB_16B0;
- BL_DST_X_INC[7..0].ENA = BL_DST_X_INC_CS & !nFB_WR & FB_16B1;
- -- DST Y INC
- BL_DST_Y_INC[].CLK = MAIN_CLK;
- BL_DST_Y_INC[] = !BL_BUSY & FB_AD[31..16];
- BL_DST_Y_INC_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C518"; -- $F8A30/2
- BL_DST_Y_INC[15..8].ENA = BL_DST_Y_INC_CS & !nFB_WR & FB_16B0;
- BL_DST_Y_INC[7..0].ENA = BL_DST_Y_INC_CS & !nFB_WR & FB_16B1;
- -- DST ADR HIGH
- BL_DST_ADR[].CLK = MAIN_CLK;
- BL_DST_ADR[31..16] = !BL_BUSY & FB_AD[31..16];
- BL_DST_ADRH_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C512"; -- $F8A24/2
- BL_DST_ADR[31..24].ENA = BL_DST_ADRH_CS & !nFB_WR & FB_16B0;
- BL_DST_ADR[23..16].ENA = BL_DST_ADRH_CS & !nFB_WR & FB_16B1;
- -- DST ADR LOW
- BL_DST_ADR[].CLK = MAIN_CLK;
- BL_DST_ADR[15..0] = !BL_BUSY & FB_AD[31..16];
- BL_DST_ADRL_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C513"; -- $F8A26/2
- BL_DST_ADR[15..8].ENA = BL_DST_ADRL_CS & !nFB_WR & FB_16B0;
- BL_DST_ADR[7..0].ENA = BL_DST_ADRL_CS & !nFB_WR & FB_16B1;
- -- X COUNT
- BL_X_CNT[].CLK = MAIN_CLK;
- BL_X_CNT[] = !BL_BUSY & FB_AD[31..16];
- BL_X_CNT_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C51B"; -- $F8A36/2
- BL_X_CNT[15..8].ENA = BL_X_CNT_CS & !nFB_WR & FB_16B0;
- BL_X_CNT[7..0].ENA = BL_X_CNT_CS & !nFB_WR & FB_16B1;
- -- Y COUNT
- BL_Y_CNT[].CLK = MAIN_CLK;
- BL_Y_CNT[] = !BL_BUSY & FB_AD[31..16];
- BL_Y_CNT_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C51C"; -- $F8A38/2
- BL_Y_CNT[15..8].ENA = BL_Y_CNT_CS & !nFB_WR & FB_16B0;
- BL_Y_CNT[7..0].ENA = BL_Y_CNT_CS & !nFB_WR & FB_16B1;
- -- HALFTONE OP BYT
- BL_HT_OP[].CLK = MAIN_CLK;
- BL_HT_OP[] = FB_AD[31..24];
- BL_HT_OP_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C51D"; -- $F8A3A/2
- BL_HT_OP[7..0].ENA = BL_HT_OP_CS & !nFB_WR & FB_16B0;
- -- LOGIC OP BYT
- BL_LC_OP[].CLK = MAIN_CLK;
- BL_LC_OP[] = FB_AD[23..16];
- BL_LC_OP[7..0].ENA = BL_HT_OP_CS & !nFB_WR & FB_16B1; -- $F8A3B
- -- LINE NUMBER BYT
- BL_LN[].CLK = MAIN_CLK;
- BL_LN[] = !BL_BUSY & FB_AD[31..24];
- BL_LN_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C51E"; -- $F8A3C/2
- BL_LN[7..0].ENA = BL_LN_CS & !nFB_WR & FB_16B0;
- -- SKEW BYT
- BL_SKEW[].CLK = MAIN_CLK;
- BL_SKEW[] = FB_AD[31..24];
- BL_SKEW[7..0].ENA = BL_LN_CS & !nFB_WR & FB_16B1; -- $F8A3D
---- REGISTER OUT
- FB_AD[31..16] = lpm_bustri_WORD(
- BL_HRAM_CS & BL_HRAM_OUT[]
- # BL_SRC_X_INC_CS & BL_SRC_X_INC[]
- # BL_SRC_Y_INC_CS & BL_SRC_Y_INC[]
- # BL_SRC_ADRH_CS & BL_SRC_ADR[31..16]
- # BL_SRC_ADRL_CS & BL_SRC_ADR[15..0]
- # BL_ENDMASK1_CS & BL_ENDMASK1[]
- # BL_ENDMASK2_CS & BL_ENDMASK2[]
- # BL_ENDMASK3_CS & BL_ENDMASK3[]
- # BL_DST_X_INC_CS & BL_DST_X_INC[]
- # BL_DST_Y_INC_CS & BL_DST_Y_INC[]
- # BL_DST_ADRH_CS & BL_DST_ADR[31..16]
- # BL_DST_ADRL_CS & BL_DST_ADR[15..0]
- # BL_X_CNT_CS & BL_X_CNT[]
- # BL_Y_CNT_CS & BL_Y_CNT[]
- # BL_HT_OP_CS & (BL_HT_OP[],BL_LC_OP[])
- # BL_LN_CS & (BL_LN[],BL_SKEW[])
- ,BLITTER_CS & !nFB_OE); -- FFFF8A00-3F/40
------------------------------------------
---
- BL_READ_SRC.CLK = DDRCLK0;
- BL_READ_DST.CLK = DDRCLK0;
-
--- READY SIGNAL 1 CLOCK SPÄTER
- BL_DATA_DDR_READY.CLK = DDRCLK0;
- BL_DATA_DDR_READY = BL_DATA_DDR_READY & BLITTER_DACK0;
--- SRC BUFFER LADEN
- BL_SKEW_IN[].CLK = DDRCLK0;
- BL_SKEW_IN[].ENA = BL_DATA_DDR_READY & BL_READ_SRC;
- BL_SKEW_IN[255..128] = BLITTER_DIN[];
- BL_SKEW_IN[127..0] = BL_SKEW_IN[255..128];
--- DST BUFFER LADEN
- BL_DST_BUFFER[].CLK = DDRCLK0;
- BL_DST_BUFFER[].ENA = BL_DATA_DDR_READY & BL_READ_DST;
- BL_DST_BUFFER[] = BLITTER_DIN[];
--- SKEW EXTENDET
- BL_SKEW_EXT[6..4] = BL_SRC_ADR[3..1];
- BL_SKEW_EXT[3..0] = BL_SKEW[3..0];
--- SKEW EXT MUX
- BL_SKEW_OUT[] = lpm_clshift0(BL_SKEW_IN[],BL_SKEW_EXT[]); -- BIT 127..0 SIND RELEVANT
--- HOP
- IF BL_HT_OP[1..0]==B"00" THEN
- HOP_OUT[] = H"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
- ELSE
- IF BL_HT_OP[1..0]==B"01" THEN
- HOP_OUT[] = (BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[]);
- ELSE
- IF BL_HT_OP[1..0]==B"10" THEN
- HOP_OUT[] = BL_SKEW_OUT[127..0];
- ELSE
- HOP_OUT[] = BL_SKEW_OUT[127..0] & (BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[]);
- END IF;
- END IF;
- END IF;
-
-
-
- BLITTER_RUN = GND; --VCC;
- BLITTER_SIG = GND; --VCC;
- BLITTER_WR = GND; --VCC;
- BL_BUSY = GND;
-
- COUNT[] = COUNT[] + 16;
- COUNT[].CLK = BLITTER_DACK0;
- BLITTER_DOUT[] = H"112233445566778899AABBCCDDEEFF00";
- BLITTER_ADR[] = (0, COUNT[]) + 400000;
-
-END;
-
diff --git a/FPGA_by_Fredi/BLITTER.tdf.bak b/FPGA_by_Fredi/BLITTER.tdf.bak
deleted file mode 100644
index b80e5c2..0000000
--- a/FPGA_by_Fredi/BLITTER.tdf.bak
+++ /dev/null
@@ -1,313 +0,0 @@
--- WARNING: Do NOT edit the input and output ports in this file in a text
--- editor if you plan to continue editing the block that represents it in
--- the Block Editor! File corruption is VERY likely to occur.
-
--- Copyright (C) 1991-2010 Altera Corporation
--- Your use of Altera Corporation's design tools, logic functions
--- and other software and tools, and its AMPP partner logic
--- functions, and any output files from any of the foregoing
--- (including device programming or simulation files), and any
--- associated documentation or information are expressly subject
--- to the terms and conditions of the Altera Program License
--- Subscription Agreement, Altera MegaCore Function License
--- Agreement, or other applicable license agreement, including,
--- without limitation, that your use is for the sole purpose of
--- programming logic devices manufactured by Altera and sold by
--- Altera or its authorized distributors. Please refer to the
--- applicable agreement for further details.
-
-
--- Generated by Quartus II Version 9.1 (Build Build 350 03/24/2010)
--- Created on Sat Jan 15 11:06:17 2011
-INCLUDE "lpm_bustri_WORD.inc";
-INCLUDE "VIDEO/BLITTER/lpm_clshift0.INC";
-INCLUDE "VIDEO/BLITTER/altsyncram0.INC";
-
-CONSTANT BL_SKEW_LF = 255;
-
--- Title Statement (optional)
-TITLE "Blitter";
-
-
--- Parameters Statement (optional)
-
--- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE!
--- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE!
-
-
--- Subdesign Section
-
-SUBDESIGN BLITTER
-(
- -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
- nRSTO : INPUT;
- MAIN_CLK : INPUT;
- FB_ALE : INPUT;
- nFB_WR : INPUT;
- nFB_OE : INPUT;
- FB_SIZE0 : INPUT;
- FB_SIZE1 : INPUT;
- VIDEO_RAM_CTR[15..0] : INPUT;
- BLITTER_ON : INPUT;
- FB_ADR[31..0] : INPUT;
- nFB_CS1 : INPUT;
- nFB_CS2 : INPUT;
- nFB_CS3 : INPUT;
- DDRCLK0 : INPUT;
- BLITTER_DIN[127..0] : INPUT;
- BLITTER_DACK[4..0] : INPUT;
- SR_BLITTER_DACK : INPUT;
- BLITTER_RUN : OUTPUT;
- BLITTER_DOUT[127..0] : OUTPUT;
- BLITTER_ADR[31..0] : OUTPUT;
- BLITTER_SIG : OUTPUT;
- BLITTER_WR : OUTPUT;
- BLITTER_TA : OUTPUT;
- FB_AD[31..0] : BIDIR;
- -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
-)
-
-VARIABLE
- FB_B[3..0] :NODE;
- FB_16B[1..0] :NODE;
- BLITTER_CS :NODE;
- BL_BUSY :NODE;
- BL_HRAM_CS :NODE;
- BL_HRAM_ADR[3..0] :NODE;
- BL_HRAM_OUT[15..0] :NODE;
- BL_HRAM_BE[1..0] :NODE;
- BL_SRC_X_INC_CS :NODE;
- BL_SRC_X_INC[15..0] :DFFE;
- BL_SRC_Y_INC_CS :NODE;
- BL_SRC_Y_INC[15..0] :DFFE;
- BL_ENDMASK1_CS :NODE;
- BL_ENDMASK1[15..0] :DFFE;
- BL_ENDMASK2_CS :NODE;
- BL_ENDMASK2[15..0] :DFFE;
- BL_ENDMASK3_CS :NODE;
- BL_ENDMASK3[15..0] :DFFE;
- BL_SRC_ADRH_CS :NODE;
- BL_SRC_ADRL_CS :NODE;
- BL_SRC_ADR[31..0] :DFFE;
- BL_DST_X_INC_CS :NODE;
- BL_DST_X_INC[15..0] :DFFE;
- BL_DST_Y_INC_CS :NODE;
- BL_DST_Y_INC[15..0] :DFFE;
- BL_DST_ADRH_CS :NODE;
- BL_DST_ADRL_CS :NODE;
- BL_DST_ADR[31..0] :DFFE;
- BL_X_CNT_CS :NODE;
- BL_X_CNT[15..0] :DFFE;
- BL_Y_CNT_CS :NODE;
- BL_Y_CNT[15..0] :DFFE;
- BL_HT_OP_CS :NODE;
- BL_HT_OP[7..0] :DFFE;
- BL_LC_OP[7..0] :DFFE;
- BL_LN_CS :NODE;
- BL_LN[7..0] :DFFE;
- BL_SKEW[7..0] :DFFE;
-
- BL_SKEW_EXT[6..0] :NODE;
- BL_SKEW_IN[255..0] :DFFE;
- BL_SKEW_OUT[255..0] :NODE;
-
- BL_DATA_DDR_READY :DFF; -- 1 WENN DATEN GESCHRIEBEN ODER LESBAR
- BL_READ_SRC :DFFE;
- BL_DST_BUFFER[127..0] :DFFE;
- BL_READ_DST :DFFE;
-
- HOP_OUT[127..0] :NODE;
-
- COUNT[18..0] :DFF;
-
-BEGIN
--- BYT SELECT 32 BIT
- FB_B0 = FB_ADR[1..0]==0; -- ADR==0
- FB_B1 = FB_ADR[1..0]==1 -- ADR==1
- # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B2 = FB_ADR[1..0]==2 -- ADR==2
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B3 = FB_ADR[1..0]==3 -- ADR==3
- # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
--- BYT SELECT 16 BIT
- FB_16B0 = FB_ADR[0]==0; -- ADR==0
- FB_16B1 = FB_ADR[0]==1 -- ADR==1
- # !(!FB_SIZE1 & FB_SIZE0); -- NOT BYT
--- BLITTER CS
- BLITTER_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..6]==H"3E28"; -- FFFF8A00-3F/40
- BLITTER_TA = BLITTER_CS;
--- REGISTER
- -- HALFTON RAM
- BL_HRAM_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..5]==H"7C50"; -- $F8A00/20
- BL_HRAM_BE1 = BL_HRAM_CS & FB_16B0 # !BL_HRAM_CS;
- BL_HRAM_BE0 = BL_HRAM_CS & FB_16B1 # !BL_HRAM_CS;
- BL_HRAM_ADR[] = BL_HRAM_CS & FB_ADR[4..1]
- # !BL_HRAM_CS & BL_LN[3..0];
- BL_HRAM_OUT[] = altsyncram0(BL_HRAM_ADR[],BL_HRAM_BE[],DDRCLK0,FB_AD[31..16],BL_HRAM_CS & !nFB_WR);
- -- SRC X INC
- BL_SRC_X_INC[].CLK = MAIN_CLK;
- BL_SRC_X_INC[] = !BL_BUSY & FB_AD[31..16];
- BL_SRC_X_INC_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C510"; -- $F8A20/2
- BL_SRC_X_INC[15..8].ENA = BL_SRC_X_INC_CS & !nFB_WR & FB_16B0;
- BL_SRC_X_INC[7..0].ENA = BL_SRC_X_INC_CS & !nFB_WR & FB_16B1;
- -- SRC Y INC
- BL_SRC_Y_INC[].CLK = MAIN_CLK;
- BL_SRC_Y_INC[] = !BL_BUSY & FB_AD[31..16];
- BL_SRC_Y_INC_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C511"; -- $F8A22/2
- BL_SRC_Y_INC[15..8].ENA = BL_SRC_Y_INC_CS & !nFB_WR & FB_16B0;
- BL_SRC_Y_INC[7..0].ENA = BL_SRC_Y_INC_CS & !nFB_WR & FB_16B1;
- -- SRC ADR HIGH
- BL_SRC_ADR[].CLK = MAIN_CLK;
- BL_SRC_ADR[31..16] = !BL_BUSY & FB_AD[31..16];
- BL_SRC_ADRH_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C512"; -- $F8A24/2
- BL_SRC_ADR[31..24].ENA = BL_SRC_ADRH_CS & !nFB_WR & FB_16B0;
- BL_SRC_ADR[23..16].ENA = BL_SRC_ADRH_CS & !nFB_WR & FB_16B1;
- -- SRC ADR LOW
- BL_SRC_ADR[].CLK = MAIN_CLK;
- BL_SRC_ADR[15..0] = !BL_BUSY & FB_AD[31..16];
- BL_SRC_ADRL_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C513"; -- $F8A26/2
- BL_SRC_ADR[15..8].ENA = BL_SRC_ADRL_CS & !nFB_WR & FB_16B0;
- BL_SRC_ADR[7..0].ENA = BL_SRC_ADRL_CS & !nFB_WR & FB_16B1;
- -- ENDMASK 1
- BL_ENDMASK1[].CLK = MAIN_CLK;
- BL_ENDMASK1[] = FB_AD[31..16];
- BL_ENDMASK1_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C514"; -- $F8A28/2
- BL_ENDMASK1[15..8].ENA = BL_ENDMASK1_CS & !nFB_WR & FB_16B0;
- BL_ENDMASK1[7..0].ENA = BL_ENDMASK1_CS & !nFB_WR & FB_16B1;
- -- ENDMASK 2
- BL_ENDMASK2[].CLK = MAIN_CLK;
- BL_ENDMASK2[] = FB_AD[31..16];
- BL_ENDMASK2_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C515"; -- $F8A2A/2
- BL_ENDMASK2[15..8].ENA = BL_ENDMASK2_CS & !nFB_WR & FB_16B0;
- BL_ENDMASK2[7..0].ENA = BL_ENDMASK2_CS & !nFB_WR & FB_16B1;
- -- ENDMASK 3
- BL_ENDMASK3[].CLK = MAIN_CLK;
- BL_ENDMASK3[] = FB_AD[31..16];
- BL_ENDMASK3_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C516"; -- $F8A2C/2
- BL_ENDMASK3[15..8].ENA = BL_ENDMASK3_CS & !nFB_WR & FB_16B0;
- BL_ENDMASK3[7..0].ENA = BL_ENDMASK3_CS & !nFB_WR & FB_16B1;
- -- DST X INC
- BL_DST_X_INC[].CLK = MAIN_CLK;
- BL_DST_X_INC[] = !BL_BUSY & FB_AD[31..16];
- BL_DST_X_INC_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C517"; -- $F8A2E/2
- BL_DST_X_INC[15..8].ENA = BL_DST_X_INC_CS & !nFB_WR & FB_16B0;
- BL_DST_X_INC[7..0].ENA = BL_DST_X_INC_CS & !nFB_WR & FB_16B1;
- -- DST Y INC
- BL_DST_Y_INC[].CLK = MAIN_CLK;
- BL_DST_Y_INC[] = !BL_BUSY & FB_AD[31..16];
- BL_DST_Y_INC_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C518"; -- $F8A30/2
- BL_DST_Y_INC[15..8].ENA = BL_DST_Y_INC_CS & !nFB_WR & FB_16B0;
- BL_DST_Y_INC[7..0].ENA = BL_DST_Y_INC_CS & !nFB_WR & FB_16B1;
- -- DST ADR HIGH
- BL_DST_ADR[].CLK = MAIN_CLK;
- BL_DST_ADR[31..16] = !BL_BUSY & FB_AD[31..16];
- BL_DST_ADRH_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C512"; -- $F8A24/2
- BL_DST_ADR[31..24].ENA = BL_DST_ADRH_CS & !nFB_WR & FB_16B0;
- BL_DST_ADR[23..16].ENA = BL_DST_ADRH_CS & !nFB_WR & FB_16B1;
- -- DST ADR LOW
- BL_DST_ADR[].CLK = MAIN_CLK;
- BL_DST_ADR[15..0] = !BL_BUSY & FB_AD[31..16];
- BL_DST_ADRL_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C513"; -- $F8A26/2
- BL_DST_ADR[15..8].ENA = BL_DST_ADRL_CS & !nFB_WR & FB_16B0;
- BL_DST_ADR[7..0].ENA = BL_DST_ADRL_CS & !nFB_WR & FB_16B1;
- -- X COUNT
- BL_X_CNT[].CLK = MAIN_CLK;
- BL_X_CNT[] = !BL_BUSY & FB_AD[31..16];
- BL_X_CNT_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C51B"; -- $F8A36/2
- BL_X_CNT[15..8].ENA = BL_X_CNT_CS & !nFB_WR & FB_16B0;
- BL_X_CNT[7..0].ENA = BL_X_CNT_CS & !nFB_WR & FB_16B1;
- -- Y COUNT
- BL_Y_CNT[].CLK = MAIN_CLK;
- BL_Y_CNT[] = !BL_BUSY & FB_AD[31..16];
- BL_Y_CNT_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C51C"; -- $F8A38/2
- BL_Y_CNT[15..8].ENA = BL_Y_CNT_CS & !nFB_WR & FB_16B0;
- BL_Y_CNT[7..0].ENA = BL_Y_CNT_CS & !nFB_WR & FB_16B1;
- -- HALFTONE OP BYT
- BL_HT_OP[].CLK = MAIN_CLK;
- BL_HT_OP[] = FB_AD[31..24];
- BL_HT_OP_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C51D"; -- $F8A3A/2
- BL_HT_OP[7..0].ENA = BL_HT_OP_CS & !nFB_WR & FB_16B0;
- -- LOGIC OP BYT
- BL_LC_OP[].CLK = MAIN_CLK;
- BL_LC_OP[] = FB_AD[23..16];
- BL_LC_OP[7..0].ENA = BL_HT_OP_CS & !nFB_WR & FB_16B1; -- $F8A3B
- -- LINE NUMBER BYT
- BL_LN[].CLK = MAIN_CLK;
- BL_LN[] = !BL_BUSY & FB_AD[31..24];
- BL_LN_CS = !BL_BUSY & !nFB_CS1 & FB_ADR[19..1]==H"7C51E"; -- $F8A3C/2
- BL_LN[7..0].ENA = BL_LN_CS & !nFB_WR & FB_16B0;
- -- SKEW BYT
- BL_SKEW[].CLK = MAIN_CLK;
- BL_SKEW[] = FB_AD[31..24];
- BL_SKEW[7..0].ENA = BL_LN_CS & !nFB_WR & FB_16B1; -- $F8A3D
---- REGISTER OUT
- FB_AD[31..16] = lpm_bustri_WORD(
- BL_HRAM_CS & BL_HRAM_OUT[]
- # BL_SRC_X_INC_CS & BL_SRC_X_INC[]
- # BL_SRC_Y_INC_CS & BL_SRC_Y_INC[]
- # BL_SRC_ADRH_CS & BL_SRC_ADR[31..16]
- # BL_SRC_ADRL_CS & BL_SRC_ADR[15..0]
- # BL_ENDMASK1_CS & BL_ENDMASK1[]
- # BL_ENDMASK2_CS & BL_ENDMASK2[]
- # BL_ENDMASK3_CS & BL_ENDMASK3[]
- # BL_DST_X_INC_CS & BL_DST_X_INC[]
- # BL_DST_Y_INC_CS & BL_DST_Y_INC[]
- # BL_DST_ADRH_CS & BL_DST_ADR[31..16]
- # BL_DST_ADRL_CS & BL_DST_ADR[15..0]
- # BL_X_CNT_CS & BL_X_CNT[]
- # BL_Y_CNT_CS & BL_Y_CNT[]
- # BL_HT_OP_CS & (BL_HT_OP[],BL_LC_OP[])
- # BL_LN_CS & (BL_LN[],BL_SKEW[])
- ,BLITTER_CS & !nFB_OE); -- FFFF8A00-3F/40
------------------------------------------
---
- BL_READ_SRC.CLK = DDRCLK0;
- BL_READ_DST.CLK = DDRCLK0;
-
--- READY SIGNAL 1 CLOCK SPÄTER
- BL_DATA_DDR_READY.CLK = DDRCLK0;
- BL_DATA_DDR_READY = BL_DATA_DDR_READY & BLITTER_DACK0;
--- SRC BUFFER LADEN
- BL_SKEW_IN[].CLK = DDRCLK0;
- BL_SKEW_IN[].ENA = BL_DATA_DDR_READY & BL_READ_SRC;
- BL_SKEW_IN[255..128] = BLITTER_DIN[];
- BL_SKEW_IN[127..0] = BL_SKEW_IN[255..128];
--- DST BUFFER LADEN
- BL_DST_BUFFER[].CLK = DDRCLK0;
- BL_DST_BUFFER[].ENA = BL_DATA_DDR_READY & BL_READ_DST;
- BL_DST_BUFFER[] = BLITTER_DIN[];
--- SKEW EXTENDET
- BL_SKEW_EXT[6..4] = BL_SRC_ADR[3..1];
- BL_SKEW_EXT[3..0] = BL_SKEW[3..0];
--- SKEW EXT MUX
- BL_SKEW_OUT[] = lpm_clshift0(BL_SKEW_IN[],BL_SKEW_EXT[]); -- BIT 127..0 SIND RELEVANT
--- HOP
- IF BL_HT_OP[1..0]==B"00" THEN
- HOP_OUT[] = H"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
- ELSE
- IF BL_HT_OP[1..0]==B"01" THEN
- HOP_OUT[] = (BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[]);
- ELSE
- IF BL_HT_OP[1..0]==B"10" THEN
- HOP_OUT[] = BL_SKEW_OUT[127..0];
- ELSE
- HOP_OUT[] = BL_SKEW_OUT[127..0] & (BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[],BL_HRAM_OUT[]);
- END IF;
- END IF;
- END IF;
-
-
-
- BLITTER_RUN = gnd; --VCC;
- BLITTER_SIG = gnd; --VCC;
- BLITTER_WR = gnd; --VCC;
-
- COUNT[] = COUNT[] + 16;
- COUNT[].CLK = BLITTER_DACK0;
- BLITTER_DOUT[] = H"112233445566778899AABBCCDDEEFF00";
- BLITTER_ADR[] = (0, COUNT[]) + 400000;
-
-END;
-
diff --git a/FPGA_by_Fredi/FPGA_DATE.bsf b/FPGA_by_Fredi/FPGA_DATE.bsf
new file mode 100644
index 0000000..fd5ac89
--- /dev/null
+++ b/FPGA_by_Fredi/FPGA_DATE.bsf
@@ -0,0 +1,42 @@
+/*
+WARNING: Do NOT edit the input and output ports in this file in a text
+editor if you plan to continue editing the block that represents it in
+the Block Editor! File corruption is VERY likely to occur.
+*/
+/*
+Copyright (C) 1991-2010 Altera Corporation
+Your use of Altera Corporation's design tools, logic functions
+and other software and tools, and its AMPP partner logic
+functions, and any output files from any of the foregoing
+(including device programming or simulation files), and any
+associated documentation or information are expressly subject
+to the terms and conditions of the Altera Program License
+Subscription Agreement, Altera MegaCore Function License
+Agreement, or other applicable license agreement, including,
+without limitation, that your use is for the sole purpose of
+programming logic devices manufactured by Altera and sold by
+Altera or its authorized distributors. Please refer to the
+applicable agreement for further details.
+*/
+(header "symbol" (version "1.1"))
+(symbol
+ (rect 0 0 88 48)
+ (text "FPGA_DATE" (rect 6 1 96 17)(font "Arial" (font_size 10)))
+ (text "inst" (rect 8 32 25 44)(font "Arial" ))
+ (port
+ (pt 88 24)
+ (output)
+ (text "result[31..0]" (rect 0 0 67 14)(font "Arial" (font_size 8)))
+ (text "result[31..0]" (rect 85 -31 98 24)(font "Arial" (font_size 8))(invisible))
+ (line (pt 88 24)(pt 72 24)(line_width 3))
+ )
+ (drawing
+ (text "319037463" (rect 27 18 72 30)(font "Arial" ))
+ (text "32" (rect 77 25 87 37)(font "Arial" ))
+ (line (pt 16 16)(pt 72 16)(line_width 1))
+ (line (pt 72 16)(pt 72 32)(line_width 1))
+ (line (pt 72 32)(pt 16 32)(line_width 1))
+ (line (pt 16 32)(pt 16 16)(line_width 1))
+ (line (pt 72 28)(pt 80 20)(line_width 1))
+ )
+)
diff --git a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift0.inc b/FPGA_by_Fredi/FPGA_DATE.inc
similarity index 89%
rename from FPGA_by_Fredi/Video/BLITTER/lpm_clshift0.inc
rename to FPGA_by_Fredi/FPGA_DATE.inc
index ccf215e..2aab8ca 100644
--- a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift0.inc
+++ b/FPGA_by_Fredi/FPGA_DATE.inc
@@ -13,12 +13,11 @@
--applicable agreement for further details.
-FUNCTION lpm_clshift0
+FUNCTION FPGA_DATE
(
- data[255..0],
- distance[6..0]
+
)
RETURNS (
- result[255..0]
+ result[31..0]
);
diff --git a/FPGA_by_Fredi/FPGA_DATE.qip b/FPGA_by_Fredi/FPGA_DATE.qip
new file mode 100644
index 0000000..8a1183f
--- /dev/null
+++ b/FPGA_by_Fredi/FPGA_DATE.qip
@@ -0,0 +1,5 @@
+set_global_assignment -name IP_TOOL_NAME "LPM_CONSTANT"
+set_global_assignment -name IP_TOOL_VERSION "9.1"
+set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "FPGA_DATE.tdf"]
+set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "FPGA_DATE.bsf"]
+set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "FPGA_DATE.inc"]
diff --git a/FPGA_by_Fredi/FPGA_DATE.tdf b/FPGA_by_Fredi/FPGA_DATE.tdf
new file mode 100644
index 0000000..6769853
--- /dev/null
+++ b/FPGA_by_Fredi/FPGA_DATE.tdf
@@ -0,0 +1,79 @@
+-- megafunction wizard: %LPM_CONSTANT%
+-- GENERATION: STANDARD
+-- VERSION: WM1.0
+-- MODULE: lpm_constant
+
+-- ============================================================
+-- File Name: FPGA_DATE.tdf
+-- Megafunction Name(s):
+-- lpm_constant
+--
+-- Simulation Library Files(s):
+--
+-- ============================================================
+-- ************************************************************
+-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
+--
+-- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition
+-- ************************************************************
+
+
+--Copyright (C) 1991-2010 Altera Corporation
+--Your use of Altera Corporation's design tools, logic functions
+--and other software and tools, and its AMPP partner logic
+--functions, and any output files from any of the foregoing
+--(including device programming or simulation files), and any
+--associated documentation or information are expressly subject
+--to the terms and conditions of the Altera Program License
+--Subscription Agreement, Altera MegaCore Function License
+--Agreement, or other applicable license agreement, including,
+--without limitation, that your use is for the sole purpose of
+--programming logic devices manufactured by Altera and sold by
+--Altera or its authorized distributors. Please refer to the
+--applicable agreement for further details.
+
+-- Clearbox generated function header
+FUNCTION FPGA_DATE_lpm_constant_d19 ()
+RETURNS ( result[31..0]);
+
+
+
+
+SUBDESIGN FPGA_DATE
+(
+ result[31..0] : OUTPUT;
+)
+
+VARIABLE
+
+ FPGA_DATE_lpm_constant_d19_component : FPGA_DATE_lpm_constant_d19;
+
+BEGIN
+
+ result[31..0] = FPGA_DATE_lpm_constant_d19_component.result[31..0];
+END;
+
+
+
+-- ============================================================
+-- CNX file retrieval info
+-- ============================================================
+-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
+-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
+-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
+-- Retrieval info: PRIVATE: Radix NUMERIC "16"
+-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
+-- Retrieval info: PRIVATE: Value NUMERIC "319037463"
+-- Retrieval info: PRIVATE: nBit NUMERIC "32"
+-- Retrieval info: CONSTANT: LPM_CVALUE NUMERIC "319037463"
+-- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO"
+-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_CONSTANT"
+-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32"
+-- Retrieval info: USED_PORT: result 0 0 32 0 OUTPUT NODEFVAL result[31..0]
+-- Retrieval info: CONNECT: result 0 0 32 0 @result 0 0 32 0
+-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all
+-- Retrieval info: GEN_FILE: TYPE_NORMAL FPGA_DATE.tdf TRUE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL FPGA_DATE.inc TRUE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL FPGA_DATE.cmp FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL FPGA_DATE.bsf TRUE FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL FPGA_DATE_inst.tdf FALSE
diff --git a/FPGA_by_Fredi/FPGA_DATE_lpm_constant_d19.tdf b/FPGA_by_Fredi/FPGA_DATE_lpm_constant_d19.tdf
new file mode 100644
index 0000000..a611f11
--- /dev/null
+++ b/FPGA_by_Fredi/FPGA_DATE_lpm_constant_d19.tdf
@@ -0,0 +1,30 @@
+--lpm_constant CBX_AUTO_BLACKBOX="ALL" ENABLE_RUNTIME_MOD="NO" LPM_CVALUE=13042017 LPM_WIDTH=32 result
+--VERSION_BEGIN 9.1SP2 cbx_lpm_constant 2010:03:24:20:43:43:SJ cbx_mgl 2010:03:24:21:01:05:SJ VERSION_END
+
+
+-- Copyright (C) 1991-2010 Altera Corporation
+-- Your use of Altera Corporation's design tools, logic functions
+-- and other software and tools, and its AMPP partner logic
+-- functions, and any output files from any of the foregoing
+-- (including device programming or simulation files), and any
+-- associated documentation or information are expressly subject
+-- to the terms and conditions of the Altera Program License
+-- Subscription Agreement, Altera MegaCore Function License
+-- Agreement, or other applicable license agreement, including,
+-- without limitation, that your use is for the sole purpose of
+-- programming logic devices manufactured by Altera and sold by
+-- Altera or its authorized distributors. Please refer to the
+-- applicable agreement for further details.
+
+
+
+--synthesis_resources =
+SUBDESIGN FPGA_DATE_lpm_constant_d19
+(
+ result[31..0] : output;
+)
+
+BEGIN
+ result[] = B"00010011000001000010000000010111";
+END;
+--VALID FILE
diff --git a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd b/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd
index f3aeb16..31728ca 100644
--- a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd
+++ b/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd
@@ -42,6 +42,7 @@ ENTITY FalconIO_SDCard_IDE_CF IS
CLK2M : IN STD_LOGIC;
CLK500k : IN STD_LOGIC;
nFB_CS1 : IN STD_LOGIC;
+ nFB_CS3 : IN STD_LOGIC;
FB_SIZE0 : IN STD_LOGIC;
FB_SIZE1 : IN STD_LOGIC;
nFB_BURST : IN STD_LOGIC;
@@ -83,11 +84,12 @@ ENTITY FalconIO_SDCard_IDE_CF IS
nFB_OE : IN STD_LOGIC;
VSYNC : IN STD_LOGIC;
HSYNC : IN STD_LOGIC;
+ BLITTER_INT : IN STD_LOGIC;
DSP_INT : IN STD_LOGIC;
nBLANK : IN STD_LOGIC;
FDC_CLK : IN STD_LOGIC;
FB_ALE : IN STD_LOGIC;
- ACP_CONF : IN STD_LOGIC_VECTOR(31 downto 24);
+ ACP_CONF : IN STD_LOGIC_VECTOR(31 downto 0);
nIDE_CS1 : OUT STD_LOGIC;
nIDE_CS0 : OUT STD_LOGIC;
LP_STR : OUT STD_LOGIC;
@@ -132,7 +134,6 @@ ENTITY FalconIO_SDCard_IDE_CF IS
DMA_DRQ : OUT STD_LOGIC;
FB_AD : INOUT STD_LOGIC_VECTOR(31 downto 0);
LP_D : INOUT STD_LOGIC_VECTOR(7 downto 0);
- SND_A : INOUT STD_LOGIC_VECTOR(7 downto 0);
ACSI_D : INOUT STD_LOGIC_VECTOR(7 downto 0);
SCSI_D : INOUT STD_LOGIC_VECTOR(7 downto 0);
SCSI_PAR : INOUT STD_LOGIC;
@@ -140,7 +141,8 @@ ENTITY FalconIO_SDCard_IDE_CF IS
nSCSI_BUSY : INOUT STD_LOGIC;
nSCSI_RST : INOUT STD_LOGIC;
SD_CD_DATA3 : INOUT STD_LOGIC;
- SD_CDM_D1 : INOUT STD_LOGIC
+ SD_CDM_D1 : INOUT STD_LOGIC;
+ VIDEO_TA : IN STD_LOGIC
);
-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
@@ -156,7 +158,7 @@ signal RESETn : STD_LOGIC;
signal FB_B0 : STD_LOGIC; -- UPPER BYT BEI 16BIT BUS
signal FB_B1 : STD_LOGIC; -- LOWER BYT BEI 16BIT BUS
signal BYT : STD_LOGIC; -- WENN BYT -> 1
-signal LONG : STD_LOGIC; -- WENN -> 1
+signal LONG : STD_LOGIC; -- WENN Long -> 1
signal FB_ADI : STD_LOGIC_VECTOR(15 downto 0); -- gespeicherte writedaten
signal nResetatio : STD_LOGIC; -- reset atari bausteine
-- KEYBOARD MIDI
@@ -184,7 +186,6 @@ signal SNDCS_I : STD_LOGIC;
signal SNDIR_I : STD_LOGIC;
signal LP_DIR_X : STD_LOGIC;
signal DA_OUT_X : STD_LOGIC_VECTOR(7 downto 0);
-signal SND_A_X : STD_LOGIC_VECTOR(7 downto 0);
signal LP_D_X : STD_LOGIC_VECTOR(7 downto 0);
signal nLP_STR : STD_LOGIC;
-- DMA SOUND
@@ -278,10 +279,11 @@ signal SEL_EN : STD_LOGIC;
-- IDE
signal nnIDE_RES : STD_LOGIC;
signal IDE_CF_CS : STD_LOGIC;
-signal IDE_CF_TA : STD_LOGIC;
-signal NEXT_nIDE_RD : STD_LOGIC;
-signal NEXT_nIDE_WR : STD_LOGIC;
-type CMD_STATES is( IDLE, T1, T6, T7);
+signal IDE_DRIVE0 : STD_LOGIC;
+signal IDE_DRIVE1 : STD_LOGIC;
+signal IDE_DCS : STD_LOGIC;
+signal IDE_TA : STD_LOGIC;
+type CMD_STATES is(IDLE,T1,T2,T3,T4,T5,T6,T7,T8,T9);
signal CMD_STATE : CMD_STATES;
signal NEXT_CMD_STATE : CMD_STATES;
-- Paddle
@@ -294,13 +296,13 @@ FB_B0 <= '1' when FB_ADR(0) = '0' or BYT = '0' else '0';
FB_B1 <= '1' when FB_ADR(0) = '1' or BYT = '0' else '0';
FALCON_IO_TA <= '1' when ACIA_CS_I = '1' or DTACK_OUT_MFPn = '0' or DMA_MODUS_CS ='1' or dma_snd_cs = '1' or paddle_cs = '1'
- or DMA_ADR_CS = '1' or DMA_DIRM_CS = '1' or DMA_BYT_CNT_CS = '1' or FCF_CS = '1' or IDE_CF_TA = '1' else '0';--SNDCS = '1' or
+ or DMA_ADR_CS = '1' or DMA_DIRM_CS = '1' or DMA_BYT_CNT_CS = '1' or FCF_CS = '1' or IDE_TA = '1' else '0'; --SNDCS = '1' or
SUB_BUS <= '1' when nFB_WR = '1' and ROM_CS = '1' ELSE
- '1' when nFB_WR = '1' and IDE_CF_CS = '1' ELSE
- '1' when nFB_WR = '0' and nIDE_WR = '0' ELSE '0';
-nRP_UDS <= '0' when nFB_CS1 = '0' and SUB_BUS = '1' and FB_B0 = '1' else '1';
-nRP_LDS <= '0' when nFB_CS1 = '0' and SUB_BUS = '1' and FB_B1 = '1' else '1';
-nDREQ0 <= '0';
+ '1' when IDE_CF_CS = '1' ELSE
+ '1' when nFB_CS3 = '0' ELSE '0';
+nRP_UDS <= '0' when SUB_BUS = '1' and FB_B0 = '1' else '1';
+nRP_LDS <= '0' when SUB_BUS = '1' and FB_B1 = '1' else '1';
+
-- input daten halten
process(MAIN_CLK, nFB_WR, FB_AD(31 downto 16), FB_ADI(15 downto 0))
begin
@@ -329,64 +331,145 @@ CMD_REG: process(nRSTO, MAIN_CLK, CMD_STATE, NEXT_CMD_STATE)
CMD_STATE <= IDLE;
elsif rising_edge(MAIN_CLK) then
CMD_STATE <= NEXT_CMD_STATE; -- go to next
- nIDE_RD <= NEXT_nIDE_RD; -- go to next
- nIDE_WR <= NEXT_nIDE_WR; -- go to next
else
CMD_STATE <= CMD_STATE; -- halten
- nIDE_RD <= nIDE_RD; -- halten
- nIDE_WR <= nIDE_WR; -- halten
end if;
end process CMD_REG;
- CMD_DECODER: process(CMD_STATE, NEXT_CMD_STATE, NEXT_nIDE_RD, NEXT_nIDE_WR, IDE_RDY, IDE_CF_TA)
+ CMD_DECODER: process(CMD_STATE, NEXT_CMD_STATE, nIDE_RD, nIDE_WR, IDE_RDY)
begin
case CMD_STATE is
when IDLE =>
- IDE_CF_TA <= '0';
- if IDE_CF_CS = '1' then
- NEXT_nIDE_RD <= not nFB_WR;
- NEXT_nIDE_WR <= nFB_WR;
- NEXT_CMD_STATE <= T1;
+ IDE_TA <= '0';
+ nIDE_RD <= '1';
+ nIDE_WR <= '1';
+ if IDE_DCS = '1' then
+ if FB_ADR(6) = '0' then
+ if ACP_CONF(18 downto 16) = x"1" then
+ NEXT_CMD_STATE <= T3;
+ else
+ if ACP_CONF(18 downto 16) = x"2" then
+ NEXT_CMD_STATE <= T2;
+ else
+ NEXT_CMD_STATE <= T1;
+ end if;
+ end if;
+ else
+ if ACP_CONF(22 downto 20) = x"1" then
+ NEXT_CMD_STATE <= T3;
+ else
+ if ACP_CONF(22 downto 20) = x"2" then
+ NEXT_CMD_STATE <= T2;
+ else
+ NEXT_CMD_STATE <= T1;
+ end if;
+ end if;
+ end if;
else
- NEXT_nIDE_RD <= '1';
- NEXT_nIDE_WR <= '1';
- NEXT_CMD_STATE <= IDLE;
+ if IDE_CF_CS = '1' then
+ NEXT_CMD_STATE <= T1;
+ else
+ NEXT_CMD_STATE <= IDLE;
+ end if;
end if;
when T1 =>
- IDE_CF_TA <= '0';
- NEXT_nIDE_RD <= not nFB_WR;
- NEXT_nIDE_WR <= nFB_WR;
- NEXT_CMD_STATE <= T6;
- when T6 =>
- IF IDE_RDY = '1' then
- IDE_CF_TA <= '1';
- NEXT_nIDE_RD <= '1';
- NEXT_nIDE_WR <= '1';
- NEXT_CMD_STATE <= T7;
+ IDE_TA <= '0';
+ nIDE_RD <= not nFB_WR;
+ nIDE_WR <= nFB_WR;
+ NEXT_CMD_STATE <= T2;
+ when T2 =>
+ IDE_TA <= '0';
+ nIDE_RD <= not nFB_WR;
+ nIDE_WR <= nFB_WR;
+ NEXT_CMD_STATE <= T3;
+ when T3 =>
+ nIDE_RD <= not nFB_WR;
+ nIDE_WR <= nFB_WR;
+ IF IDE_RDY = '0' then
+ IDE_TA <= '0';
+ NEXT_CMD_STATE <= T3;
else
- IDE_CF_TA <= '0';
- NEXT_nIDE_RD <= not nFB_WR;
- NEXT_nIDE_WR <= nFB_WR;
- NEXT_CMD_STATE <= T6;
+ IDE_TA <= '1';
+ NEXT_CMD_STATE <= T5;
end if;
- when T7 =>
- IDE_CF_TA <= '0';
- NEXT_nIDE_RD <= '1';
- NEXT_nIDE_WR <= '1';
+ when T4 =>
+ IDE_TA <= '0';
+ nIDE_RD <= '1';
+ nIDE_WR <= '1';
NEXT_CMD_STATE <= IDLE;
+ when T5 =>
+ IDE_TA <= '0';
+ nIDE_RD <= '1';
+ nIDE_WR <= '1';
+ if IDE_DCS = '0' or FB_SIZE0 = '1' or FB_SIZE1 = '1' then -- wenn kein cs oder nicht long ->> fertig
+ NEXT_CMD_STATE <= T4;
+ else
+ if FB_ADR(6) = '0' then
+ if ACP_CONF(18 downto 16) = x"1" then
+ NEXT_CMD_STATE <= T9;
+ else
+ if ACP_CONF(18 downto 16) = x"2" then
+ NEXT_CMD_STATE <= T8;
+ else
+ NEXT_CMD_STATE <= T6;
+ end if;
+ end if;
+ else
+ if ACP_CONF(22 downto 20) = x"1" then
+ NEXT_CMD_STATE <= T9;
+ else
+ if ACP_CONF(22 downto 20) = x"2" then
+ NEXT_CMD_STATE <= T8;
+ else
+ NEXT_CMD_STATE <= T6;
+ end if;
+ end if;
+ end if;
+ end if;
+ when T6 =>
+ IDE_TA <= '0';
+ nIDE_RD <= '1';
+ nIDE_WR <= '1';
+ NEXT_CMD_STATE <= T7;
+ when T7 =>
+ IDE_TA <= '0';
+ nIDE_RD <= not nFB_WR;
+ nIDE_WR <= nFB_WR;
+ NEXT_CMD_STATE <= T8;
+ when T8 =>
+ IDE_TA <= '0';
+ nIDE_RD <= not nFB_WR;
+ nIDE_WR <= nFB_WR;
+ NEXT_CMD_STATE <= T9;
+ when T9 =>
+ nIDE_RD <= not nFB_WR;
+ nIDE_WR <= nFB_WR;
+ IF IDE_RDY = '0' then
+ IDE_TA <= '0';
+ NEXT_CMD_STATE <= T9;
+ else
+ IDE_TA <= '1';
+ NEXT_CMD_STATE <= T4;
+ end if;
end case;
end process CMD_DECODER;
-IDE_RES <= not nnIDE_RES and nRSTO;
-IDE_CF_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 7) = x"0" else '0'; -- FFF0'0000/80
-nCF_CS0 <= '0' when ACP_CONF(31) = '0' and FB_ADR(19 downto 5) = x"0" else -- FFFO'0000-FFF0'001F
- '0' when ACP_CONF(31) = '1' and FB_ADR(19 downto 5) = x"2" else '1'; -- FFFO'0040-FFF0'005F
-nCF_CS1 <= '0' when ACP_CONF(31) = '0' and FB_ADR(19 downto 5) = x"1" else -- FFF0'0020-FFF0'003F
- '0' when ACP_CONF(31) = '1' and FB_ADR(19 downto 5) = x"3" else '1'; -- FFFO'0060-FFF0'007F
-nIDE_CS0 <= '0' when ACP_CONF(30) = '0' and FB_ADR(19 downto 5) = x"2" else -- FFF0'0040-FFF0'005F
- '0' when ACP_CONF(30) = '1' and FB_ADR(19 downto 5) = x"0" else '1'; -- FFFO'0000-FFF0'001F
-nIDE_CS1 <= '0' when ACP_CONF(30) = '0' and FB_ADR(19 downto 5) = x"3" else -- FFF0'0060-FFF0'007F
- '0' when ACP_CONF(30) = '1' and FB_ADR(19 downto 5) = x"1" else '1'; -- FFFO'0020-FFF0'003F
+IDE_RES <= not ACP_CONF(25) and nRSTO; -- !!!!ACHTUNG: RESET wenn 0!!!!!!!!!!!!!!! -- IDE_RES manuel oder weil nRSTO
+IDE_CF_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 7) = x"0" else '0'; -- FFF0'0000-FFF0'007F
+IDE_DRIVE0 <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 0) = x"99" else '0'; -- FFF0'0099 (19+80!)
+IDE_DRIVE1 <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 0) = x"D9" else '0'; -- FFF0'00D9 (19+40+80!)
+IDE_DCS <= '1' when FB_ALE = '1' and FB_ADR(31 downto 2) = x"3FFC0000" else -- FFF0'000x 0-3
+ '1' when nFB_CS1 = '0' and FB_ADR(19 downto 2) = x"0" else -- FFF0'000x 0-3
+ '1' when FB_ALE = '1' and FB_ADR(31 downto 2) = x"3FFC0010" else -- FFF0'004x 0-3
+ '1' when nFB_CS1 = '0' and FB_ADR(19 downto 2) = x"10" else '0'; -- FFF0'004x 0-3
+nCF_CS0 <= FB_ADR(5) or (FB_ADR(6) xor (ACP_CONF(31) xnor HD_DD)); -- xxxx'xx00-1F
+nCF_CS1 <= not FB_ADR(5) or (FB_ADR(6) xor (ACP_CONF(31) xnor HD_DD)); -- xxxx'xx20-3F
+nIDE_CS0 <= FB_ADR(5) or (FB_ADR(6) xnor (ACP_CONF(30) xnor HD_DD)); -- xxxx'xx40-5F
+nIDE_CS1 <= not FB_ADR(5) or (FB_ADR(6) xnor (ACP_CONF(30) xnor HD_DD)); -- xxxx'xx60-7F
+nDREQ0 <= '1';
+FB_AD(23 downto 20) <= ACP_CONF(19 downto 16) when IDE_DRIVE0 = '1' and nFB_OE = '0' else "ZZZZ";
+FB_AD(23 downto 20) <= ACP_CONF(23 downto 20) when IDE_DRIVE1 = '1' and nFB_OE = '0' else "ZZZZ";
+
-----------------------------------------------------------------------------------------------------------------------------------------
-- ACSI, SCSI UND FLOPPY WD1772
-------------------------------------------------------------------------------------------------------------------------------------------
@@ -909,7 +992,7 @@ MIDI_OLR <= MIDI_OUT;
GPIP_IN(6) => not RI,
GPIP_IN(5) => DINTn,
GPIP_IN(4) => acia_irq,
- GPIP_IN(3) => DSP_INT,
+ GPIP_IN(3) => BLITTER_INT OR DSP_INT,
GPIP_IN(2) => not CTS,
GPIP_IN(1) => not DCD,
GPIP_IN(0) => LP_BUSY,
@@ -948,7 +1031,7 @@ FB_AD(9 downto 2) <= DATA_OUT_MFP when MFP_INTACK = '1' and nFB_OE = '0' else "Z
FB_AD(1 downto 0) <= "00" when MFP_INTACK = '1' and nFB_OE = '0' else "ZZ";
DINTn <= '0' when IDE_INT = '1' AND ACP_CONF(28) = '1' else
'0' when FDINT = '1' else
- '0' when SCSI_INT = '1' AND ACP_CONF(28) = '1' else '1';
+ '0' when SCSI_INT = '1' AND ACP_CONF(27) = '1' else '1';
----------------------------------------------------------------------------
-- Sound
----------------------------------------------------------------------------
@@ -969,8 +1052,15 @@ DINTn <= '0' when IDE_INT = '1' AND ACP_CONF(28) = '1' else
DA_IN => FB_ADI(15 downto 8),
DA_OUT => DA_OUT_X,
- IO_A_IN => SND_A,
- IO_A_OUT => SND_A_X,
+ IO_A_IN => x"00", -- All port pins are dedicated outputs.
+ IO_A_OUT(7) => nnIDE_RES,
+ IO_A_OUT(6) => LP_DIR_X,
+ IO_A_OUT(5) => nLP_STR,
+ IO_A_OUT(4) => DTR,
+ IO_A_OUT(3) => RTS,
+-- IO_A_OUT(2) => FDD_D1SEL,
+ IO_A_OUT(1) => DSA_D,
+ IO_A_OUT(0) => nSDSEL,
-- IO_A_EN =>, -- Not required.
IO_B_IN => LP_D,
IO_B_OUT => LP_D_X,
@@ -985,18 +1075,9 @@ SNDCS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 2) = x"3E200" else '0'; --
SNDCS_I <= '1' when SNDCS = '1' and FB_ADR (1 downto 1) = "0" else '0';
SNDIR_I <= '1' when SNDCS = '1' and nFB_WR = '0' else '0';
FB_AD(31 downto 24) <= DA_OUT_X when SNDCS_I = '1' and nFB_OE = '0' else "ZZZZZZZZ";
-nnIDE_RES <= SND_A_X(7);
-LP_DIR_X <= SND_A_X(6);
-LP_STR <= SND_A_X(5);
-DTR <= SND_A_X(4);
-RTS <= SND_A_X(3);
--- FDD_D1SEL <= SND_A_X(2)
-DSA_D <= SND_A_X(1);
-nSDSEL <= SND_A_X(0);
-SND_A <= SND_A_X;
LP_D <= LP_D_X when LP_DIR_X = '0' else "ZZZZZZZZ";
LP_DIR <= LP_DIR_X;
-
+LP_STR <= not nLP_STR;
----------------------------------------------------------------------------
-- DMA Sound register
diff --git a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd.bak b/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd.bak
deleted file mode 100644
index a789c9f..0000000
--- a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd.bak
+++ /dev/null
@@ -1,1153 +0,0 @@
--- WARNING: Do NOT edit the input and output ports in this file in a text
--- editor if you plan to continue editing the block that represents it in
--- the Block Editor! File corruption is VERY likely to occur.
-
--- Copyright (C) 1991-2008 Altera Corporation
--- Your use of Altera Corporation's design tools, logic functions
--- and other software and tools, and its AMPP partner logic
--- functions, and any output files from any of the foregoing
--- (including device programming or simulation files), and any
--- associated documentation or information are expressly subject
--- to the terms and conditions of the Altera Program License
--- Subscription Agreement, Altera MegaCore Function License
--- Agreement, or other applicable license agreement, including,
--- without limitation, that your use is for the sole purpose of
--- programming logic devices manufactured by Altera and sold by
--- Altera or its authorized distributors. Please refer to the
--- applicable agreement for further details.
-
-
--- Generated by Quartus II Version 8.1 (Build Build 163 10/28/2008)
--- Created on Tue Sep 08 16:24:20 2009
-
-library work;
-use work.FalconIO_SDCard_IDE_CF_pkg.all;
-
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.std_logic_unsigned.all;
-
-
--- Entity Declaration
-
-
--- Entity Declaration
-
-ENTITY FalconIO_SDCard_IDE_CF IS
- -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
- PORT
- (
- CLK33M : IN STD_LOGIC;
- MAIN_CLK : IN STD_LOGIC;
- CLK2M : IN STD_LOGIC;
- CLK500k : IN STD_LOGIC;
- nFB_CS1 : IN STD_LOGIC;
- FB_SIZE0 : IN STD_LOGIC;
- FB_SIZE1 : IN STD_LOGIC;
- nFB_BURST : IN STD_LOGIC;
- FB_ADR : IN STD_LOGIC_VECTOR(31 downto 0);
- LP_BUSY : IN STD_LOGIC;
- nACSI_DRQ : IN STD_LOGIC;
- nACSI_INT : IN STD_LOGIC;
- nSCSI_DRQ : IN STD_LOGIC;
- nSCSI_MSG : IN STD_LOGIC;
- MIDI_IN : IN STD_LOGIC;
- RxD : IN STD_LOGIC;
- CTS : IN STD_LOGIC;
- RI : IN STD_LOGIC;
- DCD : IN STD_LOGIC;
- AMKB_RX : IN STD_LOGIC;
- PIC_AMKB_RX : IN STD_LOGIC;
- IDE_RDY : IN STD_LOGIC;
- IDE_INT : IN STD_LOGIC;
- WP_CS_CARD : IN STD_LOGIC;
- nINDEX : IN STD_LOGIC;
- TRACK00 : IN STD_LOGIC;
- nRD_DATA : IN STD_LOGIC;
- nDCHG : IN STD_LOGIC;
- SD_DATA0 : IN STD_LOGIC;
- SD_DATA1 : IN STD_LOGIC;
- SD_DATA2 : IN STD_LOGIC;
- SD_CARD_DEDECT : IN STD_LOGIC;
- SD_WP : IN STD_LOGIC;
- nDACK0 : IN STD_LOGIC;
- nFB_WR : INOUT STD_LOGIC;
- WP_CF_CARD : IN STD_LOGIC;
- nWP : IN STD_LOGIC;
- nFB_CS2 : IN STD_LOGIC;
- nRSTO : IN STD_LOGIC;
- HD_DD : IN STD_LOGIC;
- nSCSI_C_D : IN STD_LOGIC;
- nSCSI_I_O : IN STD_LOGIC;
- CLK2M4576 : IN STD_LOGIC;
- nFB_OE : IN STD_LOGIC;
- VSYNC : IN STD_LOGIC;
- HSYNC : IN STD_LOGIC;
- DSP_INT : IN STD_LOGIC;
- nBLANK : IN STD_LOGIC;
- FDC_CLK : IN STD_LOGIC;
- FB_ALE : IN STD_LOGIC;
- ACP_CONF : IN STD_LOGIC_VECTOR(31 downto 24);
- nIDE_CS1 : OUT STD_LOGIC;
- nIDE_CS0 : OUT STD_LOGIC;
- LP_STR : OUT STD_LOGIC;
- LP_DIR : OUT STD_LOGIC;
- nACSI_ACK : OUT STD_LOGIC;
- nACSI_RESET : OUT STD_LOGIC;
- nACSI_CS : OUT STD_LOGIC;
- ACSI_DIR : OUT STD_LOGIC;
- ACSI_A1 : OUT STD_LOGIC;
- nSCSI_ACK : OUT STD_LOGIC;
- nSCSI_ATN : OUT STD_LOGIC;
- SCSI_DIR : OUT STD_LOGIC;
- SD_CLK : OUT STD_LOGIC;
- YM_QA : OUT STD_LOGIC;
- YM_QC : OUT STD_LOGIC;
- YM_QB : OUT STD_LOGIC;
- nSDSEL : OUT STD_LOGIC;
- STEP : OUT STD_LOGIC;
- MOT_ON : OUT STD_LOGIC;
- nRP_LDS : OUT STD_LOGIC;
- nRP_UDS : OUT STD_LOGIC;
- nROM4 : OUT STD_LOGIC;
- nROM3 : OUT STD_LOGIC;
- nCF_CS1 : OUT STD_LOGIC;
- nCF_CS0 : OUT STD_LOGIC;
- nIDE_RD : INOUT STD_LOGIC;
- nIDE_WR : INOUT STD_LOGIC;
- AMKB_TX : buffer STD_LOGIC;
- IDE_RES : OUT STD_LOGIC;
- DTR : OUT STD_LOGIC;
- RTS : OUT STD_LOGIC;
- TxD : OUT STD_LOGIC;
- MIDI_OLR : OUT STD_LOGIC;
- MIDI_TLR : OUT STD_LOGIC;
- nDREQ0 : OUT STD_LOGIC;
- DSA_D : OUT STD_LOGIC;
- nMFP_INT : OUT STD_LOGIC;
- FALCON_IO_TA : OUT STD_LOGIC;
- STEP_DIR : OUT STD_LOGIC;
- WR_DATA : OUT STD_LOGIC;
- WR_GATE : OUT STD_LOGIC;
- DMA_DRQ : OUT STD_LOGIC;
- FB_AD : INOUT STD_LOGIC_VECTOR(31 downto 0);
- LP_D : INOUT STD_LOGIC_VECTOR(7 downto 0);
- SND_A : INOUT STD_LOGIC_VECTOR(7 downto 0);
- ACSI_D : INOUT STD_LOGIC_VECTOR(7 downto 0);
- SCSI_D : INOUT STD_LOGIC_VECTOR(7 downto 0);
- SCSI_PAR : INOUT STD_LOGIC;
- nSCSI_SEL : INOUT STD_LOGIC;
- nSCSI_BUSY : INOUT STD_LOGIC;
- nSCSI_RST : INOUT STD_LOGIC;
- SD_CD_DATA3 : INOUT STD_LOGIC;
- SD_CDM_D1 : INOUT STD_LOGIC
- );
- -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
-
-END FalconIO_SDCard_IDE_CF;
-
-
--- Architecture Body
-
-ARCHITECTURE FalconIO_SDCard_IDE_CF_architecture OF FalconIO_SDCard_IDE_CF IS
--- system
-signal SYS_CLK : STD_LOGIC;
-signal RESETn : STD_LOGIC;
-signal FB_B0 : STD_LOGIC; -- UPPER BYT BEI 16BIT BUS
-signal FB_B1 : STD_LOGIC; -- LOWER BYT BEI 16BIT BUS
-signal BYT : STD_LOGIC; -- WENN BYT -> 1
-signal LONG : STD_LOGIC; -- WENN -> 1
-signal FB_ADI : STD_LOGIC_VECTOR(15 downto 0); -- gespeicherte writedaten
-signal nResetatio : STD_LOGIC; -- reset atari bausteine
--- KEYBOARD MIDI
-signal ACIA_CS_I : STD_LOGIC;
-signal IRQ_KEYBDn : STD_LOGIC;
-signal IRQ_MIDIn : STD_LOGIC;
-signal KEYB_RxD : STD_LOGIC;
-signal AMKB_REG : STD_LOGIC_VECTOR(3 downto 0);
-signal AMKB_TX_sync : std_logic;
-signal MIDI_OUT : STD_LOGIC;
-signal DATA_OUT_ACIA_I : STD_LOGIC_VECTOR(7 downto 0);
-signal DATA_OUT_ACIA_II : STD_LOGIC_VECTOR(7 downto 0);
--- MFP
-signal MFP_CS : STD_LOGIC;
-signal MFP_INTACK : STD_LOGIC;
-signal LDS : STD_LOGIC;
-signal acia_irq : STD_LOGIC;
-signal DTACK_OUT_MFPn : STD_LOGIC;
-signal DINTn : STD_LOGIC;
-signal DATA_OUT_MFP : STD_LOGIC_VECTOR(7 downto 0);
-signal TDO : STD_LOGIC;
--- SOUND
-signal SNDCS : STD_LOGIC;
-signal SNDCS_I : STD_LOGIC;
-signal SNDIR_I : STD_LOGIC;
-signal LP_DIR_X : STD_LOGIC;
-signal DA_OUT_X : STD_LOGIC_VECTOR(7 downto 0);
-signal SND_A_X : STD_LOGIC_VECTOR(7 downto 0);
-signal LP_D_X : STD_LOGIC_VECTOR(7 downto 0);
-signal nLP_STR : STD_LOGIC;
--- DMA SOUND
-signal dma_snd_cs : STD_LOGIC;
-signal sndmactl : STD_LOGIC_VECTOR(7 downto 0);
-signal sndbashi : STD_LOGIC_VECTOR(7 downto 0);
-signal sndbasmi : STD_LOGIC_VECTOR(7 downto 0);
-signal sndbaslo : STD_LOGIC_VECTOR(7 downto 0);
-signal sndadrhi : STD_LOGIC_VECTOR(7 downto 0);
-signal sndadrmi : STD_LOGIC_VECTOR(7 downto 0);
-signal sndadrlo : STD_LOGIC_VECTOR(7 downto 0);
-signal sndendhi : STD_LOGIC_VECTOR(7 downto 0);
-signal sndendmi : STD_LOGIC_VECTOR(7 downto 0);
-signal sndendlo : STD_LOGIC_VECTOR(7 downto 0);
-signal sndmode : STD_LOGIC_VECTOR(7 downto 0);
--- DIV
-signal SUB_BUS : STD_LOGIC; -- SUB BUS MIT ROM-PORT, CF UND IDE
-signal ROM_CS : STD_LOGIC;
--- DMA UND FLOPPY
-signal DMA_DATEN_CS : STD_LOGIC;
-signal DMA_MODUS_CS : STD_LOGIC;
-signal DMA_MODUS : STD_LOGIC_VECTOR(15 downto 0);
-signal WDC_BSL_CS : STD_LOGIC;
-signal WDC_BSL : STD_LOGIC_VECTOR(1 DOWNTO 0);
-signal HD_DD_OUT : STD_LOGIC;
-signal FDCS_In : STD_LOGIC;
-signal CA0 : STD_LOGIC;
-signal CA1 : STD_LOGIC;
-signal CA2 : STD_LOGIC;
-signal FDINT : STD_LOGIC;
-signal FDRQ : STD_LOGIC;
-signal CD_OUT_FDC : STD_LOGIC_VECTOR(7 downto 0);
-signal CD_IN_FDC : STD_LOGIC_VECTOR(7 downto 0);
-signal DMA_TOP_CS : STD_LOGIC;
-signal DMA_TOP : STD_LOGIC_VECTOR(7 downto 0);
-signal DMA_HIGH_CS : STD_LOGIC;
-signal DMA_HIGH : STD_LOGIC_VECTOR(7 downto 0);
-signal DMA_MID_CS : STD_LOGIC;
-signal DMA_MID : STD_LOGIC_VECTOR(7 downto 0);
-signal DMA_LOW_CS : STD_LOGIC;
-signal DMA_LOW : STD_LOGIC_VECTOR(7 downto 0);
-signal DMA_DIRM_CS : STD_LOGIC;
-signal DMA_ADR_CS : STD_LOGIC;
-signal DMA_STATUS : STD_LOGIC_VECTOR(2 downto 0);
-signal DMA_DIR_OLD : STD_LOGIC;
-signal DMA_BYT_CNT_CS : STD_LOGIC;
-signal DMA_BYT_CNT : STD_LOGIC_VECTOR(31 downto 0);
-signal CLR_FIFO : STD_LOGIC;
-signal DMA_DRQ_I : STD_LOGIC;
-signal DMA_DRQ_REG : STD_LOGIC_VECTOR(1 downto 0);
-signal DMA_DRQQ : STD_LOGIC;
-signal DMA_DRQ_Q : STD_LOGIC;
-signal RDF_DOUT : STD_LOGIC_VECTOR(31 downto 0);
-signal RDF_AZ : STD_LOGIC_VECTOR(9 downto 0);
-signal RDF_RDE : STD_LOGIC;
-signal RDF_WRE : STD_LOGIC;
-signal RDF_DIN : STD_LOGIC_VECTOR(7 downto 0);
-signal WRF_DOUT : STD_LOGIC_VECTOR(7 downto 0);
-signal WRF_AZ : STD_LOGIC_VECTOR(9 downto 0);
-signal WRF_RDE : STD_LOGIC;
-signal WRF_WRE : STD_LOGIC;
-signal nFDC_WR : STD_LOGIC;
-type FCF_STATES is( FCF_IDLE, FCF_T0, FCF_T1, FCF_T2, FCF_T3, FCF_T6, FCF_T7);
-signal FCF_STATE : FCF_STATES;
-signal NEXT_FCF_STATE : FCF_STATES;
-signal DMA_REQ : STD_LOGIC;
-signal FDC_CS : STD_LOGIC;
-signal FCF_CS : STD_LOGIC;
-signal FCF_APH : STD_LOGIC;
-signal DMA_AZ_CS : STD_LOGIC;
-signal DMA_ACTIV : STD_LOGIC;
-signal DMA_ACTIV_NEW : STD_LOGIC;
-signal FDC_OUT : STD_LOGIC_VECTOR(7 downto 0);
--- SCSI
-signal SCSI_CS : STD_LOGIC;
-signal SCSI_CSn : STD_LOGIC;
-signal SCSI_DOUT : STD_LOGIC_VECTOR(7 downto 0);
-signal nSCSI_DACK : STD_LOGIC;
-signal SCSI_DRQ : STD_LOGIC;
-signal SCSI_INT : STD_LOGIC;
-signal DB_OUTn : STD_LOGIC_VECTOR(7 downto 0);
-signal DB_EN : STD_LOGIC;
-signal DBP_OUTn : STD_LOGIC;
-signal DBP_EN : STD_LOGIC;
-signal RST_OUTn : STD_LOGIC;
-signal RST_EN : STD_LOGIC;
-signal BSY_OUTn : STD_LOGIC;
-signal BSY_EN : STD_LOGIC;
-signal SEL_OUTn : STD_LOGIC;
-signal SEL_EN : STD_LOGIC;
--- IDE
-signal nnIDE_RES : STD_LOGIC;
-signal IDE_CF_CS : STD_LOGIC;
-signal IDE_CF_TA : STD_LOGIC;
-signal NEXT_nIDE_RD : STD_LOGIC;
-signal NEXT_nIDE_WR : STD_LOGIC;
-type CMD_STATES is( IDLE, T1, T6, T7);
-signal CMD_STATE : CMD_STATES;
-signal NEXT_CMD_STATE : CMD_STATES;
--- Paddle
-signal paddle_cs : STD_LOGIC;
-
-BEGIN
-LONG <= '1' when FB_SIZE1 = '0' and FB_SIZE0 = '0' else '0';
-BYT <= '1' when FB_SIZE1 = '0' and FB_SIZE0 = '1' else '0';
-FB_B0 <= '1' when FB_ADR(0) = '0' or BYT = '0' else '0';
-FB_B1 <= '1' when FB_ADR(0) = '1' or BYT = '0' else '0';
-
-FALCON_IO_TA <= '1' when ACIA_CS_I = '1' or DTACK_OUT_MFPn = '0' or DMA_MODUS_CS ='1' or dma_snd_cs = '1' or paddle_cs = '1'
- or DMA_ADR_CS = '1' or DMA_DIRM_CS = '1' or DMA_BYT_CNT_CS = '1' or FCF_CS = '1' or IDE_CF_TA = '1' else '0';--SNDCS = '1' or
-SUB_BUS <= '1' when nFB_WR = '1' and ROM_CS = '1' ELSE
- '1' when nFB_WR = '1' and IDE_CF_CS = '1' ELSE
- '1' when nFB_WR = '0' and nIDE_WR = '0' ELSE '0';
-nRP_UDS <= '0' when nFB_CS1 = '0' and SUB_BUS = '1' and FB_B0 = '1' else '1';
-nRP_LDS <= '0' when nFB_CS1 = '0' and SUB_BUS = '1' and FB_B1 = '1' else '1';
-nDREQ0 <= '0';
--- input daten halten
-process(MAIN_CLK, nFB_WR, FB_AD(31 downto 16), FB_ADI(15 downto 0))
- begin
- if rising_edge(MAIN_CLK) then
- IF nFB_WR = '0' THEN
- FB_ADI <= FB_AD(31 downto 16);
- ELSE
- FB_ADI <= FB_ADI;
- end if;
- ELSE
- FB_ADI <= FB_ADI;
- end if;
- END PROCESS;
-----------------------------------------------------------------------------
--- SD
-----------------------------------------------------------------------------
-SD_CLK <= 'Z';
-SD_CD_DATA3 <= 'Z';
-SD_CDM_D1 <= 'Z';
-----------------------------------------------------------------------------
--- IDE
-----------------------------------------------------------------------------
-CMD_REG: process(nRSTO, MAIN_CLK, CMD_STATE, NEXT_CMD_STATE)
- begin
- if nRSTO = '0' then
- CMD_STATE <= IDLE;
- elsif rising_edge(MAIN_CLK) then
- CMD_STATE <= NEXT_CMD_STATE; -- go to next
- nIDE_RD <= NEXT_nIDE_RD; -- go to next
- nIDE_WR <= NEXT_nIDE_WR; -- go to next
- else
- CMD_STATE <= CMD_STATE; -- halten
- nIDE_RD <= nIDE_RD; -- halten
- nIDE_WR <= nIDE_WR; -- halten
- end if;
- end process CMD_REG;
-
- CMD_DECODER: process(CMD_STATE, NEXT_CMD_STATE, NEXT_nIDE_RD, NEXT_nIDE_WR, IDE_RDY, IDE_CF_TA)
- begin
- case CMD_STATE is
- when IDLE =>
- IDE_CF_TA <= '0';
- if IDE_CF_CS = '1' then
- NEXT_nIDE_RD <= not nFB_WR;
- NEXT_nIDE_WR <= nFB_WR;
- NEXT_CMD_STATE <= T1;
- else
- NEXT_nIDE_RD <= '1';
- NEXT_nIDE_WR <= '1';
- NEXT_CMD_STATE <= IDLE;
- end if;
- when T1 =>
- IDE_CF_TA <= '0';
- NEXT_nIDE_RD <= not nFB_WR;
- NEXT_nIDE_WR <= nFB_WR;
- NEXT_CMD_STATE <= T6;
- when T6 =>
- IF IDE_RDY = '1' then
- IDE_CF_TA <= '1';
- NEXT_nIDE_RD <= '1';
- NEXT_nIDE_WR <= '1';
- NEXT_CMD_STATE <= T7;
- else
- IDE_CF_TA <= '0';
- NEXT_nIDE_RD <= not nFB_WR;
- NEXT_nIDE_WR <= nFB_WR;
- NEXT_CMD_STATE <= T6;
- end if;
- when T7 =>
- IDE_CF_TA <= '0';
- NEXT_nIDE_RD <= '1';
- NEXT_nIDE_WR <= '1';
- NEXT_CMD_STATE <= IDLE;
- end case;
- end process CMD_DECODER;
-
-IDE_RES <= not nnIDE_RES and nRSTO;
-IDE_CF_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 7) = x"0" else '0'; -- FFF0'0000/80
-nCF_CS0 <= '0' when ACP_CONF(31) = '0' and FB_ADR(19 downto 5) = x"0" else -- FFFO'0000-FFF0'001F
- '0' when ACP_CONF(31) = '1' and FB_ADR(19 downto 5) = x"2" else '1'; -- FFFO'0040-FFF0'005F
-nCF_CS1 <= '0' when ACP_CONF(31) = '0' and FB_ADR(19 downto 5) = x"1" else -- FFF0'0020-FFF0'003F
- '0' when ACP_CONF(31) = '1' and FB_ADR(19 downto 5) = x"3" else '1'; -- FFFO'0060-FFF0'007F
-nIDE_CS0 <= '0' when ACP_CONF(30) = '0' and FB_ADR(19 downto 5) = x"2" else -- FFF0'0040-FFF0'005F
- '0' when ACP_CONF(30) = '1' and FB_ADR(19 downto 5) = x"0" else '1'; -- FFFO'0000-FFF0'001F
-nIDE_CS1 <= '0' when ACP_CONF(30) = '0' and FB_ADR(19 downto 5) = x"3" else -- FFF0'0060-FFF0'007F
- '0' when ACP_CONF(30) = '1' and FB_ADR(19 downto 5) = x"1" else '1'; -- FFFO'0020-FFF0'003F
------------------------------------------------------------------------------------------------------------------------------------------
--- ACSI, SCSI UND FLOPPY WD1772
--------------------------------------------------------------------------------------------------------------------------------------------
--- daten read fifo
- RDF: dcfifo0
- port map(
- aclr => CLR_FIFO,
- data => RDF_DIN,
- rdclk => MAIN_CLK,
- rdreq => RDF_RDE,
- wrclk => FDC_CLK,
- wrreq => RDF_WRE,
- q => RDF_DOUT,
- wrusedw => RDF_AZ
- );
-FCF_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"0020110" and LONG = '1' else '0'; -- F002'0110 LONG ONLY
-FCF_APH <= '1' when FB_ALE = '1' and FB_AD(31 downto 0) = x"F0020110" and LONG = '1' else '0'; -- ADRESSPHASE F0020110 LONG ONLY
-RDF_RDE <= '1' when FCF_APH = '1' and nFB_WR = '1' else '0'; -- AKTIVIEREN IN ADRESSPHASE
-FB_AD <= RDF_DOUT(7 downto 0) & RDF_DOUT(15 downto 8) & RDF_DOUT(23 downto 16) & RDF_DOUT(31 downto 24) when FCF_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
-RDF_DIN <= CD_OUT_FDC when DMA_MODUS(7) = '1' else SCSI_DOUT;
--- daten write fifo
- WRF: dcfifo1
- port map(
- aclr => CLR_FIFO,
- data => FB_AD(7 downto 0) & FB_AD(15 downto 8) & FB_AD(23 downto 16) & FB_AD(31 downto 24),
- rdclk => FDC_CLK,
- rdreq => WRF_RDE,
- wrclk => MAIN_CLK,
- wrreq => WRF_WRE,
- q => WRF_DOUT,
- rdusedw => WRF_AZ
- );
-CD_IN_FDC <= WRF_DOUT when DMA_ACTIV = '1' and DMA_MODUS(8) = '1' else FB_ADI(7 downto 0); -- BEI DMA WRITE <-FIFO SONST <-FB
-DMA_AZ_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"002010C" else '0'; -- F002'010C LONG
-FB_AD <= DMA_DRQ_Q & DMA_DRQ_REG & IDE_INT & FDINT & SCSI_INT & RDF_AZ & "0" & DMA_STATUS & "00" & WRF_AZ when DMA_AZ_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
-DMA_DRQ_Q <= '1' when DMA_DRQ_REG = "11" and DMA_MODUS(6) = '0' else '0';
--- FIFO WRITE: GENAU 1 MAIN_CLK -------------------------------------------------------------------------
- process(MAIN_CLK, nRSTO, WRF_WRE, nFB_WR, FCF_APH)
- begin
- if nRSTO = '0' THEN
- WRF_WRE <= '0';
- elsif rising_edge(MAIN_CLK) then
- IF FCF_APH = '1' and nFB_WR = '0' then
- WRF_WRE <= '1';
- else
- WRF_WRE <= '0';
- end if;
- else
- WRF_WRE <= WRF_WRE;
- end if;
- END PROCESS;
-
-FCF_REG: process(nRSTO, FDC_CLK, FCF_STATE, NEXT_FCF_STATE, DMA_ACTIV)
- begin
- if nRSTO = '0' then
- FCF_STATE <= FCF_IDLE;
- DMA_ACTIV <= '0';
- elsif rising_edge(FDC_CLK) then
- FCF_STATE <= NEXT_FCF_STATE; -- go to next
- DMA_ACTIV <= DMA_ACTIV_NEW;
- else
- FCF_STATE <= FCF_STATE; -- halten
- DMA_ACTIV <= DMA_ACTIV;
- end if;
- end process FCF_REG;
-
-FDC_REG: process(nRSTO, FDC_CLK, FDC_OUT, FDCS_In, CD_OUT_FDC)
- begin
- if nRSTO = '0' then
- FDC_OUT <= x"00";
- elsif rising_edge(FDC_CLK) and FDCS_In = '0' then
- FDC_OUT <= CD_OUT_FDC; -- set
- else
- FDC_OUT <= FDC_OUT; -- halten
- end if;
- end process FDC_REG;
-
-DMA_REQ <= '1' when ((DMA_DRQ_I = '1' and DMA_MODUS(7) = '1') or (SCSI_DRQ = '1' and DMA_MODUS(7) = '0')) and DMA_STATUS(1) = '1' and DMA_MODUS(6) = '0' and CLR_FIFO = '0' else '0';
-FDC_CS <= '1' when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "00" and FB_B1 = '1' else '0';
-SCSI_CS <= '1' when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "01" and FB_B1 = '1' else '0';
-
- FCF_DECODER: process(FCF_STATE, NEXT_FCF_STATE, DMA_REQ,FDC_CS, RDF_WRE, WRF_RDE, SCSI_DRQ, nSCSI_DACK, DMA_MODUS, DMA_ACTIV, FDCS_In,SCSI_CS, SCSI_CSn)
- begin
- case FCF_STATE is
- when FCF_IDLE =>
- SCSI_CSn <= '1';
- FDCS_In <= '1';
- RDF_WRE <= '0';
- WRF_RDE <= '0';
- nSCSI_DACK <= '1';
- if DMA_REQ = '1' or FDC_CS = '1' or SCSI_CS = '1' then
- DMA_ACTIV_NEW <= DMA_REQ;
- NEXT_FCF_STATE <= FCF_T0;
- else
- DMA_ACTIV_NEW <= '0';
- NEXT_FCF_STATE <= FCF_IDLE;
- end if;
- when FCF_T0 =>
- SCSI_CSn <= '1';
- FDCS_In <= '1';
- RDF_WRE <= '0';
- nSCSI_DACK <= '1';
- DMA_ACTIV_NEW <= DMA_REQ;
- WRF_RDE <= DMA_MODUS(8) and DMA_REQ; -- WRITE -> READ FROM FIFO
- if DMA_REQ = '0' and DMA_ACTIV = '1' THEN -- spike?
- NEXT_FCF_STATE <= FCF_IDLE; -- ja -> zum start
- else
- NEXT_FCF_STATE <= FCF_T1;
- end if;
- when FCF_T1 =>
- RDF_WRE <= '0';
- WRF_RDE <= '0';
- DMA_ACTIV_NEW <= DMA_ACTIV;
- SCSI_CSn <= not SCSI_CS;
- FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3);
- nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV;
- NEXT_FCF_STATE <= FCF_T2;
- when FCF_T2 =>
- RDF_WRE <= '0';
- WRF_RDE <= '0';
- DMA_ACTIV_NEW <= DMA_ACTIV;
- SCSI_CSn <= not SCSI_CS;
- FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3);
- nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV;
- NEXT_FCF_STATE <= FCF_T3;
- when FCF_T3 =>
- RDF_WRE <= '0';
- WRF_RDE <= '0';
- DMA_ACTIV_NEW <= DMA_ACTIV;
- SCSI_CSn <= not SCSI_CS;
- FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3);
- nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV;
- NEXT_FCF_STATE <= FCF_T6;
- when FCF_T6 =>
- WRF_RDE <= '0';
- DMA_ACTIV_NEW <= DMA_ACTIV;
- SCSI_CSn <= not SCSI_CS;
- FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3);
- nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV;
- RDF_WRE <= not DMA_MODUS(8) and DMA_ACTIV; -- READ -> WRITE IN FIFO
- NEXT_FCF_STATE <= FCF_T7;
- when FCF_T7 =>
- SCSI_CSn <= '1';
- FDCS_In <= '1';
- RDF_WRE <= '0';
- WRF_RDE <= '0';
- nSCSI_DACK <= '1';
- DMA_ACTIV_NEW <= '0';
- if FDC_CS = '1' and DMA_REQ = '0' then
- NEXT_FCF_STATE <= FCF_T7;
- else
- NEXT_FCF_STATE <= FCF_IDLE;
- end if;
- end case;
- end process FCF_DECODER;
-
- I_FDC: WF1772IP_TOP_SOC
- port map(
- CLK => FDC_CLK,
- RESETn => nResetatio,
- CSn => FDCS_In,
- RWn => nFDC_WR,
- A1 => CA2,
- A0 => CA1,
- DATA_IN => CD_IN_FDC,
- DATA_OUT => CD_OUT_FDC,
--- DATA_EN => CD_EN_FDC,
- RDn => nRD_DATA,
- TR00n => TRACK00,
- IPn => nINDEX,
- WPRTn => nWP,
- DDEn => '0', -- Fixed to MFM.
- HDTYPE => HD_DD_OUT,
- MO => MOT_ON,
- WG => WR_GATE,
- WD => WR_DATA,
- STEP => STEP,
- DIRC => STEP_DIR,
- DRQ => DMA_DRQ_I,
- INTRQ => FDINT
- );
-DMA_DATEN_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C302" else '0'; -- F8604/2
-DMA_MODUS_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C303" else '0'; -- F8606/2
-WDC_BSL_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C307" else '0'; -- F860E/2
-HD_DD_OUT <= HD_DD WHEN ACP_CONF(29) = '0' ELSE WDC_BSL(0);
-nFDC_WR <= (not DMA_MODUS(8)) when DMA_ACTIV = '1' else nFB_WR;
-CA0 <= '1' when DMA_ACTIV = '1' ELSE DMA_MODUS(0);
-CA1 <= '1' when DMA_ACTIV = '1' ELSE DMA_MODUS(1);
-CA2 <= '1' when DMA_ACTIV = '1' ELSE DMA_MODUS(2);
-FB_AD(23 downto 16) <= "0000" & (not DMA_STATUS(1)) & "0" & WDC_BSL(1) & HD_DD when WDC_BSL_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ";
-FB_AD(31 downto 24) <= "00000000" when DMA_DATEN_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ";
-FB_AD(23 downto 16) <= FDC_OUT when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "00" and nFB_OE = '0' else
- SCSI_DOUT when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "01" and nFB_OE = '0' else
- DMA_BYT_CNT(16 downto 9) when DMA_DATEN_CS = '1' and DMA_MODUS(4) = '1' and nFB_OE = '0' else "ZZZZZZZZ";
---- WDC BSL REGISTER -------------------------------------------------------
- process(MAIN_CLK, nRSTO, WDC_BSL_CS, WDC_BSL, nFB_WR, FB_B0, FB_B1)
- begin
- if nRSTO = '0' THEN
- WDC_BSL <= "00";
- elsif rising_edge(MAIN_CLK) and WDC_BSL_CS = '1' and nFB_WR = '0' then
- IF FB_B0 = '1' THEN
- WDC_BSL(1 DOWNTO 0) <= FB_AD(25 DOWNTO 24);
- else
- WDC_BSL(1 DOWNTO 0) <= WDC_BSL(1 DOWNTO 0);
- end if;
- end if;
- END PROCESS;
---- DMA MODUS REGISTER -------------------------------------------------------
- process(MAIN_CLK, nRSTO, DMA_MODUS_CS, DMA_MODUS, nFB_WR, FB_B0, FB_B1)
- begin
- if nRSTO = '0' THEN
- DMA_MODUS <= x"0000";
- elsif rising_edge(MAIN_CLK) and DMA_MODUS_CS = '1' and nFB_WR = '0' then
- IF FB_B0 = '1' THEN
- DMA_MODUS(15 downto 8) <= FB_AD(31 downto 24);
- else
- DMA_MODUS(15 downto 8) <= DMA_MODUS(15 downto 8);
- end if;
- IF FB_B1 = '1' THEN
- DMA_MODUS(7 downto 0) <= FB_AD(23 downto 16);
- else
- DMA_MODUS(7 downto 0) <= DMA_MODUS(7 downto 0);
- end if;
- else
- DMA_MODUS <= DMA_MODUS;
- end if;
- END PROCESS;
--- BYT COUNTER, SECTOR COUNTER ----------------------------------------------------
- process(MAIN_CLK, nRSTO, DMA_DATEN_CS, DMA_BYT_CNT_CS, DMA_BYT_CNT, nFB_WR, FB_B0, FB_B1, DMA_MODUS, CLR_FIFO)
- begin
- if nRSTO = '0' or CLR_FIFO = '1' THEN
- DMA_BYT_CNT <= x"00000000";
- elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and DMA_DATEN_CS = '1' and nFB_WR = '0' and DMA_MODUS(4) = '1' and FB_B1 = '1' then
- DMA_BYT_CNT(31 downto 17) <= "000000000000000";
- DMA_BYT_CNT(16 downto 9) <= FB_AD(23 downto 16);
- DMA_BYT_CNT(8 downto 0) <= "000000000";
- elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and DMA_BYT_CNT_CS = '1' then
- DMA_BYT_CNT <= FB_AD;
- else
- DMA_BYT_CNT <= DMA_BYT_CNT;
- end if;
- END PROCESS;
---------------------------------------------------------------------
-FB_AD(31 downto 16) <= "0000000000000" & DMA_STATUS when DMA_MODUS_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-DMA_STATUS(0) <= '1'; -- DMA OK
-DMA_STATUS(1) <= '1' when DMA_BYT_CNT /= 0 and DMA_BYT_CNT(31) = '0' else '0'; -- WENN byts UND NICHT MINUS
-DMA_STATUS(2) <= '0' when DMA_DRQ_I = '1' or SCSI_DRQ = '1' else '0';
-DMA_DRQQ <= '1' when DMA_STATUS(1) = '1' and DMA_MODUS(8) = '0' and RDF_AZ > 15 and DMA_MODUS(6) = '0' else
- '1' when DMA_STATUS(1) = '1' and DMA_MODUS(8) = '1' and WRF_AZ < 512 and DMA_MODUS(6) = '0' else '0';
-DMA_DRQ <= '1' when DMA_DRQ_REG = "11" and DMA_MODUS(6) = '0' else '0';
--- DMA REQUEST: SPIKES AUSFILTERN ------------------------------------------
- process(FDC_CLK, nRSTO, DMA_DRQ_REG)
- begin
- if nRSTO = '0' THEN
- DMA_DRQ_REG <= "00";
- elsif rising_edge(FDC_CLK) then
- DMA_DRQ_REG(0) <= DMA_DRQQ;
- DMA_DRQ_REG(1) <= DMA_DRQ_REG(0) and DMA_DRQQ;
- else
- DMA_DRQ_REG <= DMA_DRQ_REG;
- end if;
- END PROCESS;
--- DMA ADRESSE ------------------------------------------------------
- process(MAIN_CLK, nRSTO, DMA_TOP_CS, DMA_TOP, nFB_WR, DMA_ADR_CS)
- begin
- if nRSTO = '0' THEN
- DMA_TOP <= x"00";
- elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and (DMA_TOP_CS = '1' or DMA_ADR_CS = '1') then
- DMA_TOP <= FB_AD(31 downto 24);
- else
- DMA_TOP <= DMA_TOP;
- end if;
- END PROCESS;
- process(MAIN_CLK, nRSTO, DMA_HIGH_CS, DMA_HIGH, nFB_WR, DMA_ADR_CS)
- begin
- if nRSTO = '0' THEN
- DMA_HIGH <= x"00";
- elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and (DMA_HIGH_CS = '1' or DMA_ADR_CS = '1') then
- DMA_HIGH <= FB_AD(23 downto 16);
- else
- DMA_HIGH <= DMA_HIGH;
- end if;
- END PROCESS;
- process(MAIN_CLK, nRSTO, DMA_MID_CS, DMA_MID, nFB_WR)
- begin
- DMA_MID <= DMA_MID;
- if nRSTO = '0' THEN
- DMA_MID <= x"00";
- elsif rising_edge(MAIN_CLK) and nFB_WR = '0' then
- if DMA_MID_CS = '1' then
- DMA_MID <= FB_AD(23 downto 16);
- elsif DMA_ADR_CS = '1' then
- DMA_MID <= FB_AD(15 downto 8);
- end if;
- end if;
- END PROCESS;
- process(MAIN_CLK, nRSTO, DMA_LOW_CS, DMA_LOW, nFB_WR)
- begin
- DMA_LOW <= DMA_LOW;
- if nRSTO = '0' THEN
- DMA_LOW <= x"00";
- elsif rising_edge(MAIN_CLK) and nFB_WR = '0' then
- if DMA_LOW_CS = '1'then
- DMA_LOW <= FB_AD(23 downto 16);
- elsif DMA_ADR_CS = '1' then
- DMA_LOW <= FB_AD(7 downto 0);
- end if;
- end if;
- END PROCESS;
---------------------------------------------------------------------------------------------
-DMA_TOP_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C304" and FB_B0 = '1' else '0'; -- F8608/2
-DMA_HIGH_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C304" and FB_B1 = '1' else '0'; -- F8609/2
-DMA_MID_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C305" and FB_B1 = '1' else '0'; -- F860B/2
-DMA_LOW_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C306" and FB_B1 = '1' else '0'; -- F860D/2
-FB_AD(31 downto 24) <= DMA_TOP when DMA_TOP_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ";
-FB_AD(23 downto 16) <= DMA_HIGH when DMA_HIGH_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ";
-FB_AD(23 downto 16) <= DMA_MID when DMA_MID_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ";
-FB_AD(23 downto 16) <= DMA_LOW when DMA_LOW_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ";
--- DIRECTZUGRIFF
-DMA_DIRM_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20100" else '0'; -- F002'0100 WORD
-DMA_ADR_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20104" else '0'; -- F002'0104 LONG
-DMA_BYT_CNT_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20108" else '0'; -- F002'0108 LONG
-FB_AD <= DMA_TOP & DMA_HIGH & DMA_MID & DMA_LOW when DMA_ADR_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
-FB_AD(31 downto 16) <= DMA_MODUS when DMA_DIRM_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-FB_AD <= DMA_BYT_CNT when DMA_BYT_CNT_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
--- DMA RW TOGGLE ------------------------------------------
- process(MAIN_CLK, nRSTO, DMA_MODUS_CS, DMA_MODUS, DMA_DIR_OLD)
- begin
- if nRSTO = '0' THEN
- DMA_DIR_OLD <= '0';
- elsif rising_edge(MAIN_CLK) and DMA_MODUS_CS = '0' then
- DMA_DIR_OLD <= DMA_MODUS(8);
- else
- DMA_DIR_OLD <= DMA_DIR_OLD;
- end if;
- END PROCESS;
-CLR_FIFO <= DMA_MODUS(8) xor DMA_DIR_OLD;
--- SCSI ----------------------------------------------------------------------------------
- I_SCSI: WF5380_TOP_SOC
- port map(
- CLK => FDC_CLK,
- RESETn => nResetatio,
- ADR => CA2 & CA1 & CA0,
- DATA_IN => CD_IN_FDC,
- DATA_OUT => SCSI_DOUT,
- --DATA_EN : out bit;
- -- Bus and DMA controls:
- CSn => SCSI_CSn,
- RDn => (not nFDC_WR) or (not SCSI_CS),
- WRn => nFDC_WR or (not SCSI_CS),
- EOPn => '1',
- DACKn => nSCSI_DACK,
- DRQ => SCSI_DRQ,
- INT => SCSI_INT,
--- READY =>
- -- SCSI bus:
- DB_INn => SCSI_D,
- DB_OUTn => DB_OUTn,
- DB_EN => DB_EN,
- DBP_INn => SCSI_PAR,
- DBP_OUTn => DBP_OUTn,
- DBP_EN => DBP_EN, -- wenn 1 dann output
- RST_INn => nSCSI_RST,
- RST_OUTn => RST_OUTn,
- RST_EN => RST_EN,
- BSY_INn => nSCSI_BUSY,
- BSY_OUTn => BSY_OUTn,
- BSY_EN => BSY_EN,
- SEL_INn => nSCSI_SEL,
- SEL_OUTn => SEL_OUTn,
- SEL_EN => SEL_EN,
- ACK_INn => '1',
- ACK_OUTn => nSCSI_ACK,
--- ACK_EN => ACK_EN,
- ATN_INn => '1',
- ATN_OUTn => nSCSI_ATN,
--- ATN_EN => ATN_EN,
- REQ_INn => nSCSI_DRQ,
--- REQ_OUTn => REQ_OUTn,
--- REQ_EN => REQ_EN,
- IOn_IN => nSCSI_I_O,
--- IOn_OUT => IOn_OUT,
--- IO_EN => IO_EN,
- CDn_IN => nSCSI_C_D,
--- CDn_OUT => CDn_OUT,
--- CD_EN => CD_EN,
- MSG_INn => nSCSI_MSG
--- MSG_OUTn => MSG_OUTn,
--- MSG_EN => MSG_EN
- );
--- SCSI ACSI ---------------------------------------------------------------
-SCSI_D <= "ZZZZZZZZ";--DB_OUTn when DB_EN = '1' else "ZZZZZZZZ";
-SCSI_DIR <= '1';-- when DB_EN = '1' else '1';
-SCSI_PAR <= DBP_OUTn when DBP_EN = '1' else 'Z';
-nSCSI_RST <= 'Z';--RST_OUTn when RST_EN = '1' else 'Z';
-nSCSI_BUSY <= 'Z';--BSY_OUTn when BSY_EN = '1' else 'Z';
-nSCSI_SEL <= 'Z';--SEL_OUTn when SEL_EN = '1' else 'Z';
-ACSI_DIR <= '0';
-ACSI_D <= "ZZZZZZZZ";
-nACSI_CS <= '1';
-ACSI_A1 <= CA1;
-nACSI_RESET <= nRSTO;
-nACSI_ACK <= '1';
-nResetatio <= '0' when nRSTO = '0' or ACP_CONF(24) = '1' else '1';
-----------------------------------------------------------------------------
--- ROM-PORT TA KOMMT FROM DEFAULT TA = 16 BUSCYCLEN = 500ns
-----------------------------------------------------------------------------
-ROM_CS <= '1' when nFB_CS1 = '0' and nFB_WR = '1' and FB_ADR(19 downto 17) = x"5" else '0'; -- FFF A'0000/2'0000
-nROM4 <= '0' when ROM_CS = '1' and FB_ADR(16) = '0' else '1';
-nROM3 <= '0' when ROM_CS = '1' and FB_ADR(16) = '1' else '1';
-----------------------------------------------------------------------------
--- ACIA KEYBOARD
-----------------------------------------------------------------------------
- I_ACIA_KEYBOARD: WF6850IP_TOP_SOC
- port map(
- CLK => MAIN_CLK,
- RESETn => nResetatio,
-
- CS2n => FB_ADR(2),
- CS1 => '1',
- CS0 => ACIA_CS_I,
- E => ACIA_CS_I,
- RWn => nFB_WR,
- RS => FB_ADR(1),
-
- DATA_IN => FB_ADI(15 downto 8),
- DATA_OUT => DATA_OUT_ACIA_I,
--- DATA_EN => DATA_EN_ACIA_I,
-
- TXCLK => CLK500k,
- RXCLK => CLK500k,
- RXDATA => KEYB_RxD,
-
- CTSn => '0',
- DCDn => '0',
-
- IRQn => IRQ_KEYBDn,
- TXDATA => AMKB_TX_sync
- --RTSn => -- Not used.
- );
-ACIA_CS_I <= '1' when nFB_CS1 = '0'and FB_ADR(19 downto 3) = x"1FF80" else '0'; -- FFC00-FFC07 FFC00/8
-KEYB_RxD <= '0' when AMKB_REG(3) = '0' or PIC_AMKB_RX = '0' else '1'; -- TASTATUR DATEN VOM PIC(PS2) OR NORMAL //
-FB_AD(31 downto 24) <= DATA_OUT_ACIA_I when ACIA_CS_I = '1' and FB_ADR(2) = '0' and nFB_OE = '0' else
- DATA_OUT_ACIA_II when ACIA_CS_I = '1' and FB_ADR(2) = '1' and nFB_OE = '0' else "ZZZZZZZZ";
--- AMKB_TX: SPIKES AUSFILTERN und sychronisieren ------------------------------------------
- process(CLK2M, AMKB_RX, AMKB_REG)
- begin
- if rising_edge(CLK500k) then
- AMKB_TX <= AMKB_TX_sync;
- IF AMKB_RX = '0' THEN
- IF AMKB_REG < 8 THEN
- AMKB_REG <= "0000";
- ELSE
- AMKB_REG <= AMKB_REG - 1;
- END IF;
- ELSE
- IF AMKB_REG > 7 THEN
- AMKB_REG <= "1111";
- ELSE
- AMKB_REG <= AMKB_REG + 1;
- END IF;
- END IF;
- ELSE
- AMKB_TX <= AMKB_TX;
- AMKB_REG <= AMKB_REG;
- end if;
- END PROCESS;
--- acia interrupt ------------------------------------------
-acia_irq <= '0' when IRQ_KEYBDn = '0' or IRQ_MIDIn = '0' else '1';
-----------------------------------------------------------------------------
--- ACIA MIDI
-----------------------------------------------------------------------------
- I_ACIA_MIDI: WF6850IP_TOP_SOC
- port map(
- CLK => MAIN_CLK,
- RESETn => nResetatio,
-
- CS2n => '0',
- CS1 => FB_ADR(2),
- CS0 => ACIA_CS_I,
- E => ACIA_CS_I,
- RWn => nFB_WR,
- RS => FB_ADR(1),
-
- DATA_IN => FB_ADI(15 downto 8),
- DATA_OUT => DATA_OUT_ACIA_II,
--- DATA_EN => DATA_EN_ACIA_II,
-
- TXCLK => CLK500k,
- RXCLK => CLK500k,
- RXDATA => MIDI_IN,
- CTSn => '0',
- DCDn => '0',
-
- IRQn => IRQ_MIDIn,
- TXDATA => MIDI_OUT
- --RTSn => -- Not used.
- );
-MIDI_TLR <= MIDI_IN;
-MIDI_OLR <= MIDI_OUT;
-----------------------------------------------------------------------------
--- MFP
-----------------------------------------------------------------------------
- I_MFP: WF68901IP_TOP_SOC
- port map(
- -- System control:
- CLK => not MAIN_CLK,
- RESETn => nResetatio,
- -- Asynchronous bus control:
- DSn => not LDS,
- CSn => not MFP_CS,
- RWn => nFB_WR,
- DTACKn => DTACK_OUT_MFPn,
- -- Data and Adresses:
- RS => FB_ADR(5 downto 1),
- DATA_IN => FB_AD(23 downto 16),
- DATA_OUT => DATA_OUT_MFP,
--- DATA_EN => DATA_EN_MFP,
- GPIP_IN(7) => not DMA_DRQ_Q,
- GPIP_IN(6) => not RI,
- GPIP_IN(5) => DINTn,
- GPIP_IN(4) => acia_irq,
- GPIP_IN(3) => DSP_INT,
- GPIP_IN(2) => not CTS,
- GPIP_IN(1) => not DCD,
- GPIP_IN(0) => LP_BUSY,
- -- GPIP_OUT =>, -- Not used; all GPIPs are direction input.
- -- GPIP_EN =>, -- Not used; all GPIPs are direction input.
- -- Interrupt control:
- IACKn => not MFP_INTACK,
- IEIn => '0',
- -- IEOn =>, -- Not used.
- IRQn => nMFP_INT,
- -- Timers and timer control:
- XTAL1 => CLK2M4576,
- TAI => '0',
- TBI => nBLANK,
- -- TAO =>,
- -- TBO =>,
- -- TCO =>,
- TDO => TDO,
- -- Serial I/O control:
- RC => TDO,
- TC => TDO,
- SI => RxD,
- SO => TxD
- -- SO_EN => MFP_SO_EN
- -- DMA control:
- -- RRn =>,
- -- TRn =>
- );
-
-MFP_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 6) = x"3FE8" else '0'; -- FFA00/40
-MFP_INTACK <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20000" else '0'; --F002'0000
-LDS <= '1' when MFP_CS = '1' or MFP_INTACK = '1' else '0';
-FB_AD(23 downto 16) <= DATA_OUT_MFP when MFP_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ";
-FB_AD(31 downto 10) <= "0000000000000000000000" when MFP_INTACK = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZ";
-FB_AD(9 downto 2) <= DATA_OUT_MFP when MFP_INTACK = '1' and nFB_OE = '0' else "ZZZZZZZZ";
-FB_AD(1 downto 0) <= "00" when MFP_INTACK = '1' and nFB_OE = '0' else "ZZ";
-DINTn <= '0' when IDE_INT = '1' AND ACP_CONF(28) = '1' else
- '0' when FDINT = '1' else
- '0' when SCSI_INT = '1' AND ACP_CONF(28) = '1' else '1';
- ----------------------------------------------------------------------------
--- Sound
-----------------------------------------------------------------------------
- I_SOUND: WF2149IP_TOP_SOC
- port map(
- SYS_CLK => not MAIN_CLK,
- RESETn => nResetatio,
-
- WAV_CLK => CLK2M,
- SELn => '1',
-
- BDIR => SNDIR_I,
- BC2 => '1',
- BC1 => SNDCS_I,
-
- A9n => '0',
- A8 => '1',
- DA_IN => FB_ADI(15 downto 8),
- DA_OUT => DA_OUT_X,
-
- IO_A_IN => SND_A,
- IO_A_OUT => SND_A_X,
- -- IO_A_EN =>, -- Not required.
- IO_B_IN => LP_D,
- IO_B_OUT => LP_D_X,
- -- IO_B_EN => IO_B_EN,
-
- OUT_A => YM_QA,
- OUT_B => YM_QB,
- OUT_C => YM_QC
- );
-
-SNDCS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 2) = x"3E200" else '0'; -- 8800-8803 F8800/4
-SNDCS_I <= '1' when SNDCS = '1' and FB_ADR (1 downto 1) = "0" else '0';
-SNDIR_I <= '1' when SNDCS = '1' and nFB_WR = '0' else '0';
-FB_AD(31 downto 24) <= DA_OUT_X when SNDCS_I = '1' and nFB_OE = '0' else "ZZZZZZZZ";
-nnIDE_RES <= SND_A_X(7);
-LP_DIR_X <= SND_A_X(6);
-LP_STR <= SND_A_X(5);
-DTR <= SND_A_X(4);
-RTS <= SND_A_X(3);
--- FDD_D1SEL <= SND_A_X(2)
-DSA_D <= SND_A_X(1);
-nSDSEL <= SND_A_X(0);
-LP_D <= LP_D_X when LP_DIR_X = '0' else "ZZZZZZZZ";
-LP_DIR <= LP_DIR_X;
-
-
-----------------------------------------------------------------------------
--- DMA Sound register
-----------------------------------------------------------------------------
-
-dma_snd_cs <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 6) = x"3E24" else '0'; -- F8900-F893F
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndmactl <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"0" and nFB_WR = '0' and FB_B1 ='1' then
- sndmactl <= FB_AD(23 downto 16);
- else
- sndmactl <= sndmactl;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndmactl when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"0" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndbashi <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"1" and nFB_WR = '0' and FB_B1 ='1' then
- sndbashi <= FB_AD(23 downto 16);
- else
- sndbashi <= sndbashi;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndbashi when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"1" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndbasmi <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"2" and nFB_WR = '0' and FB_B1 ='1' then
- sndbasmi <= FB_AD(23downto 16);
- else
- sndbasmi <= sndbasmi;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndbasmi when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"2" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndbaslo <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"3" and nFB_WR = '0' and FB_B1 ='1' then
- sndbaslo <= FB_AD(23 downto 16);
- else
- sndbaslo <= sndbaslo;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndbaslo when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"3" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndadrhi <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"4" and nFB_WR = '0' and FB_B1 ='1' then
- sndadrhi <= FB_AD(23 downto 16);
- else
- sndadrhi <= sndadrhi;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndadrhi when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"4" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndadrmi <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"5" and nFB_WR = '0' and FB_B1 ='1' then
- sndadrmi <= FB_AD(23 downto 16);
- else
- sndadrmi <= sndadrmi;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndadrmi when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"5" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndadrlo <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"6" and nFB_WR = '0' and FB_B1 ='1' then
- sndadrlo <= FB_AD(23 downto 16);
- else
- sndadrlo <= sndadrlo;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndadrlo when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"6" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndendhi <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"7" and nFB_WR = '0' and FB_B1 ='1' then
- sndendhi <= FB_AD(23 downto 16);
- else
- sndendhi <= sndendhi;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndendhi when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"7" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndendmi <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"8" and nFB_WR = '0' and FB_B1 ='1' then
- sndendmi <= FB_AD(23 downto 16);
- else
- sndendmi <= sndendmi;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndendmi when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"8" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndendlo <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"9" and nFB_WR = '0' and FB_B1 ='1' then
- sndendlo <= FB_AD(23 downto 16);
- else
- sndendlo <= sndendlo;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndendlo when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"9" and nFB_OE = '0' else "ZZZZZZZZ";
-
- process(nRSTO,MAIN_CLK,FB_ADR(5 downto 1), dma_snd_cs)
- begin
- if nRSTO = '0' THEN
- sndmode <= x"00";
- elsif rising_edge(MAIN_CLK) and dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"10" and nFB_WR = '0' and FB_B1 ='1' then
- sndmode <= FB_AD(23 downto 16);
- else
- sndmode <= sndmode;
- end if;
- END PROCESS;
-FB_AD(23 downto 16) <= sndmode when dma_snd_cs = '1' and FB_ADR(5 downto 1) = x"10" and nFB_OE = '0' else "ZZZZZZZZ";
-
-----------------------------------------------------------------------------
--- Paddle
-----------------------------------------------------------------------------
-
-paddle_cs <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 6) = x"3E48" else '0'; -- F9200-F923F
-
-FB_AD(31 downto 16) <= x"bfff" when paddle_cs = '1' and FB_ADR(5 downto 1) = x"0" and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-FB_AD(31 downto 16) <= x"ffff" when paddle_cs = '1' and FB_ADR(5 downto 1) = x"1" and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-FB_AD(31 downto 16) <= x"ffff" when paddle_cs = '1' and FB_ADR(5 downto 1) = x"8" and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-FB_AD(31 downto 16) <= x"ffff" when paddle_cs = '1' and FB_ADR(5 downto 1) = x"9" and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-FB_AD(31 downto 16) <= x"ffff" when paddle_cs = '1' and FB_ADR(5 downto 1) = x"A" and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-FB_AD(31 downto 16) <= x"ffff" when paddle_cs = '1' and FB_ADR(5 downto 1) = x"B" and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-FB_AD(31 downto 16) <= x"0000" when paddle_cs = '1' and FB_ADR(5 downto 1) = x"10" and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-FB_AD(31 downto 16) <= x"0000" when paddle_cs = '1' and FB_ADR(5 downto 1) = x"11" and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ";
-
-END FalconIO_SDCard_IDE_CF_architecture;
diff --git a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd.bak b/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd.bak
deleted file mode 100644
index 4f42cf2..0000000
--- a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd.bak
+++ /dev/null
@@ -1,406 +0,0 @@
-----------------------------------------------------------------------
----- ----
----- Atari Coldfire IP Core ----
----- ----
----- This file is part of the Atari Coldfire project. ----
----- http://www.experiment-s.de ----
----- ----
----- Description: ----
----- ----
----- ----
----- ----
----- ----
----- ----
----- Author(s): ----
----- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ----
----- ----
-----------------------------------------------------------------------
----- ----
----- Copyright (C) 2009 Wolfgang Foerster ----
----- ----
----- This source file may be used and distributed without ----
----- restriction provided that this copyright statement is not ----
----- removed from the file and that any derivative work contains ----
----- the original copyright notice and the associated disclaimer. ----
----- ----
----- This source file is free software; you can redistribute it ----
----- and/or modify it under the terms of the GNU Lesser General ----
----- Public License as published by the Free Software Foundation; ----
----- either version 2.1 of the License, or (at your option) any ----
----- later version. ----
----- ----
----- This source is distributed in the hope that it will be ----
----- useful, but WITHOUT ANY WARRANTY; without even the implied ----
----- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ----
----- PURPOSE. See the GNU Lesser General Public License for more ----
----- details. ----
----- ----
----- You should have received a copy of the GNU Lesser General ----
----- Public License along with this source; if not, download it ----
----- from http://www.gnu.org/licenses/lgpl.html ----
----- ----
-----------------------------------------------------------------------
---
--- Revision History
--- 1.0 Initial Release, 20090925.
---
-
-library ieee;
-use ieee.std_logic_1164.all;
-
-package FalconIO_SDCard_IDE_CF_PKG is
- component WF25915IP_TOP_V1_SOC -- GLUE.
- port (
- -- Clock system:
- GL_CLK : in std_logic; -- Originally 8MHz.
- GL_CLK_016 : in std_logic; -- One sixteenth of GL_CLK.
-
- -- Core address select:
- GL_ROMSEL_FC_E0n : in std_logic;
- EN_RAM_14MB : in std_logic;
- -- Adress decoder outputs:
- GL_ROM_6n : out std_logic; -- STE.
- GL_ROM_5n : out std_logic; -- STE.
- GL_ROM_4n : out std_logic; -- ST.
- GL_ROM_3n : out std_logic; -- ST.
- GL_ROM_2n : out std_logic;
- GL_ROM_1n : out std_logic;
- GL_ROM_0n : out std_logic;
-
- GL_ACIACS : out std_logic;
- GL_MFPCSn : out std_logic;
- GL_SNDCSn : out std_logic;
- GL_FCSn : out std_logic;
-
- GL_STE_SNDCS : out std_logic; -- STE: Sound chip select.
- GL_STE_SNDIR : out std_logic; -- STE: Data flow direction control.
-
- GL_STE_RTCCSn : out std_logic; --STE only.
- GL_STE_RTC_WRn : out std_logic; --STE only.
- GL_STE_RTC_RDn : out std_logic; --STE only.
-
- -- 6800 peripheral control,
- GL_VPAn : out std_logic;
- GL_VMAn : in std_logic;
-
- GL_DMA_SYNC : in std_logic;
- GL_DEVn : out std_logic;
- GL_RAMn : out std_logic;
- GL_DMAn : out std_logic;
-
- -- Interrupt system:
- -- Comment out GL_AVECn for CPUs which do not provide the VMAn signal.
- GL_AVECn : out std_logic;
- GL_STE_FDINT : in std_logic; -- Floppy disk interrupt; STE only.
- GL_STE_HDINTn : in std_logic; -- Hard disk interrupt; STE only.
- GL_MFPINTn : in std_logic; -- ST.
- GL_STE_EINT3n : in std_logic; --STE only.
- GL_STE_EINT5n : in std_logic; --STE only.
- GL_STE_EINT7n : in std_logic; --STE only.
- GL_STE_DINTn : out std_logic; -- Disk interrupt (floppy or hard disk); STE only.
- GL_IACKn : out std_logic; -- ST.
- GL_STE_IPL2n : out std_logic; --STE only.
- GL_STE_IPL1n : out std_logic; --STE only.
- GL_STE_IPL0n : out std_logic; --STE only.
-
- -- Video timing:
- GL_BLANKn : out std_logic;
- GL_DE : out std_logic;
- GL_MULTISYNC : in std_logic_vector(3 downto 2);
- GL_VIDEO_HIMODE : out std_logic;
- GL_HSYNC_INn : in std_logic;
- GL_HSYNC_OUTn : out std_logic;
- GL_VSYNC_INn : in std_logic;
- GL_VSYNC_OUTn : out std_logic;
- GL_SYNC_OUT_EN : out std_logic;
-
- -- Bus arstd_logicration control:
- GL_RDY_INn : in std_logic;
- GL_RDY_OUTn : out std_logic;
- GL_BRn : out std_logic;
- GL_BGIn : in std_logic;
- GL_BGOn : out std_logic;
- GL_BGACK_INn : in std_logic;
- GL_BGACK_OUTn : out std_logic;
-
- -- Adress and data bus:
- GL_ADDRESS : in std_logic_vector(23 downto 1);
- -- ST: put the data bus to 1 downto 0.
- -- STE: put the data out bus to 15 downto 0.
- GL_DATA_IN : in std_logic_vector(7 downto 0);
- GL_DATA_OUT : out std_logic_vector(15 downto 0);
- GL_DATA_EN : out std_logic;
-
- -- Asynchronous bus control:
- GL_RWn_IN : in std_logic;
- GL_RWn_OUT : out std_logic;
- GL_AS_INn : in std_logic;
- GL_AS_OUTn : out std_logic;
- GL_UDS_INn : in std_logic;
- GL_UDS_OUTn : out std_logic;
- GL_LDS_INn : in std_logic;
- GL_LDS_OUTn : out std_logic;
- GL_DTACK_INn : in std_logic;
- GL_DTACK_OUTn : out std_logic;
- GL_CTRL_EN : out std_logic;
-
- -- System control:
- GL_RESETn : in std_logic;
- GL_BERRn : out std_logic;
-
- -- Processor function codes:
- GL_FC : in std_logic_vector(2 downto 0);
-
- -- STE enhancements:
- GL_STE_FDDS : out std_logic; -- Floppy type select (HD or DD).
- GL_STE_FCCLK : out std_logic; -- Floppy controller clock select.
- GL_STE_JOY_RHn : out std_logic; -- Read only FF9202 high byte.
- GL_STE_JOY_RLn : out std_logic; -- Read only FF9202 low byte.
- GL_STE_JOY_WL : out std_logic; -- Write only FF9202 low byte.
- GL_STE_JOY_WEn : out std_logic; -- Write only FF9202 output enable.
- GL_STE_BUTTONn : out std_logic; -- Read only FF9000 low byte.
- GL_STE_PAD0Xn : in std_logic; -- Counter input for the Paddle 0X.
- GL_STE_PAD0Yn : in std_logic; -- Counter input for the Paddle 0Y.
- GL_STE_PAD1Xn : in std_logic; -- Counter input for the Paddle 1X.
- GL_STE_PAD1Yn : in std_logic; -- Counter input for the Paddle 1Y.
- GL_STE_PADRSTn : out std_logic; -- Paddle monoflops reset.
- GL_STE_PENn : in std_logic; -- Input of the light pen.
- GL_STE_SCCn : out std_logic; -- Select signal for the STE or TT SCC chip.
- GL_STE_CPROGn : out std_logic -- Select signal for the STE's cache processor.
- );
- end component WF25915IP_TOP_V1_SOC;
-
- component WF5380_TOP_SOC
- port (
- CLK : in std_logic;
- RESETn : in std_logic;
- ADR : in std_logic_vector(2 downto 0);
- DATA_IN : in std_logic_vector(7 downto 0);
- DATA_OUT : out std_logic_vector(7 downto 0);
- DATA_EN : out std_logic;
- CSn : in std_logic;
- RDn : in std_logic;
- WRn : in std_logic;
- EOPn : in std_logic;
- DACKn : in std_logic;
- DRQ : out std_logic;
- INT : out std_logic;
- READY : out std_logic;
- DB_INn : in std_logic_vector(7 downto 0);
- DB_OUTn : out std_logic_vector(7 downto 0);
- DB_EN : out std_logic;
- DBP_INn : in std_logic;
- DBP_OUTn : out std_logic;
- DBP_EN : out std_logic;
- RST_INn : in std_logic;
- RST_OUTn : out std_logic;
- RST_EN : out std_logic;
- BSY_INn : in std_logic;
- BSY_OUTn : out std_logic;
- BSY_EN : out std_logic;
- SEL_INn : in std_logic;
- SEL_OUTn : out std_logic;
- SEL_EN : out std_logic;
- ACK_INn : in std_logic;
- ACK_OUTn : out std_logic;
- ACK_EN : out std_logic;
- ATN_INn : in std_logic;
- ATN_OUTn : out std_logic;
- ATN_EN : out std_logic;
- REQ_INn : in std_logic;
- REQ_OUTn : out std_logic;
- REQ_EN : out std_logic;
- IOn_IN : in std_logic;
- IOn_OUT : out std_logic;
- IO_EN : out std_logic;
- CDn_IN : in std_logic;
- CDn_OUT : out std_logic;
- CD_EN : out std_logic;
- MSG_INn : in std_logic;
- MSG_OUTn : out std_logic;
- MSG_EN : out std_logic
- );
- end component WF5380_TOP_SOC;
-
- component WF1772IP_TOP_SOC -- FDC.
- port (
- CLK : in std_logic; -- 16MHz clock!
- RESETn : in std_logic;
- CSn : in std_logic;
- RWn : in std_logic;
- A1, A0 : in std_logic;
- DATA_IN : in std_logic_vector(7 downto 0);
- DATA_OUT : out std_logic_vector(7 downto 0);
- DATA_EN : out std_logic;
- RDn : in std_logic;
- TR00n : in std_logic;
- IPn : in std_logic;
- WPRTn : in std_logic;
- DDEn : in std_logic;
- HDTYPE : in std_logic; -- '0' = DD disks, '1' = HD disks.
- MO : out std_logic;
- WG : out std_logic;
- WD : out std_logic;
- STEP : out std_logic;
- DIRC : out std_logic;
- DRQ : out std_logic;
- INTRQ : out std_logic
- );
- end component WF1772IP_TOP_SOC;
-
- component WF68901IP_TOP_SOC -- MFP.
- port ( -- System control:
- CLK : in std_logic;
- RESETn : in std_logic;
-
- -- Asynchronous bus control:
- DSn : in std_logic;
- CSn : in std_logic;
- RWn : in std_logic;
- DTACKn : out std_logic;
-
- -- Data and Adresses:
- RS : in std_logic_vector(5 downto 1);
- DATA_IN : in std_logic_vector(7 downto 0);
- DATA_OUT : out std_logic_vector(7 downto 0);
- DATA_EN : out std_logic;
- GPIP_IN : in std_logic_vector(7 downto 0);
- GPIP_OUT : out std_logic_vector(7 downto 0);
- GPIP_EN : out std_logic_vector(7 downto 0);
-
- -- Interrupt control:
- IACKn : in std_logic;
- IEIn : in std_logic;
- IEOn : out std_logic;
- IRQn : out std_logic;
-
- -- Timers and timer control:
- XTAL1 : in std_logic; -- Use an oszillator instead of a quartz.
- TAI : in std_logic;
- TBI : in std_logic;
- TAO : out std_logic;
- TBO : out std_logic;
- TCO : out std_logic;
- TDO : out std_logic;
-
- -- Serial I/O control:
- RC : in std_logic;
- TC : in std_logic;
- SI : in std_logic;
- SO : out std_logic;
- SO_EN : out std_logic;
-
- -- DMA control:
- RRn : out std_logic;
- TRn : out std_logic
- );
- end component WF68901IP_TOP_SOC;
-
- component WF2149IP_TOP_SOC -- Sound.
- port(
-
- SYS_CLK : in std_logic; -- Read the inforation in the header!
- RESETn : in std_logic;
-
- WAV_CLK : in std_logic; -- Read the inforation in the header!
- SELn : in std_logic;
-
- BDIR : in std_logic;
- BC2, BC1 : in std_logic;
-
- A9n, A8 : in std_logic;
- DA_IN : in std_logic_vector(7 downto 0);
- DA_OUT : out std_logic_vector(7 downto 0);
- DA_EN : out std_logic;
-
- IO_A_IN : in std_logic_vector(7 downto 0);
- IO_A_OUT : out std_logic_vector(7 downto 0);
- IO_A_EN : out std_logic;
- IO_B_IN : in std_logic_vector(7 downto 0);
- IO_B_OUT : out std_logic_vector(7 downto 0);
- IO_B_EN : out std_logic;
-
- OUT_A : out std_logic; -- Analog (PWM) outputs.
- OUT_B : out std_logic;
- OUT_C : out std_logic
- );
- end component WF2149IP_TOP_SOC;
-
- component WF6850IP_TOP_SOC -- ACIA.
- port (
- CLK : in std_logic;
- RESETn : in std_logic;
-
- CS2n, CS1, CS0 : in std_logic;
- E : in std_logic;
- RWn : in std_logic;
- RS : in std_logic;
-
- DATA_IN : in std_logic_vector(7 downto 0);
- DATA_OUT : out std_logic_vector(7 downto 0);
- DATA_EN : out std_logic;
-
- TXCLK : in std_logic;
- RXCLK : in std_logic;
- RXDATA : in std_logic;
- CTSn : in std_logic;
- DCDn : in std_logic;
-
- IRQn : out std_logic;
- TXDATA : out std_logic;
- RTSn : out std_logic
- );
- end component WF6850IP_TOP_SOC;
-
- component WF_SD_CARD
- port (
- RESETn : in std_logic;
- CLK : in std_logic;
- ACSI_A1 : in std_logic;
- ACSI_CSn : in std_logic;
- ACSI_ACKn : in std_logic;
- ACSI_INTn : out std_logic;
- ACSI_DRQn : out std_logic;
- ACSI_D_IN : in std_logic_vector(7 downto 0);
- ACSI_D_OUT : out std_logic_vector(7 downto 0);
- ACSI_D_EN : out std_logic;
- MC_DO : in std_logic;
- MC_PIO_DMAn : in std_logic;
- MC_RWn : in std_logic;
- MC_CLR_CMD : in std_logic;
- MC_DONE : out std_logic;
- MC_GOT_CMD : out std_logic;
- MC_D_IN : in std_logic_vector(7 downto 0);
- MC_D_OUT : out std_logic_vector(7 downto 0);
- MC_D_EN : out std_logic
- );
- end component WF_SD_CARD;
-
- component dcfifo0
- PORT (
- aclr : IN STD_LOGIC ;
- data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
- rdclk : IN STD_LOGIC ;
- rdreq : IN STD_LOGIC ;
- wrclk : IN STD_LOGIC ;
- wrreq : IN STD_LOGIC ;
- q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
- wrusedw : OUT STD_LOGIC_VECTOR (5 DOWNTO 0)
- );
- end component dcfifo0;
-
- component dcfifo1
- PORT (
- aclr : IN STD_LOGIC ;
- data : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
- rdclk : IN STD_LOGIC ;
- rdreq : IN STD_LOGIC ;
- wrclk : IN STD_LOGIC ;
- wrreq : IN STD_LOGIC ;
- q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
- rdusedw : OUT STD_LOGIC_VECTOR (5 DOWNTO 0)
- );
- end component;
-
-
-end FalconIO_SDCard_IDE_CF_PKG;
diff --git a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd b/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd
index dac4e9d..77ea5ef 100644
--- a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd
+++ b/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd
@@ -190,8 +190,8 @@ begin
end if;
end process DIG_PORTS;
-- Set port direction to input or to output:
- IO_A_EN <= '1' when CTRL_REG(6) = '1' else '0';
- IO_B_EN <= '1' when CTRL_REG(7) = '1' else '0';
+ IO_A_EN <= '1' when CTRL_REG(6) = '1' else '0';
+ IO_B_EN <= '1' when CTRL_REG(7) = '1' else '0';
IO_A_OUT <= PORT_A;
IO_B_OUT <= PORT_B;
diff --git a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd.bak b/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd.bak
deleted file mode 100644
index d81f23c..0000000
--- a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd.bak
+++ /dev/null
@@ -1,229 +0,0 @@
-----------------------------------------------------------------------
----- ----
----- YM2149 compatible sound generator. ----
----- ----
----- This file is part of the SUSKA ATARI clone project. ----
----- http://www.experiment-s.de ----
----- ----
----- Description: ----
----- Model of the ST or STE's YM2149 sound generator. ----
----- This IP core of the sound generator differs slightly from ----
----- the original. Firstly it is a synchronous design without any ----
----- latches (like assumed in the original chip). This required ----
----- the introduction of a system adequate clock. In detail this ----
----- SYS_CLK should on the one hand be fast enough to meet the ----
----- timing requirements of the system's bus cycle and should one ----
----- the other hand drive the PWM modules correctly. To meet both ----
----- a SYS_CLK of 16MHz or above is recommended. ----
----- Secondly, the original chip has an implemented DA converter. ----
----- This feature is not possible in today's FPGAs. Therefore the ----
----- converter is replaced by pulse width modulators. This solu- ----
----- tion is very simple in comparison to other approaches like ----
----- external DA converters with wave tables etc. The soltution ----
----- with the pulse width modulators is probably not as accurate ----
----- DAs with wavetables. For a detailed descrition of the hard- ----
----- ware PWM filter look at the end of the wave file, where the ----
----- pulse width modulators can be found. ----
----- For a proper operation it is required, that the wave clock ----
----- is lower than the system clock. A good choice is for example ----
----- 2MHz for the wave clock and 16MHz for the system clock. ----
----- ----
----- Main module file. ----
----- Top level file for use in systems on programmable chips. ----
----- ----
----- ----
----- To Do: ----
----- - ----
----- ----
----- Author(s): ----
----- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ----
----- ----
-----------------------------------------------------------------------
----- ----
----- Copyright (C) 2006 - 2008 Wolfgang Foerster ----
----- ----
----- This source file may be used and distributed without ----
----- restriction provided that this copyright statement is not ----
----- removed from the file and that any derivative work contains ----
----- the original copyright notice and the associated disclaimer. ----
----- ----
----- This source file is free software; you can redistribute it ----
----- and/or modify it under the terms of the GNU Lesser General ----
----- Public License as published by the Free Software Foundation; ----
----- either version 2.1 of the License, or (at your option) any ----
----- later version. ----
----- ----
----- This source is distributed in the hope that it will be ----
----- useful, but WITHOUT ANY WARRANTY; without even the implied ----
----- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ----
----- PURPOSE. See the GNU Lesser General Public License for more ----
----- details. ----
----- ----
----- You should have received a copy of the GNU Lesser General ----
----- Public License along with this source; if not, download it ----
----- from http://www.gnu.org/licenses/lgpl.html ----
----- ----
-----------------------------------------------------------------------
---
--- Revision History
---
--- Revision 2K6A 2006/06/03 WF
--- Initial Release.
--- Revision 2K6B 2006/11/07 WF
--- Modified Source to compile with the Xilinx ISE.
--- Top level file provided for SOC (systems on programmable chips).
--- Revision 2K8A 2008/07/14 WF
--- Minor changes.
---
-
-library ieee;
-use ieee.std_logic_1164.all;
-use work.wf2149ip_pkg.all;
-
-entity WF2149IP_TOP_SOC is
- port(
-
- SYS_CLK : in bit; -- Read the inforation in the header!
- RESETn : in bit;
-
- WAV_CLK : in bit; -- Read the inforation in the header!
- SELn : in bit;
-
- BDIR : in bit;
- BC2, BC1 : in bit;
-
- A9n, A8 : in bit;
- DA_IN : in std_logic_vector(7 downto 0);
- DA_OUT : out std_logic_vector(7 downto 0);
- DA_EN : out bit;
-
- IO_A_IN : in bit_vector(7 downto 0);
- IO_A_OUT : out bit_vector(7 downto 0);
- IO_A_EN : out bit;
- IO_B_IN : in bit_vector(7 downto 0);
- IO_B_OUT : out bit_vector(7 downto 0);
- IO_B_EN : out bit;
-
- OUT_A : out bit; -- Analog (PWM) outputs.
- OUT_B : out bit;
- OUT_C : out bit
- );
-end WF2149IP_TOP_SOC;
-
-architecture STRUCTURE of WF2149IP_TOP_SOC is
-signal BUSCYCLE : BUSCYCLES;
-signal DATA_OUT_I : std_logic_vector(7 downto 0);
-signal DATA_EN_I : bit;
-signal WAV_STRB : bit;
-signal ADR_I : bit_vector(3 downto 0);
-signal CTRL_REG : bit_vector(7 downto 0);
-signal PORT_A : bit_vector(7 downto 0);
-signal PORT_B : bit_vector(7 downto 0);
-begin
- P_WAVSTRB: process(RESETn, SYS_CLK)
- variable LOCK : boolean;
- variable TMP : bit;
- begin
- if RESETn = '0' then
- LOCK := false;
- TMP := '0';
- elsif SYS_CLK = '1' and SYS_CLK' event then
- if WAV_CLK = '1' and LOCK = false then
- LOCK := true;
- TMP := not TMP; -- Divider by 2.
- case SELn is
- when '1' => WAV_STRB <= '1';
- when others => WAV_STRB <= TMP;
- end case;
- elsif WAV_CLK = '0' then
- LOCK := false;
- WAV_STRB <= '0';
- else
- WAV_STRB <= '0';
- end if;
- end if;
- end process P_WAVSTRB;
-
- with BDIR & BC2 & BC1 select
- BUSCYCLE <= INACTIVE when "000" | "010" | "101",
- ADDRESS when "001" | "100" | "111",
- R_READ when "011",
- R_WRITE when "110";
-
- ADDRESSLATCH: process(RESETn, SYS_CLK)
- -- This process is responsible to store the desired register
- -- address. The default (after reset) is channel A fine tone
- -- adjustment.
- begin
- if RESETn = '0' then
- ADR_I <= (others => '0');
- elsif SYS_CLK = '1' and SYS_CLK' event then
- if BUSCYCLE = ADDRESS and A9n = '0' and A8 = '1' and DA_IN(7 downto 4) = x"0" then
- ADR_I <= To_BitVector(DA_IN(3 downto 0));
- end if;
- end if;
- end process ADDRESSLATCH;
-
- P_CTRL_REG: process(RESETn, SYS_CLK)
- -- THIS is the Control register for the mixer and for the I/O ports.
- begin
- if RESETn = '0' then
- CTRL_REG <= x"00";
- elsif SYS_CLK = '1' and SYS_CLK' event then
- if BUSCYCLE = R_WRITE and ADR_I = x"7" then
- CTRL_REG <= To_BitVector(DA_IN);
- end if;
- end if;
- end process P_CTRL_REG;
-
- DIG_PORTS: process(RESETn, SYS_CLK)
- begin
- if RESETn = '0' then
- PORT_A <= x"00";
- PORT_B <= x"00";
- elsif SYS_CLK = '1' and SYS_CLK' event then
- if BUSCYCLE = R_WRITE and ADR_I = x"E" then
- PORT_A <= To_BitVector(DA_IN);
- elsif BUSCYCLE = R_WRITE and ADR_I = x"F" then
- PORT_B <= To_BitVector(DA_IN);
- end if;
- end if;
- end process DIG_PORTS;
- -- Set port direction to input or to output:
- IO_A_EN <= '1' when CTRL_REG(6) = '1' else '1'; --0
- IO_B_EN <= '1' when CTRL_REG(7) = '1' else '1'; --0
- IO_A_OUT <= PORT_A;
- IO_B_OUT <= PORT_B;
-
- I_PSG_WAVE: WF2149IP_WAVE
- port map(
- RESETn => RESETn,
- SYS_CLK => SYS_CLK,
-
- WAV_STRB => WAV_STRB,
-
- ADR => ADR_I,
- DATA_IN => DA_IN,
- DATA_OUT => DATA_OUT_I,
- DATA_EN => DATA_EN_I,
-
- BUSCYCLE => BUSCYCLE,
- CTRL_REG => CTRL_REG(5 downto 0),
-
- OUT_A => OUT_A,
- OUT_B => OUT_B,
- OUT_C => OUT_C
- );
-
- -- Read the ports and registers:
- DA_EN <= '1' when DATA_EN_I = '1' else
- '1' when BUSCYCLE = R_READ and ADR_I = x"7" else
- '1' when BUSCYCLE = R_READ and ADR_I = x"E" else
- '1' when BUSCYCLE = R_READ and ADR_I = x"F" else '0';
-
- DA_OUT <= DATA_OUT_I when DATA_EN_I = '1' else -- WAV stuff.
- To_StdLogicVector(IO_A_IN) when BUSCYCLE = R_READ and ADR_I = x"E" else
- To_StdLogicVector(IO_B_IN) when BUSCYCLE = R_READ and ADR_I = x"F" else
- To_StdLogicVector(CTRL_REG) when BUSCYCLE = R_READ and ADR_I = x"7" else (others => '0');
-
-end STRUCTURE;
diff --git a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/dcfifo0.vhd.bak b/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/dcfifo0.vhd.bak
deleted file mode 100644
index c3ca670..0000000
--- a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/dcfifo0.vhd.bak
+++ /dev/null
@@ -1,202 +0,0 @@
--- megafunction wizard: %LPM_FIFO+%
--- GENERATION: STANDARD
--- VERSION: WM1.0
--- MODULE: dcfifo_mixed_widths
-
--- ============================================================
--- File Name: dcfifo0.vhd
--- Megafunction Name(s):
--- dcfifo_mixed_widths
---
--- Simulation Library Files(s):
--- altera_mf
--- ============================================================
--- ************************************************************
--- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
---
--- 9.1 Build 222 10/21/2009 SJ Web Edition
--- ************************************************************
-
-
---Copyright (C) 1991-2009 Altera Corporation
---Your use of Altera Corporation's design tools, logic functions
---and other software and tools, and its AMPP partner logic
---functions, and any output files from any of the foregoing
---(including device programming or simulation files), and any
---associated documentation or information are expressly subject
---to the terms and conditions of the Altera Program License
---Subscription Agreement, Altera MegaCore Function License
---Agreement, or other applicable license agreement, including,
---without limitation, that your use is for the sole purpose of
---programming logic devices manufactured by Altera and sold by
---Altera or its authorized distributors. Please refer to the
---applicable agreement for further details.
-
-
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-
-LIBRARY altera_mf;
-USE altera_mf.all;
-
-ENTITY dcfifo0 IS
- PORT
- (
- aclr : IN STD_LOGIC := '0';
- data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
- rdclk : IN STD_LOGIC ;
- rdreq : IN STD_LOGIC ;
- wrclk : IN STD_LOGIC ;
- wrreq : IN STD_LOGIC ;
- q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0);
- wrusedw : OUT STD_LOGIC_VECTOR (4 DOWNTO 0)
- );
-END dcfifo0;
-
-
-ARCHITECTURE SYN OF dcfifo0 IS
-
- SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0);
- SIGNAL sub_wire1 : STD_LOGIC_VECTOR (15 DOWNTO 0);
-
-
-
- COMPONENT dcfifo_mixed_widths
- GENERIC (
- intended_device_family : STRING;
- lpm_numwords : NATURAL;
- lpm_showahead : STRING;
- lpm_type : STRING;
- lpm_width : NATURAL;
- lpm_widthu : NATURAL;
- lpm_widthu_r : NATURAL;
- lpm_width_r : NATURAL;
- overflow_checking : STRING;
- rdsync_delaypipe : NATURAL;
- underflow_checking : STRING;
- use_eab : STRING;
- write_aclr_synch : STRING;
- wrsync_delaypipe : NATURAL
- );
- PORT (
- wrclk : IN STD_LOGIC ;
- rdreq : IN STD_LOGIC ;
- wrusedw : OUT STD_LOGIC_VECTOR (4 DOWNTO 0);
- aclr : IN STD_LOGIC ;
- rdclk : IN STD_LOGIC ;
- q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0);
- wrreq : IN STD_LOGIC ;
- data : IN STD_LOGIC_VECTOR (7 DOWNTO 0)
- );
- END COMPONENT;
-
-BEGIN
- wrusedw <= sub_wire0(4 DOWNTO 0);
- q <= sub_wire1(15 DOWNTO 0);
-
- dcfifo_mixed_widths_component : dcfifo_mixed_widths
- GENERIC MAP (
- intended_device_family => "Cyclone III",
- lpm_numwords => 32,
- lpm_showahead => "OFF",
- lpm_type => "dcfifo",
- lpm_width => 8,
- lpm_widthu => 5,
- lpm_widthu_r => 4,
- lpm_width_r => 16,
- overflow_checking => "ON",
- rdsync_delaypipe => 5,
- underflow_checking => "ON",
- use_eab => "ON",
- write_aclr_synch => "OFF",
- wrsync_delaypipe => 5
- )
- PORT MAP (
- wrclk => wrclk,
- rdreq => rdreq,
- aclr => aclr,
- rdclk => rdclk,
- wrreq => wrreq,
- data => data,
- wrusedw => sub_wire0,
- q => sub_wire1
- );
-
-
-
-END SYN;
-
--- ============================================================
--- CNX file retrieval info
--- ============================================================
--- Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0"
--- Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1"
--- Retrieval info: PRIVATE: AlmostFull NUMERIC "0"
--- Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1"
--- Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0"
--- Retrieval info: PRIVATE: Clock NUMERIC "4"
--- Retrieval info: PRIVATE: Depth NUMERIC "32"
--- Retrieval info: PRIVATE: Empty NUMERIC "1"
--- Retrieval info: PRIVATE: Full NUMERIC "1"
--- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
--- Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0"
--- Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1"
--- Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0"
--- Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0"
--- Retrieval info: PRIVATE: Optimize NUMERIC "1"
--- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
--- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
--- Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0"
--- Retrieval info: PRIVATE: UsedW NUMERIC "1"
--- Retrieval info: PRIVATE: Width NUMERIC "8"
--- Retrieval info: PRIVATE: dc_aclr NUMERIC "1"
--- Retrieval info: PRIVATE: diff_widths NUMERIC "1"
--- Retrieval info: PRIVATE: msb_usedw NUMERIC "0"
--- Retrieval info: PRIVATE: output_width NUMERIC "16"
--- Retrieval info: PRIVATE: rsEmpty NUMERIC "0"
--- Retrieval info: PRIVATE: rsFull NUMERIC "0"
--- Retrieval info: PRIVATE: rsUsedW NUMERIC "0"
--- Retrieval info: PRIVATE: sc_aclr NUMERIC "0"
--- Retrieval info: PRIVATE: sc_sclr NUMERIC "0"
--- Retrieval info: PRIVATE: wsEmpty NUMERIC "0"
--- Retrieval info: PRIVATE: wsFull NUMERIC "0"
--- Retrieval info: PRIVATE: wsUsedW NUMERIC "1"
--- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
--- Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "32"
--- Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF"
--- Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo"
--- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8"
--- Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "5"
--- Retrieval info: CONSTANT: LPM_WIDTHU_R NUMERIC "4"
--- Retrieval info: CONSTANT: LPM_WIDTH_R NUMERIC "16"
--- Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON"
--- Retrieval info: CONSTANT: RDSYNC_DELAYPIPE NUMERIC "5"
--- Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON"
--- Retrieval info: CONSTANT: USE_EAB STRING "ON"
--- Retrieval info: CONSTANT: WRITE_ACLR_SYNCH STRING "OFF"
--- Retrieval info: CONSTANT: WRSYNC_DELAYPIPE NUMERIC "5"
--- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr
--- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL data[7..0]
--- Retrieval info: USED_PORT: q 0 0 16 0 OUTPUT NODEFVAL q[15..0]
--- Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk
--- Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq
--- Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk
--- Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq
--- Retrieval info: USED_PORT: wrusedw 0 0 5 0 OUTPUT NODEFVAL wrusedw[4..0]
--- Retrieval info: CONNECT: @data 0 0 8 0 data 0 0 8 0
--- Retrieval info: CONNECT: q 0 0 16 0 @q 0 0 16 0
--- Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0
--- Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0
--- Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0
--- Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0
--- Retrieval info: CONNECT: wrusedw 0 0 5 0 @wrusedw 0 0 5 0
--- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0
--- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.vhd TRUE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.inc FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.cmp TRUE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.bsf TRUE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0_inst.vhd FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0_waveforms.html FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0_wave*.jpg FALSE
--- Retrieval info: LIB_FILE: altera_mf
diff --git a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/dcfifo1.vhd.bak b/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/dcfifo1.vhd.bak
deleted file mode 100644
index e7c6ae6..0000000
--- a/FPGA_by_Fredi/FalconIO_SDCard_IDE_CF/dcfifo1.vhd.bak
+++ /dev/null
@@ -1,202 +0,0 @@
--- megafunction wizard: %LPM_FIFO+%
--- GENERATION: STANDARD
--- VERSION: WM1.0
--- MODULE: dcfifo_mixed_widths
-
--- ============================================================
--- File Name: dcfifo1.vhd
--- Megafunction Name(s):
--- dcfifo_mixed_widths
---
--- Simulation Library Files(s):
--- altera_mf
--- ============================================================
--- ************************************************************
--- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
---
--- 9.1 Build 222 10/21/2009 SJ Web Edition
--- ************************************************************
-
-
---Copyright (C) 1991-2009 Altera Corporation
---Your use of Altera Corporation's design tools, logic functions
---and other software and tools, and its AMPP partner logic
---functions, and any output files from any of the foregoing
---(including device programming or simulation files), and any
---associated documentation or information are expressly subject
---to the terms and conditions of the Altera Program License
---Subscription Agreement, Altera MegaCore Function License
---Agreement, or other applicable license agreement, including,
---without limitation, that your use is for the sole purpose of
---programming logic devices manufactured by Altera and sold by
---Altera or its authorized distributors. Please refer to the
---applicable agreement for further details.
-
-
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-
-LIBRARY altera_mf;
-USE altera_mf.all;
-
-ENTITY dcfifo1 IS
- PORT
- (
- aclr : IN STD_LOGIC := '0';
- data : IN STD_LOGIC_VECTOR (15 DOWNTO 0);
- rdclk : IN STD_LOGIC ;
- rdreq : IN STD_LOGIC ;
- wrclk : IN STD_LOGIC ;
- wrreq : IN STD_LOGIC ;
- q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
- wrusedw : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)
- );
-END dcfifo1;
-
-
-ARCHITECTURE SYN OF dcfifo1 IS
-
- SIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0);
- SIGNAL sub_wire1 : STD_LOGIC_VECTOR (7 DOWNTO 0);
-
-
-
- COMPONENT dcfifo_mixed_widths
- GENERIC (
- intended_device_family : STRING;
- lpm_numwords : NATURAL;
- lpm_showahead : STRING;
- lpm_type : STRING;
- lpm_width : NATURAL;
- lpm_widthu : NATURAL;
- lpm_widthu_r : NATURAL;
- lpm_width_r : NATURAL;
- overflow_checking : STRING;
- rdsync_delaypipe : NATURAL;
- underflow_checking : STRING;
- use_eab : STRING;
- write_aclr_synch : STRING;
- wrsync_delaypipe : NATURAL
- );
- PORT (
- wrclk : IN STD_LOGIC ;
- rdreq : IN STD_LOGIC ;
- wrusedw : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
- aclr : IN STD_LOGIC ;
- rdclk : IN STD_LOGIC ;
- q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
- wrreq : IN STD_LOGIC ;
- data : IN STD_LOGIC_VECTOR (15 DOWNTO 0)
- );
- END COMPONENT;
-
-BEGIN
- wrusedw <= sub_wire0(3 DOWNTO 0);
- q <= sub_wire1(7 DOWNTO 0);
-
- dcfifo_mixed_widths_component : dcfifo_mixed_widths
- GENERIC MAP (
- intended_device_family => "Cyclone III",
- lpm_numwords => 16,
- lpm_showahead => "OFF",
- lpm_type => "dcfifo",
- lpm_width => 16,
- lpm_widthu => 4,
- lpm_widthu_r => 5,
- lpm_width_r => 8,
- overflow_checking => "ON",
- rdsync_delaypipe => 5,
- underflow_checking => "ON",
- use_eab => "ON",
- write_aclr_synch => "OFF",
- wrsync_delaypipe => 5
- )
- PORT MAP (
- wrclk => wrclk,
- rdreq => rdreq,
- aclr => aclr,
- rdclk => rdclk,
- wrreq => wrreq,
- data => data,
- wrusedw => sub_wire0,
- q => sub_wire1
- );
-
-
-
-END SYN;
-
--- ============================================================
--- CNX file retrieval info
--- ============================================================
--- Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0"
--- Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1"
--- Retrieval info: PRIVATE: AlmostFull NUMERIC "0"
--- Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1"
--- Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0"
--- Retrieval info: PRIVATE: Clock NUMERIC "4"
--- Retrieval info: PRIVATE: Depth NUMERIC "16"
--- Retrieval info: PRIVATE: Empty NUMERIC "1"
--- Retrieval info: PRIVATE: Full NUMERIC "1"
--- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
--- Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0"
--- Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1"
--- Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0"
--- Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0"
--- Retrieval info: PRIVATE: Optimize NUMERIC "1"
--- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
--- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
--- Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0"
--- Retrieval info: PRIVATE: UsedW NUMERIC "1"
--- Retrieval info: PRIVATE: Width NUMERIC "16"
--- Retrieval info: PRIVATE: dc_aclr NUMERIC "1"
--- Retrieval info: PRIVATE: diff_widths NUMERIC "1"
--- Retrieval info: PRIVATE: msb_usedw NUMERIC "0"
--- Retrieval info: PRIVATE: output_width NUMERIC "8"
--- Retrieval info: PRIVATE: rsEmpty NUMERIC "0"
--- Retrieval info: PRIVATE: rsFull NUMERIC "0"
--- Retrieval info: PRIVATE: rsUsedW NUMERIC "0"
--- Retrieval info: PRIVATE: sc_aclr NUMERIC "0"
--- Retrieval info: PRIVATE: sc_sclr NUMERIC "0"
--- Retrieval info: PRIVATE: wsEmpty NUMERIC "0"
--- Retrieval info: PRIVATE: wsFull NUMERIC "0"
--- Retrieval info: PRIVATE: wsUsedW NUMERIC "1"
--- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
--- Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "16"
--- Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF"
--- Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo"
--- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16"
--- Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "4"
--- Retrieval info: CONSTANT: LPM_WIDTHU_R NUMERIC "5"
--- Retrieval info: CONSTANT: LPM_WIDTH_R NUMERIC "8"
--- Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON"
--- Retrieval info: CONSTANT: RDSYNC_DELAYPIPE NUMERIC "5"
--- Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON"
--- Retrieval info: CONSTANT: USE_EAB STRING "ON"
--- Retrieval info: CONSTANT: WRITE_ACLR_SYNCH STRING "OFF"
--- Retrieval info: CONSTANT: WRSYNC_DELAYPIPE NUMERIC "5"
--- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr
--- Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0]
--- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL q[7..0]
--- Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk
--- Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq
--- Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk
--- Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq
--- Retrieval info: USED_PORT: wrusedw 0 0 4 0 OUTPUT NODEFVAL wrusedw[3..0]
--- Retrieval info: CONNECT: @data 0 0 16 0 data 0 0 16 0
--- Retrieval info: CONNECT: q 0 0 8 0 @q 0 0 8 0
--- Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0
--- Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0
--- Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0
--- Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0
--- Retrieval info: CONNECT: wrusedw 0 0 4 0 @wrusedw 0 0 4 0
--- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0
--- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.vhd TRUE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.inc FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.cmp TRUE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.bsf TRUE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1_inst.vhd FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1_waveforms.html FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1_wave*.jpg FALSE
--- Retrieval info: LIB_FILE: altera_mf
diff --git a/FPGA_by_Fredi/Interrupt_Handler/interrupt_handler.tdf b/FPGA_by_Fredi/Interrupt_Handler/interrupt_handler.tdf
index 16de480..64354fe 100644
--- a/FPGA_by_Fredi/Interrupt_Handler/interrupt_handler.tdf
+++ b/FPGA_by_Fredi/Interrupt_Handler/interrupt_handler.tdf
@@ -24,6 +24,7 @@ SUBDESIGN interrupt_handler
FB_SIZE0 : INPUT;
FB_SIZE1 : INPUT;
FB_ADR[31..0] : INPUT;
+ FPGA_DATE[31..0] : INPUT;
PIC_INT : INPUT;
E0_INT : INPUT;
DVI_INT : INPUT;
@@ -61,6 +62,7 @@ VARIABLE
INT_LA[9..0][3..0] :DFF;
ACP_CONF[31..0] :DFFE;
ACP_CONF_CS :NODE;
+ FPGA_DATE_CS :NODE;
PSEUDO_BUS_ERROR :NODE;
UHR_AS :NODE;
UHR_DS :NODE;
@@ -201,6 +203,9 @@ TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR H
ACP_CONF[15..8].ENA = ACP_CONF_CS & FB_B2 & !nFB_WR;
ACP_CONF[7..0].ENA = ACP_CONF_CS & FB_B3 & !nFB_WR;
--***************************************************************************************
+-- FPGA DATE HEX (ddmmyyyy)
+ FPGA_DATE_CS = !nFB_CS2 & FB_ADR[27..2]==H"10040"; -- $4'0000/4
+--***************************************************************************************
--------------------------------------------------------------
-- C1287 0=SEK 2=MIN 4=STD 6=WOCHENTAG 7=TAG 8=MONAT 9=JAHR
@@ -288,7 +293,8 @@ TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR H
# INT_LATCH_CS & INT_LATCH[31..24]
# INT_CLEAR_CS & INT_IN[31..24]
# ACP_CONF_CS & ACP_CONF[31..24]
- ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE);
+ # FPGA_DATE_CS & FPGA_DATE[31..24]
+ ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS # FPGA_DATE_CS) & !nFB_OE);
FB_AD[23..16] = lpm_bustri_BYT(
WERTE[][0] & RTC_ADR[]==0 & UHR_DS
# WERTE[][1] & RTC_ADR[]==1 & UHR_DS
@@ -360,21 +366,24 @@ TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR H
# INT_LATCH_CS & INT_LATCH[23..16]
# 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);
+ # FPGA_DATE_CS & FPGA_DATE[23..16]
+ ,(UHR_DS # UHR_AS # INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS # FPGA_DATE_CS) & !nFB_OE);
FB_AD[15..8] = lpm_bustri_BYT(
INT_CTR_CS & INT_CTR[15..8]
# INT_ENA_CS & INT_ENA[15..8]
# INT_LATCH_CS & INT_LATCH[15..8]
# 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);
+ # FPGA_DATE_CS & FPGA_DATE[15..8]
+ ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS # FPGA_DATE_CS) & !nFB_OE);
FB_AD[7..0] = lpm_bustri_BYT(
INT_CTR_CS & INT_CTR[7..0]
# INT_ENA_CS & INT_ENA[7..0]
# INT_LATCH_CS & INT_LATCH[7..0]
# INT_CLEAR_CS & INT_IN[7..0]
# ACP_CONF_CS & ACP_CONF[7..0]
- ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE);
+ # FPGA_DATE_CS & FPGA_DATE[7..0]
+ ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS # FPGA_DATE_CS) & !nFB_OE);
INT_HANDLER_TA = INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS;
END;
diff --git a/FPGA_by_Fredi/Interrupt_Handler/interrupt_handler.tdf.bak b/FPGA_by_Fredi/Interrupt_Handler/interrupt_handler.tdf.bak
deleted file mode 100644
index 459192d..0000000
--- a/FPGA_by_Fredi/Interrupt_Handler/interrupt_handler.tdf.bak
+++ /dev/null
@@ -1,382 +0,0 @@
-TITLE "INTERRUPT HANDLER UND C1287";
-
--- CREATED BY FREDI ASCHWANDEN
-
-INCLUDE "lpm_bustri_LONG.inc";
-INCLUDE "lpm_bustri_BYT.inc";
-
-
--- Parameters Statement (optional)
-
--- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE!
--- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE!
-
-
--- Subdesign Section
-
-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;
- nRSTO : 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;
- INT_L[9..0] :DFF;
- INT_LA[9..0][3..0] :DFF;
- 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;
-
-BEGIN
--- BYT SELECT
- FB_B0 = FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HWORD
- # !FB_SIZE1 & FB_SIZE0 & !FB_ADR1 & !FB_ADR0 -- HHBYT
- # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE
- FB_B1 = FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HWORD
- # !FB_SIZE1 & FB_SIZE0 & !FB_ADR1 & FB_ADR0 -- HLBYT
- # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE
- FB_B2 = FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LWORD
- # !FB_SIZE1 & FB_SIZE0 & FB_ADR1 & !FB_ADR0 -- LHBYT
- # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE
- FB_B3 = FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LWORD
- # !FB_SIZE1 & FB_SIZE0 & FB_ADR1 & FB_ADR0 -- LLBYT
- # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE
-
--- INTERRUPT CONTROL REGISTER: BIT0=INT5 AUSLÖSEN, 1=INT7 AUSLÖSEN
- INT_CTR[].CLK = MAIN_CLK;
- INT_CTR_CS = !nFB_CS2 & FB_ADR[27..2]==H"4000"; -- $10000/4
- INT_CTR[] = FB_AD[];
- INT_CTR[31..24].ENA = INT_CTR_CS & FB_B0 & !nFB_WR;
- 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[].CLRN = nRSTO;
- INT_ENA_CS = !nFB_CS2 & FB_ADR[27..2]==H"4001"; -- $10004/4
- INT_ENA[] = FB_AD[];
- INT_ENA[31..24].ENA = INT_ENA_CS & FB_B0 & !nFB_WR;
- 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
- INT_CLEAR[31..24] = FB_AD[31..24] & INT_CLEAR_CS & FB_B0 & !nFB_WR;
- 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];
- !nIRQ4 = VSYNC & INT_ENA[28];
- nIRQ5 = INT_LATCH[]==H"00000000" & INT_ENA[29];
- !nIRQ6 = !nMFP_INT & INT_ENA[30];
- !nIRQ7 = PSEUDO_BUS_ERROR & INT_ENA[31];
-
-PSEUDO_BUS_ERROR = !nFB_CS1 & (FB_ADR[19..4]==H"F8C8" -- SCC
- # FB_ADR[19..4]==H"F8E0" -- VME
--- # FB_ADR[19..4]==H"F920" -- PADDLE
--- # FB_ADR[19..4]==H"F921" -- PADDLE
--- # FB_ADR[19..4]==H"F922" -- PADDLE
- # FB_ADR[19..4]==H"FFA8" -- MFP2
- # FB_ADR[19..4]==H"FFA9" -- MFP2
- # FB_ADR[19..4]==H"FFAA" -- MFP2
- # FB_ADR[19..4]==H"FFA8" -- MFP2
- # FB_ADR[19..8]==H"F87" -- TT SCSI
- # FB_ADR[19..4]==H"FFC2" -- ST UHR
- # FB_ADR[19..4]==H"FFC3" -- ST UHR
--- # 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
-
--- INTERRUPT LATCH
- INT_L[].CLK = MAIN_CLK;
- INT_L[].CLRN = nRSTO;
- INT_L0 = PIC_INT & INT_ENA[0];
- INT_L1 = E0_INT & INT_ENA[1];
- INT_L2 = DVI_INT & INT_ENA[2];
- INT_L3 = !nPCI_INTA & INT_ENA[3];
- INT_L4 = !nPCI_INTB & INT_ENA[4];
- INT_L5 = !nPCI_INTC & INT_ENA[5];
- INT_L6 = !nPCI_INTD & INT_ENA[6];
- INT_L7 = DSP_INT & INT_ENA[7];
- INT_L8 = VSYNC & INT_ENA[8];
- INT_L9 = HSYNC & INT_ENA[9];
-
- INT_LA[][].CLK = MAIN_CLK;
- INT_LATCH[] = H"FFFFFFFF";
- INT_LATCH[].CLRN = !INT_CLEAR[] & nRSTO;
- FOR I IN 0 TO 9 GENERATE
- INT_LA[I][].CLRN = INT_ENA[I] & nRSTO;
- INT_LA[I][] = INT_LA[I][]+1 & INT_L[I] & INT_LA[I][]<7
- # INT_LA[I][]-1 & !INT_L[I] & INT_LA[I][]>8
- # 15 & INT_L[I] & INT_LA[I][]>6
- # 0 & !INT_L[I] & INT_LA[I][]<9;
- INT_LATCH[I].CLK = INT_LA[I][3];
- END GENERATE;
-
--- INT_IN
- INT_IN0 = PIC_INT;
- INT_IN1 = E0_INT;
- INT_IN2 = DVI_INT;
- INT_IN3 = !nPCI_INTA;
- INT_IN4 = !nPCI_INTB;
- INT_IN5 = !nPCI_INTC;
- INT_IN6 = !nPCI_INTD;
- INT_IN7 = DSP_INT;
- INT_IN8 = VSYNC;
- INT_IN9 = HSYNC;
- INT_IN[25..10] = H"0";
- INT_IN26 = HSYNC;
- INT_IN27 = INT_CTR0;
- INT_IN28 = VSYNC;
- 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;
- ACP_CONF_CS = !nFB_CS2 & FB_ADR[27..2]==H"10000"; -- $4'0000/4
- ACP_CONF[] = FB_AD[];
- ACP_CONF[31..24].ENA = ACP_CONF_CS & FB_B0 & !nFB_WR;
- ACP_CONF[23..16].ENA = ACP_CONF_CS & FB_B1 & !nFB_WR;
- ACP_CONF[15..8].ENA = ACP_CONF_CS & FB_B2 & !nFB_WR;
- ACP_CONF[7..0].ENA = ACP_CONF_CS & FB_B3 & !nFB_WR;
---***************************************************************************************
-
---------------------------------------------------------------
--- C1287 0=SEK 2=MIN 4=STD 6=WOCHENTAG 7=TAG 8=MONAT 9=JAHR
-----------------------------------------------------------
- RTC_ADR[].CLK = MAIN_CLK;
- RTC_ADR[] = FB_AD[21..16];
- UHR_AS = !nFB_CS1 & FB_ADR[19..1]==H"7C4B0" & FB_B1; -- FFFF8961
- UHR_DS = !nFB_CS1 & FB_ADR[19..1]==H"7C4B1" & FB_B3; -- FFFF8963
- RTC_ADR[].ENA = UHR_AS & !nFB_WR;
- WERTE[][].CLK = MAIN_CLK;
- WERTE[7..0][0] = FB_AD[23..16] & RTC_ADR[]==0 & UHR_DS & !nFB_WR;
- WERTE[7..0][1] = FB_AD[23..16];
- WERTE[7..0][2] = FB_AD[23..16] & RTC_ADR[]==2 & UHR_DS & !nFB_WR;
- WERTE[7..0][3] = FB_AD[23..16];
- WERTE[7..0][4] = FB_AD[23..16] & RTC_ADR[]==4 & UHR_DS & !nFB_WR;
- WERTE[7..0][5] = FB_AD[23..16];
- WERTE[7..0][6] = FB_AD[23..16] & RTC_ADR[]==6 & UHR_DS & !nFB_WR;
- WERTE[7..0][7] = FB_AD[23..16] & RTC_ADR[]==7 & UHR_DS & !nFB_WR;
- WERTE[7..0][8] = FB_AD[23..16] & RTC_ADR[]==8 & UHR_DS & !nFB_WR;
- WERTE[7..0][9] = FB_AD[23..16] & RTC_ADR[]==9 & UHR_DS & !nFB_WR;
- FOR I IN 10 TO 63 GENERATE
- WERTE[7..0][I] = FB_AD[23..16];
- END GENERATE;
- FOR I IN 0 TO 63 GENERATE
- WERTE[][I].ENA = RTC_ADR[]==I & UHR_DS & !nFB_WR;
- END GENERATE;
- PIC_INT_SYNC[].CLK = MAIN_CLK;
- PIC_INT_SYNC[0] = PIC_INT;
- PIC_INT_SYNC[1] = PIC_INT_SYNC[0];
- PIC_INT_SYNC[2] = !PIC_INT_SYNC[1] & PIC_INT_SYNC[0];
- UPDATE_ON = !WERTE[7][11];
- WERTE[6][10].CLRN = GND; -- KEIN UIP
- UPDATE_ON = !WERTE[7][11]; -- UPDATE ON OFF
- WERTE[2][11] = VCC; -- IMMER BINARY
- 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
- WERTE[][6].ENA = INC_TAG & !(RTC_ADR[]==6 & UHR_DS & !nFB_WR);
- ANZAHL_TAGE_DES_MONATS[] = 31 & (WERTE[][8]==1 # WERTE[][8]==3 # WERTE[][8]==5 # WERTE[][8]==7 # WERTE[][8]==8 # WERTE[][8]==10 # WERTE[][8]==12)
- # 30 & (WERTE[][8]==4 # WERTE[][8]==6 # WERTE[][8]==9 # WERTE[][8]==11)
- # 29 & WERTE[][8]==2 & WERTE[1..0][9]==0
- # 28 & WERTE[][8]==2 & WERTE[1..0][9]!=0;
- 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(
- INT_CTR_CS & INT_CTR[31..24]
- # INT_ENA_CS & INT_ENA[31..24]
- # INT_LATCH_CS & INT_LATCH[31..24]
- # INT_CLEAR_CS & INT_IN[31..24]
- # ACP_CONF_CS & ACP_CONF[31..24]
- ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE);
- FB_AD[23..16] = lpm_bustri_BYT(
- WERTE[][0] & RTC_ADR[]==0 & UHR_DS
- # WERTE[][1] & RTC_ADR[]==1 & UHR_DS
- # WERTE[][2] & RTC_ADR[]==2 & UHR_DS
- # WERTE[][3] & RTC_ADR[]==3 & UHR_DS
- # WERTE[][4] & RTC_ADR[]==4 & UHR_DS
- # WERTE[][5] & RTC_ADR[]==5 & UHR_DS
- # WERTE[][6] & RTC_ADR[]==6 & UHR_DS
- # WERTE[][7] & RTC_ADR[]==7 & UHR_DS
- # WERTE[][8] & RTC_ADR[]==8 & UHR_DS
- # WERTE[][9] & RTC_ADR[]==9 & UHR_DS
- # WERTE[][10] & RTC_ADR[]==10 & UHR_DS
- # WERTE[][11] & RTC_ADR[]==11 & UHR_DS
- # WERTE[][12] & RTC_ADR[]==12 & UHR_DS
- # WERTE[][13] & RTC_ADR[]==13 & UHR_DS
- # WERTE[][14] & RTC_ADR[]==14 & UHR_DS
- # WERTE[][15] & RTC_ADR[]==15 & UHR_DS
- # WERTE[][16] & RTC_ADR[]==16 & UHR_DS
- # WERTE[][17] & RTC_ADR[]==17 & UHR_DS
- # WERTE[][18] & RTC_ADR[]==18 & UHR_DS
- # WERTE[][19] & RTC_ADR[]==19 & UHR_DS
- # WERTE[][20] & RTC_ADR[]==20 & UHR_DS
- # WERTE[][21] & RTC_ADR[]==21 & UHR_DS
- # WERTE[][22] & RTC_ADR[]==22 & UHR_DS
- # WERTE[][23] & RTC_ADR[]==23 & UHR_DS
- # WERTE[][24] & RTC_ADR[]==24 & UHR_DS
- # WERTE[][25] & RTC_ADR[]==25 & UHR_DS
- # WERTE[][26] & RTC_ADR[]==26 & UHR_DS
- # WERTE[][27] & RTC_ADR[]==27 & UHR_DS
- # WERTE[][28] & RTC_ADR[]==28 & UHR_DS
- # WERTE[][29] & RTC_ADR[]==29 & UHR_DS
- # WERTE[][30] & RTC_ADR[]==30 & UHR_DS
- # WERTE[][31] & RTC_ADR[]==31 & UHR_DS
- # WERTE[][32] & RTC_ADR[]==32 & UHR_DS
- # WERTE[][33] & RTC_ADR[]==33 & UHR_DS
- # WERTE[][34] & RTC_ADR[]==34 & UHR_DS
- # WERTE[][35] & RTC_ADR[]==35 & UHR_DS
- # WERTE[][36] & RTC_ADR[]==36 & UHR_DS
- # WERTE[][37] & RTC_ADR[]==37 & UHR_DS
- # WERTE[][38] & RTC_ADR[]==38 & UHR_DS
- # WERTE[][39] & RTC_ADR[]==39 & UHR_DS
- # WERTE[][40] & RTC_ADR[]==40 & UHR_DS
- # WERTE[][41] & RTC_ADR[]==41 & UHR_DS
- # WERTE[][42] & RTC_ADR[]==42 & UHR_DS
- # WERTE[][43] & RTC_ADR[]==43 & UHR_DS
- # WERTE[][44] & RTC_ADR[]==44 & UHR_DS
- # WERTE[][45] & RTC_ADR[]==45 & UHR_DS
- # WERTE[][46] & RTC_ADR[]==46 & UHR_DS
- # WERTE[][47] & RTC_ADR[]==47 & UHR_DS
- # WERTE[][48] & RTC_ADR[]==48 & UHR_DS
- # WERTE[][49] & RTC_ADR[]==49 & UHR_DS
- # WERTE[][50] & RTC_ADR[]==50 & UHR_DS
- # WERTE[][51] & RTC_ADR[]==51 & UHR_DS
- # WERTE[][52] & RTC_ADR[]==52 & UHR_DS
- # WERTE[][53] & RTC_ADR[]==53 & UHR_DS
- # WERTE[][54] & RTC_ADR[]==54 & UHR_DS
- # WERTE[][55] & RTC_ADR[]==55 & UHR_DS
- # WERTE[][56] & RTC_ADR[]==56 & UHR_DS
- # WERTE[][57] & RTC_ADR[]==57 & UHR_DS
- # WERTE[][58] & RTC_ADR[]==58 & UHR_DS
- # WERTE[][59] & RTC_ADR[]==59 & UHR_DS
- # WERTE[][60] & RTC_ADR[]==60 & UHR_DS
- # WERTE[][61] & RTC_ADR[]==61 & UHR_DS
- # WERTE[][62] & RTC_ADR[]==62 & UHR_DS
- # WERTE[][63] & RTC_ADR[]==63 & UHR_DS
- # (0,RTC_ADR[]) & UHR_AS
- # INT_CTR_CS & INT_CTR[23..16]
- # INT_ENA_CS & INT_ENA[23..16]
- # INT_LATCH_CS & INT_LATCH[23..16]
- # 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]
- # INT_LATCH_CS & INT_LATCH[15..8]
- # 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]
- # INT_LATCH_CS & INT_LATCH[7..0]
- # INT_CLEAR_CS & INT_IN[7..0]
- # ACP_CONF_CS & ACP_CONF[7..0]
- ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE);
-
- INT_HANDLER_TA = INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS;
-END;
-
-
diff --git a/FPGA_by_Fredi/PLLJ_PLLSPE_INFO.txt b/FPGA_by_Fredi/PLLJ_PLLSPE_INFO.txt
deleted file mode 100644
index 797d4f8..0000000
--- a/FPGA_by_Fredi/PLLJ_PLLSPE_INFO.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-PLL_Name altpll1:inst|altpll:altpll_component|altpll_3vp2:auto_generated|pll1
-PLLJITTER 36
-PLLSPEmax 84
-PLLSPEmin -53
-
-PLL_Name altpll2:inst12|altpll:altpll_component|altpll_1r33:auto_generated|pll1
-PLLJITTER 43
-PLLSPEmax 84
-PLLSPEmin -53
-
-PLL_Name altpll3:inst13|altpll:altpll_component|altpll_aus2:auto_generated|pll1
-PLLJITTER NA
-PLLSPEmax 84
-PLLSPEmin -53
-
-PLL_Name altpll4:inst22|altpll:altpll_component|altpll_r4n2:auto_generated|pll1
-PLLJITTER 31
-PLLSPEmax 84
-PLLSPEmin -53
-
diff --git a/FPGA_by_Fredi/UNUSED b/FPGA_by_Fredi/UNUSED
deleted file mode 100644
index 3a7d9e6..0000000
--- a/FPGA_by_Fredi/UNUSED
+++ /dev/null
@@ -1,27 +0,0 @@
-
--- Clearbox generated Memory Initialization File (.mif)
-
-WIDTH=3;
-DEPTH=16;
-
-ADDRESS_RADIX=HEX;
-DATA_RADIX=HEX;
-
-CONTENT BEGIN
- 00 : 7;
- 01 : 6;
- 02 : 5;
- 03 : 4;
- 04 : 3;
- 05 : 2;
- 06 : 1;
- 07 : 0;
- 08 : 7;
- 09 : 6;
- 0a : 5;
- 0b : 4;
- 0c : 3;
- 0d : 2;
- 0e : 1;
- 0f : 0;
-END;
diff --git a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.bsf b/FPGA_by_Fredi/Video/BLITTER/altsyncram0.bsf
deleted file mode 100644
index b0acfb7..0000000
--- a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.bsf
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-WARNING: Do NOT edit the input and output ports in this file in a text
-editor if you plan to continue editing the block that represents it in
-the Block Editor! File corruption is VERY likely to occur.
-*/
-/*
-Copyright (C) 1991-2010 Altera Corporation
-Your use of Altera Corporation's design tools, logic functions
-and other software and tools, and its AMPP partner logic
-functions, and any output files from any of the foregoing
-(including device programming or simulation files), and any
-associated documentation or information are expressly subject
-to the terms and conditions of the Altera Program License
-Subscription Agreement, Altera MegaCore Function License
-Agreement, or other applicable license agreement, including,
-without limitation, that your use is for the sole purpose of
-programming logic devices manufactured by Altera and sold by
-Altera or its authorized distributors. Please refer to the
-applicable agreement for further details.
-*/
-(header "symbol" (version "1.1"))
-(symbol
- (rect 0 0 256 128)
- (text "altsyncram0" (rect 84 2 187 21)(font "Arial" (font_size 10)))
- (text "inst" (rect 8 109 31 124)(font "Arial" ))
- (port
- (pt 0 32)
- (input)
- (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8)))
- (text "data[15..0]" (rect 4 16 66 32)(font "Arial" (font_size 8)))
- (line (pt 0 32)(pt 112 32)(line_width 3))
- )
- (port
- (pt 0 48)
- (input)
- (text "address[3..0]" (rect 0 0 89 16)(font "Arial" (font_size 8)))
- (text "address[3..0]" (rect 4 32 80 48)(font "Arial" (font_size 8)))
- (line (pt 0 48)(pt 112 48)(line_width 3))
- )
- (port
- (pt 0 64)
- (input)
- (text "wren" (rect 0 0 31 16)(font "Arial" (font_size 8)))
- (text "wren" (rect 4 48 31 64)(font "Arial" (font_size 8)))
- (line (pt 0 64)(pt 112 64)(line_width 1))
- )
- (port
- (pt 0 88)
- (input)
- (text "byteena_a[1..0]" (rect 0 0 106 16)(font "Arial" (font_size 8)))
- (text "byteena_a[1..0]" (rect 4 72 94 88)(font "Arial" (font_size 8)))
- (line (pt 0 88)(pt 112 88)(line_width 3))
- )
- (port
- (pt 0 104)
- (input)
- (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8)))
- (text "clock" (rect 4 88 35 104)(font "Arial" (font_size 8)))
- (line (pt 0 104)(pt 104 104)(line_width 1))
- )
- (port
- (pt 256 32)
- (output)
- (text "q[15..0]" (rect 0 0 51 16)(font "Arial" (font_size 8)))
- (text "q[15..0]" (rect 209 16 253 32)(font "Arial" (font_size 8)))
- (line (pt 256 32)(pt 168 32)(line_width 3))
- )
- (drawing
- (text "16 Word(s)" (rect 133 35 147 90)(font "Arial" )(vertical))
- (text "RAM" (rect 149 49 163 72)(font "Arial" )(vertical))
- (text "Block Type: AUTO" (rect 41 106 129 120)(font "Arial" ))
- (line (pt 128 24)(pt 168 24)(line_width 1))
- (line (pt 168 24)(pt 168 96)(line_width 1))
- (line (pt 168 96)(pt 128 96)(line_width 1))
- (line (pt 128 96)(pt 128 24)(line_width 1))
- (line (pt 112 27)(pt 120 27)(line_width 1))
- (line (pt 120 27)(pt 120 39)(line_width 1))
- (line (pt 120 39)(pt 112 39)(line_width 1))
- (line (pt 112 39)(pt 112 27)(line_width 1))
- (line (pt 112 34)(pt 114 36)(line_width 1))
- (line (pt 114 36)(pt 112 38)(line_width 1))
- (line (pt 104 36)(pt 112 36)(line_width 1))
- (line (pt 120 32)(pt 128 32)(line_width 3))
- (line (pt 112 43)(pt 120 43)(line_width 1))
- (line (pt 120 43)(pt 120 55)(line_width 1))
- (line (pt 120 55)(pt 112 55)(line_width 1))
- (line (pt 112 55)(pt 112 43)(line_width 1))
- (line (pt 112 50)(pt 114 52)(line_width 1))
- (line (pt 114 52)(pt 112 54)(line_width 1))
- (line (pt 104 52)(pt 112 52)(line_width 1))
- (line (pt 120 48)(pt 128 48)(line_width 3))
- (line (pt 112 59)(pt 120 59)(line_width 1))
- (line (pt 120 59)(pt 120 71)(line_width 1))
- (line (pt 120 71)(pt 112 71)(line_width 1))
- (line (pt 112 71)(pt 112 59)(line_width 1))
- (line (pt 112 66)(pt 114 68)(line_width 1))
- (line (pt 114 68)(pt 112 70)(line_width 1))
- (line (pt 104 68)(pt 112 68)(line_width 1))
- (line (pt 120 64)(pt 128 64)(line_width 1))
- (line (pt 112 83)(pt 120 83)(line_width 1))
- (line (pt 120 83)(pt 120 95)(line_width 1))
- (line (pt 120 95)(pt 112 95)(line_width 1))
- (line (pt 112 95)(pt 112 83)(line_width 1))
- (line (pt 112 90)(pt 114 92)(line_width 1))
- (line (pt 114 92)(pt 112 94)(line_width 1))
- (line (pt 104 92)(pt 112 92)(line_width 1))
- (line (pt 120 88)(pt 128 88)(line_width 3))
- (line (pt 104 36)(pt 104 105)(line_width 1))
- )
-)
diff --git a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.inc b/FPGA_by_Fredi/Video/BLITTER/altsyncram0.inc
index f3eee7b..4137fa8 100644
--- a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.inc
+++ b/FPGA_by_Fredi/Video/BLITTER/altsyncram0.inc
@@ -15,13 +15,18 @@
FUNCTION altsyncram0
(
- address[3..0],
+ address_a[3..0],
+ address_b[3..0],
byteena_a[1..0],
- clock,
- data[15..0],
- wren
+ clock_a,
+ clock_b,
+ data_a[15..0],
+ data_b[15..0],
+ wren_a,
+ wren_b
)
RETURNS (
- q[15..0]
+ q_a[15..0],
+ q_b[15..0]
);
diff --git a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.qip b/FPGA_by_Fredi/Video/BLITTER/altsyncram0.qip
index c42bd21..767f8c4 100644
--- a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.qip
+++ b/FPGA_by_Fredi/Video/BLITTER/altsyncram0.qip
@@ -1,6 +1,4 @@
set_global_assignment -name IP_TOOL_NAME "ALTSYNCRAM"
set_global_assignment -name IP_TOOL_VERSION "9.1"
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altsyncram0.tdf"]
-set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altsyncram0.bsf"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altsyncram0.inc"]
-set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altsyncram0.cmp"]
diff --git a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.tdf b/FPGA_by_Fredi/Video/BLITTER/altsyncram0.tdf
index f260092..ef814b9 100644
--- a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.tdf
+++ b/FPGA_by_Fredi/Video/BLITTER/altsyncram0.tdf
@@ -38,43 +38,63 @@ INCLUDE "altsyncram.inc";
SUBDESIGN altsyncram0
(
- address[3..0] : INPUT;
+ address_a[3..0] : INPUT;
+ address_b[3..0] : INPUT;
byteena_a[1..0] : INPUT = VCC;
- clock : INPUT = VCC;
- data[15..0] : INPUT;
- wren : INPUT = GND;
- q[15..0] : OUTPUT;
+ clock_a : INPUT = VCC;
+ clock_b : INPUT;
+ data_a[15..0] : INPUT;
+ data_b[15..0] : INPUT;
+ wren_a : INPUT = GND;
+ wren_b : INPUT = GND;
+ q_a[15..0] : OUTPUT;
+ q_b[15..0] : OUTPUT;
)
VARIABLE
altsyncram_component : altsyncram WITH (
+ ADDRESS_REG_B = "CLOCK1",
BYTE_SIZE = 8,
CLOCK_ENABLE_INPUT_A = "BYPASS",
+ CLOCK_ENABLE_INPUT_B = "BYPASS",
CLOCK_ENABLE_OUTPUT_A = "BYPASS",
+ CLOCK_ENABLE_OUTPUT_B = "BYPASS",
+ INDATA_REG_B = "CLOCK1",
INTENDED_DEVICE_FAMILY = "Cyclone III",
- LPM_HINT = "ENABLE_RUNTIME_MOD=NO",
LPM_TYPE = "altsyncram",
NUMWORDS_A = 16,
- OPERATION_MODE = "SINGLE_PORT",
+ NUMWORDS_B = 16,
+ OPERATION_MODE = "BIDIR_DUAL_PORT",
OUTDATA_ACLR_A = "NONE",
+ OUTDATA_ACLR_B = "NONE",
OUTDATA_REG_A = "UNREGISTERED",
+ OUTDATA_REG_B = "UNREGISTERED",
POWER_UP_UNINITIALIZED = "FALSE",
READ_DURING_WRITE_MODE_PORT_A = "NEW_DATA_WITH_NBE_READ",
READ_DURING_WRITE_MODE_PORT_B = "NEW_DATA_WITH_NBE_READ",
WIDTHAD_A = 4,
+ WIDTHAD_B = 4,
WIDTH_A = 16,
- WIDTH_BYTEENA_A = 2
+ WIDTH_B = 16,
+ WIDTH_BYTEENA_A = 2,
+ WIDTH_BYTEENA_B = 1,
+ WRCONTROL_WRADDRESS_REG_B = "CLOCK1"
);
BEGIN
- q[15..0] = altsyncram_component.q_a[15..0];
- altsyncram_component.wren_a = wren;
- altsyncram_component.clock0 = clock;
+ q_a[15..0] = altsyncram_component.q_a[15..0];
+ q_b[15..0] = altsyncram_component.q_b[15..0];
+ altsyncram_component.wren_a = wren_a;
+ altsyncram_component.clock0 = clock_a;
+ altsyncram_component.wren_b = wren_b;
+ altsyncram_component.clock1 = clock_b;
altsyncram_component.byteena_a[1..0] = byteena_a[1..0];
- altsyncram_component.address_a[3..0] = address[3..0];
- altsyncram_component.data_a[15..0] = data[15..0];
+ altsyncram_component.address_a[3..0] = address_a[3..0];
+ altsyncram_component.address_b[3..0] = address_b[3..0];
+ altsyncram_component.data_a[15..0] = data_a[15..0];
+ altsyncram_component.data_b[15..0] = data_b[15..0];
END;
@@ -100,13 +120,13 @@ END;
-- Retrieval info: PRIVATE: CLRrren NUMERIC "0"
-- Retrieval info: PRIVATE: CLRwraddress NUMERIC "0"
-- Retrieval info: PRIVATE: CLRwren NUMERIC "0"
--- Retrieval info: PRIVATE: Clock NUMERIC "0"
+-- Retrieval info: PRIVATE: Clock NUMERIC "5"
-- Retrieval info: PRIVATE: Clock_A NUMERIC "0"
-- Retrieval info: PRIVATE: Clock_B NUMERIC "0"
-- Retrieval info: PRIVATE: ECC NUMERIC "0"
-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
-- Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0"
--- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "0"
+-- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "1"
-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
@@ -116,17 +136,17 @@ END;
-- Retrieval info: PRIVATE: MEMSIZE NUMERIC "256"
-- Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0"
-- Retrieval info: PRIVATE: MIFfilename STRING ""
--- Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "1"
+-- Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "3"
-- Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0"
--- Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "1"
+-- Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "0"
-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2"
-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "4"
-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "4"
-- Retrieval info: PRIVATE: REGdata NUMERIC "1"
-- Retrieval info: PRIVATE: REGq NUMERIC "0"
--- Retrieval info: PRIVATE: REGrdaddress NUMERIC "1"
--- Retrieval info: PRIVATE: REGrren NUMERIC "1"
+-- Retrieval info: PRIVATE: REGrdaddress NUMERIC "0"
+-- Retrieval info: PRIVATE: REGrren NUMERIC "0"
-- Retrieval info: PRIVATE: REGwraddress NUMERIC "1"
-- Retrieval info: PRIVATE: REGwren NUMERIC "1"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
@@ -138,44 +158,64 @@ END;
-- Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "16"
-- Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "16"
-- Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0"
--- Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "0"
+-- Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "1"
-- Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0"
-- Retrieval info: PRIVATE: enable NUMERIC "0"
-- Retrieval info: PRIVATE: rden NUMERIC "0"
+-- Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK1"
-- Retrieval info: CONSTANT: BYTE_SIZE NUMERIC "8"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
+-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
+-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS"
+-- Retrieval info: CONSTANT: INDATA_REG_B STRING "CLOCK1"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
--- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "16"
--- Retrieval info: CONSTANT: OPERATION_MODE STRING "SINGLE_PORT"
+-- Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "16"
+-- Retrieval info: CONSTANT: OPERATION_MODE STRING "BIDIR_DUAL_PORT"
-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
+-- Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE"
-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "UNREGISTERED"
+-- Retrieval info: CONSTANT: OUTDATA_REG_B STRING "UNREGISTERED"
-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "NEW_DATA_WITH_NBE_READ"
-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_B STRING "NEW_DATA_WITH_NBE_READ"
-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "4"
+-- Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "4"
-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "16"
+-- Retrieval info: CONSTANT: WIDTH_B NUMERIC "16"
-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "2"
--- Retrieval info: USED_PORT: address 0 0 4 0 INPUT NODEFVAL address[3..0]
+-- Retrieval info: CONSTANT: WIDTH_BYTEENA_B NUMERIC "1"
+-- Retrieval info: CONSTANT: WRCONTROL_WRADDRESS_REG_B STRING "CLOCK1"
+-- Retrieval info: USED_PORT: address_a 0 0 4 0 INPUT NODEFVAL address_a[3..0]
+-- Retrieval info: USED_PORT: address_b 0 0 4 0 INPUT NODEFVAL address_b[3..0]
-- Retrieval info: USED_PORT: byteena_a 0 0 2 0 INPUT VCC byteena_a[1..0]
--- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC clock
--- Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0]
--- Retrieval info: USED_PORT: q 0 0 16 0 OUTPUT NODEFVAL q[15..0]
--- Retrieval info: USED_PORT: wren 0 0 0 0 INPUT GND wren
--- Retrieval info: CONNECT: @data_a 0 0 16 0 data 0 0 16 0
--- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
--- Retrieval info: CONNECT: q 0 0 16 0 @q_a 0 0 16 0
--- Retrieval info: CONNECT: @address_a 0 0 4 0 address 0 0 4 0
+-- Retrieval info: USED_PORT: clock_a 0 0 0 0 INPUT VCC clock_a
+-- Retrieval info: USED_PORT: clock_b 0 0 0 0 INPUT NODEFVAL clock_b
+-- Retrieval info: USED_PORT: data_a 0 0 16 0 INPUT NODEFVAL data_a[15..0]
+-- Retrieval info: USED_PORT: data_b 0 0 16 0 INPUT NODEFVAL data_b[15..0]
+-- Retrieval info: USED_PORT: q_a 0 0 16 0 OUTPUT NODEFVAL q_a[15..0]
+-- Retrieval info: USED_PORT: q_b 0 0 16 0 OUTPUT NODEFVAL q_b[15..0]
+-- Retrieval info: USED_PORT: wren_a 0 0 0 0 INPUT GND wren_a
+-- Retrieval info: USED_PORT: wren_b 0 0 0 0 INPUT GND wren_b
+-- Retrieval info: CONNECT: @data_a 0 0 16 0 data_a 0 0 16 0
+-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren_a 0 0 0 0
+-- Retrieval info: CONNECT: q_a 0 0 16 0 @q_a 0 0 16 0
+-- Retrieval info: CONNECT: q_b 0 0 16 0 @q_b 0 0 16 0
+-- Retrieval info: CONNECT: @address_a 0 0 4 0 address_a 0 0 4 0
+-- Retrieval info: CONNECT: @data_b 0 0 16 0 data_b 0 0 16 0
+-- Retrieval info: CONNECT: @address_b 0 0 4 0 address_b 0 0 4 0
+-- Retrieval info: CONNECT: @wren_b 0 0 0 0 wren_b 0 0 0 0
-- Retrieval info: CONNECT: @byteena_a 0 0 2 0 byteena_a 0 0 2 0
--- Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
+-- Retrieval info: CONNECT: @clock0 0 0 0 0 clock_a 0 0 0 0
+-- Retrieval info: CONNECT: @clock1 0 0 0 0 clock_b 0 0 0 0
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0.tdf TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0.inc TRUE
--- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0.cmp TRUE
--- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0.bsf TRUE FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0.cmp FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0.bsf FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0_inst.tdf FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0_waveforms.html TRUE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0_waveforms.html FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL altsyncram0_wave*.jpg FALSE
-- Retrieval info: LIB_FILE: altera_mf
diff --git a/FPGA_by_Fredi/Video/BLITTER/altsyncram0_wave0.jpg b/FPGA_by_Fredi/Video/BLITTER/altsyncram0_wave0.jpg
deleted file mode 100644
index 84314f4..0000000
Binary files a/FPGA_by_Fredi/Video/BLITTER/altsyncram0_wave0.jpg and /dev/null differ
diff --git a/FPGA_by_Fredi/Video/BLITTER/altsyncram0_waveforms.html b/FPGA_by_Fredi/Video/BLITTER/altsyncram0_waveforms.html
deleted file mode 100644
index 7b89eb9..0000000
--- a/FPGA_by_Fredi/Video/BLITTER/altsyncram0_waveforms.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-Sample Waveforms for "altsyncram0.tdf"
-
-
-Sample behavioral waveforms for design file "altsyncram0.tdf"
-The following waveforms show the behavior of altsyncram megafunction for the chosen set of parameters in design "altsyncram0.tdf". For the purpose of this simulation, the contents of the memory at the start of the sample waveforms is assumed to be ( FFF0, FFF1, FFF2, FFF3, ...). The design "altsyncram0.tdf" has
-
-Fig. 1 : Wave showing read operation.
-The above waveform shows the behavior of the design under normal read conditions. The read happens at the rising edge of the enabled clock cycle. The output from the RAM is undefined until after the first rising edge of the read clock.
-
-
-
diff --git a/FPGA_by_Fredi/Video/BLITTER/blitter.tdf.ALT b/FPGA_by_Fredi/Video/BLITTER/blitter.tdf.ALT
deleted file mode 100644
index 1ad8825..0000000
--- a/FPGA_by_Fredi/Video/BLITTER/blitter.tdf.ALT
+++ /dev/null
@@ -1,427 +0,0 @@
--- WARNING: Do NOT edit the input and output ports in this file in a text
--- editor if you plan to continue editing the block that represents it in
--- the Block Editor! File corruption is VERY likely to occur.
-
--- Copyright (C) 1991-2010 Altera Corporation
--- Your use of Altera Corporation's design tools, logic functions
--- and other software and tools, and its AMPP partner logic
--- functions, and any output files from any of the foregoing
--- (including device programming or simulation files), and any
--- associated documentation or information are expressly subject
--- to the terms and conditions of the Altera Program License
--- Subscription Agreement, Altera MegaCore Function License
--- Agreement, or other applicable license agreement, including,
--- without limitation, that your use is for the sole purpose of
--- programming logic devices manufactured by Altera and sold by
--- Altera or its authorized distributors. Please refer to the
--- applicable agreement for further details.
-
-
--- Generated by Quartus II Version 9.1 (Build Build 350 03/24/2010)
--- Created on Sat Jan 15 11:06:17 2011
-INCLUDE "lpm_bustri_WORD.inc";
-INCLUDE "VIDEO/BLITTER/lpm_clshift0.INC";
-
-CONSTANT BL_SKEW_LF = 255;
-
--- Title Statement (optional)
-TITLE "Blitter";
-
-
--- Parameters Statement (optional)
-
--- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE!
--- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE!
-
-
--- Subdesign Section
-
-SUBDESIGN BLITTER
-(
- -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
- nRSTO : INPUT;
- MAIN_CLK : INPUT;
- FB_ALE : INPUT;
- nFB_WR : INPUT;
- nFB_OE : INPUT;
- FB_SIZE0 : INPUT;
- FB_SIZE1 : INPUT;
- VIDEO_RAM_CTR[15..0] : INPUT;
- BLITTER_ON : INPUT;
- FB_ADR[31..0] : INPUT;
- nFB_CS1 : INPUT;
- nFB_CS2 : INPUT;
- nFB_CS3 : INPUT;
- DDRCLK0 : INPUT;
- BLITTER_DIN[127..0] : INPUT;
- BLITTER_DACK[4..0] : INPUT;
- SR_BLITTER_DACK : INPUT;
- BLITTER_RUN : OUTPUT;
- BLITTER_DOUT[127..0] : OUTPUT;
- BLITTER_ADR[31..0] : OUTPUT;
- BLITTER_SIG : OUTPUT;
- BLITTER_WR : OUTPUT;
- BLITTER_TA : OUTPUT;
- FB_AD[31..0] : BIDIR;
- -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
-)
-
-VARIABLE
- FB_B[3..0] :NODE;
- FB_16B[1..0] :NODE;
- BLITTER_CS :NODE;
- BL_HRAM0_CS :NODE;
- BL_HRAM0[15..0] :DFFE;
- BL_HRAM1_CS :NODE;
- BL_HRAM1[15..0] :DFFE;
- BL_HRAM2_CS :NODE;
- BL_HRAM2[15..0] :DFFE;
- BL_HRAM3_CS :NODE;
- BL_HRAM3[15..0] :DFFE;
- BL_HRAM4_CS :NODE;
- BL_HRAM4[15..0] :DFFE;
- BL_HRAM5_CS :NODE;
- BL_HRAM5[15..0] :DFFE;
- BL_HRAM6_CS :NODE;
- BL_HRAM6[15..0] :DFFE;
- BL_HRAM7_CS :NODE;
- BL_HRAM7[15..0] :DFFE;
- BL_HRAM8_CS :NODE;
- BL_HRAM8[15..0] :DFFE;
- BL_HRAM9_CS :NODE;
- BL_HRAM9[15..0] :DFFE;
- BL_HRAMA_CS :NODE;
- BL_HRAMA[15..0] :DFFE;
- BL_HRAMB_CS :NODE;
- BL_HRAMB[15..0] :DFFE;
- BL_HRAMC_CS :NODE;
- BL_HRAMC[15..0] :DFFE;
- BL_HRAMD_CS :NODE;
- BL_HRAMD[15..0] :DFFE;
- BL_HRAME_CS :NODE;
- BL_HRAME[15..0] :DFFE;
- BL_HRAMF_CS :NODE;
- BL_HRAMF[15..0] :DFFE;
- BL_SRC_X_INC_CS :NODE;
- BL_SRC_X_INC[15..0] :DFFE;
- BL_SRC_Y_INC_CS :NODE;
- BL_SRC_Y_INC[15..0] :DFFE;
- BL_ENDMASK1_CS :NODE;
- BL_ENDMASK1[15..0] :DFFE;
- BL_ENDMASK2_CS :NODE;
- BL_ENDMASK2[15..0] :DFFE;
- BL_ENDMASK3_CS :NODE;
- BL_ENDMASK3[15..0] :DFFE;
- BL_SRC_ADRH_CS :NODE;
- BL_SRC_ADRL_CS :NODE;
- BL_SRC_ADR[31..0] :DFFE;
- BL_DST_X_INC_CS :NODE;
- BL_DST_X_INC[15..0] :DFFE;
- BL_DST_Y_INC_CS :NODE;
- BL_DST_Y_INC[15..0] :DFFE;
- BL_DST_ADRH_CS :NODE;
- BL_DST_ADRL_CS :NODE;
- BL_DST_ADR[31..0] :DFFE;
- BL_X_CNT_CS :NODE;
- BL_X_CNT[15..0] :DFFE;
- BL_Y_CNT_CS :NODE;
- BL_Y_CNT[15..0] :DFFE;
- BL_HT_OP_CS :NODE;
- BL_HT_OP[7..0] :DFFE;
- BL_LC_OP[7..0] :DFFE;
- BL_LN_CS :NODE;
- BL_LN[7..0] :DFFE;
- BL_SKEW[7..0] :DFFE;
-
- BL_SKEW_EXT[6..0] :NODE;
- BL_SKEW_IN[255..0] :DFFE;
- BL_SKEW_OUT[255..0] :DFFE;
-
- BL_DATA_DDR_READY :DFF; -- 1 WENN DATEN GESCHRIEBEN ODER LESBAR
- BL_READ_SRC :DFFE;
- BL_DST_BUFFER[127..0] :DFFE;
- BL_READ_DST :DFFE;
-
- COUNT[18..0] :DFF;
-
-BEGIN
--- BYT SELECT 32 BIT
- FB_B0 = FB_ADR[1..0]==0; -- ADR==0
- FB_B1 = FB_ADR[1..0]==1 -- ADR==1
- # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B2 = FB_ADR[1..0]==2 -- ADR==2
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B3 = FB_ADR[1..0]==3 -- ADR==3
- # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
--- BYT SELECT 16 BIT
- FB_16B0 = FB_ADR[0]==0; -- ADR==0
- FB_16B1 = FB_ADR[0]==1 -- ADR==1
- # !(!FB_SIZE1 & FB_SIZE0); -- NOT BYT
--- BLITTER CS
- BLITTER_CS = !nFB_CS1 & FB_ADR[19..6]==H"3E28"; -- FFFF8A00-3F/40
- BLITTER_TA = BLITTER_CS;
--- REGISTER
- -- HALFTON RAM 0
- BL_HRAM0[].CLK = MAIN_CLK;
- BL_HRAM0[15..0] = FB_AD[31..16];
- BL_HRAM0_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C500"; -- $F8A00/2
- BL_HRAM0[15..8].ENA = BL_HRAM0_CS & !nFB_WR & FB_16B0;
- BL_HRAM0[7..0].ENA = BL_HRAM0_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 1
- BL_HRAM1[].CLK = MAIN_CLK;
- BL_HRAM1[15..0] = FB_AD[31..16];
- BL_HRAM1_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C501"; -- $F8A02/2
- BL_HRAM1[15..8].ENA = BL_HRAM1_CS & !nFB_WR & FB_16B0;
- BL_HRAM1[7..0].ENA = BL_HRAM1_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 2
- BL_HRAM2[].CLK = MAIN_CLK;
- BL_HRAM2[15..0] = FB_AD[31..16];
- BL_HRAM2_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C502"; -- $F8A04/2
- BL_HRAM2[15..8].ENA = BL_HRAM2_CS & !nFB_WR & FB_16B0;
- BL_HRAM2[7..0].ENA = BL_HRAM2_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 3
- BL_HRAM3[].CLK = MAIN_CLK;
- BL_HRAM3[15..0] = FB_AD[31..16];
- BL_HRAM3_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C503"; -- $F8A06/2
- BL_HRAM3[15..8].ENA = BL_HRAM3_CS & !nFB_WR & FB_16B0;
- BL_HRAM3[7..0].ENA = BL_HRAM3_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 4
- BL_HRAM4[].CLK = MAIN_CLK;
- BL_HRAM4[15..0] = FB_AD[31..16];
- BL_HRAM4_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C504"; -- $F8A08/2
- BL_HRAM4[15..8].ENA = BL_HRAM4_CS & !nFB_WR & FB_16B0;
- BL_HRAM4[7..0].ENA = BL_HRAM4_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 5
- BL_HRAM5[].CLK = MAIN_CLK;
- BL_HRAM5[15..0] = FB_AD[31..16];
- BL_HRAM5_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C505"; -- $F8A08/2
- BL_HRAM5[15..8].ENA = BL_HRAM5_CS & !nFB_WR & FB_16B0;
- BL_HRAM5[7..0].ENA = BL_HRAM5_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 6
- BL_HRAM6[].CLK = MAIN_CLK;
- BL_HRAM6[15..0] = FB_AD[31..16];
- BL_HRAM6_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C506"; -- $F8A08/2
- BL_HRAM6[15..8].ENA = BL_HRAM6_CS & !nFB_WR & FB_16B0;
- BL_HRAM6[7..0].ENA = BL_HRAM6_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 7
- BL_HRAM7[].CLK = MAIN_CLK;
- BL_HRAM7[15..0] = FB_AD[31..16];
- BL_HRAM7_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C507"; -- $F8A08/2
- BL_HRAM7[15..8].ENA = BL_HRAM7_CS & !nFB_WR & FB_16B0;
- BL_HRAM7[7..0].ENA = BL_HRAM7_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 8
- BL_HRAM8[].CLK = MAIN_CLK;
- BL_HRAM8[15..0] = FB_AD[31..16];
- BL_HRAM8_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C508"; -- $F8A10/2
- BL_HRAM8[15..8].ENA = BL_HRAM8_CS & !nFB_WR & FB_16B0;
- BL_HRAM8[7..0].ENA = BL_HRAM8_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 9
- BL_HRAM9[].CLK = MAIN_CLK;
- BL_HRAM9[15..0] = FB_AD[31..16];
- BL_HRAM9_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C509"; -- $F8A12/2
- BL_HRAM9[15..8].ENA = BL_HRAM9_CS & !nFB_WR & FB_16B0;
- BL_HRAM9[7..0].ENA = BL_HRAM9_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 10
- BL_HRAMA[].CLK = MAIN_CLK;
- BL_HRAMA[15..0] = FB_AD[31..16];
- BL_HRAMA_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C50A"; -- $F8A4/2
- BL_HRAMA[15..8].ENA = BL_HRAMA_CS & !nFB_WR & FB_16B0;
- BL_HRAMA[7..0].ENA = BL_HRAMA_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 11
- BL_HRAMB[].CLK = MAIN_CLK;
- BL_HRAMB[15..0] = FB_AD[31..16];
- BL_HRAMB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C50B"; -- $F8A16/2
- BL_HRAMB[15..8].ENA = BL_HRAMB_CS & !nFB_WR & FB_16B0;
- BL_HRAMB[7..0].ENA = BL_HRAMB_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 12
- BL_HRAMC[].CLK = MAIN_CLK;
- BL_HRAMC[15..0] = FB_AD[31..16];
- BL_HRAMC_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C50C"; -- $F8A18/2
- BL_HRAMC[15..8].ENA = BL_HRAMC_CS & !nFB_WR & FB_16B0;
- BL_HRAMC[7..0].ENA = BL_HRAMC_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 13
- BL_HRAMD[].CLK = MAIN_CLK;
- BL_HRAMD[15..0] = FB_AD[31..16];
- BL_HRAMD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C50D"; -- $F8A1A/2
- BL_HRAMD[15..8].ENA = BL_HRAMD_CS & !nFB_WR & FB_16B0;
- BL_HRAMD[7..0].ENA = BL_HRAMD_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 14
- BL_HRAME[].CLK = MAIN_CLK;
- BL_HRAME[15..0] = FB_AD[31..16];
- BL_HRAME_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C50E"; -- $F8A1C/2
- BL_HRAME[15..8].ENA = BL_HRAME_CS & !nFB_WR & FB_16B0;
- BL_HRAME[7..0].ENA = BL_HRAME_CS & !nFB_WR & FB_16B1;
- -- HALFTON RAM 15
- BL_HRAMF[].CLK = MAIN_CLK;
- BL_HRAMF[15..0] = FB_AD[31..16];
- BL_HRAMF_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C50F"; -- $F8A1E/2
- BL_HRAMF[15..8].ENA = BL_HRAMF_CS & !nFB_WR & FB_16B0;
- BL_HRAMF[7..0].ENA = BL_HRAMF_CS & !nFB_WR & FB_16B1;
- -- SRC X INC
- BL_SRC_X_INC[].CLK = MAIN_CLK;
- BL_SRC_X_INC[] = FB_AD[31..16];
- BL_SRC_X_INC_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C510"; -- $F8A20/2
- BL_SRC_X_INC[15..8].ENA = BL_SRC_X_INC_CS & !nFB_WR & FB_16B0;
- BL_SRC_X_INC[7..0].ENA = BL_SRC_X_INC_CS & !nFB_WR & FB_16B1;
- -- SRC Y INC
- BL_SRC_Y_INC[].CLK = MAIN_CLK;
- BL_SRC_Y_INC[] = FB_AD[31..16];
- BL_SRC_Y_INC_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C511"; -- $F8A22/2
- BL_SRC_Y_INC[15..8].ENA = BL_SRC_Y_INC_CS & !nFB_WR & FB_16B0;
- BL_SRC_Y_INC[7..0].ENA = BL_SRC_Y_INC_CS & !nFB_WR & FB_16B1;
- -- SRC ADR HIGH
- BL_SRC_ADR[].CLK = MAIN_CLK;
- BL_SRC_ADR[31..16] = FB_AD[31..16];
- BL_SRC_ADRH_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C512"; -- $F8A24/2
- BL_SRC_ADR[31..24].ENA = BL_SRC_ADRH_CS & !nFB_WR & FB_16B0;
- BL_SRC_ADR[23..16].ENA = BL_SRC_ADRH_CS & !nFB_WR & FB_16B1;
- -- SRC ADR LOW
- BL_SRC_ADR[].CLK = MAIN_CLK;
- BL_SRC_ADR[15..0] = FB_AD[31..16];
- BL_SRC_ADRL_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C513"; -- $F8A26/2
- BL_SRC_ADR[15..8].ENA = BL_SRC_ADRL_CS & !nFB_WR & FB_16B0;
- BL_SRC_ADR[7..0].ENA = BL_SRC_ADRL_CS & !nFB_WR & FB_16B1;
- -- ENDMASK 1
- BL_ENDMASK1[].CLK = MAIN_CLK;
- BL_ENDMASK1[] = FB_AD[31..16];
- BL_ENDMASK1_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C514"; -- $F8A28/2
- BL_ENDMASK1[15..8].ENA = BL_ENDMASK1_CS & !nFB_WR & FB_16B0;
- BL_ENDMASK1[7..0].ENA = BL_ENDMASK1_CS & !nFB_WR & FB_16B1;
- -- ENDMASK 2
- BL_ENDMASK2[].CLK = MAIN_CLK;
- BL_ENDMASK2[] = FB_AD[31..16];
- BL_ENDMASK2_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C515"; -- $F8A2A/2
- BL_ENDMASK2[15..8].ENA = BL_ENDMASK2_CS & !nFB_WR & FB_16B0;
- BL_ENDMASK2[7..0].ENA = BL_ENDMASK2_CS & !nFB_WR & FB_16B1;
- -- ENDMASK 3
- BL_ENDMASK3[].CLK = MAIN_CLK;
- BL_ENDMASK3[] = FB_AD[31..16];
- BL_ENDMASK3_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C516"; -- $F8A2C/2
- BL_ENDMASK3[15..8].ENA = BL_ENDMASK3_CS & !nFB_WR & FB_16B0;
- BL_ENDMASK3[7..0].ENA = BL_ENDMASK3_CS & !nFB_WR & FB_16B1;
- -- DST X INC
- BL_DST_X_INC[].CLK = MAIN_CLK;
- BL_DST_X_INC[] = FB_AD[31..16];
- BL_DST_X_INC_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C517"; -- $F8A2E/2
- BL_DST_X_INC[15..8].ENA = BL_DST_X_INC_CS & !nFB_WR & FB_16B0;
- BL_DST_X_INC[7..0].ENA = BL_DST_X_INC_CS & !nFB_WR & FB_16B1;
- -- DST Y INC
- BL_DST_Y_INC[].CLK = MAIN_CLK;
- BL_DST_Y_INC[] = FB_AD[31..16];
- BL_DST_Y_INC_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C518"; -- $F8A30/2
- BL_DST_Y_INC[15..8].ENA = BL_DST_Y_INC_CS & !nFB_WR & FB_16B0;
- BL_DST_Y_INC[7..0].ENA = BL_DST_Y_INC_CS & !nFB_WR & FB_16B1;
- -- DST ADR HIGH
- BL_DST_ADR[].CLK = MAIN_CLK;
- BL_DST_ADR[31..16] = FB_AD[31..16];
- BL_DST_ADRH_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C512"; -- $F8A24/2
- BL_DST_ADR[31..24].ENA = BL_DST_ADRH_CS & !nFB_WR & FB_16B0;
- BL_DST_ADR[23..16].ENA = BL_DST_ADRH_CS & !nFB_WR & FB_16B1;
- -- DST ADR LOW
- BL_DST_ADR[].CLK = MAIN_CLK;
- BL_DST_ADR[15..0] = FB_AD[31..16];
- BL_DST_ADRL_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C513"; -- $F8A26/2
- BL_DST_ADR[15..8].ENA = BL_DST_ADRL_CS & !nFB_WR & FB_16B0;
- BL_DST_ADR[7..0].ENA = BL_DST_ADRL_CS & !nFB_WR & FB_16B1;
- -- X COUNT
- BL_X_CNT[].CLK = MAIN_CLK;
- BL_X_CNT[] = FB_AD[31..16];
- BL_X_CNT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C51B"; -- $F8A36/2
- BL_X_CNT[15..8].ENA = BL_X_CNT_CS & !nFB_WR & FB_16B0;
- BL_X_CNT[7..0].ENA = BL_X_CNT_CS & !nFB_WR & FB_16B1;
- -- Y COUNT
- BL_Y_CNT[].CLK = MAIN_CLK;
- BL_Y_CNT[] = FB_AD[31..16];
- BL_Y_CNT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C51C"; -- $F8A38/2
- BL_Y_CNT[15..8].ENA = BL_Y_CNT_CS & !nFB_WR & FB_16B0;
- BL_Y_CNT[7..0].ENA = BL_Y_CNT_CS & !nFB_WR & FB_16B1;
- -- HALFTONE OP BYT
- BL_HT_OP[].CLK = MAIN_CLK;
- BL_HT_OP[] = FB_AD[31..24];
- BL_HT_OP_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C51D"; -- $F8A3A/2
- BL_HT_OP[7..0].ENA = BL_HT_OP_CS & !nFB_WR & FB_16B0;
- -- LOGIC OP BYT
- BL_LC_OP[].CLK = MAIN_CLK;
- BL_LC_OP[] = FB_AD[23..16];
- BL_LC_OP[7..0].ENA = BL_HT_OP_CS & !nFB_WR & FB_16B1; -- $F8A3B
- -- LINE NUMBER BYT
- BL_LN[].CLK = MAIN_CLK;
- BL_LN[] = FB_AD[31..24];
- BL_LN_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C51E"; -- $F8A3C/2
- BL_LN[7..0].ENA = BL_LN_CS & !nFB_WR & FB_16B0;
- -- SKEW BYT
- BL_SKEW[].CLK = MAIN_CLK;
- BL_SKEW[] = FB_AD[31..24];
- BL_SKEW[7..0].ENA = BL_LN_CS & !nFB_WR & FB_16B1; -- $F8A3D
---- REGISTER OUT
- FB_AD[31..16] = lpm_bustri_WORD(
- BL_HRAM0_CS & BL_HRAM0[15..0]
- # BL_HRAM1_CS & BL_HRAM1[15..0]
- # BL_HRAM2_CS & BL_HRAM2[15..0]
- # BL_HRAM3_CS & BL_HRAM3[15..0]
- # BL_HRAM4_CS & BL_HRAM4[15..0]
- # BL_HRAM5_CS & BL_HRAM5[15..0]
- # BL_HRAM6_CS & BL_HRAM6[15..0]
- # BL_HRAM7_CS & BL_HRAM7[15..0]
- # BL_HRAM8_CS & BL_HRAM8[15..0]
- # BL_HRAM9_CS & BL_HRAM9[15..0]
- # BL_HRAMA_CS & BL_HRAMA[15..0]
- # BL_HRAMB_CS & BL_HRAMB[15..0]
- # BL_HRAMC_CS & BL_HRAMC[15..0]
- # BL_HRAMD_CS & BL_HRAMD[15..0]
- # BL_HRAME_CS & BL_HRAME[15..0]
- # BL_HRAMF_CS & BL_HRAMF[15..0]
- # BL_SRC_X_INC_CS & BL_SRC_X_INC[]
- # BL_SRC_Y_INC_CS & BL_SRC_Y_INC[]
- # BL_SRC_ADRH_CS & BL_SRC_ADR[31..16]
- # BL_SRC_ADRL_CS & BL_SRC_ADR[15..0]
- # BL_ENDMASK1_CS & BL_ENDMASK1[]
- # BL_ENDMASK2_CS & BL_ENDMASK2[]
- # BL_ENDMASK3_CS & BL_ENDMASK3[]
- # BL_DST_X_INC_CS & BL_DST_X_INC[]
- # BL_DST_Y_INC_CS & BL_DST_Y_INC[]
- # BL_DST_ADRH_CS & BL_DST_ADR[31..16]
- # BL_DST_ADRL_CS & BL_DST_ADR[15..0]
- # BL_X_CNT_CS & BL_X_CNT[]
- # BL_Y_CNT_CS & BL_Y_CNT[]
- # BL_HT_OP_CS & (BL_HT_OP[],BL_LC_OP[])
- # BL_LN_CS & (BL_LN[],BL_SKEW[])
- ,!nFB_CS1 & FB_ADR[19..6]==H"3E28" & !nFB_OE); -- FFFF8A00-3F/40
------------------------------------------
---
- BL_READ_SRC.CLK = DDRCLK0;
- BL_READ_DST.CLK = DDRCLK0;
-
-
- BLITTER_RUN = VCC;
- BLITTER_SIG = VCC;
- BLITTER_WR = VCC;
--- READY SIGNAL 1 CLOCK SPÄTER
- BL_DATA_DDR_READY.CLK = DDRCLK0;
- BL_DATA_DDR_READY = BL_DATA_DDR_READY & BLITTER_DACK0;
--- SRC BUFFER LADEN
- BL_SKEW_IN[].CLK = DDRCLK0;
- BL_SKEW_IN[].ENA = BL_DATA_DDR_READY & BL_READ_SRC;
- BL_SKEW_IN[255..128] = BLITTER_DIN[];
- BL_SKEW_IN[127..0] = BL_SKEW_IN[255..128];
--- DST BUFFER LADEN
- BL_DST_BUFFER[].CLK = DDRCLK0;
- BL_DST_BUFFER[].ENA = BL_DATA_DDR_READY & BL_READ_DST;
- BL_DST_BUFFER[] = BLITTER_DIN[];
--- SKEW EXTENDET
- BL_SKEW_EXT[6..4] = BL_SRC_ADR[3..1];
- BL_SKEW_EXT[3..0] = BL_SKEW[3..0];
--- SKEW EXT MUX
- BL_SKEW_OUT[].CLK = DDRCLK0;
- BL_SKEW_OUT[].ENA = BL_DATA_DDR_READY & BL_READ_DST;
- BL_SKEW_OUT[] = lpm_clshift0(BL_SKEW_IN[],BL_SKEW_EXT[]); -- BIT 127..0 SIND RELEVANT
-
- COUNT[] = COUNT[] + 16;
- COUNT[].CLK = BLITTER_DACK0;
- BLITTER_DOUT[] = H"112233445566778899AABBCCDDEEFF00";
- BLITTER_ADR[] = (0, COUNT[]) + 400000;
-
-END;
-
diff --git a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift0.bsf b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift0.bsf
deleted file mode 100644
index 9b12256..0000000
--- a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift0.bsf
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-WARNING: Do NOT edit the input and output ports in this file in a text
-editor if you plan to continue editing the block that represents it in
-the Block Editor! File corruption is VERY likely to occur.
-*/
-/*
-Copyright (C) 1991-2010 Altera Corporation
-Your use of Altera Corporation's design tools, logic functions
-and other software and tools, and its AMPP partner logic
-functions, and any output files from any of the foregoing
-(including device programming or simulation files), and any
-associated documentation or information are expressly subject
-to the terms and conditions of the Altera Program License
-Subscription Agreement, Altera MegaCore Function License
-Agreement, or other applicable license agreement, including,
-without limitation, that your use is for the sole purpose of
-programming logic devices manufactured by Altera and sold by
-Altera or its authorized distributors. Please refer to the
-applicable agreement for further details.
-*/
-(header "symbol" (version "1.1"))
-(symbol
- (rect 0 0 208 80)
- (text "lpm_clshift0" (rect 62 3 162 22)(font "Arial" (font_size 10)))
- (text "inst" (rect 8 61 31 76)(font "Arial" ))
- (port
- (pt 0 24)
- (input)
- (text "data[255..0]" (rect 0 0 81 16)(font "Arial" (font_size 8)))
- (text "data[255..0]" (rect 20 16 89 32)(font "Arial" (font_size 8)))
- (line (pt 0 24)(pt 16 24)(line_width 3))
- )
- (port
- (pt 0 40)
- (input)
- (text "distance[6..0]" (rect 0 0 93 16)(font "Arial" (font_size 8)))
- (text "distance[6..0]" (rect 20 32 99 48)(font "Arial" (font_size 8)))
- (line (pt 0 40)(pt 16 40)(line_width 3))
- )
- (port
- (pt 208 24)
- (output)
- (text "result[255..0]" (rect 0 0 89 16)(font "Arial" (font_size 8)))
- (text "result[255..0]" (rect 113 16 189 32)(font "Arial" (font_size 8)))
- (line (pt 208 24)(pt 192 24)(line_width 3))
- )
- (drawing
- (text "LOGICAL right shift" (rect 21 50 114 64)(font "Arial" ))
- (line (pt 16 16)(pt 16 64)(line_width 1))
- (line (pt 192 16)(pt 192 64)(line_width 1))
- (line (pt 16 16)(pt 192 16)(line_width 1))
- (line (pt 16 64)(pt 192 64)(line_width 1))
- )
-)
diff --git a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.cmp b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift144.inc
similarity index 69%
rename from FPGA_by_Fredi/Video/BLITTER/altsyncram0.cmp
rename to FPGA_by_Fredi/Video/BLITTER/lpm_clshift144.inc
index d0a0d93..b8538c0 100644
--- a/FPGA_by_Fredi/Video/BLITTER/altsyncram0.cmp
+++ b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift144.inc
@@ -13,14 +13,13 @@
--applicable agreement for further details.
-component altsyncram0
- PORT
- (
- address : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
- byteena_a : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := (OTHERS => '1');
- clock : IN STD_LOGIC := '1';
- data : IN STD_LOGIC_VECTOR (15 DOWNTO 0);
- wren : IN STD_LOGIC := '0';
- q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
- );
-end component;
+FUNCTION lpm_clshift144
+(
+ data[143..0],
+ direction,
+ distance[7..0]
+)
+
+RETURNS (
+ result[143..0]
+);
diff --git a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift144.qip b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift144.qip
new file mode 100644
index 0000000..8686c8a
--- /dev/null
+++ b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift144.qip
@@ -0,0 +1,4 @@
+set_global_assignment -name IP_TOOL_NAME "LPM_CLSHIFT"
+set_global_assignment -name IP_TOOL_VERSION "9.1"
+set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_clshift144.tdf"]
+set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_clshift144.inc"]
diff --git a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift144.tdf b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift144.tdf
new file mode 100644
index 0000000..1ea9db4
--- /dev/null
+++ b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift144.tdf
@@ -0,0 +1,94 @@
+-- megafunction wizard: %LPM_CLSHIFT%
+-- GENERATION: STANDARD
+-- VERSION: WM1.0
+-- MODULE: lpm_clshift
+
+-- ============================================================
+-- File Name: lpm_clshift144.tdf
+-- Megafunction Name(s):
+-- lpm_clshift
+--
+-- Simulation Library Files(s):
+--
+-- ============================================================
+-- ************************************************************
+-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
+--
+-- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition
+-- ************************************************************
+
+
+--Copyright (C) 1991-2010 Altera Corporation
+--Your use of Altera Corporation's design tools, logic functions
+--and other software and tools, and its AMPP partner logic
+--functions, and any output files from any of the foregoing
+--(including device programming or simulation files), and any
+--associated documentation or information are expressly subject
+--to the terms and conditions of the Altera Program License
+--Subscription Agreement, Altera MegaCore Function License
+--Agreement, or other applicable license agreement, including,
+--without limitation, that your use is for the sole purpose of
+--programming logic devices manufactured by Altera and sold by
+--Altera or its authorized distributors. Please refer to the
+--applicable agreement for further details.
+
+INCLUDE "lpm_clshift.inc";
+
+
+
+SUBDESIGN lpm_clshift144
+(
+ data[143..0] : INPUT;
+ direction : INPUT;
+ distance[7..0] : INPUT;
+ result[143..0] : OUTPUT;
+)
+
+VARIABLE
+
+ lpm_clshift_component : lpm_clshift WITH (
+ LPM_SHIFTTYPE = "LOGICAL",
+ LPM_TYPE = "LPM_CLSHIFT",
+ LPM_WIDTH = 144,
+ LPM_WIDTHDIST = 8
+ );
+
+BEGIN
+
+ result[143..0] = lpm_clshift_component.result[143..0];
+ lpm_clshift_component.distance[7..0] = distance[7..0];
+ lpm_clshift_component.direction = direction;
+ lpm_clshift_component.data[143..0] = data[143..0];
+END;
+
+
+
+-- ============================================================
+-- CNX file retrieval info
+-- ============================================================
+-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
+-- Retrieval info: PRIVATE: LPM_SHIFTTYPE NUMERIC "0"
+-- Retrieval info: PRIVATE: LPM_WIDTH NUMERIC "144"
+-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
+-- Retrieval info: PRIVATE: lpm_width_varies NUMERIC "0"
+-- Retrieval info: PRIVATE: lpm_widthdist NUMERIC "8"
+-- Retrieval info: PRIVATE: lpm_widthdist_style NUMERIC "0"
+-- Retrieval info: PRIVATE: port_direction NUMERIC "2"
+-- Retrieval info: CONSTANT: LPM_SHIFTTYPE STRING "LOGICAL"
+-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_CLSHIFT"
+-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "144"
+-- Retrieval info: CONSTANT: LPM_WIDTHDIST NUMERIC "8"
+-- Retrieval info: USED_PORT: data 0 0 144 0 INPUT NODEFVAL data[143..0]
+-- Retrieval info: USED_PORT: direction 0 0 0 0 INPUT NODEFVAL direction
+-- Retrieval info: USED_PORT: distance 0 0 8 0 INPUT NODEFVAL distance[7..0]
+-- Retrieval info: USED_PORT: result 0 0 144 0 OUTPUT NODEFVAL result[143..0]
+-- Retrieval info: CONNECT: @distance 0 0 8 0 distance 0 0 8 0
+-- Retrieval info: CONNECT: @data 0 0 144 0 data 0 0 144 0
+-- Retrieval info: CONNECT: result 0 0 144 0 @result 0 0 144 0
+-- Retrieval info: CONNECT: @direction 0 0 0 0 direction 0 0 0 0
+-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all
+-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift144.tdf TRUE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift144.inc TRUE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift144.cmp FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift144.bsf FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift144_inst.tdf FALSE
diff --git a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift384.inc b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift384.inc
new file mode 100644
index 0000000..dc44264
--- /dev/null
+++ b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift384.inc
@@ -0,0 +1,25 @@
+--Copyright (C) 1991-2010 Altera Corporation
+--Your use of Altera Corporation's design tools, logic functions
+--and other software and tools, and its AMPP partner logic
+--functions, and any output files from any of the foregoing
+--(including device programming or simulation files), and any
+--associated documentation or information are expressly subject
+--to the terms and conditions of the Altera Program License
+--Subscription Agreement, Altera MegaCore Function License
+--Agreement, or other applicable license agreement, including,
+--without limitation, that your use is for the sole purpose of
+--programming logic devices manufactured by Altera and sold by
+--Altera or its authorized distributors. Please refer to the
+--applicable agreement for further details.
+
+
+FUNCTION lpm_clshift384
+(
+ data[383..0],
+ direction,
+ distance[7..0]
+)
+
+RETURNS (
+ result[383..0]
+);
diff --git a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift384.qip b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift384.qip
new file mode 100644
index 0000000..ade4236
--- /dev/null
+++ b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift384.qip
@@ -0,0 +1,5 @@
+set_global_assignment -name IP_TOOL_NAME "LPM_CLSHIFT"
+set_global_assignment -name IP_TOOL_VERSION "9.1"
+set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_clshift384.tdf"]
+set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_clshift384.inc"]
+set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_clshift384.cmp"]
diff --git a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift0.tdf b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift384.tdf
similarity index 62%
rename from FPGA_by_Fredi/Video/BLITTER/lpm_clshift0.tdf
rename to FPGA_by_Fredi/Video/BLITTER/lpm_clshift384.tdf
index d7d910f..deac5a7 100644
--- a/FPGA_by_Fredi/Video/BLITTER/lpm_clshift0.tdf
+++ b/FPGA_by_Fredi/Video/BLITTER/lpm_clshift384.tdf
@@ -36,11 +36,12 @@ INCLUDE "lpm_clshift.inc";
-SUBDESIGN lpm_clshift0
+SUBDESIGN lpm_clshift384
(
- data[255..0] : INPUT;
- distance[6..0] : INPUT;
- result[255..0] : OUTPUT;
+ data[383..0] : INPUT;
+ direction : INPUT;
+ distance[7..0] : INPUT;
+ result[383..0] : OUTPUT;
)
VARIABLE
@@ -48,16 +49,16 @@ VARIABLE
lpm_clshift_component : lpm_clshift WITH (
LPM_SHIFTTYPE = "LOGICAL",
LPM_TYPE = "LPM_CLSHIFT",
- LPM_WIDTH = 256,
- LPM_WIDTHDIST = 7
+ LPM_WIDTH = 384,
+ LPM_WIDTHDIST = 8
);
BEGIN
- result[255..0] = lpm_clshift_component.result[255..0];
- lpm_clshift_component.distance[6..0] = distance[6..0];
- lpm_clshift_component.direction = VCC;
- lpm_clshift_component.data[255..0] = data[255..0];
+ result[383..0] = lpm_clshift_component.result[383..0];
+ lpm_clshift_component.distance[7..0] = distance[7..0];
+ lpm_clshift_component.direction = direction;
+ lpm_clshift_component.data[383..0] = data[383..0];
END;
@@ -67,26 +68,27 @@ END;
-- ============================================================
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
-- Retrieval info: PRIVATE: LPM_SHIFTTYPE NUMERIC "0"
--- Retrieval info: PRIVATE: LPM_WIDTH NUMERIC "256"
+-- Retrieval info: PRIVATE: LPM_WIDTH NUMERIC "384"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-- Retrieval info: PRIVATE: lpm_width_varies NUMERIC "0"
--- Retrieval info: PRIVATE: lpm_widthdist NUMERIC "7"
--- Retrieval info: PRIVATE: lpm_widthdist_style NUMERIC "1"
--- Retrieval info: PRIVATE: port_direction NUMERIC "1"
+-- Retrieval info: PRIVATE: lpm_widthdist NUMERIC "8"
+-- Retrieval info: PRIVATE: lpm_widthdist_style NUMERIC "0"
+-- Retrieval info: PRIVATE: port_direction NUMERIC "2"
-- Retrieval info: CONSTANT: LPM_SHIFTTYPE STRING "LOGICAL"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_CLSHIFT"
--- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "256"
--- Retrieval info: CONSTANT: LPM_WIDTHDIST NUMERIC "7"
--- Retrieval info: USED_PORT: data 0 0 256 0 INPUT NODEFVAL data[255..0]
--- Retrieval info: USED_PORT: distance 0 0 7 0 INPUT NODEFVAL distance[6..0]
--- Retrieval info: USED_PORT: result 0 0 256 0 OUTPUT NODEFVAL result[255..0]
--- Retrieval info: CONNECT: @distance 0 0 7 0 distance 0 0 7 0
--- Retrieval info: CONNECT: @data 0 0 256 0 data 0 0 256 0
--- Retrieval info: CONNECT: result 0 0 256 0 @result 0 0 256 0
--- Retrieval info: CONNECT: @direction 0 0 0 0 VCC 0 0 0 0
+-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "384"
+-- Retrieval info: CONSTANT: LPM_WIDTHDIST NUMERIC "8"
+-- Retrieval info: USED_PORT: data 0 0 384 0 INPUT NODEFVAL data[383..0]
+-- Retrieval info: USED_PORT: direction 0 0 0 0 INPUT NODEFVAL direction
+-- Retrieval info: USED_PORT: distance 0 0 8 0 INPUT NODEFVAL distance[7..0]
+-- Retrieval info: USED_PORT: result 0 0 384 0 OUTPUT NODEFVAL result[383..0]
+-- Retrieval info: CONNECT: @distance 0 0 8 0 distance 0 0 8 0
+-- Retrieval info: CONNECT: @data 0 0 384 0 data 0 0 384 0
+-- Retrieval info: CONNECT: result 0 0 384 0 @result 0 0 384 0
+-- Retrieval info: CONNECT: @direction 0 0 0 0 direction 0 0 0 0
-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all
-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift0.tdf TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift0.inc TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift0.cmp TRUE
--- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift0.bsf TRUE FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift0.bsf TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_clshift0_inst.tdf FALSE
diff --git a/FPGA_by_Fredi/Video/DDR_CTR.tdf b/FPGA_by_Fredi/Video/DDR_CTR.tdf
index 6c74c7a..72bee92 100644
--- a/FPGA_by_Fredi/Video/DDR_CTR.tdf
+++ b/FPGA_by_Fredi/Video/DDR_CTR.tdf
@@ -6,8 +6,8 @@ INCLUDE "lpm_bustri_BYT.inc";
-- FIFO WATER MARK
CONSTANT FIFO_LWM = 0;
-CONSTANT FIFO_MWM = 200;
-CONSTANT FIFO_HWM = 500;
+CONSTANT FIFO_MWM = 1000;
+CONSTANT FIFO_HWM = 2000;
-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE!
-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE!
@@ -34,7 +34,7 @@ SUBDESIGN DDR_CTR
BLITTER_WR : INPUT;
DDRCLK0 : INPUT;
CLK33M : INPUT;
- FIFO_MW[8..0] : INPUT;
+ FIFO_MW[10..0] : INPUT;
VA[12..0] : OUTPUT;
nVWE : OUTPUT;
nVRAS : OUTPUT;
@@ -205,26 +205,13 @@ BEGIN
DDR_REFRESH_ON = VIDEO_RAM_CTR2;
DDR_CONFIG = VIDEO_RAM_CTR3;
FIFO_ACTIVE = VIDEO_RAM_CTR8;
---------------------------------
+----------------------------------------------------------------
+-- CPU ---------------------------
+--------------------------------------------------------
CPU_ROW_ADR[] = FB_ADR[26..14];
CPU_BA[] = FB_ADR[13..12];
CPU_COL_ADR[] = FB_ADR[11..2];
- nVRAS = !VRAS;
- nVCAS = !VCAS;
- nVWE = !VWE;
- SR_DDR_WR.CLK = DDRCLK0;
- SR_DDRWR_D_SEL.CLK = DDRCLK0;
- SR_VDMP[7..0].CLK = DDRCLK0;
- SR_FIFO_WRE.CLK = DDRCLK0;
CPU_AC.CLK = DDRCLK0;
- FIFO_AC.CLK = DDRCLK0;
- BLITTER_AC.CLK = DDRCLK0;
- DDRWR_D_SEL1 = BLITTER_AC;
--- SELECT LOGIC
- DDR_SEL = FB_ALE & FB_AD[31..30]==B"01";
- DDR_CS.CLK = MAIN_CLK;
- DDR_CS.ENA = FB_ALE;
- DDR_CS = DDR_SEL;
-- WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER
CPU_SIG = DDR_SEL & (nFB_WR # !LINE) & !DDR_CONFIG -- NICHT LINE ODER READ SOFORT LOS WENN NICHT CONFIG
# DDR_SEL & DDR_CONFIG -- CONFIG SOFORT LOS
@@ -234,6 +221,30 @@ BEGIN
# CPU_REQ & FB_REGDDR!=FR_S1 & FB_REGDDR!=FR_S3 & !BUS_CYC_END & !BUS_CYC; -- HALTEN BUS CYC BEGONNEN ODER FERTIG
BUS_CYC.CLK = DDRCLK0;
BUS_CYC = BUS_CYC & !BUS_CYC_END;
+-- SELECT LOGIC
+ DDR_SEL = FB_ALE & FB_AD[31..30]==B"01";
+ DDR_CS.CLK = MAIN_CLK;
+ DDR_CS.ENA = FB_ALE;
+ DDR_CS = DDR_SEL;
+---------------------------------------------------------------
+-- BLITTER ----------------------
+-----------------------------------------
+ BLITTER_REQ.CLK = DDRCLK0;
+ BLITTER_REQ = BLITTER_SIG & !DDR_CONFIG & VCKE & !nVCS;
+ BLITTER_ROW_ADR[] = BLITTER_ADR[26..14];
+ BLITTER_BA[] = BLITTER_ADR[13..12];
+ BLITTER_COL_ADR[] = BLITTER_ADR[11..2];
+ BLITTER_AC.CLK = DDRCLK0;
+ DDRWR_D_SEL1 = BLITTER_AC;
+---------------------------------------------------
+ nVRAS = !VRAS;
+ nVCAS = !VCAS;
+ nVWE = !VWE;
+ SR_DDR_WR.CLK = DDRCLK0;
+ SR_DDRWR_D_SEL.CLK = DDRCLK0;
+ SR_VDMP[7..0].CLK = DDRCLK0;
+ SR_FIFO_WRE.CLK = DDRCLK0;
+ FIFO_AC.CLK = DDRCLK0;
-- STATE MACHINE SYNCHRONISIEREN -----------------
MCS[].CLK = DDRCLK0;
MCS0 = MAIN_CLK;
@@ -563,15 +574,6 @@ BEGIN
DDR_SM = DS_T1;
END CASE;
----------------------------------------------------------------
--- BLITTER ----------------------
------------------------------------------
- BLITTER_REQ.CLK = DDRCLK0;
- BLITTER_REQ = BLITTER_SIG & !DDR_CONFIG & VCKE & !nVCS;
- BLITTER_ROW_ADR[] = BLITTER_ADR[26..14];
- BLITTER_BA1 = BLITTER_ADR13;
- BLITTER_BA0 = BLITTER_ADR12;
- BLITTER_COL_ADR[] = BLITTER_ADR[11..2];
------------------------------------------------------------------------------
-- FIFO ---------------------------------
--------------------------------------------------------
diff --git a/FPGA_by_Fredi/Video/DDR_CTR.tdf.bak b/FPGA_by_Fredi/Video/DDR_CTR.tdf.bak
deleted file mode 100644
index d5b5ec2..0000000
--- a/FPGA_by_Fredi/Video/DDR_CTR.tdf.bak
+++ /dev/null
@@ -1,659 +0,0 @@
-TITLE "DDR_CTR";
-
--- CREATED BY FREDI ASCHWANDEN
-
-INCLUDE "lpm_bustri_BYT.inc";
-
--- FIFO WATER MARK
-CONSTANT FIFO_LWM = 0;
-CONSTANT FIFO_MWM = 200;
-CONSTANT FIFO_HWM = 500;
-
--- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE!
--- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE!
-
-SUBDESIGN DDR_CTR
-(
- -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
- FB_ADR[31..0] : INPUT;
- nFB_CS1 : INPUT;
- nFB_CS2 : INPUT;
- nFB_CS3 : INPUT;
- nFB_OE : INPUT;
- FB_SIZE0 : INPUT;
- FB_SIZE1 : INPUT;
- nRSTO : INPUT;
- MAIN_CLK : INPUT;
- FB_ALE : INPUT;
- nFB_WR : INPUT;
- DDR_SYNC_66M : INPUT;
- CLR_FIFO : INPUT;
- VIDEO_RAM_CTR[15..0] : INPUT;
- BLITTER_ADR[31..0] : INPUT;
- BLITTER_SIG : INPUT;
- BLITTER_WR : INPUT;
- DDRCLK0 : INPUT;
- CLK33M : INPUT;
- FIFO_MW[8..0] : INPUT;
- VA[12..0] : OUTPUT;
- nVWE : OUTPUT;
- nVRAS : OUTPUT;
- nVCS : OUTPUT;
- VCKE : OUTPUT;
- nVCAS : OUTPUT;
- FB_LE[3..0] : OUTPUT;
- FB_VDOE[3..0] : OUTPUT;
- SR_FIFO_WRE : OUTPUT;
- SR_DDR_FB : OUTPUT;
- SR_DDR_WR : OUTPUT;
- SR_DDRWR_D_SEL : OUTPUT;
- SR_VDMP[7..0] : OUTPUT;
- VIDEO_DDR_TA : OUTPUT;
- SR_BLITTER_DACK : OUTPUT;
- BA[1..0] : OUTPUT;
- DDRWR_D_SEL1 : OUTPUT;
- VDM_SEL[3..0] : OUTPUT;
- FB_AD[31..0] : BIDIR;
- -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
-)
-
-VARIABLE
- FB_REGDDR :MACHINE WITH STATES(FR_WAIT,FR_S0,FR_S1,FR_S2,FR_S3);
- DDR_SM :MACHINE WITH STATES(DS_T1,DS_T2A,DS_T2B,DS_T3,DS_N5,DS_N6, DS_N7, DS_N8, -- START (NORMAL 8 CYCLES TOTAL = 60ns)
- DS_C2,DS_C3,DS_C4, DS_C5, DS_C6, DS_C7, -- CONFIG
- DS_T4R,DS_T5R, -- READ CPU UND BLITTER,
- DS_T4W,DS_T5W,DS_T6W,DS_T7W,DS_T8W,DS_T9W, -- WRITE CPU UND BLITTER
- DS_T4F,DS_T5F,DS_T6F,DS_T7F,DS_T8F,DS_T9F,DS_T10F, -- READ FIFO
- DS_CB6, DS_CB8, -- CLOSE FIFO BANK
- DS_R2,DS_R3,DS_R4, DS_R5, DS_R6); -- REFRESH 10X7.5NS=75NS
- LINE :NODE;
- FB_B[3..0] :NODE;
- VCAS :NODE;
- VRAS :NODE;
- VWE :NODE;
- VA_P[12..0] :DFF;
- BA_P[1..0] :DFF;
- VA_S[12..0] :DFF;
- BA_S[1..0] :DFF;
- MCS[1..0] :DFF;
- CPU_DDR_SYNC :DFF;
- DDR_SEL :NODE;
- DDR_CS :DFFE;
- DDR_CONFIG :NODE;
- SR_DDR_WR :DFF;
- SR_DDRWR_D_SEL :DFF;
- SR_VDMP[7..0] :DFF;
- CPU_ROW_ADR[12..0] :NODE;
- CPU_BA[1..0] :NODE;
- CPU_COL_ADR[9..0] :NODE;
- CPU_SIG :NODE;
- CPU_REQ :DFF;
- CPU_AC :DFF;
- BUS_CYC :DFF;
- BUS_CYC_END :NODE;
- BLITTER_REQ :DFF;
- BLITTER_AC :DFF;
- BLITTER_ROW_ADR[12..0] :NODE;
- BLITTER_BA[1..0] :NODE;
- BLITTER_COL_ADR[9..0] :NODE;
- FIFO_REQ :DFF;
- FIFO_AC :DFF;
- FIFO_ROW_ADR[12..0] :NODE;
- FIFO_BA[1..0] :NODE;
- FIFO_COL_ADR[9..0] :NODE;
- FIFO_ACTIVE :NODE;
- CLR_FIFO_SYNC :DFF;
- CLEAR_FIFO_CNT :DFF;
- STOP :DFF;
- SR_FIFO_WRE :DFF;
- FIFO_BANK_OK :DFF;
- FIFO_BANK_NOT_OK :NODE;
- DDR_REFRESH_ON :NODE;
- DDR_REFRESH_CNT[10..0] :DFF;
- DDR_REFRESH_REQ :DFF;
- DDR_REFRESH_SIG[3..0] :DFFE;
- REFRESH_TIME :DFF;
- VIDEO_BASE_L_D[7..0] :DFFE;
- VIDEO_BASE_L :NODE;
- VIDEO_BASE_M_D[7..0] :DFFE;
- VIDEO_BASE_M :NODE;
- VIDEO_BASE_H_D[7..0] :DFFE;
- VIDEO_BASE_H :NODE;
- VIDEO_BASE_X_D[2..0] :DFFE;
- VIDEO_ADR_CNT[22..0] :DFFE;
- VIDEO_CNT_L :NODE;
- VIDEO_CNT_M :NODE;
- VIDEO_CNT_H :NODE;
- VIDEO_BASE_ADR[22..0] :NODE;
- VIDEO_ACT_ADR[26..0] :NODE;
-
-BEGIN
- LINE = FB_SIZE0 & FB_SIZE1;
--- BYT SELECT
- FB_B0 = FB_ADR[1..0]==0 -- ADR==0
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B1 = FB_ADR[1..0]==1 -- ADR==1
- # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B2 = FB_ADR[1..0]==2 -- ADR==2
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B3 = FB_ADR[1..0]==3 -- ADR==3
- # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
--- CPU READ (REG DDR => CPU) AND WRITE (CPU => REG DDR) --------------------------------------------------
- FB_REGDDR.CLK = MAIN_CLK;
- CASE FB_REGDDR IS
- WHEN FR_WAIT =>
- FB_LE0 = !nFB_WR;
- IF BUS_CYC # DDR_SEL & LINE & !nFB_WR THEN -- LOS WENN BEREIT ODER IMMER BEI LINE WRITE
- FB_REGDDR = FR_S0;
- ELSE
- FB_REGDDR = FR_WAIT;
- END IF;
- WHEN FR_S0 =>
- IF DDR_CS THEN
- FB_LE0 = !nFB_WR;
- VIDEO_DDR_TA = VCC;
- IF LINE THEN
- FB_VDOE0 = !nFB_OE & !DDR_CONFIG;
- FB_REGDDR = FR_S1;
- ELSE
- BUS_CYC_END = VCC;
- FB_VDOE0 = !nFB_OE & !MAIN_CLK & !DDR_CONFIG;
- FB_REGDDR = FR_WAIT;
- END IF;
- ELSE
- FB_REGDDR = FR_WAIT;
- END IF;
- WHEN FR_S1 =>
- IF DDR_CS THEN
- FB_VDOE1 = !nFB_OE & !DDR_CONFIG;
- FB_LE1 = !nFB_WR;
- VIDEO_DDR_TA = VCC;
- FB_REGDDR = FR_S2;
- ELSE
- FB_REGDDR = FR_WAIT;
- END IF;
- WHEN FR_S2 =>
- IF DDR_CS THEN
- FB_VDOE2 = !nFB_OE & !DDR_CONFIG;
- FB_LE2 = !nFB_WR;
- IF !BUS_CYC & LINE & !nFB_WR THEN -- BEI LINE WRITE EVT. WARTEN
- FB_REGDDR = FR_S2;
- ELSE
- VIDEO_DDR_TA = VCC;
- FB_REGDDR = FR_S3;
- END IF;
- ELSE
- FB_REGDDR = FR_WAIT;
- END IF;
- WHEN FR_S3 =>
- IF DDR_CS THEN
- FB_VDOE3 = !nFB_OE & !MAIN_CLK & !DDR_CONFIG;
- FB_LE3 = !nFB_WR;
- VIDEO_DDR_TA = VCC;
- BUS_CYC_END = VCC;
- FB_REGDDR = FR_WAIT;
- ELSE
- FB_REGDDR = FR_WAIT;
- END IF;
- END CASE;
--- DDR STEUERUNG -----------------------------------------------------
--- VIDEO RAM CONTROL REGISTER (IST IN VIDEO_MUX_CTR) $F0000400: BIT 0: VCKE; 1: !nVCS ;2:REFRESH ON , (0=FIFO UND CNT CLEAR); 3: CONFIG; 8: FIFO_ACTIVE;
- VCKE = VIDEO_RAM_CTR0;
- nVCS = !VIDEO_RAM_CTR1;
- DDR_REFRESH_ON = VIDEO_RAM_CTR2;
- DDR_CONFIG = VIDEO_RAM_CTR3;
- FIFO_ACTIVE = VIDEO_RAM_CTR8;
---------------------------------
- CPU_ROW_ADR[] = FB_ADR[26..14];
- CPU_BA[] = FB_ADR[13..12];
- CPU_COL_ADR[] = FB_ADR[11..2];
- nVRAS = !VRAS;
- nVCAS = !VCAS;
- nVWE = !VWE;
- SR_DDR_WR.CLK = DDRCLK0;
- SR_DDRWR_D_SEL.CLK = DDRCLK0;
- SR_VDMP[7..0].CLK = DDRCLK0;
- SR_FIFO_WRE.CLK = DDRCLK0;
- CPU_AC.CLK = DDRCLK0;
- FIFO_AC.CLK = DDRCLK0;
- BLITTER_AC.CLK = DDRCLK0;
- DDRWR_D_SEL1 = BLITTER_AC;
--- SELECT LOGIC
- DDR_SEL = FB_ALE & FB_AD[31..30]==B"01";
- DDR_CS.CLK = MAIN_CLK;
- DDR_CS.ENA = FB_ALE;
- DDR_CS = DDR_SEL;
--- WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER
- CPU_SIG = DDR_SEL & (nFB_WR # !LINE) & !DDR_CONFIG -- NICHT LINE ODER READ SOFORT LOS WENN NICHT CONFIG
- # DDR_SEL & DDR_CONFIG -- CONFIG SOFORT LOS
- # FB_REGDDR==FR_S1 & !nFB_WR; -- LINE WRITE SPÄTER
- CPU_REQ.CLK = DDR_SYNC_66M;
- CPU_REQ = CPU_SIG
- # CPU_REQ & FB_REGDDR!=FR_S1 & FB_REGDDR!=FR_S3 & !BUS_CYC_END & !BUS_CYC; -- HALTEN BUS CYC BEGONNEN ODER FERTIG
- BUS_CYC.CLK = DDRCLK0;
- BUS_CYC = BUS_CYC & !BUS_CYC_END;
- -- STATE MACHINE SYNCHRONISIEREN -----------------
- MCS[].CLK = DDRCLK0;
- MCS0 = MAIN_CLK;
- MCS1 = MCS0;
- CPU_DDR_SYNC.CLK = DDRCLK0;
- CPU_DDR_SYNC = MCS[]==2 & VCKE & !nVCS; -- NUR 1 WENN EIN
- ---------------------------------------------------
- VA_S[].CLK = DDRCLK0;
- BA_S[].CLK = DDRCLK0;
- VA[] = VA_S[];
- BA[] = BA_S[];
- VA_P[].CLK = DDRCLK0;
- BA_P[].CLK = DDRCLK0;
--- DDR STATE MACHINE -----------------------------------------------
- DDR_SM.CLK = DDRCLK0;
- CASE DDR_SM IS
- WHEN DS_T1 =>
- IF DDR_REFRESH_REQ THEN
- DDR_SM = DS_R2;
- ELSE
- IF CPU_DDR_SYNC THEN -- SYNCHRON UND EIN?
- IF DDR_CONFIG THEN -- JA
- DDR_SM = DS_C2;
- ELSE
- IF CPU_REQ THEN -- BEI WAIT UND LINE WRITE
- VA_S[] = CPU_ROW_ADR[];
- BA_S[] = CPU_BA[];
- CPU_AC = VCC;
- BUS_CYC = VCC;
- DDR_SM = DS_T2B;
- ELSE
- IF FIFO_REQ # !BLITTER_REQ THEN -- FIFO IST DEFAULT
- VA_P[] = FIFO_ROW_ADR[];
- BA_P[] = FIFO_BA[];
- FIFO_AC = VCC; -- VORBESETZEN
- ELSE
- VA_P[] = BLITTER_ROW_ADR[];
- BA_P[] = BLITTER_BA[];
- BLITTER_AC = VCC; -- VORBESETZEN
- END IF;
- DDR_SM = DS_T2A;
- END IF;
- END IF;
- ELSE
- DDR_SM = DS_T1; -- NEIN ->SYNCHRONISIEREN
- END IF;
- END IF;
-
- WHEN DS_T2A => -- SCHNELLZUGRIFF *** HIER IST PAGE IMMER NOT OK ***
- IF DDR_SEL & (nFB_WR # !LINE) THEN
- VRAS = VCC;
- VA[] = FB_AD[26..14];
- BA[] = FB_AD[13..12];
- VA_S[10] = VCC; -- AUTO PRECHARGE DA NICHT FIFO PAGE
- CPU_AC = VCC;
- BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN
- ELSE
- VRAS = FIFO_AC & FIFO_REQ # BLITTER_AC & BLITTER_REQ;
- VA[] = VA_P[];
- BA[] = BA_P[];
- VA_S[10] = !(FIFO_AC & FIFO_REQ);
- FIFO_BANK_OK = FIFO_AC & FIFO_REQ;
- FIFO_AC = FIFO_AC & FIFO_REQ;
- BLITTER_AC = BLITTER_AC & BLITTER_REQ;
- END IF;
- DDR_SM = DS_T3;
-
- WHEN DS_T2B =>
- VRAS = VCC;
- FIFO_BANK_NOT_OK = VCC;
- CPU_AC = VCC;
- BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN
- DDR_SM = DS_T3;
-
- WHEN DS_T3 =>
- CPU_AC = CPU_AC;
- FIFO_AC = FIFO_AC;
- BLITTER_AC = BLITTER_AC;
- VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE
- IF !nFB_WR & CPU_AC # BLITTER_WR & BLITTER_AC THEN
- DDR_SM = DS_T4W;
- ELSE
- IF CPU_AC THEN -- CPU?
- VA_S[9..0] = CPU_COL_ADR[];
- BA_S[] = CPU_BA[];
- DDR_SM = DS_T4R;
- ELSE
- IF FIFO_AC THEN -- FIFO?
- VA_S[9..0] = FIFO_COL_ADR[];
- BA_S[] = FIFO_BA[];
- DDR_SM = DS_T4F;
- ELSE
- IF BLITTER_AC THEN
- VA_S[9..0] = BLITTER_COL_ADR[];
- BA_S[] = BLITTER_BA[];
- DDR_SM = DS_T4R;
- ELSE
- DDR_SM = DS_N8;
- END IF;
- END IF;
- END IF;
- END IF;
--- READ
- WHEN DS_T4R =>
- CPU_AC = CPU_AC;
- BLITTER_AC = BLITTER_AC;
- VCAS = VCC;
- SR_DDR_FB = CPU_AC; -- READ DATEN FÜR CPU
- SR_BLITTER_DACK = BLITTER_AC; -- BLITTER DACK AND BLITTER LATCH DATEN
- DDR_SM = DS_T5R;
-
- WHEN DS_T5R =>
- CPU_AC = CPU_AC;
- BLITTER_AC = BLITTER_AC;
- IF FIFO_REQ & FIFO_BANK_OK THEN -- FIFO READ EINSCHIEBEN WENN BANK OK
- VA_S[9..0] = FIFO_COL_ADR[];
- VA_S[10] = GND; -- MANUEL PRECHARGE
- BA_S[] = FIFO_BA[];
- DDR_SM = DS_T6F;
- ELSE
- VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN
- DDR_SM = DS_CB6;
- END IF;
--- WRITE
- WHEN DS_T4W =>
- CPU_AC = CPU_AC;
- BLITTER_AC = BLITTER_AC;
- SR_BLITTER_DACK = BLITTER_AC; -- BLITTER ACK AND BLITTER LATCH DATEN
- VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE
- DDR_SM = DS_T5W;
-
- WHEN DS_T5W =>
- CPU_AC = CPU_AC;
- BLITTER_AC = BLITTER_AC;
- VA_S[9..0] = CPU_AC & CPU_COL_ADR[]
- # BLITTER_AC & BLITTER_COL_ADR[];
- VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE
- BA_S[] = CPU_AC & CPU_BA[]
- # BLITTER_AC & BLITTER_BA[];
- SR_VDMP[7..4] = FB_B[]; -- BYTE ENABLE WRITE
- SR_VDMP[3..0] = LINE & B"1111"; -- LINE ENABLE WRITE
- DDR_SM = DS_T6W;
-
- WHEN DS_T6W =>
- CPU_AC = CPU_AC;
- BLITTER_AC = BLITTER_AC;
- VCAS = VCC;
- VWE = VCC;
- SR_DDR_WR = VCC; -- WRITE COMMAND CPU UND BLITTER IF WRITER
- SR_DDRWR_D_SEL = VCC; -- 2. HÄLFTE WRITE DATEN SELEKTIEREN
- SR_VDMP[] = LINE & B"11111111"; -- WENN LINE DANN ACTIV
- DDR_SM = DS_T7W;
-
- WHEN DS_T7W =>
- CPU_AC = CPU_AC;
- BLITTER_AC = BLITTER_AC;
- SR_DDR_WR = VCC; -- WRITE COMMAND CPU UND BLITTER IF WRITE
- SR_DDRWR_D_SEL = VCC; -- 2. HÄLFTE WRITE DATEN SELEKTIEREN
- DDR_SM = DS_T8W;
-
- WHEN DS_T8W =>
- DDR_SM = DS_T9W;
-
- WHEN DS_T9W =>
- IF FIFO_REQ & FIFO_BANK_OK THEN
- VA_S[9..0] = FIFO_COL_ADR[];
- VA_S[10] = GND; -- NON AUTO PRECHARGE
- BA_S[] = FIFO_BA[];
- DDR_SM = DS_T6F;
- ELSE
- VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN
- DDR_SM = DS_CB6;
- END IF;
--- FIFO READ
- WHEN DS_T4F =>
- VCAS = VCC;
- SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO
- DDR_SM = DS_T5F;
-
- WHEN DS_T5F =>
- IF FIFO_REQ THEN
- IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE?
- VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN
- DDR_SM = DS_CB6; -- BANK SCHLIESSEN
- ELSE
- VA_S[9..0] = FIFO_COL_ADR[]+4;
- VA_S[10] = GND; -- NON AUTO PRECHARGE
- BA_S[] = FIFO_BA[];
- DDR_SM = DS_T6F;
- END IF;
- ELSE
- VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN
- DDR_SM = DS_CB6; -- NOCH OFFEN LASSEN
- END IF;
-
- WHEN DS_T6F =>
- VCAS = VCC;
- SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO
- DDR_SM = DS_T7F;
-
- WHEN DS_T7F =>
- IF CPU_REQ & FIFO_MW[]>FIFO_LWM THEN
- VA_S[10] = VCC; -- ALLE PAGES SCHLIESEN
- DDR_SM = DS_CB8; -- BANK SCHLIESSEN
- ELSE
- IF FIFO_REQ THEN
- IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE?
- VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN
- DDR_SM = DS_CB8; -- BANK SCHLIESSEN
- ELSE
- VA_S[9..0] = FIFO_COL_ADR[]+4;
- VA_S[10] = GND; -- NON AUTO PRECHARGE
- BA_S[] = FIFO_BA[];
- DDR_SM = DS_T8F;
- END IF;
- ELSE
- VA_S[10] = VCC; -- ALLE PAGES SCHLIESEN
- DDR_SM = DS_CB8; -- BANK SCHLIESSEN
- END IF;
- END IF;
-
- WHEN DS_T8F =>
- VCAS = VCC;
- SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO
- IF FIFO_MW[]
- ELSE
- DDR_SM = DS_T9F;
- END IF;
-
- WHEN DS_T9F =>
- IF FIFO_REQ THEN
- IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE?
- VA_S[10] = VCC; -- ALLE BANKS SCHLIESEN
- DDR_SM = DS_CB6; -- BANK SCHLIESSEN
- ELSE
- VA_P[9..0] = FIFO_COL_ADR[]+4;
- VA_P[10] = GND; -- NON AUTO PRECHARGE
- BA_P[] = FIFO_BA[];
- DDR_SM = DS_T10F;
- END IF;
- ELSE
- VA_S[10] = VCC; -- ALLE BANKS SCHLIESEN
- DDR_SM = DS_CB6; -- BANK SCHLIESSEN
- END IF;
-
- WHEN DS_T10F =>
- IF DDR_SEL & (nFB_WR # !LINE) & FB_AD[13..12]!=FIFO_BA[] THEN
- VRAS = VCC;
- VA[] = FB_AD[26..14];
- BA[] = FB_AD[13..12];
- CPU_AC = VCC;
- BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN
- VA_S[10] = VCC; -- AUTO PRECHARGE DA NICHT FIFO BANK
- DDR_SM = DS_T3;
- ELSE
- VCAS = VCC;
- VA[] = VA_P[];
- BA[] = BA_P[];
- SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO
- DDR_SM = DS_T7F;
- END IF;
-
--- CONFIG CYCLUS
- WHEN DS_C2 =>
- DDR_SM = DS_C3;
- WHEN DS_C3 =>
- BUS_CYC = CPU_REQ;
- DDR_SM = DS_C4;
- WHEN DS_C4 =>
- IF CPU_REQ THEN
- DDR_SM = DS_C5;
- ELSE
- DDR_SM = DS_T1;
- END IF;
- WHEN DS_C5 =>
- DDR_SM = DS_C6;
- WHEN DS_C6 =>
- VA_S[] = FB_AD[12..0];
- BA_S[] = FB_AD[14..13];
- DDR_SM = DS_C7;
- WHEN DS_C7 =>
- VRAS = FB_AD18 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE
- VCAS = FB_AD17 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE
- VWE = FB_AD16 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE
- DDR_SM = DS_N8;
--- CLOSE FIFO BANK
- WHEN DS_CB6 =>
- FIFO_BANK_NOT_OK = VCC; -- AUF NOT OK
- VRAS = VCC; -- BÄNKE SCHLIESSEN
- VWE = VCC;
- DDR_SM = DS_N7;
- WHEN DS_CB8 =>
- FIFO_BANK_NOT_OK = VCC; -- AUF NOT OK
- VRAS = VCC; -- BÄNKE SCHLIESSEN
- VWE = VCC;
- DDR_SM = DS_T1;
--- REFRESH 70NS = 10 ZYCLEN
- WHEN DS_R2 =>
- IF DDR_REFRESH_SIG[]==9 THEN -- EIN CYCLUS VORLAUF UM BANKS ZU SCHLIESSEN
- VRAS = VCC; -- ALLE BANKS SCHLIESSEN
- VWE = VCC;
- VA[10] = VCC;
- FIFO_BANK_NOT_OK = VCC;
- DDR_SM = DS_R4;
- ELSE
- VCAS = VCC;
- VRAS = VCC;
- DDR_SM = DS_R3;
- END IF;
- WHEN DS_R3 =>
- DDR_SM = DS_R4;
- WHEN DS_R4 =>
- DDR_SM = DS_R5;
- WHEN DS_R5 =>
- DDR_SM = DS_R6;
- WHEN DS_R6 =>
- DDR_SM = DS_N5;
--- LEERSCHLAUFE
- WHEN DS_N5 =>
- DDR_SM = DS_N6;
- WHEN DS_N6 =>
- DDR_SM = DS_N7;
- WHEN DS_N7 =>
- DDR_SM = DS_N8;
- WHEN DS_N8 =>
- DDR_SM = DS_T1;
- END CASE;
-
----------------------------------------------------------------
--- BLITTER ----------------------
------------------------------------------
- BLITTER_REQ.CLK = DDRCLK0;
- BLITTER_REQ = BLITTER_SIG & !DDR_CONFIG & VCKE & !nVCS;
- BLITTER_ROW_ADR[] = BLITTER_ADR[26..14];
- BLITTER_BA1 = BLITTER_ADR13;
- BLITTER_BA0 = BLITTER_ADR12;
- BLITTER_COL_ADR[] = BLITTER_ADR[11..2];
-------------------------------------------------------------------------------
--- FIFO ---------------------------------
---------------------------------------------------------
- FIFO_REQ.CLK = DDRCLK0;
- FIFO_REQ = (FIFO_MW[]2048 33MHz CLOCKS
------------------------------------------------------------------------------------------
- DDR_REFRESH_CNT[].CLK = CLK33M;
- DDR_REFRESH_CNT[] = DDR_REFRESH_CNT[]+1; -- ZÄHLEN 0-2047
- REFRESH_TIME.CLK = DDRCLK0;
- REFRESH_TIME = DDR_REFRESH_CNT[]==0 & !MAIN_CLK; -- SYNC
- DDR_REFRESH_SIG[].CLK = DDRCLK0;
- DDR_REFRESH_SIG[].ENA = REFRESH_TIME # DDR_SM==DS_R6;
- DDR_REFRESH_SIG[] = REFRESH_TIME & 9 & DDR_REFRESH_ON & !DDR_CONFIG -- 9 STÜCK (8 REFRESH UND 1 ALS VORLAUF)
- # !REFRESH_TIME & (DDR_REFRESH_SIG[]-1) & DDR_REFRESH_ON & !DDR_CONFIG; -- MINUS 1 WENN GEMACHT
- DDR_REFRESH_REQ.CLK = DDRCLK0;
- DDR_REFRESH_REQ = DDR_REFRESH_SIG[]!=0 & DDR_REFRESH_ON & !REFRESH_TIME & !DDR_CONFIG;
------------------------------------------------------------
--- VIDEO REGISTER -----------------------
----------------------------------------------------------------------------------------------------------------------
- VIDEO_BASE_L_D[].CLK = MAIN_CLK;
- VIDEO_BASE_L = !nFB_CS1 & FB_ADR[19..1]==H"7C106"; -- 820D/2
- VIDEO_BASE_L_D[] = FB_AD[23..16]; -- SORRY, NUR 16 BYT GRENZEN
- VIDEO_BASE_L_D[].ENA = !nFB_WR & VIDEO_BASE_L & FB_B1;
-
- VIDEO_BASE_M_D[].CLK = MAIN_CLK;
- VIDEO_BASE_M = !nFB_CS1 & FB_ADR[19..1]==H"7C101"; -- 8203/2
- VIDEO_BASE_M_D[] = FB_AD[23..16];
- VIDEO_BASE_M_D[].ENA = !nFB_WR & VIDEO_BASE_M & FB_B3;
-
- VIDEO_BASE_H_D[].CLK = MAIN_CLK;
- VIDEO_BASE_H = !nFB_CS1 & FB_ADR[19..1]==H"7C100"; -- 8200-1/2
- VIDEO_BASE_H_D[] = FB_AD[23..16];
- VIDEO_BASE_H_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B1;
- VIDEO_BASE_X_D[].CLK = MAIN_CLK;
- VIDEO_BASE_X_D[] = FB_AD[26..24];
- VIDEO_BASE_X_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B0;
-
- VIDEO_CNT_L = !nFB_CS1 & FB_ADR[19..1]==H"7C104"; -- 8209/2
- VIDEO_CNT_M = !nFB_CS1 & FB_ADR[19..1]==H"7C103"; -- 8207/2
- VIDEO_CNT_H = !nFB_CS1 & FB_ADR[19..1]==H"7C102"; -- 8204,5/2
-
- FB_AD[31..24] = lpm_bustri_BYT(
- VIDEO_BASE_H & (0,VIDEO_BASE_X_D[])
- # VIDEO_CNT_H & (0,VIDEO_ACT_ADR[26..24])
- ,(VIDEO_BASE_H # VIDEO_CNT_H) & !nFB_OE);
-
- FB_AD[23..16] = lpm_bustri_BYT(
- VIDEO_BASE_L & VIDEO_BASE_L_D[]
- # VIDEO_BASE_M & VIDEO_BASE_M_D[]
- # VIDEO_BASE_H & VIDEO_BASE_H_D[]
- # VIDEO_CNT_L & VIDEO_ACT_ADR[7..0]
- # VIDEO_CNT_M & VIDEO_ACT_ADR[15..8]
- # VIDEO_CNT_H & VIDEO_ACT_ADR[23..16]
- ,(VIDEO_BASE_L # VIDEO_BASE_M # VIDEO_BASE_H # VIDEO_CNT_L # VIDEO_CNT_M # VIDEO_CNT_H) & !nFB_OE);
-END;
-
diff --git a/FPGA_by_Fredi/Video/DDR_CTR_BLITTER.tdf.bak b/FPGA_by_Fredi/Video/DDR_CTR_BLITTER.tdf.bak
deleted file mode 100644
index 03052b4..0000000
--- a/FPGA_by_Fredi/Video/DDR_CTR_BLITTER.tdf.bak
+++ /dev/null
@@ -1,352 +0,0 @@
-TITLE "DDR_CTR_BLITTER";
-
--- CREATED BY FREDI ASCHWANDEN
-
-INCLUDE "lpm_bustri_BYT.inc";
-
-
--- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE!
--- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE!
-
-SUBDESIGN DDR_CTR_BLITTER
-(
- -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
- FB_ADR[31..0] : INPUT;
- nFB_CS1 : INPUT;
- nFB_CS2 : INPUT;
- nFB_CS3 : INPUT;
- nFB_OE : INPUT;
- FB_SIZE0 : INPUT;
- FB_SIZE1 : INPUT;
- nRSTO : INPUT;
- MAIN_CLK : INPUT;
- FIFO_FULL : INPUT;
- FB_ALE : INPUT;
- nFB_WR : INPUT;
- DDR_SYNC_66M : INPUT;
- VSYNC : INPUT;
- BLITTER_ON : INPUT;
- VIDEO_RAM_CTR[15..0] : INPUT;
- VDVZ[127..0] : INPUT;
- DDRCLK[3..0] : INPUT;
- BA0 : OUTPUT;
- BA1 : OUTPUT;
- VA[12..0] : OUTPUT;
- nVWE : OUTPUT;
- nVRAS : OUTPUT;
- nVCS : OUTPUT;
- VCKE : OUTPUT;
- nVCAS : OUTPUT;
- FIFO_WRE : OUTPUT;
- FB_LE[3..0] : OUTPUT;
- FB_VDOE[3..0] : OUTPUT;
- START_CYC_RDWR : OUTPUT;
- DDR_WR : OUTPUT;
- CLEAR_FIFO_CNT : OUTPUT;
- BLITTER_RUN : OUTPUT;
- BLITTER_DOUT[127..0] : OUTPUT;
- BLITTER_LE[3..0] : OUTPUT;
- BLITTER_RDE : OUTPUT;
- DDRWR_D_SEL[1..0] : OUTPUT;
- VDMP[7..0] : OUTPUT;
- FB_AD[31..0] : BIDIR;
- -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
-)
-
-VARIABLE
- FB_REGDDR :MACHINE WITH STATES(FR_WAIT,FR_S0,FR_S1,FR_S2,FR_S3);
- DDR_SM :MACHINE WITH STATES(DS_T1,DS_T2,DS_T3,DS_T4,DS_T5,DS_T6,DS_T7,DS_T8,DS_LS);
- LINE :NODE;
- FB_B[3..0] :NODE;
- VCAS :NODE;
- VRAS :NODE;
- VWE :NODE;
- VA[12..0] :NODE;
- BA0 :NODE;
- BA1 :NODE;
- DDR_WR :DFF;
- DDR_SEL :NODE;
- DDR_CONFIG :NODE;
- DDRWR_D_SEL[1..0] :DFF;
- CPU_ROW_ADR[12..0] :NODE;
- CPU_BA0 :NODE;
- CPU_BA1 :NODE;
- CPU_COL_ADR[9..0] :NODE;
- CPU_SIG :NODE;
- CPU_REQ :DFF;
- BLITTER_SIG :NODE;
- BLITTER_REQ :DFF;
- BLITTER_RUN :DFF;
- BLITTER_WR :DFF;
- BLITTER_ROW_ADR[12..0] :NODE;
- BLITTER_BA0 :NODE;
- BLITTER_BA1 :NODE;
- BLITTER_COL_ADR[9..0] :NODE;
- FIFO_SIG :NODE;
- FIFO_REQ :DFF;
- FIFO_ROW_ADR[12..0] :NODE;
- FIFO_BA0 :NODE;
- FIFO_BA1 :NODE;
- FIFO_COL_ADR[9..0] :NODE;
- FIFO_WRE :DFF;
- FIFO_ACTIVE :NODE;
- CLEAR_FIFO_CNT :DFF;
- STOP :DFF;
- DDR_REFRESH_ON :NODE;
- VIDEO_BASE_L_D[3..0] :DFFE;
- VIDEO_BASE_L :NODE;
- VIDEO_BASE_M_D[7..0] :DFFE;
- VIDEO_BASE_M :NODE;
- VIDEO_BASE_H_D[7..0] :DFFE;
- VIDEO_BASE_H :NODE;
- VIDEO_BASE_X_D[7..0] :DFFE;
- VIDEO_ADR_CNT[27..0] :DFFE;
- VIDEO_CNT_L :NODE;
- VIDEO_CNT_M :NODE;
- VIDEO_CNT_H :NODE;
- VIDEO_BASE_ADR[27..0] :NODE;
-
-BEGIN
- LINE = FB_SIZE0 & FB_SIZE1;
--- BYT SELECT
- FB_B0 = FB_ADR[1..0]==0; -- ADR==0
- FB_B1 = FB_ADR[1..0]==1 -- ADR==1
- # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B2 = FB_ADR[1..0]==2 -- ADR==2
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B3 = FB_ADR[1..0]==3 -- ADR==3
- # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
--- CPU READ (REG DDR => CPU) AND WRITE (CPU => REG DDR) --------------------------------------------------
- FB_REGDDR.CLK = MAIN_CLK;
- CASE FB_REGDDR IS
- WHEN FR_WAIT =>
- IF DDR_SEL THEN
- FB_REGDDR = FR_S0;
- ELSE
- FB_REGDDR = FR_WAIT;
- END IF;
- WHEN FR_S0 =>
- FB_VDOE0 = !nFB_OE & !DDR_CONFIG;
- FB_LE0 = !nFB_WR;
- IF LINE THEN
- FB_REGDDR = FR_S1;
- ELSE
- FB_REGDDR = FR_WAIT;
- END IF;
- WHEN FR_S1 =>
- FB_VDOE1 = !nFB_OE & !DDR_CONFIG;
- FB_LE1 = !nFB_WR;
- FB_REGDDR = FR_S2;
- WHEN FR_S2 =>
- FB_VDOE2 = !nFB_OE & !DDR_CONFIG;
- FB_LE2 = !nFB_WR;
- FB_REGDDR = FR_S3;
- WHEN FR_S3 =>
- FB_VDOE3 = !nFB_OE & !DDR_CONFIG;
- FB_LE3 = !nFB_WR;
- FB_REGDDR = FR_WAIT;
- END CASE;
--- DDR STEUERUNG -----------------------------------------------------
--- VIDEO RAM CONTROL REGISTER (IST IN VIDEO_MUX_CTR) $F0000400: BIT 0=VCKE,1=!nVCS,2=FIFO_ACTIVE,3=FIFO UND CNT CLEAR,15..11=VIDEO RAM BASE
- VCKE = VIDEO_RAM_CTR0;
- nVCS = !VIDEO_RAM_CTR1;
- FIFO_ACTIVE = VIDEO_RAM_CTR2;
- DDR_CONFIG = VIDEO_RAM_CTR3;
- DDR_REFRESH_ON = VIDEO_RAM_CTR4;
---------------------------------
- CPU_ROW_ADR[] = FB_ADR[26..14];
- CPU_BA1 = FB_ADR13;
- CPU_BA0 = FB_ADR12;
- CPU_COL_ADR[] = FB_ADR[11..2];
- nVRAS = !VRAS;
- nVCAS = !VCAS;
- nVWE = !VWE;
- DDR_WR.CLK = DDRCLK0;
--- SELECT LOGIC
- DDR_SEL = FB_ALE & FB_AD[31..29]==B"011";
--- WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER
- CPU_SIG = DDR_SEL & nFB_WR & !DDR_CONFIG -- READ SOFORT LOS
- # FR_S0 & !nFB_WR -- WRITE SPÄTER AUCH CONFIG
- # FR_S3 & !nFB_WR & LINE & !DDR_CONFIG; -- LINE WRITE
- CPU_REQ = CPU_SIG;
- CPU_REQ.CLK = DDR_SYNC_66M;
- DDR_D_SEL[].CLK = DDRCLK3;
--- DDR STATE MACHINE -----------------------------------------------
- DDR_SM.CLK = DDRCLK0;
- CASE DDR_SM IS
- WHEN DS_T1 =>
- IF MAIN_CLK THEN
- DDR_WR = DDR_WR; -- WRITE HALTEN (VON T4)
- DDR_SM = DS_T2;
- ELSE
- DDR_SM = DS_LS; -- SYNCHRONISIEREN
- END IF;
- WHEN DS_T2 =>
- IF !DDR_CONFIG THEN
- VRAS = CPU_SIG # BLITTER_SIG # FIFO_SIG # DDR_REFRESH_ON;
- VA[] = CPU_SIG & CPU_ROW_ADR[]
- # BLITTER_SIG & BLITTER_ROW_ADR[]
- # FIFO_SIG & FIFO_ROW_ADR[];
- BA0 = CPU_SIG & CPU_BA0
- # BLITTER_SIG & BLITTER_BA0
- # FIFO_SIG & FIFO_BA0;
- BA1 = CPU_SIG & CPU_BA1
- # BLITTER_SIG & BLITTER_BA1
- # FIFO_SIG & FIFO_BA1;
- VCAS = !CPU_SIG & !BLITTER_SIG & !FIFO_SIG & DDR_REFRESH_ON; -- AUTO REFRESH WENN SONST NICHTS
- BLITTER_REQ = BLITTER_SIG;
- FIFO_REQ = FIFO_SIG;
- END IF;
- IF MAIN_CLK THEN
- DDR_SM = DS_T3;
- ELSE
- DDR_SM = DS_LS;
- END IF;
- WHEN DS_T3 =>
- IF DDR_CONFIG & CPU_REQ THEN
- VRAS = FB_AD18;
- VCAS = FB_AD17;
- VWE = FB_AD16;
- BA1 = FB_AD14;
- BA0 = FB_AD13;
- VA[] = FB_AD[12..0];
- END IF;
- IF !CPU_REQ & !BLITTER_REQ & !FIFO_REQ # DDR_CONFIG THEN
- DDR_SM = DS_LS;
- ELSE
- BLITTER_REQ = BLITTER_SIG;
- FIFO_REQ = FIFO_SIG;
- DDR_SM = DS_T4;
- END IF;
- WHEN DS_T4 =>
- FIFO_REQ = FIFO_SIG;
- VCAS = VCC;
- VWE = !nFB_WR & CPU_REQ # BLITTER_WR & BLITTER_REQ;
- VA[9..0] = CPU_REQ & CPU_COL_ADR[]
- # BLITTER_REQ & BLITTER_COL_ADR[]
- # FIFO_REQ & FIFO_COL_ADR[];
- VA10 = VCC; -- AUTO PRECHARGE
- BA0 = CPU_REQ & CPU_BA0
- # BLITTER_REQ & BLITTER_BA0
- # FIFO_REQ & FIFO_BA0;
- BA1 = CPU_REQ & CPU_BA1
- # BLITTER_REQ & BLITTER_BA1
- # FIFO_REQ & FIFO_BA1;
- DDR_WR = !nFB_WR & CPU_REQ # BLITTER_WR & BLITTER_REQ;
- FIFO_REQ = FIFO_SIG;
- IF FIFO_REQ & FIFO_COL_ADR[]!= H"3FF" THEN -- GLEICHE PAGE?
- DDR_SM = DS_T5; -- JA->
- ELSE
- DDR_SM = DS_T1; -- SONST NEUE PAGE AUFMACHEN
- END IF;
- WHEN DS_T5 =>
- FIFO_REQ = FIFO_SIG;
- DDR_SM = DS_T6;
- WHEN DS_T6 =>
- IF CPU_SIG THEN -- SOFORT UMSCHALTEN WENN CPU REQ
- VRAS = VCC;
- VA[] = CPU_ROW_ADR[];
- BA1 = CPU_BA1;
- BA0 = CPU_BA0;
- DDR_SM = DS_T3;
- ELSE
- FIFO_REQ = FIFO_SIG;
- VCAS = VCC;
- VA[9..0] = FIFO_COL_ADR[];
- VA10 = VCC; -- AUTO PRECHARGE
- BA0 = FIFO_BA0;
- BA1 = FIFO_BA1;
- FIFO_WRE = FIFO_REQ; -- ODER FIFO LATCH IN 5 CYC 133
- IF FIFO_REQ & FIFO_COL_ADR[]!= H"3FF" THEN -- GLEICHE PAGE?
- DDR_SM = DS_T5; -- JA->
- ELSE
- DDR_SM = DS_T1; -- SONST NEUE PAGE AUFMACHEN
- END IF;
- END IF;
- WHEN DS_LS =>
- IF !MAIN_CLK THEN -- LEERSTATE UND SYNC
- DDR_SM = DS_T1;
- ELSE
- DDR_SM = DS_LS;
- END IF;
- END CASE;
-------------------------------------------------------------------------------
--- FIFO ---------------------------------
- FIFO_SIG = FIFO_ACTIVE & !FIFO_FULL & !BLITTER_SIG & !CPU_SIG;
- FIFO_REQ.CLK = DDR_SYNC_66M;
- FIFO_ROW_ADR[] = VIDEO_ADR_CNT[24..12];
- FIFO_BA1 = VIDEO_ADR_CNT11;
- FIFO_BA0 = VIDEO_ADR_CNT10;
- FIFO_COL_ADR[] = VIDEO_ADR_CNT[9..0];
- -- ZÄHLER RÜCKSETZEN WENN VSYNC ----------------
- CLEAR_FIFO_CNT.CLK = DDRCLK0;
- CLEAR_FIFO_CNT = VSYNC # !FIFO_ACTIVE;
- STOP.CLK = DDRCLK0;
- STOP = VSYNC # CLEAR_FIFO_CNT;
- VIDEO_ADR_CNT[].CLK = DDRCLK0;
- VIDEO_ADR_CNT[] = CLEAR_FIFO_CNT & VIDEO_BASE_ADR[] -- SET
- # !CLEAR_FIFO_CNT & (VIDEO_ADR_CNT[]+1); -- NEXT 16 BYTS
- VIDEO_ADR_CNT[].ENA = CLEAR_FIFO_CNT # FIFO_WRE;
- FIFO_WRE.CLK = DDRCLK0;
----------------------------------------------------------------
--- BLITTER BUS IST 128 BIT BREIT ------
- BLITTER_SIG = GND & !CPU_SIG;
- BLITTER_REQ.CLK = DDR_SYNC_66M;
- BLITTER_RUN.CLK = DDRCLK0;
- BLITTER_RUN = GND;
- BLITTER_WR.CLK = DDRCLK0;
- BLITTER_WR = GND;
- DDRWR_D_SEL1 = BLITTER_WR;
- BLITTER_ROW_ADR[] = H"0";
- BLITTER_BA1 = GND;
- BLITTER_BA0 = GND;
- BLITTER_COL_ADR[] = H"0";
- BLITTER_DOUT[] = H"0";
- BLITTER_LE[] = H"0";
------------------------------------------------------------
--- VIDEO REGISTER -----------------------
----------------------------------------------------------------------------------------------------------------------
- VIDEO_BASE_L_D[].CLK = MAIN_CLK;
- VIDEO_BASE_L = !nFB_CS1 & FB_ADR[15..1]==H"4106"; -- 820D/2
- VIDEO_BASE_L_D[] = FB_AD[23..20]; -- SORRY, NUR 16 BYT GRENZEN
- VIDEO_BASE_L_D[].ENA = !nFB_WR & VIDEO_BASE_L & FB_B1;
-
- VIDEO_BASE_M_D[].CLK = MAIN_CLK;
- VIDEO_BASE_M = !nFB_CS1 & FB_ADR[15..1]==H"4101"; -- 8203/2
- VIDEO_BASE_M_D[] = FB_AD[23..16];
- VIDEO_BASE_M_D[].ENA = !nFB_WR & VIDEO_BASE_M & FB_B3;
-
- VIDEO_BASE_H_D[].CLK = MAIN_CLK;
- VIDEO_BASE_H = !nFB_CS1 & FB_ADR[15..1]==H"4100"; -- 8200-1/2
- VIDEO_BASE_H_D[] = FB_AD[23..16];
- VIDEO_BASE_H_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B1;
- VIDEO_BASE_X_D[].CLK = MAIN_CLK;
- VIDEO_BASE_X_D[] = FB_AD[31..24];
- VIDEO_BASE_X_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B0;
-
- VIDEO_CNT_L = !nFB_CS1 & FB_ADR[15..1]==H"4104"; -- 8209/2
- VIDEO_CNT_M = !nFB_CS1 & FB_ADR[15..1]==H"4103"; -- 8207/2
- VIDEO_CNT_H = !nFB_CS1 & FB_ADR[15..1]==H"4102"; -- 8205/2
-
- FB_AD[31..24] = lpm_bustri_BYT(
- VIDEO_BASE_H & VIDEO_BASE_X_D[]
- # VIDEO_CNT_H & VIDEO_ADR_CNT[27..20]
- ,(VIDEO_BASE_H # VIDEO_CNT_H) & !nFB_OE);
-
- FB_AD[23..16] = lpm_bustri_BYT(
- VIDEO_BASE_L & (VIDEO_BASE_L_D[],B"0000")
- # VIDEO_BASE_M & VIDEO_BASE_M_D[]
- # VIDEO_BASE_H & VIDEO_BASE_H_D[]
- # VIDEO_CNT_L & (VIDEO_ADR_CNT[3..0],B"0000")
- # VIDEO_CNT_M & VIDEO_ADR_CNT[11..4]
- # VIDEO_CNT_H & VIDEO_ADR_CNT[19..12]
- ,(VIDEO_BASE_L # VIDEO_BASE_M # VIDEO_BASE_H # VIDEO_CNT_L # VIDEO_CNT_M # VIDEO_CNT_H) & !nFB_OE);
-
- VIDEO_BASE_ADR[27..20] = VIDEO_BASE_X_D[];
- VIDEO_BASE_ADR[19..12] = VIDEO_BASE_H_D[];
- VIDEO_BASE_ADR[11..4] = VIDEO_BASE_M_D[];
- VIDEO_BASE_ADR[3..0] = VIDEO_BASE_L_D[];
-END;
-
diff --git a/FPGA_by_Fredi/Video/UNUSED b/FPGA_by_Fredi/Video/UNUSED
deleted file mode 100644
index 12f424b..0000000
--- a/FPGA_by_Fredi/Video/UNUSED
+++ /dev/null
@@ -1,267 +0,0 @@
-
--- Clearbox generated Memory Initialization File (.mif)
-
-WIDTH=6;
-DEPTH=256;
-
-ADDRESS_RADIX=HEX;
-DATA_RADIX=HEX;
-
-CONTENT BEGIN
- 000 : 0F;
- 001 : 0E;
- 002 : 0D;
- 003 : 0C;
- 004 : 0B;
- 005 : 0A;
- 006 : 09;
- 007 : 08;
- 008 : 07;
- 009 : 06;
- 00a : 05;
- 00b : 04;
- 00c : 03;
- 00d : 02;
- 00e : 01;
- 00f : 00;
- 010 : 0F;
- 011 : 0E;
- 012 : 0D;
- 013 : 0C;
- 014 : 0B;
- 015 : 0A;
- 016 : 09;
- 017 : 08;
- 018 : 07;
- 019 : 06;
- 01a : 05;
- 01b : 04;
- 01c : 03;
- 01d : 02;
- 01e : 01;
- 01f : 00;
- 020 : 0F;
- 021 : 0E;
- 022 : 0D;
- 023 : 0C;
- 024 : 0B;
- 025 : 0A;
- 026 : 09;
- 027 : 08;
- 028 : 07;
- 029 : 06;
- 02a : 05;
- 02b : 04;
- 02c : 03;
- 02d : 02;
- 02e : 01;
- 02f : 00;
- 030 : 0F;
- 031 : 0E;
- 032 : 0D;
- 033 : 0C;
- 034 : 0B;
- 035 : 0A;
- 036 : 09;
- 037 : 08;
- 038 : 07;
- 039 : 06;
- 03a : 05;
- 03b : 04;
- 03c : 03;
- 03d : 02;
- 03e : 01;
- 03f : 00;
- 040 : 0F;
- 041 : 0E;
- 042 : 0D;
- 043 : 0C;
- 044 : 0B;
- 045 : 0A;
- 046 : 09;
- 047 : 08;
- 048 : 07;
- 049 : 06;
- 04a : 05;
- 04b : 04;
- 04c : 03;
- 04d : 02;
- 04e : 01;
- 04f : 00;
- 050 : 0F;
- 051 : 0E;
- 052 : 0D;
- 053 : 0C;
- 054 : 0B;
- 055 : 0A;
- 056 : 09;
- 057 : 08;
- 058 : 07;
- 059 : 06;
- 05a : 05;
- 05b : 04;
- 05c : 03;
- 05d : 02;
- 05e : 01;
- 05f : 00;
- 060 : 0F;
- 061 : 0E;
- 062 : 0D;
- 063 : 0C;
- 064 : 0B;
- 065 : 0A;
- 066 : 09;
- 067 : 08;
- 068 : 07;
- 069 : 06;
- 06a : 05;
- 06b : 04;
- 06c : 03;
- 06d : 02;
- 06e : 01;
- 06f : 00;
- 070 : 0F;
- 071 : 0E;
- 072 : 0D;
- 073 : 0C;
- 074 : 0B;
- 075 : 0A;
- 076 : 09;
- 077 : 08;
- 078 : 07;
- 079 : 06;
- 07a : 05;
- 07b : 04;
- 07c : 03;
- 07d : 02;
- 07e : 01;
- 07f : 00;
- 080 : 0F;
- 081 : 0E;
- 082 : 0D;
- 083 : 0C;
- 084 : 0B;
- 085 : 0A;
- 086 : 09;
- 087 : 08;
- 088 : 07;
- 089 : 06;
- 08a : 05;
- 08b : 04;
- 08c : 03;
- 08d : 02;
- 08e : 01;
- 08f : 00;
- 090 : 0F;
- 091 : 0E;
- 092 : 0D;
- 093 : 0C;
- 094 : 0B;
- 095 : 0A;
- 096 : 09;
- 097 : 08;
- 098 : 07;
- 099 : 06;
- 09a : 05;
- 09b : 04;
- 09c : 03;
- 09d : 02;
- 09e : 01;
- 09f : 00;
- 0a0 : 0F;
- 0a1 : 0E;
- 0a2 : 0D;
- 0a3 : 0C;
- 0a4 : 0B;
- 0a5 : 0A;
- 0a6 : 09;
- 0a7 : 08;
- 0a8 : 07;
- 0a9 : 06;
- 0aa : 05;
- 0ab : 04;
- 0ac : 03;
- 0ad : 02;
- 0ae : 01;
- 0af : 00;
- 0b0 : 0F;
- 0b1 : 0E;
- 0b2 : 0D;
- 0b3 : 0C;
- 0b4 : 0B;
- 0b5 : 0A;
- 0b6 : 09;
- 0b7 : 08;
- 0b8 : 07;
- 0b9 : 06;
- 0ba : 05;
- 0bb : 04;
- 0bc : 03;
- 0bd : 02;
- 0be : 01;
- 0bf : 00;
- 0c0 : 0F;
- 0c1 : 0E;
- 0c2 : 0D;
- 0c3 : 0C;
- 0c4 : 0B;
- 0c5 : 0A;
- 0c6 : 09;
- 0c7 : 08;
- 0c8 : 07;
- 0c9 : 06;
- 0ca : 05;
- 0cb : 04;
- 0cc : 03;
- 0cd : 02;
- 0ce : 01;
- 0cf : 00;
- 0d0 : 0F;
- 0d1 : 0E;
- 0d2 : 0D;
- 0d3 : 0C;
- 0d4 : 0B;
- 0d5 : 0A;
- 0d6 : 09;
- 0d7 : 08;
- 0d8 : 07;
- 0d9 : 06;
- 0da : 05;
- 0db : 04;
- 0dc : 03;
- 0dd : 02;
- 0de : 01;
- 0df : 00;
- 0e0 : 0F;
- 0e1 : 0E;
- 0e2 : 0D;
- 0e3 : 0C;
- 0e4 : 0B;
- 0e5 : 0A;
- 0e6 : 09;
- 0e7 : 08;
- 0e8 : 07;
- 0e9 : 06;
- 0ea : 05;
- 0eb : 04;
- 0ec : 03;
- 0ed : 02;
- 0ee : 01;
- 0ef : 00;
- 0f0 : 0F;
- 0f1 : 0E;
- 0f2 : 0D;
- 0f3 : 0C;
- 0f4 : 0B;
- 0f5 : 0A;
- 0f6 : 09;
- 0f7 : 08;
- 0f8 : 07;
- 0f9 : 06;
- 0fa : 05;
- 0fb : 04;
- 0fc : 03;
- 0fd : 02;
- 0fe : 01;
- 0ff : 00;
-END;
diff --git a/FPGA_by_Fredi/Video/VIDEO_MOD_MUX_CLUTCTR.tdf b/FPGA_by_Fredi/Video/VIDEO_MOD_MUX_CLUTCTR.tdf
index 6a77969..fc80715 100644
--- a/FPGA_by_Fredi/Video/VIDEO_MOD_MUX_CLUTCTR.tdf
+++ b/FPGA_by_Fredi/Video/VIDEO_MOD_MUX_CLUTCTR.tdf
@@ -338,7 +338,7 @@ BEGIN
SYS_CTR[].CLK = MAIN_CLK;
SYS_CTR[6..0] = FB_AD[22..16];
SYS_CTR[6..0].ENA = SYS_CTR_CS & !nFB_WR & FB_B3;
- BLITTER_ON = !SYS_CTR3;
+ BLITTER_ON = SYS_CTR3;
--VDL_LOF
VDL_LOF_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C107"; -- $820E/2
VDL_LOF[].CLK = MAIN_CLK;
@@ -440,7 +440,7 @@ BEGIN
FB_AD[31..16] = lpm_bustri_WORD(
ST_SHIFT_MODE_CS & (0,ST_SHIFT_MODE[],B"00000000")
# FALCON_SHIFT_MODE_CS & (0,FALCON_SHIFT_MODE[])
- # SYS_CTR_CS & (B"100000000",SYS_CTR[6..4],!BLITTER_RUN,SYS_CTR[2..0])
+ # SYS_CTR_CS & (B"100000000",SYS_CTR[6..4],BLITTER_RUN,SYS_CTR[2..0])
# VDL_LOF_CS & VDL_LOF[]
# VDL_LWD_CS & VDL_LWD[]
# VDL_HBE_CS & (0,VDL_HBE[])
diff --git a/FPGA_by_Fredi/Video/VIDEO_MOD_MUX_CLUTCTR.tdf.bak b/FPGA_by_Fredi/Video/VIDEO_MOD_MUX_CLUTCTR.tdf.bak
deleted file mode 100644
index 2c9adcc..0000000
--- a/FPGA_by_Fredi/Video/VIDEO_MOD_MUX_CLUTCTR.tdf.bak
+++ /dev/null
@@ -1,675 +0,0 @@
-TITLE "VIDEO MODUSE UND CLUT CONTROL";
-
--- CREATED BY FREDI ASCHWANDEN
-
-INCLUDE "lpm_bustri_WORD.inc";
-INCLUDE "lpm_bustri_BYT.inc";
-
--- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE!
--- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE!
-
-SUBDESIGN VIDEO_MOD_MUX_CLUTCTR
-(
- -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
- nRSTO : INPUT;
- MAIN_CLK : INPUT;
- nFB_CS1 : INPUT;
- nFB_CS2 : INPUT;
- nFB_CS3 : INPUT;
- nFB_WR : INPUT;
- nFB_OE : INPUT;
- FB_SIZE0 : INPUT;
- FB_SIZE1 : INPUT;
- nFB_BURST : INPUT;
- FB_ADR[31..0] : INPUT;
- CLK33M : INPUT;
- CLK25M : INPUT;
- BLITTER_RUN : INPUT;
- CLK_VIDEO : INPUT;
- VR_D[8..0] : INPUT;
- VR_BUSY : INPUT;
- COLOR8 : OUTPUT;
- ACP_CLUT_RD : OUTPUT;
- COLOR1 : OUTPUT;
- FALCON_CLUT_RDH : OUTPUT;
- FALCON_CLUT_RDL : OUTPUT;
- FALCON_CLUT_WR[3..0] : OUTPUT;
- ST_CLUT_RD : OUTPUT;
- ST_CLUT_WR[1..0] : OUTPUT;
- CLUT_MUX_ADR[3..0] : OUTPUT;
- HSYNC : OUTPUT;
- VSYNC : OUTPUT;
- nBLANK : OUTPUT;
- nSYNC : OUTPUT;
- nPD_VGA : OUTPUT;
- FIFO_RDE : OUTPUT;
- COLOR2 : OUTPUT;
- COLOR4 : OUTPUT;
- PIXEL_CLK : OUTPUT;
- CLUT_OFF[3..0] : OUTPUT;
- BLITTER_ON : OUTPUT;
- VIDEO_RAM_CTR[15..0] : OUTPUT;
- VIDEO_MOD_TA : OUTPUT;
- CCR[23..0] : OUTPUT;
- CCSEL[2..0] : OUTPUT;
- ACP_CLUT_WR[3..0] : OUTPUT;
- INTER_ZEI : OUTPUT;
- DOP_FIFO_CLR : OUTPUT;
- VIDEO_RECONFIG : OUTPUT;
- VR_WR : OUTPUT;
- VR_RD : OUTPUT;
- CLR_FIFO : OUTPUT;
- FB_AD[31..0] : BIDIR;
- -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
-)
-
-VARIABLE
- CLK17M :DFF;
- CLK13M :DFF;
- ACP_CLUT_CS :NODE;
- ACP_CLUT :NODE;
- VIDEO_PLL_CONFIG_CS :NODE;
- VR_WR :DFF;
- VR_DOUT[8..0] :DFFE;
- VR_FRQ[7..0] :DFFE;
- VIDEO_PLL_RECONFIG_CS :NODE;
- VIDEO_RECONFIG :DFF;
- FALCON_CLUT_CS :NODE;
- FALCON_CLUT :NODE;
- ST_CLUT_CS :NODE;
- ST_CLUT :NODE;
- FB_B[3..0] :NODE;
- FB_16B[1..0] :NODE;
- ST_SHIFT_MODE[1..0] :DFFE;
- ST_SHIFT_MODE_CS :NODE;
- FALCON_SHIFT_MODE[10..0] :DFFE;
- FALCON_SHIFT_MODE_CS :NODE;
- CLUT_MUX_ADR[3..0] :DFF;
- CLUT_MUX_AV[1..0][3..0] :DFF;
- ACP_VCTR_CS :NODE;
- ACP_VCTR[31..0] :DFFE;
- CCR_CS :NODE;
- CCR[23..0] :DFFE;
- ACP_VIDEO_ON :NODE;
- SYS_CTR[6..0] :DFFE;
- SYS_CTR_CS :NODE;
- VDL_LOF[15..0] :DFFE;
- VDL_LOF_CS :NODE;
- VDL_LWD[15..0] :DFFE;
- VDL_LWD_CS :NODE;
--- DIV. CONTROL REGISTER
- CLUT_TA :DFF; -- BRAUCHT EIN WAITSTAT
- HSYNC :DFF;
- HSYNC_I[7..0] :DFF;
- HSY_LEN[7..0] :DFF; -- LÄNGE HSYNC PULS IN PIXEL_CLK
- HSYNC_START :DFF;
- LAST :DFF; -- LETZTES PIXEL EINER ZEILE ERREICHT
- VSYNC :DFF;
- VSYNC_START :DFFE;
- VSYNC_I[2..0] :DFFE;
- nBLANK :DFF;
- DISP_ON :DFF;
- DPO_ZL :DFFE;
- DPO_ON :DFF;
- DPO_OFF :DFF;
- VDTRON :DFF;
- VDO_ZL :DFFE;
- VDO_ON :DFF;
- VDO_OFF :DFF;
- VHCNT[11..0] :DFF;
- SUB_PIXEL_CNT[6..0] :DFFE;
- VVCNT[10..0] :DFFE;
- VERZ[2..0][9..0] :DFF;
- RAND[6..0] :DFF;
- RAND_ON :NODE;
- FIFO_RDE :DFF;
- CLR_FIFO :DFFE;
- START_ZEILE :DFFE;
- SYNC_PIX :DFF;
- SYNC_PIX1 :DFF;
- SYNC_PIX2 :DFF;
- CCSEL[2..0] :DFF;
- COLOR16 :NODE;
- COLOR24 :NODE;
--- ATARI RESOLUTION
- ATARI_SYNC :NODE;
- ATARI_HH[31..0] :DFFE; -- HORIZONTAL TIMING 640x480
- ATARI_HH_CS :NODE;
- ATARI_VH[31..0] :DFFE; -- VERTIKAL TIMING 640x480
- ATARI_VH_CS :NODE;
- ATARI_HL[31..0] :DFFE; -- HORIZONTAL TIMING 320x240
- ATARI_HL_CS :NODE;
- ATARI_VL[31..0] :DFFE; -- VERTIKAL TIMING 320x240
- ATARI_VL_CS :NODE;
--- HORIZONTAL
- RAND_LINKS[11..0] :NODE;
- HDIS_START[11..0] :NODE;
- HDIS_END[11..0] :NODE;
- RAND_RECHTS[11..0] :NODE;
- HS_START[11..0] :NODE;
- H_TOTAL[11..0] :NODE;
- HDIS_LEN[11..0] :NODE;
- MULF[5..0] :NODE;
- VDL_HHT[11..0] :DFFE;
- VDL_HHT_CS :NODE;
- VDL_HBE[11..0] :DFFE;
- VDL_HBE_CS :NODE;
- VDL_HDB[11..0] :DFFE;
- VDL_HDB_CS :NODE;
- VDL_HDE[11..0] :DFFE;
- VDL_HDE_CS :NODE;
- VDL_HBB[11..0] :DFFE;
- VDL_HBB_CS :NODE;
- VDL_HSS[11..0] :DFFE;
- VDL_HSS_CS :NODE;
--- VERTIKAL
- RAND_OBEN[10..0] :NODE;
- VDIS_START[10..0] :NODE;
- VDIS_END[10..0] :NODE;
- RAND_UNTEN[10..0] :NODE;
- VS_START[10..0] :NODE;
- V_TOTAL[10..0] :NODE;
- FALCON_VIDEO :NODE;
- ST_VIDEO :NODE;
- INTER_ZEI :DFF;
- DOP_ZEI :DFF;
- DOP_FIFO_CLR :DFF;
-
- VDL_VBE[10..0] :DFFE;
- VDL_VBE_CS :NODE;
- VDL_VDB[10..0] :DFFE;
- VDL_VDB_CS :NODE;
- VDL_VDE[10..0] :DFFE;
- VDL_VDE_CS :NODE;
- VDL_VBB[10..0] :DFFE;
- VDL_VBB_CS :NODE;
- VDL_VSS[10..0] :DFFE;
- VDL_VSS_CS :NODE;
- VDL_VFT[10..0] :DFFE;
- VDL_VFT_CS :NODE;
- VDL_VCT[8..0] :DFFE;
- VDL_VCT_CS :NODE;
- VDL_VMD[3..0] :DFFE;
- VDL_VMD_CS :NODE;
-
-BEGIN
--- BYT SELECT 32 BIT
- FB_B0 = FB_ADR[1..0]==0; -- ADR==0
- FB_B1 = FB_ADR[1..0]==1 -- ADR==1
- # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B2 = FB_ADR[1..0]==2 -- ADR==2
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
- FB_B3 = FB_ADR[1..0]==3 -- ADR==3
- # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD
- # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE
--- BYT SELECT 16 BIT
- FB_16B0 = FB_ADR[0]==0; -- ADR==0
- FB_16B1 = FB_ADR[0]==1 -- ADR==1
- # !(!FB_SIZE1 & FB_SIZE0); -- NOT BYT
--- ACP CLUT --
- ACP_CLUT_CS = !nFB_CS2 & FB_ADR[27..10]==H"0"; -- 0-3FF/1024
- ACP_CLUT_RD = ACP_CLUT_CS & !nFB_OE;
- ACP_CLUT_WR[] = FB_B[] & ACP_CLUT_CS & !nFB_WR;
- CLUT_TA.CLK = MAIN_CLK;
- CLUT_TA = (ACP_CLUT_CS # FALCON_CLUT_CS # ST_CLUT_CS) & !VIDEO_MOD_TA;
---FALCON CLUT --
- FALCON_CLUT_CS = !nFB_CS1 & FB_ADR[19..10]==H"3E6"; -- $F9800/$400
- FALCON_CLUT_RDH = FALCON_CLUT_CS & !nFB_OE & !FB_ADR1; -- HIGH WORD
- FALCON_CLUT_RDL = FALCON_CLUT_CS & !nFB_OE & FB_ADR1; -- LOW WORD
- FALCON_CLUT_WR[1..0] = FB_16B[] & !FB_ADR1 & FALCON_CLUT_CS & !nFB_WR;
- FALCON_CLUT_WR[3..2] = FB_16B[] & FB_ADR1 & FALCON_CLUT_CS & !nFB_WR;
--- ST CLUT --
- ST_CLUT_CS = !nFB_CS1 & FB_ADR[19..5]==H"7C12"; -- $F8240/$20
- ST_CLUT_RD = ST_CLUT_CS & !nFB_OE;
- ST_CLUT_WR[] = FB_16B[] & ST_CLUT_CS & !nFB_WR;
--- ST SHIFT MODE
- ST_SHIFT_MODE[].CLK = MAIN_CLK;
- ST_SHIFT_MODE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C130"; -- $F8260/2
- ST_SHIFT_MODE[] = FB_AD[25..24];
- ST_SHIFT_MODE[].ENA = ST_SHIFT_MODE_CS & !nFB_WR & FB_B0;
- COLOR1 = ST_SHIFT_MODE[]==B"10" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- MONO
- COLOR2 = ST_SHIFT_MODE[]==B"01" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- 4 FARBEN
- COLOR4 = ST_SHIFT_MODE[]==B"00" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- 16 FARBEN
--- FALCON SHIFT MODE
- FALCON_SHIFT_MODE[].CLK = MAIN_CLK;
- FALCON_SHIFT_MODE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C133"; -- $F8266/2
- FALCON_SHIFT_MODE[] = FB_AD[26..16];
- FALCON_SHIFT_MODE[10..8].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR & FB_B2;
- FALCON_SHIFT_MODE[7..0].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR & FB_B3;
- CLUT_OFF[3..0] = FALCON_SHIFT_MODE[3..0] & COLOR4;
- COLOR1 = FALCON_SHIFT_MODE10 & !COLOR16 & !COLOR8 & FALCON_VIDEO & !ACP_VIDEO_ON;
- COLOR8 = FALCON_SHIFT_MODE4 & !COLOR16 & FALCON_VIDEO & !ACP_VIDEO_ON;
- COLOR16 = FALCON_SHIFT_MODE8 & FALCON_VIDEO & !ACP_VIDEO_ON;
- COLOR4 = !COLOR1 & !COLOR16 & !COLOR8 & FALCON_VIDEO & !ACP_VIDEO_ON;
--- ACP VIDEO CONTROL BIT 0=ACP VIDEO ON, 1=POWER ON VIDEO DAC, 2=ACP 24BIT,3=ACP 16BIT,4=ACP 8BIT,5=ACP 1BIT, 6=FALCON SHIFT MODE;7=ST SHIFT MODE;9..8= VCLK FREQUENZ;15=-SYNC ALLOWED; 31..16=VIDEO_RAM_CTR,25=RANDFARBE EINSCHALTEN, 26=STANDARD ATARI SYNCS
- ACP_VCTR[].CLK = MAIN_CLK;
- ACP_VCTR_CS = !nFB_CS2 & FB_ADR[27..2]==H"100"; -- $400/4
- ACP_VCTR[31..8] = FB_AD[31..8];
- ACP_VCTR[5..0] = FB_AD[5..0];
- ACP_VCTR[31..24].ENA = ACP_VCTR_CS & FB_B0 & !nFB_WR;
- ACP_VCTR[23..16].ENA = ACP_VCTR_CS & FB_B1 & !nFB_WR;
- ACP_VCTR[15..8].ENA = ACP_VCTR_CS & FB_B2 & !nFB_WR;
- ACP_VCTR[5..0].ENA = ACP_VCTR_CS & FB_B3 & !nFB_WR;
- ACP_VIDEO_ON = ACP_VCTR0;
- nPD_VGA = ACP_VCTR1;
- -- ATARI MODUS
- ATARI_SYNC = ACP_VCTR26; -- WENN 1 AUTOMATISCHE AUFLÖSUNG
- -- HORIZONTAL TIMING 640x480
- ATARI_HH[].CLK = MAIN_CLK;
- ATARI_HH_CS = !nFB_CS2 & FB_ADR[27..2]==H"104"; -- $410/4
- ATARI_HH[] = FB_AD[];
- ATARI_HH[31..24].ENA = ATARI_HH_CS & FB_B0 & !nFB_WR;
- ATARI_HH[23..16].ENA = ATARI_HH_CS & FB_B1 & !nFB_WR;
- ATARI_HH[15..8].ENA = ATARI_HH_CS & FB_B2 & !nFB_WR;
- ATARI_HH[7..0].ENA = ATARI_HH_CS & FB_B3 & !nFB_WR;
- -- VERTIKAL TIMING 640x480
- ATARI_VH[].CLK = MAIN_CLK;
- ATARI_VH_CS = !nFB_CS2 & FB_ADR[27..2]==H"105"; -- $414/4
- ATARI_VH[] = FB_AD[];
- ATARI_VH[31..24].ENA = ATARI_VH_CS & FB_B0 & !nFB_WR;
- ATARI_VH[23..16].ENA = ATARI_VH_CS & FB_B1 & !nFB_WR;
- ATARI_VH[15..8].ENA = ATARI_VH_CS & FB_B2 & !nFB_WR;
- ATARI_VH[7..0].ENA = ATARI_VH_CS & FB_B3 & !nFB_WR;
- -- HORIZONTAL TIMING 320x240
- ATARI_HL[].CLK = MAIN_CLK;
- ATARI_HL_CS = !nFB_CS2 & FB_ADR[27..2]==H"106"; -- $418/4
- ATARI_HL[] = FB_AD[];
- ATARI_HL[31..24].ENA = ATARI_HL_CS & FB_B0 & !nFB_WR;
- ATARI_HL[23..16].ENA = ATARI_HL_CS & FB_B1 & !nFB_WR;
- ATARI_HL[15..8].ENA = ATARI_HL_CS & FB_B2 & !nFB_WR;
- ATARI_HL[7..0].ENA = ATARI_HL_CS & FB_B3 & !nFB_WR;
- -- VERTIKAL TIMING 320x240
- ATARI_VL[].CLK = MAIN_CLK;
- ATARI_VL_CS = !nFB_CS2 & FB_ADR[27..2]==H"107"; -- $41C/4
- ATARI_VL[] = FB_AD[];
- ATARI_VL[31..24].ENA = ATARI_VL_CS & FB_B0 & !nFB_WR;
- ATARI_VL[23..16].ENA = ATARI_VL_CS & FB_B1 & !nFB_WR;
- ATARI_VL[15..8].ENA = ATARI_VL_CS & FB_B2 & !nFB_WR;
- ATARI_VL[7..0].ENA = ATARI_VL_CS & FB_B3 & !nFB_WR;
--- VIDEO PLL CONFIG
- VIDEO_PLL_CONFIG_CS = !nFB_CS2 & FB_ADR[27..9]==H"3" & FB_B0 & FB_B1; -- $(F)000'0600-7FF ->6/2 WORD RESP LONG ONLY
- VR_WR.CLK = MAIN_CLK;
- VR_WR = VIDEO_PLL_CONFIG_CS & !nFB_WR & !VR_BUSY & !VR_WR;
- VR_RD = VIDEO_PLL_CONFIG_CS & nFB_WR & !VR_BUSY;
- VR_DOUT[].CLK = MAIN_CLK;
- VR_DOUT[].ENA = !VR_BUSY;
- VR_DOUT[] = VR_D[];
- VR_FRQ[].CLK = MAIN_CLK;
- VR_FRQ[].ENA = VR_WR & FB_ADR[8..0]==H"04";
- VR_FRQ[] = FB_AD[23..16];
--- VIDEO PLL RECONFIG
- VIDEO_PLL_RECONFIG_CS = !nFB_CS2 & FB_ADR[27..0]==H"800" & FB_B0; -- $(F)000'0800
- VIDEO_RECONFIG.CLK = MAIN_CLK;
- VIDEO_RECONFIG = VIDEO_PLL_RECONFIG_CS & !nFB_WR & !VR_BUSY & !VIDEO_RECONFIG;
-------------------------------------------------------------------------------------------------------------------------
- VIDEO_RAM_CTR[] = ACP_VCTR[31..16];
--------------- COLOR MODE IM ACP SETZEN
- COLOR1 = ACP_VCTR5 & !ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON;
- COLOR8 = ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON;
- COLOR16 = ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON;
- COLOR24 = ACP_VCTR2 & ACP_VIDEO_ON;
- ACP_CLUT = ACP_VIDEO_ON & (COLOR1 # COLOR8) # ST_VIDEO & COLOR1;
--- ST ODER FALCON SHIFT MODE SETZEN WENN WRITE X..SHIFT REGISTER
- ACP_VCTR7 = FALCON_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON;
- ACP_VCTR6 = ST_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON;
- ACP_VCTR[7..6].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR # ST_SHIFT_MODE_CS & !nFB_WR # ACP_VCTR_CS & FB_B3 & !nFB_WR & FB_AD0;
- FALCON_VIDEO = ACP_VCTR7;
- FALCON_CLUT = FALCON_VIDEO & !ACP_VIDEO_ON & !COLOR16;
- ST_VIDEO = ACP_VCTR6;
- ST_CLUT = ST_VIDEO & !ACP_VIDEO_ON & !FALCON_CLUT & !COLOR1;
- CCSEL[].CLK = PIXEL_CLK;
- CCSEL[] = B"000" & ST_CLUT -- ONLY FOR INFORMATION
- # B"001" & FALCON_CLUT
- # B"100" & ACP_CLUT
- # B"101" & COLOR16
- # B"110" & COLOR24
- # B"111" & RAND_ON;
--- DIVERSE (VIDEO)-REGISTER ----------------------------
--- RANDFARBE
- CCR[].CLK = MAIN_CLK;
- CCR_CS = !nFB_CS2 & FB_ADR[27..2]==H"101"; -- $404/4
- CCR[] = FB_AD[23..0];
- CCR[23..16].ENA = CCR_CS & FB_B1 & !nFB_WR;
- CCR[15..8].ENA = CCR_CS & FB_B2 & !nFB_WR;
- CCR[7..0].ENA = CCR_CS & FB_B3 & !nFB_WR;
---SYS CTR
- SYS_CTR_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C003"; -- $8006/2
- SYS_CTR[].CLK = MAIN_CLK;
- SYS_CTR[6..0] = FB_AD[22..16];
- SYS_CTR[6..0].ENA = SYS_CTR_CS & !nFB_WR & FB_B3;
- BLITTER_ON = !SYS_CTR3;
---VDL_LOF
- VDL_LOF_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C107"; -- $820E/2
- VDL_LOF[].CLK = MAIN_CLK;
- VDL_LOF[] = FB_AD[31..16];
- VDL_LOF[15..8].ENA = VDL_LOF_CS & !nFB_WR & FB_B2;
- VDL_LOF[7..0].ENA = VDL_LOF_CS & !nFB_WR & FB_B3;
---VDL_LWD
- VDL_LWD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C108"; -- $8210/2
- VDL_LWD[].CLK = MAIN_CLK;
- VDL_LWD[] = FB_AD[31..16];
- VDL_LWD[15..8].ENA = VDL_LWD_CS & !nFB_WR & FB_B0;
- VDL_LWD[7..0].ENA = VDL_LWD_CS & !nFB_WR & FB_B1;
--- HORIZONTAL
--- VDL_HHT
- VDL_HHT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C141"; -- $8282/2
- VDL_HHT[].CLK = MAIN_CLK;
- VDL_HHT[] = FB_AD[27..16];
- VDL_HHT[11..8].ENA = VDL_HHT_CS & !nFB_WR & FB_B2;
- VDL_HHT[7..0].ENA = VDL_HHT_CS & !nFB_WR & FB_B3;
--- VDL_HBE
- VDL_HBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C143"; -- $8286/2
- VDL_HBE[].CLK = MAIN_CLK;
- VDL_HBE[] = FB_AD[27..16];
- VDL_HBE[11..8].ENA = VDL_HBE_CS & !nFB_WR & FB_B2;
- VDL_HBE[7..0].ENA = VDL_HBE_CS & !nFB_WR & FB_B3;
--- VDL_HDB
- VDL_HDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C144"; -- $8288/2
- VDL_HDB[].CLK = MAIN_CLK;
- VDL_HDB[] = FB_AD[27..16];
- VDL_HDB[11..8].ENA = VDL_HDB_CS & !nFB_WR & FB_B0;
- VDL_HDB[7..0].ENA = VDL_HDB_CS & !nFB_WR & FB_B1;
--- VDL_HDE
- VDL_HDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C145"; -- $828A/2
- VDL_HDE[].CLK = MAIN_CLK;
- VDL_HDE[] = FB_AD[27..16];
- VDL_HDE[11..8].ENA = VDL_HDE_CS & !nFB_WR & FB_B2;
- VDL_HDE[7..0].ENA = VDL_HDE_CS & !nFB_WR & FB_B3;
--- VDL_HBB
- VDL_HBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C142"; -- $8284/2
- VDL_HBB[].CLK = MAIN_CLK;
- VDL_HBB[] = FB_AD[27..16];
- VDL_HBB[11..8].ENA = VDL_HBB_CS & !nFB_WR & FB_B0;
- VDL_HBB[7..0].ENA = VDL_HBB_CS & !nFB_WR & FB_B1;
--- VDL_HSS
- VDL_HSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C146"; -- $828C/2
- VDL_HSS[].CLK = MAIN_CLK;
- VDL_HSS[] = FB_AD[27..16];
- VDL_HSS[11..8].ENA = VDL_HSS_CS & !nFB_WR & FB_B0;
- VDL_HSS[7..0].ENA = VDL_HSS_CS & !nFB_WR & FB_B1;
--- VERTIKAL
--- VDL_VBE
- VDL_VBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C153"; -- $82A6/2
- VDL_VBE[].CLK = MAIN_CLK;
- VDL_VBE[] = FB_AD[26..16];
- VDL_VBE[10..8].ENA = VDL_VBE_CS & !nFB_WR & FB_B2;
- VDL_VBE[7..0].ENA = VDL_VBE_CS & !nFB_WR & FB_B3;
--- VDL_VDB
- VDL_VDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C154"; -- $82A8/2
- VDL_VDB[].CLK = MAIN_CLK;
- VDL_VDB[] = FB_AD[26..16];
- VDL_VDB[10..8].ENA = VDL_VDB_CS & !nFB_WR & FB_B0;
- VDL_VDB[7..0].ENA = VDL_VDB_CS & !nFB_WR & FB_B1;
--- VDL_VDE
- VDL_VDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C155"; -- $82AA/2
- VDL_VDE[].CLK = MAIN_CLK;
- VDL_VDE[] = FB_AD[26..16];
- VDL_VDE[10..8].ENA = VDL_VDE_CS & !nFB_WR & FB_B2;
- VDL_VDE[7..0].ENA = VDL_VDE_CS & !nFB_WR & FB_B3;
--- VDL_VBB
- VDL_VBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C152"; -- $82A4/2
- VDL_VBB[].CLK = MAIN_CLK;
- VDL_VBB[] = FB_AD[26..16];
- VDL_VBB[10..8].ENA = VDL_VBB_CS & !nFB_WR & FB_B0;
- VDL_VBB[7..0].ENA = VDL_VBB_CS & !nFB_WR & FB_B1;
--- VDL_VSS
- VDL_VSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C156"; -- $82AC/2
- VDL_VSS[].CLK = MAIN_CLK;
- VDL_VSS[] = FB_AD[26..16];
- VDL_VSS[10..8].ENA = VDL_VSS_CS & !nFB_WR & FB_B0;
- VDL_VSS[7..0].ENA = VDL_VSS_CS & !nFB_WR & FB_B1;
--- VDL_VFT
- VDL_VFT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C151"; -- $82A2/2
- VDL_VFT[].CLK = MAIN_CLK;
- VDL_VFT[] = FB_AD[26..16];
- VDL_VFT[10..8].ENA = VDL_VFT_CS & !nFB_WR & FB_B2;
- VDL_VFT[7..0].ENA = VDL_VFT_CS & !nFB_WR & FB_B3;
--- VDL_VCT
- VDL_VCT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C160"; -- $82C0/2
- VDL_VCT[].CLK = MAIN_CLK;
- VDL_VCT[] = FB_AD[24..16];
- VDL_VCT[8].ENA = VDL_VCT_CS & !nFB_WR & FB_B0;
- VDL_VCT[7..0].ENA = VDL_VCT_CS & !nFB_WR & FB_B1;
--- VDL_VMD
- VDL_VMD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C161"; -- $82C2/2
- VDL_VMD[].CLK = MAIN_CLK;
- VDL_VMD[] = FB_AD[19..16];
- VDL_VMD[3..0].ENA = VDL_VMD_CS & !nFB_WR & FB_B3;
---- REGISTER OUT
- FB_AD[31..16] = lpm_bustri_WORD(
- ST_SHIFT_MODE_CS & (0,ST_SHIFT_MODE[],B"00000000")
- # FALCON_SHIFT_MODE_CS & (0,FALCON_SHIFT_MODE[])
- # SYS_CTR_CS & (B"100000000",SYS_CTR[6..4],!BLITTER_RUN,SYS_CTR[2..0])
- # VDL_LOF_CS & VDL_LOF[]
- # VDL_LWD_CS & VDL_LWD[]
- # VDL_HBE_CS & (0,VDL_HBE[])
- # VDL_HDB_CS & (0,VDL_HDB[])
- # VDL_HDE_CS & (0,VDL_HDE[])
- # VDL_HBB_CS & (0,VDL_HBB[])
- # VDL_HSS_CS & (0,VDL_HSS[])
- # VDL_HHT_CS & (0,VDL_HHT[])
- # VDL_VBE_CS & (0,VDL_VBE[])
- # VDL_VDB_CS & (0,VDL_VDB[])
- # VDL_VDE_CS & (0,VDL_VDE[])
- # VDL_VBB_CS & (0,VDL_VBB[])
- # VDL_VSS_CS & (0,VDL_VSS[])
- # VDL_VFT_CS & (0,VDL_VFT[])
- # VDL_VCT_CS & (0,VDL_VCT[])
- # VDL_VMD_CS & (0,VDL_VMD[])
- # ACP_VCTR_CS & ACP_VCTR[31..16]
- # ATARI_HH_CS & ATARI_HH[31..16]
- # ATARI_VH_CS & ATARI_VH[31..16]
- # ATARI_HL_CS & ATARI_HL[31..16]
- # ATARI_VL_CS & ATARI_VL[31..16]
- # CCR_CS & (0,CCR[23..16])
- # VIDEO_PLL_CONFIG_CS & (0,VR_DOUT[])
- # VIDEO_PLL_RECONFIG_CS & (VR_BUSY,B"0000",VR_WR,VR_RD,VIDEO_RECONFIG,H"FA")
- ,(ST_SHIFT_MODE_CS # FALCON_SHIFT_MODE_CS # ACP_VCTR_CS # CCR_CS # SYS_CTR_CS # VDL_LOF_CS # VDL_LWD_CS
- # VDL_HBE_CS # VDL_HDB_CS # VDL_HDE_CS # VDL_HBB_CS # VDL_HSS_CS # VDL_HHT_CS
- # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS # VIDEO_PLL_CONFIG_CS # VIDEO_PLL_RECONFIG_CS
- # VDL_VBE_CS # VDL_VDB_CS # VDL_VDE_CS # VDL_VBB_CS # VDL_VSS_CS # VDL_VFT_CS # VDL_VCT_CS # VDL_VMD_CS) & !nFB_OE);
-
- FB_AD[15..0] = lpm_bustri_WORD(
- ACP_VCTR_CS & ACP_VCTR[15..0]
- # ATARI_HH_CS & ATARI_HH[15..0]
- # ATARI_VH_CS & ATARI_VH[15..0]
- # ATARI_HL_CS & ATARI_HL[15..0]
- # ATARI_VL_CS & ATARI_VL[15..0]
- # CCR_CS & CCR[15..0]
- ,(ACP_VCTR_CS # CCR_CS # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS ) & !nFB_OE);
-
- VIDEO_MOD_TA = CLUT_TA # ST_SHIFT_MODE_CS # FALCON_SHIFT_MODE_CS # ACP_VCTR_CS # SYS_CTR_CS # VDL_LOF_CS # VDL_LWD_CS
- # VDL_HBE_CS # VDL_HDB_CS # VDL_HDE_CS # VDL_HBB_CS # VDL_HSS_CS # VDL_HHT_CS
- # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS
- # VDL_VBE_CS # VDL_VDB_CS # VDL_VDE_CS # VDL_VBB_CS # VDL_VSS_CS # VDL_VFT_CS # VDL_VCT_CS # VDL_VMD_CS;
-
--- VIDEO AUSGABE SETZEN
- CLK17M.CLK = CLK33M;
- CLK17M = !CLK17M;
- CLK13M.CLK = CLK25M;
- CLK13M = !CLK13M;
- PIXEL_CLK = CLK13M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & VDL_VCT2 # VDL_VCT0)
- # CLK17M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & !VDL_VCT2 # VDL_VCT0)
- # CLK25M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & VDL_VCT2 & !VDL_VCT0
- # CLK33M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & !VDL_VCT2 & !VDL_VCT0
- # CLK25M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"00"
- # CLK33M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"01"
- # CLK_VIDEO & ACP_VIDEO_ON & ACP_VCTR[9];
---------------------------------------------------------------
--- HORIZONTALE SYNC LÄNGE in PIXEL_CLK
-----------------------------------------------------------------
- HSY_LEN[].CLK = MAIN_CLK;
- HSY_LEN[] = 14 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & VDL_VCT2 # VDL_VCT0)
- # 16 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & !VDL_VCT2 # VDL_VCT0)
- # 28 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & VDL_VCT2 & !VDL_VCT0
- # 32 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & !VDL_VCT2 & !VDL_VCT0
- # 28 & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"00"
- # 32 & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"01"
- # 16 + (0,VR_FRQ[7..1]) & ACP_VIDEO_ON & ACP_VCTR[9]; -- hsync puls length in pixeln=frequenz/ = 500ns
-
- MULF[] = 2 & !ST_VIDEO & VDL_VMD2 -- MULTIPLIKATIONS FAKTOR
- # 4 & !ST_VIDEO & !VDL_VMD2
- # 16 & ST_VIDEO & VDL_VMD2
- # 32 & ST_VIDEO & !VDL_VMD2;
-
-
- HDIS_LEN[] = 320 & VDL_VMD2 -- BREITE IN PIXELN
- # 640 & !VDL_VMD2;
-
--- DOPPELZEILENMODUS
- DOP_ZEI.CLK = MAIN_CLK;
- DOP_ZEI = VDL_VMD0 & ST_VIDEO; -- ZEILENVERDOPPELUNG EIN AUS
- INTER_ZEI.CLK = PIXEL_CLK;
- INTER_ZEI = DOP_ZEI & VVCNT0!=VDIS_START0 & VVCNT[]!=0 & VHCNT[]<(HDIS_END[]-1) -- EINSCHIEBEZEILE AUF "DOPPEL" ZEILEN UND ZEILE NULL WEGEN SYNC
- # DOP_ZEI & VVCNT0==VDIS_START0 & VVCNT[]!=0 & VHCNT[]>(HDIS_END[]-2); -- EINSCHIEBEZEILE AUF "NORMAL" ZEILEN UND ZEILE NULL WEGEN SYNC
- DOP_FIFO_CLR.CLK = PIXEL_CLK;
- DOP_FIFO_CLR = INTER_ZEI & HSYNC_START # SYNC_PIX; -- DOPPELZEILENFIFO LÖSCHEN AM ENDE DER DOPPELZEILE UND BEI MAIN FIFO START
-
- RAND_LINKS[] = VDL_HBE[] & ACP_VIDEO_ON
- # 21 & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2
- # 42 & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2
- # VDL_HBE[] * (0,MULF[5..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; --
- HDIS_START[] = VDL_HDB[] & ACP_VIDEO_ON
- # RAND_LINKS[]+1 & !ACP_VIDEO_ON; --
- HDIS_END[] = VDL_HDE[] & ACP_VIDEO_ON
- # RAND_LINKS[]+HDIS_LEN[] & !ACP_VIDEO_ON; --
- RAND_RECHTS[] = VDL_HBB[] & ACP_VIDEO_ON
- # HDIS_END[]+1 & !ACP_VIDEO_ON; --
- HS_START[] = VDL_HSS[] & ACP_VIDEO_ON
- # ATARI_HL[11..0] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2
- # ATARI_HH[11..0] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2
- # (VDL_HHT[]+1+VDL_HSS[]) * (0,MULF[5..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; --
- H_TOTAL[] = VDL_HHT[] & ACP_VIDEO_ON
- # ATARI_HL[27..16] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2
- # ATARI_HH[27..16] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2
- # (VDL_HHT[]+2) * (0,MULF[]) & !ACP_VIDEO_ON & !ATARI_SYNC; --
-
- RAND_OBEN[] = VDL_VBE[] & ACP_VIDEO_ON
- # 31 & !ACP_VIDEO_ON & ATARI_SYNC
- # (0,VDL_VBE[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC;
- VDIS_START[] = VDL_VDB[] & ACP_VIDEO_ON
- # 32 & !ACP_VIDEO_ON & ATARI_SYNC
- # (0,VDL_VDB[10..1])+1 & !ACP_VIDEO_ON & !ATARI_SYNC;
- VDIS_END[] = VDL_VDE[] & ACP_VIDEO_ON
- # 431 & !ACP_VIDEO_ON & ATARI_SYNC & ST_VIDEO
- # 511 & !ACP_VIDEO_ON & ATARI_SYNC & !ST_VIDEO
- # (0,VDL_VDE[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC;
- RAND_UNTEN[] = VDL_VBB[] & ACP_VIDEO_ON
- # VDIS_END[]+1 & !ACP_VIDEO_ON & ATARI_SYNC
- # (0,VDL_VBB[10..1])+1 & !ACP_VIDEO_ON & !ATARI_SYNC;
- VS_START[] = VDL_VSS[] & ACP_VIDEO_ON
- # ATARI_VL[10..0] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2
- # ATARI_VH[10..0] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2
- # (0,VDL_VSS[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC;
- V_TOTAL[] = VDL_VFT[] & ACP_VIDEO_ON
- # ATARI_VL[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2
- # ATARI_VH[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2
- # (0,VDL_VFT[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC;
--- ZÄHLER
- LAST.CLK = PIXEL_CLK;
- LAST = VHCNT[]==(H_TOTAL[]-2);
- VHCNT[].CLK = PIXEL_CLK;
- VHCNT[] = (VHCNT[] + 1) & !LAST;
- VVCNT[].CLK = PIXEL_CLK;
- VVCNT[].ENA = LAST;
- VVCNT[] = (VVCNT[] + 1) & (VVCNT[]!=V_TOTAL[]-1);
--- DISPLAY ON OFF
- DPO_ZL.CLK = PIXEL_CLK;
- DPO_ZL = (VVCNT[]>RAND_OBEN[]-1) & (VVCNT[]=(VDIS_START[]-1)) & (VVCNT[]
-
-Sample Waveforms for altdpram0.vhd
-
-
-Sample behavioral waveforms for design file altdpram0.vhd
-The following waveforms show the behavior of altsyncram megafunction for the chosen set of parameters in design altdpram0.vhd. For the purpose of this simulation, the contents of the memory at the start of the sample waveforms is assumed to be ( 7, 6, 5, 4, ...). The design altdpram0.vhd has two read/write ports. Read/write port A has 16 words of 3 bits each and Read/write port B has 16 words of 3 bits each. The output of the read/write port A is registered by clock_a. The output of the read/write port B is registered by clock_b.
-
-Fig. 1 : Wave showing read operation.
-The above waveform shows the behavior of the design under normal read conditions. The read happens at the rising edge of the enabled clock cycle. The output from the RAM is undefined until after the first rising edge of the read clock. The clock enable on the read side input registers are disabled. The clock enable on the output registers are disabled.
-
-Fig. 2 : Waveform showing write operation
-The above waveform shows the behavior of the design under normal write conditions. The write cycle is assumed to be from the rising edge of the enabled clock in which wren is high till the rising edge of the next clock cycle. In BIDIR_DUAL_PORT mode, when the write happens at the same address as the one being read in the other port, the read output is unknown. Actual write into the RAM happens at the rising edge of the write clock. The clock enable on the write side input registers are disabled. The clock enable on the output registers are disabled. For the A port, When a write happens, the output of the port is the old data at the address. For the B port, When a write happens, the output of the port is the old data at the address.
-
-
-