7128 MAX
This commit is contained in:
parent
979ca517b4
commit
61457e702e
499
src/altera/max/7064/sp2_max.tdf
Normal file
499
src/altera/max/7064/sp2_max.tdf
Normal file
@ -0,0 +1,499 @@
|
||||
|
||||
TITLE "SINC_controller";
|
||||
|
||||
PARAMETERS
|
||||
(
|
||||
G_MODE = 1, -- 1 on LCELL, 0 - on EXP
|
||||
|
||||
NUM = "NO",
|
||||
NUMBER1 = B"00100000X", -- 0 - sinc
|
||||
NUMBER2 = B"00110111X", -- 7
|
||||
NUMBER3 = B"01001101X", -- D
|
||||
NUMBER4 = B"01010010X", -- 2
|
||||
NUMBER5 = B"00100000X", --
|
||||
NUMBER6 = B"00100000X", --
|
||||
NUMBER7 = B"00100000X" --
|
||||
);
|
||||
|
||||
SUBDESIGN SP2_MAX
|
||||
(
|
||||
|
||||
TG42_IN : INPUT;
|
||||
TG42_OUT : OUTPUT;
|
||||
TG42_BUF : OUTPUT;
|
||||
CLKZZ : BIDIR;
|
||||
CLK14 : OUTPUT;
|
||||
|
||||
AUD : OUTPUT; -- clk for timers
|
||||
BEEP : OUTPUT;
|
||||
|
||||
CMOS_DRD : OUTPUT;
|
||||
CMOS_AS : OUTPUT;
|
||||
CMOS_DWR : OUTPUT;
|
||||
|
||||
WR_PDOS : OUTPUT;
|
||||
WD : INPUT;
|
||||
WSTB : INPUT;
|
||||
SR,SL : INPUT;
|
||||
RSTB : INPUT;
|
||||
TR43 : INPUT;
|
||||
CLK_WG : OUTPUT;
|
||||
FDAT : OUTPUT;
|
||||
QDAT : OUTPUT;
|
||||
RDAT : INPUT;
|
||||
/WG_WR : OUTPUT;
|
||||
/WG_RD : OUTPUT;
|
||||
STE : INPUT;
|
||||
DENS_X : OUTPUT;
|
||||
WDAT : OUTPUT;
|
||||
|
||||
|
||||
-- XA[2..0] : BIDIR;
|
||||
XA[2..0] : INPUT;
|
||||
XACS : INPUT;
|
||||
-- SINC_1 : OUTPUT;
|
||||
SINC_1 : BIDIR;
|
||||
SINC_2 : BIDIR;
|
||||
|
||||
HDD_C[3..0] : INPUT;
|
||||
FDD_C[2..0] : INPUT;
|
||||
|
||||
HD_DIR : OUTPUT;
|
||||
HD_CS : OUTPUT;
|
||||
|
||||
/CONF_X : BIDIR;
|
||||
10K_CLK : OUTPUT;
|
||||
WR_CNF : INPUT;
|
||||
10K_D0 : OUTPUT;
|
||||
D0 : INPUT;
|
||||
|
||||
VGA_IN : INPUT;
|
||||
-- WR_COL : INPUT;
|
||||
SINC_V : OUTPUT;
|
||||
SINC_H : OUTPUT;
|
||||
SINC : OUTPUT;
|
||||
SINC_IN : INPUT;
|
||||
|
||||
XHD_RES : OUTPUT;
|
||||
XHD_WR : OUTPUT;
|
||||
XHD_RD : OUTPUT;
|
||||
|
||||
XHD1_CS[2..1] : OUTPUT;
|
||||
XHD2_CS[2..1] : OUTPUT;
|
||||
XHR_RDY : INPUT;
|
||||
|
||||
EPM_RES : INPUT;
|
||||
PW_GOOD : INPUT;
|
||||
|
||||
UNUSED65 : INPUT; -- was GND65, hack for 3000 family
|
||||
UNUSED33 : INPUT; -- was GND33, hack for 3000 family
|
||||
UNUSED1 : INPUT;
|
||||
UNUSED2 : INPUT;
|
||||
UNUSED5 : INPUT;
|
||||
UNUSED7 : INPUT;
|
||||
UNUSED22 : INPUT;
|
||||
UNUSED24 : INPUT;
|
||||
UNUSED27 : INPUT;
|
||||
UNUSED28 : INPUT;
|
||||
UNUSED49 : INPUT;
|
||||
UNUSED50 : INPUT;
|
||||
UNUSED53 : INPUT;
|
||||
UNUSED55 : INPUT;
|
||||
UNUSED63 : INPUT;
|
||||
UNUSED70 : INPUT;
|
||||
UNUSED72 : INPUT;
|
||||
UNUSED77 : INPUT;
|
||||
UNUSED78 : INPUT;
|
||||
|
||||
|
||||
|
||||
)
|
||||
VARIABLE
|
||||
|
||||
XCT[2..0] : DFF;
|
||||
CNF_ON : NODE;
|
||||
CNF_OFF : NODE;
|
||||
|
||||
CLK42 : NODE;
|
||||
|
||||
CT[3..0] : DFF;
|
||||
CTH[5..0] : DFF;
|
||||
CTV[8..0] : DFFE;
|
||||
|
||||
SINC_HT : DFF;
|
||||
SINC_VT : DFFE;
|
||||
|
||||
TURBING : NODE;
|
||||
FDD_1440 : NODE;
|
||||
NFDD_1440 : NODE;
|
||||
|
||||
CT_WG : NODE;
|
||||
CT_WG1 : NODE;
|
||||
|
||||
STWG[2..0] : DFF;
|
||||
CLK_PRC : NODE;
|
||||
WGR[4..0] : DFF;
|
||||
RDAT_X : NODE;
|
||||
|
||||
REG_P[2..0] : DFF;
|
||||
|
||||
/RESET : NODE;
|
||||
|
||||
|
||||
S144,S720 : NODE;
|
||||
|
||||
SHDD1,SHDD2 : NODE;
|
||||
THDD : NODE;
|
||||
NTHDD : NODE;
|
||||
|
||||
NO_HDD : NODE;
|
||||
|
||||
S320,S312 : NODE;
|
||||
T320 : NODE;
|
||||
NT320 : NODE;
|
||||
|
||||
SOFT_RESET : NODE;
|
||||
SOFT_RESET2 : NODE;
|
||||
|
||||
HDD_CLK : NODE;
|
||||
|
||||
LR_T[1..0] : DFF;
|
||||
|
||||
EXP_X : NODE;
|
||||
EXP_Y : NODE;
|
||||
|
||||
CTV8M : DFF;
|
||||
|
||||
CTV8C : NODE;
|
||||
|
||||
FN_NUM : NODE;
|
||||
|
||||
BEGIN
|
||||
|
||||
/RESET = DFF((EPM_RES & XHD_RES),!CT3,SOFT_RESET,);
|
||||
|
||||
-- /RESET = (EXP(!EPM_RES & EXP(EXP(EXP(EPM_RES)))) & SOFT_RESET);
|
||||
|
||||
EXP_X = EXP(TG42_IN);
|
||||
EXP_Y = EXP(TG42_IN);
|
||||
|
||||
IF (G_MODE == 0) GENERATE
|
||||
TG42_OUT = LCELL(EXP_X);
|
||||
ELSE GENERATE
|
||||
TG42_OUT = LCELL(TG42_BUF);
|
||||
END GENERATE;
|
||||
|
||||
TG42_BUF = LCELL(!TG42_IN);
|
||||
|
||||
CLK42 = TG42_IN;
|
||||
|
||||
-- CT[].clk = CLK14;
|
||||
CT[].clk = XCT1;
|
||||
CT[] = CT[] + 1;
|
||||
|
||||
-- === horizontal sinc =====
|
||||
|
||||
CTH[].clk = !CT3;
|
||||
SINC_HT.clk = !CT3;
|
||||
|
||||
IF !((CTH[] == B"XXXX11") & SINC_HT) THEN
|
||||
CTH[] = CTH[] + 1;
|
||||
ELSE
|
||||
CTH[] = GND;
|
||||
END IF;
|
||||
|
||||
-- SINC_1 = CTH5;
|
||||
SINC_1 = TRI(CTH5,VCC);
|
||||
SINC_2 = TRI(CTV8,VCC);
|
||||
|
||||
SINC_HT.d = (CTH[] == B"1101XX");
|
||||
|
||||
SINC_H = SINC_HT;
|
||||
|
||||
-- === vertical sinc =======
|
||||
|
||||
-- CTV[].clk = !CT3;
|
||||
-- SINC_VT.clk = !CT3;
|
||||
|
||||
CTV[].clk = SINC_HT;
|
||||
SINC_VT.clk = SINC_HT;
|
||||
|
||||
CTV8M.clk = SINC_HT;
|
||||
|
||||
-- CTV[].ena = (CTH[] == B"110111");
|
||||
-- SINC_VT.ena = (CTH[] == B"110111");
|
||||
CTV[].ena = VCC;
|
||||
SINC_VT.ena = VCC;
|
||||
|
||||
-- IF (CTV[] == B"100111111") THEN
|
||||
|
||||
IF (NUM == "YES") GENERATE
|
||||
|
||||
FN_NUM =(
|
||||
(CTV[8..0] == NUMBER1) or
|
||||
(CTV[8..0] == NUMBER2) or
|
||||
(CTV[8..0] == NUMBER3) or
|
||||
(CTV[8..0] == NUMBER4) or
|
||||
(CTV[8..0] == NUMBER5) or
|
||||
(CTV[8..0] == NUMBER6) or
|
||||
(CTV[8..0] == NUMBER7)
|
||||
) & !NO_HDD;
|
||||
|
||||
ELSE GENERATE
|
||||
|
||||
FN_NUM = GND;
|
||||
|
||||
END GENERATE;
|
||||
|
||||
|
||||
IF EXP((CTV[] == B"XXXXXXX11") & SINC_VT) THEN
|
||||
|
||||
(CTV[8..0]) = ((CTV[8..0]) + 1) xor (CTV8M,B"00000000");
|
||||
CTV8M = FN_NUM;
|
||||
|
||||
ELSE
|
||||
CTV[7..0] = GND;
|
||||
CTV8M = GND;
|
||||
CTV8 = GND;
|
||||
END IF;
|
||||
|
||||
SINC_VT.d = ((CTV[8..0] == B"1001111XX") or ((CTV[8..0] == B"1001101XX")) & NT320);
|
||||
|
||||
SINC_V = SINC_VT;
|
||||
|
||||
SINC = SINC_V xor SINC_H;
|
||||
|
||||
-- =============================
|
||||
|
||||
-- =========================================
|
||||
-- divide by 6
|
||||
|
||||
XCT[].clk = (TG42_IN xor !XCT1);
|
||||
XCT[].d = XCT[] + 1;
|
||||
|
||||
-- CLKZZ = 14 MHz
|
||||
|
||||
CLKZZ = TRI(XCT1,CNF_OFF);
|
||||
CLK14 = DFF(!CLK14,XCT0,,);
|
||||
|
||||
-- test exists
|
||||
|
||||
-- CNF_OFF = EXP(CNF_ON & /RESET);
|
||||
-- CNF_ON = EXP(CNF_OFF & XACS);
|
||||
|
||||
CNF_OFF = DFF(GND,GND,XACS,/RESET);
|
||||
CNF_ON = !CNF_OFF;
|
||||
|
||||
-- =========================================
|
||||
|
||||
-- ======== FDD controller ==================
|
||||
|
||||
TURBING = EXP(EXP(TURBING & !WSTB & !RSTB) & !STE & NFDD_1440);
|
||||
-- TURBING = GND;
|
||||
|
||||
CT_WG = TFF(VCC,(XCT1 xor (CT_WG & TURBING)),,);
|
||||
|
||||
STWG[].clk = (CT_WG xor STWG2);
|
||||
STWG[].d = STWG[] + 1;
|
||||
|
||||
CLK_WG = STWG2;
|
||||
|
||||
-- CLK_PRC = STWG0;
|
||||
CLK_PRC = CT_WG;
|
||||
|
||||
CT_WG1 = EXP(EXP(XCT1 & FDD_1440) & EXP(CT0 & NFDD_1440));
|
||||
|
||||
WGR[].clk = CT_WG1;
|
||||
|
||||
IF !FDAT THEN
|
||||
TABLE WGR[3..0] => WGR[3..0].d;
|
||||
0 => 4; 1 => 5; 2 => 4; 3 => 5;
|
||||
4 => 6; 5 => 7; 6 => 8; 7 => 8;
|
||||
8 => 9; 9 => 9; 10 => 10; 11 => 11;
|
||||
12 => 12; 13 => 13; 14 => 14; 15 => 15;
|
||||
END TABLE;
|
||||
WGR4.d = WGR4;
|
||||
ELSE
|
||||
IF WGR[3..0] == 0 THEN
|
||||
WGR[3..0].d = 3;
|
||||
WGR4.d = WGR4;
|
||||
ELSE
|
||||
WGR[].d = WGR[] + 1;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
QDAT = WGR4;
|
||||
RDAT_X = EXP(EXP(RDAT_X & EXP(!RDAT & !CT_WG1)) & EXP(RDAT & !CT_WG1));
|
||||
-- FDAT = DFF((RDAT_X or !DFF(RDAT_X,CT_WG1,,)),CT_WG1,,);
|
||||
FDAT = DFF((RDAT_X or EXP(DFF(RDAT_X,CT_WG1,,))),CT_WG1,,);
|
||||
-- ==========================================================
|
||||
-- now not complete!
|
||||
|
||||
AUD = CT3;
|
||||
BEEP = GND;
|
||||
|
||||
-- /CONF_X = TRI(GND,!/RESET);
|
||||
|
||||
/CONF_X = OPNDRN(/RESET);
|
||||
|
||||
-- 10K_CLK = WR_CNF; -- now not protect!
|
||||
|
||||
10K_CLK = DFF((WR_CNF & CNF_OFF) or ((HDD_C0 or FDD_C2) & CNF_ON),CLK42,,);
|
||||
|
||||
10K_D0 = DFFE(D0,10K_CLK,S720,(S144 & /RESET),CNF_OFF);
|
||||
|
||||
DENS_X = VCC;
|
||||
|
||||
-- === now NOT PRECOMP! =====
|
||||
|
||||
-- WDAT = WD;
|
||||
|
||||
WDAT = REG_P2;
|
||||
|
||||
REG_P[].clk = !CLK_PRC;
|
||||
|
||||
-- CASE WD IS
|
||||
-- WHEN 1 => REG_P[].d = (GND,SL,!(SL or SR),SR);
|
||||
-- WHEN 0 => REG_P[].d = (EXP(EXP(REG_P2)),REG_P[1..0],GND);
|
||||
-- END CASE;
|
||||
|
||||
-- CASE (DFF(WD,CLK_WG,,),DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS
|
||||
|
||||
LR_T[].clk = STWG2;
|
||||
-- LR_T[].clk = CLK_WG;
|
||||
|
||||
LR_T[].d = ((WD & !(SL & TR43)),(WD & !(SR & TR43)));
|
||||
|
||||
CASE LR_T[] IS
|
||||
WHEN 0 => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0);
|
||||
REG_P[2] = EXP(EXP(REG_P[1..0] == 1));
|
||||
-- REG_P[2] = (REG_P[1..0] == 1);
|
||||
WHEN 1 => REG_P[1..0] = 1; REG_P[2] = GND;
|
||||
WHEN 2 => REG_P[1..0] = 3; REG_P[2] = GND;
|
||||
WHEN 3 => REG_P[1..0] = 2; REG_P[2] = GND;
|
||||
END CASE;
|
||||
%
|
||||
CASE (WD,DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS
|
||||
WHEN B"0XX" => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0);
|
||||
WHEN B"100" => REG_P[1..0] = 2;
|
||||
WHEN B"110" => REG_P[1..0] = 1;
|
||||
WHEN B"101" => REG_P[1..0] = 3;
|
||||
WHEN B"111" => REG_P[1..0] = 2;
|
||||
END CASE;
|
||||
%
|
||||
|
||||
%
|
||||
CASE WD IS
|
||||
WHEN 0 => REG_P[3] = EXP(EXP(REG_P[1..0] == 1));
|
||||
WHEN 1 => REG_P[3] = GND;
|
||||
END CASE;
|
||||
%
|
||||
|
||||
-- === Port Controls ====================================
|
||||
%
|
||||
FDD_C0 - 0 - WG93 / 1 - kmps/ p_dos
|
||||
FDD_C1 - 0 - write / 1 - read
|
||||
FDD_C2 - 0 - no / 1 - CS_WG/ strobe
|
||||
|
||||
HDD_C0 - strobe
|
||||
HDD_C[2..1] = 00 - SYS_FN, 01 - SYS_FN, 10 - HDD1/2, 11 - CMOS
|
||||
HDD_C3 - 0 - HD_CS1, 1 HD_CS3 / 0 CMOS_DAT, 1 - CMOS_ADR
|
||||
|
||||
HDD_C[3..0] = 0001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 1.44/720
|
||||
HDD_C[3..0] = 1001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 320/312 lines
|
||||
HDD_C[3..0] = 0011, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set HDD1/HDD2
|
||||
HDD_C[3..0] = 1011, FDD_C[2..1] = 00; -> FDD_C0 = 0 -> soft_reset!
|
||||
HDD_C[3..0] = X101, FDD_C[2..1] = XX; -> HDD1/2 rd/wr
|
||||
|
||||
%
|
||||
|
||||
SOFT_RESET = !((HDD_C[] == B"1011") & (FDD_C[] == B"000"));
|
||||
SOFT_RESET2 = !((HDD_C[] == B"1011") & (FDD_C[] == B"001"));
|
||||
|
||||
-- FDD switch
|
||||
|
||||
-- NFDD_1440 = EXP(FDD_1440 & S720 & /RESET);
|
||||
-- FDD_1440 = EXP(NFDD_1440 & S144);
|
||||
FDD_1440 = 10K_D0;
|
||||
NFDD_1440 = !10K_D0;
|
||||
|
||||
S144 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"001"));
|
||||
S720 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"000"));
|
||||
|
||||
-- Screen Switch
|
||||
|
||||
T320 = EXP(NT320 & S320 & /RESET);
|
||||
NT320 = EXP(T320 & S312);
|
||||
|
||||
S312 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"001"));
|
||||
S320 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"000"));
|
||||
|
||||
-- HDD Switch
|
||||
|
||||
-- THDD = EXP(NTHDD & SHDD2 & /RESET);
|
||||
-- NTHDD = EXP(THDD & SHDD1);
|
||||
|
||||
THDD = EXP(NTHDD & NO_HDD & SHDD2 & /RESET & SOFT_RESET2);
|
||||
NTHDD = EXP(THDD & NO_HDD & SHDD1 & /RESET & SOFT_RESET2);
|
||||
NO_HDD = EXP(NTHDD & THDD & SHDD1 & SHDD2);
|
||||
|
||||
SHDD2 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"001"));
|
||||
SHDD1 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"000"));
|
||||
|
||||
-- Control signals
|
||||
|
||||
WR_PDOS = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2);
|
||||
/WG_WR = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X00")),HDD_CLK,,FDD_C2);
|
||||
/WG_RD = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2);
|
||||
|
||||
CMOS_DWR = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2);
|
||||
CMOS_AS =!DFF(!((HDD_C[] == B"0110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2);
|
||||
CMOS_DRD = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2);
|
||||
|
||||
-- HD_DIR = !HDD_C1; -- ????????????
|
||||
HD_DIR = XHD_RD;
|
||||
|
||||
-- HD_CS = GND;
|
||||
-- HD_CS = CTV8M;
|
||||
HD_CS = (CTV8M and /RESET);
|
||||
|
||||
|
||||
-- HD_CS = !/RESET;
|
||||
|
||||
-- XHD_RES = VCC;
|
||||
|
||||
-- XHD_RES = DFF(PW_GOOD,SINC_V,,);
|
||||
XHD_RES = DFF(PW_GOOD,SINC_V,EPM_RES,);
|
||||
|
||||
-- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),CLK42,,);
|
||||
-- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),CLK42,,);
|
||||
|
||||
-- HDD_CLK = EXP(EXP(HDD_C0));
|
||||
HDD_CLK = 10K_CLK;
|
||||
|
||||
-- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1 or !HDD_CLK),CLK42,,HDD_C0);
|
||||
-- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1 or !HDD_CLK),CLK42,,HDD_C0);
|
||||
-- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,HDD_C0);
|
||||
-- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,HDD_C0);
|
||||
XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,(HDD_C0 and /RESET));
|
||||
XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,(HDD_C0 and /RESET));
|
||||
|
||||
-- XHD1_CS1 = DFF(!((HDD_C[] == B"010X") & NTHDD),CLK42,,);
|
||||
-- XHD1_CS2 = DFF(!((HDD_C[] == B"110X") & NTHDD),CLK42,,);
|
||||
|
||||
-- XHD2_CS1 = DFF(!((HDD_C[] == B"010X") & THDD),CLK42,,);
|
||||
-- XHD2_CS2 = DFF(!((HDD_C[] == B"110X") & THDD),CLK42,,);
|
||||
|
||||
-- XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,);
|
||||
-- XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,);
|
||||
XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,/RESET);
|
||||
XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,/RESET);
|
||||
|
||||
-- XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,);
|
||||
-- XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,);
|
||||
XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,/RESET);
|
||||
XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,/RESET);
|
||||
|
||||
|
||||
END;
|
||||
|
||||
499
src/altera/max/7128/sp2_max.tdf
Normal file
499
src/altera/max/7128/sp2_max.tdf
Normal file
@ -0,0 +1,499 @@
|
||||
|
||||
TITLE "SINC_controller";
|
||||
|
||||
PARAMETERS
|
||||
(
|
||||
G_MODE = 1, -- 1 on LCELL, 0 - on EXP
|
||||
|
||||
NUM = "NO",
|
||||
NUMBER1 = B"00100000X", -- 0 - sinc
|
||||
NUMBER2 = B"00110111X", -- 7
|
||||
NUMBER3 = B"01001101X", -- D
|
||||
NUMBER4 = B"01010010X", -- 2
|
||||
NUMBER5 = B"00100000X", --
|
||||
NUMBER6 = B"00100000X", --
|
||||
NUMBER7 = B"00100000X" --
|
||||
);
|
||||
|
||||
SUBDESIGN SP2_MAX
|
||||
(
|
||||
|
||||
TG42_IN : INPUT;
|
||||
TG42_OUT : OUTPUT;
|
||||
TG42_BUF : OUTPUT;
|
||||
CLKZZ : BIDIR;
|
||||
CLK14 : OUTPUT;
|
||||
|
||||
AUD : OUTPUT; -- clk for timers
|
||||
BEEP : OUTPUT;
|
||||
|
||||
CMOS_DRD : OUTPUT;
|
||||
CMOS_AS : OUTPUT;
|
||||
CMOS_DWR : OUTPUT;
|
||||
|
||||
WR_PDOS : OUTPUT;
|
||||
WD : INPUT;
|
||||
WSTB : INPUT;
|
||||
SR,SL : INPUT;
|
||||
RSTB : INPUT;
|
||||
TR43 : INPUT;
|
||||
CLK_WG : OUTPUT;
|
||||
FDAT : OUTPUT;
|
||||
QDAT : OUTPUT;
|
||||
RDAT : INPUT;
|
||||
/WG_WR : OUTPUT;
|
||||
/WG_RD : OUTPUT;
|
||||
STE : INPUT;
|
||||
DENS_X : OUTPUT;
|
||||
WDAT : OUTPUT;
|
||||
|
||||
|
||||
-- XA[2..0] : BIDIR;
|
||||
XA[2..0] : INPUT;
|
||||
XACS : INPUT;
|
||||
-- SINC_1 : OUTPUT;
|
||||
SINC_1 : BIDIR;
|
||||
SINC_2 : BIDIR;
|
||||
|
||||
HDD_C[3..0] : INPUT;
|
||||
FDD_C[2..0] : INPUT;
|
||||
|
||||
HD_DIR : OUTPUT;
|
||||
HD_CS : OUTPUT;
|
||||
|
||||
/CONF_X : BIDIR;
|
||||
10K_CLK : OUTPUT;
|
||||
WR_CNF : INPUT;
|
||||
10K_D0 : OUTPUT;
|
||||
D0 : INPUT;
|
||||
|
||||
VGA_IN : INPUT;
|
||||
-- WR_COL : INPUT;
|
||||
SINC_V : OUTPUT;
|
||||
SINC_H : OUTPUT;
|
||||
SINC : OUTPUT;
|
||||
SINC_IN : INPUT;
|
||||
|
||||
XHD_RES : OUTPUT;
|
||||
XHD_WR : OUTPUT;
|
||||
XHD_RD : OUTPUT;
|
||||
|
||||
XHD1_CS[2..1] : OUTPUT;
|
||||
XHD2_CS[2..1] : OUTPUT;
|
||||
XHR_RDY : INPUT;
|
||||
|
||||
EPM_RES : INPUT;
|
||||
PW_GOOD : INPUT;
|
||||
|
||||
UNUSED65 : INPUT; -- was GND65, hack for 3000 family
|
||||
UNUSED33 : INPUT; -- was GND33, hack for 3000 family
|
||||
UNUSED1 : INPUT;
|
||||
UNUSED2 : INPUT;
|
||||
UNUSED5 : INPUT;
|
||||
UNUSED7 : INPUT;
|
||||
UNUSED22 : INPUT;
|
||||
UNUSED24 : INPUT;
|
||||
UNUSED27 : INPUT;
|
||||
UNUSED28 : INPUT;
|
||||
UNUSED49 : INPUT;
|
||||
UNUSED50 : INPUT;
|
||||
UNUSED53 : INPUT;
|
||||
UNUSED55 : INPUT;
|
||||
UNUSED63 : INPUT;
|
||||
UNUSED70 : INPUT;
|
||||
UNUSED72 : INPUT;
|
||||
UNUSED77 : INPUT;
|
||||
UNUSED78 : INPUT;
|
||||
|
||||
|
||||
|
||||
)
|
||||
VARIABLE
|
||||
|
||||
XCT[2..0] : DFF;
|
||||
CNF_ON : NODE;
|
||||
CNF_OFF : NODE;
|
||||
|
||||
CLK42 : NODE;
|
||||
|
||||
CT[3..0] : DFF;
|
||||
CTH[5..0] : DFF;
|
||||
CTV[8..0] : DFFE;
|
||||
|
||||
SINC_HT : DFF;
|
||||
SINC_VT : DFFE;
|
||||
|
||||
TURBING : NODE;
|
||||
FDD_1440 : NODE;
|
||||
NFDD_1440 : NODE;
|
||||
|
||||
CT_WG : NODE;
|
||||
CT_WG1 : NODE;
|
||||
|
||||
STWG[2..0] : DFF;
|
||||
CLK_PRC : NODE;
|
||||
WGR[4..0] : DFF;
|
||||
RDAT_X : NODE;
|
||||
|
||||
REG_P[2..0] : DFF;
|
||||
|
||||
/RESET : NODE;
|
||||
|
||||
|
||||
S144,S720 : NODE;
|
||||
|
||||
SHDD1,SHDD2 : NODE;
|
||||
THDD : NODE;
|
||||
NTHDD : NODE;
|
||||
|
||||
NO_HDD : NODE;
|
||||
|
||||
S320,S312 : NODE;
|
||||
T320 : NODE;
|
||||
NT320 : NODE;
|
||||
|
||||
SOFT_RESET : NODE;
|
||||
SOFT_RESET2 : NODE;
|
||||
|
||||
HDD_CLK : NODE;
|
||||
|
||||
LR_T[1..0] : DFF;
|
||||
|
||||
EXP_X : NODE;
|
||||
EXP_Y : NODE;
|
||||
|
||||
CTV8M : DFF;
|
||||
|
||||
CTV8C : NODE;
|
||||
|
||||
FN_NUM : NODE;
|
||||
|
||||
BEGIN
|
||||
|
||||
/RESET = DFF((EPM_RES & XHD_RES),!CT3,SOFT_RESET,);
|
||||
|
||||
-- /RESET = (EXP(!EPM_RES & EXP(EXP(EXP(EPM_RES)))) & SOFT_RESET);
|
||||
|
||||
EXP_X = EXP(TG42_IN);
|
||||
EXP_Y = EXP(TG42_IN);
|
||||
|
||||
IF (G_MODE == 0) GENERATE
|
||||
TG42_OUT = LCELL(EXP_X);
|
||||
ELSE GENERATE
|
||||
TG42_OUT = LCELL(TG42_BUF);
|
||||
END GENERATE;
|
||||
|
||||
TG42_BUF = LCELL(!TG42_IN);
|
||||
|
||||
CLK42 = TG42_IN;
|
||||
|
||||
-- CT[].clk = CLK14;
|
||||
CT[].clk = XCT1;
|
||||
CT[] = CT[] + 1;
|
||||
|
||||
-- === horizontal sinc =====
|
||||
|
||||
CTH[].clk = !CT3;
|
||||
SINC_HT.clk = !CT3;
|
||||
|
||||
IF !((CTH[] == B"XXXX11") & SINC_HT) THEN
|
||||
CTH[] = CTH[] + 1;
|
||||
ELSE
|
||||
CTH[] = GND;
|
||||
END IF;
|
||||
|
||||
-- SINC_1 = CTH5;
|
||||
SINC_1 = TRI(CTH5,VCC);
|
||||
SINC_2 = TRI(CTV8,VCC);
|
||||
|
||||
SINC_HT.d = (CTH[] == B"1101XX");
|
||||
|
||||
SINC_H = SINC_HT;
|
||||
|
||||
-- === vertical sinc =======
|
||||
|
||||
-- CTV[].clk = !CT3;
|
||||
-- SINC_VT.clk = !CT3;
|
||||
|
||||
CTV[].clk = SINC_HT;
|
||||
SINC_VT.clk = SINC_HT;
|
||||
|
||||
CTV8M.clk = SINC_HT;
|
||||
|
||||
-- CTV[].ena = (CTH[] == B"110111");
|
||||
-- SINC_VT.ena = (CTH[] == B"110111");
|
||||
CTV[].ena = VCC;
|
||||
SINC_VT.ena = VCC;
|
||||
|
||||
-- IF (CTV[] == B"100111111") THEN
|
||||
|
||||
IF (NUM == "YES") GENERATE
|
||||
|
||||
FN_NUM =(
|
||||
(CTV[8..0] == NUMBER1) or
|
||||
(CTV[8..0] == NUMBER2) or
|
||||
(CTV[8..0] == NUMBER3) or
|
||||
(CTV[8..0] == NUMBER4) or
|
||||
(CTV[8..0] == NUMBER5) or
|
||||
(CTV[8..0] == NUMBER6) or
|
||||
(CTV[8..0] == NUMBER7)
|
||||
) & !NO_HDD;
|
||||
|
||||
ELSE GENERATE
|
||||
|
||||
FN_NUM = GND;
|
||||
|
||||
END GENERATE;
|
||||
|
||||
|
||||
IF EXP((CTV[] == B"XXXXXXX11") & SINC_VT) THEN
|
||||
|
||||
(CTV[8..0]) = ((CTV[8..0]) + 1) xor (CTV8M,B"00000000");
|
||||
CTV8M = FN_NUM;
|
||||
|
||||
ELSE
|
||||
CTV[7..0] = GND;
|
||||
CTV8M = GND;
|
||||
CTV8 = GND;
|
||||
END IF;
|
||||
|
||||
SINC_VT.d = ((CTV[8..0] == B"1001111XX") or ((CTV[8..0] == B"1001101XX")) & NT320);
|
||||
|
||||
SINC_V = SINC_VT;
|
||||
|
||||
SINC = SINC_V xor SINC_H;
|
||||
|
||||
-- =============================
|
||||
|
||||
-- =========================================
|
||||
-- divide by 6
|
||||
|
||||
XCT[].clk = (TG42_IN xor !XCT1);
|
||||
XCT[].d = XCT[] + 1;
|
||||
|
||||
-- CLKZZ = 14 MHz
|
||||
|
||||
CLKZZ = TRI(XCT1,CNF_OFF);
|
||||
CLK14 = DFF(!CLK14,XCT0,,);
|
||||
|
||||
-- test exists
|
||||
|
||||
-- CNF_OFF = EXP(CNF_ON & /RESET);
|
||||
-- CNF_ON = EXP(CNF_OFF & XACS);
|
||||
|
||||
CNF_OFF = DFF(GND,GND,XACS,/RESET);
|
||||
CNF_ON = !CNF_OFF;
|
||||
|
||||
-- =========================================
|
||||
|
||||
-- ======== FDD controller ==================
|
||||
|
||||
TURBING = EXP(EXP(TURBING & !WSTB & !RSTB) & !STE & NFDD_1440);
|
||||
-- TURBING = GND;
|
||||
|
||||
CT_WG = TFF(VCC,(XCT1 xor (CT_WG & TURBING)),,);
|
||||
|
||||
STWG[].clk = (CT_WG xor STWG2);
|
||||
STWG[].d = STWG[] + 1;
|
||||
|
||||
CLK_WG = STWG2;
|
||||
|
||||
-- CLK_PRC = STWG0;
|
||||
CLK_PRC = CT_WG;
|
||||
|
||||
CT_WG1 = EXP(EXP(XCT1 & FDD_1440) & EXP(CT0 & NFDD_1440));
|
||||
|
||||
WGR[].clk = CT_WG1;
|
||||
|
||||
IF !FDAT THEN
|
||||
TABLE WGR[3..0] => WGR[3..0].d;
|
||||
0 => 4; 1 => 5; 2 => 4; 3 => 5;
|
||||
4 => 6; 5 => 7; 6 => 8; 7 => 8;
|
||||
8 => 9; 9 => 9; 10 => 10; 11 => 11;
|
||||
12 => 12; 13 => 13; 14 => 14; 15 => 15;
|
||||
END TABLE;
|
||||
WGR4.d = WGR4;
|
||||
ELSE
|
||||
IF WGR[3..0] == 0 THEN
|
||||
WGR[3..0].d = 3;
|
||||
WGR4.d = WGR4;
|
||||
ELSE
|
||||
WGR[].d = WGR[] + 1;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
QDAT = WGR4;
|
||||
RDAT_X = EXP(EXP(RDAT_X & EXP(!RDAT & !CT_WG1)) & EXP(RDAT & !CT_WG1));
|
||||
-- FDAT = DFF((RDAT_X or !DFF(RDAT_X,CT_WG1,,)),CT_WG1,,);
|
||||
FDAT = DFF((RDAT_X or EXP(DFF(RDAT_X,CT_WG1,,))),CT_WG1,,);
|
||||
-- ==========================================================
|
||||
-- now not complete!
|
||||
|
||||
AUD = CT3;
|
||||
BEEP = GND;
|
||||
|
||||
-- /CONF_X = TRI(GND,!/RESET);
|
||||
|
||||
/CONF_X = OPNDRN(/RESET);
|
||||
|
||||
-- 10K_CLK = WR_CNF; -- now not protect!
|
||||
|
||||
10K_CLK = DFF((WR_CNF & CNF_OFF) or ((HDD_C0 or FDD_C2) & CNF_ON),CLK42,,);
|
||||
|
||||
10K_D0 = DFFE(D0,10K_CLK,S720,(S144 & /RESET),CNF_OFF);
|
||||
|
||||
DENS_X = VCC;
|
||||
|
||||
-- === now NOT PRECOMP! =====
|
||||
|
||||
-- WDAT = WD;
|
||||
|
||||
WDAT = REG_P2;
|
||||
|
||||
REG_P[].clk = !CLK_PRC;
|
||||
|
||||
-- CASE WD IS
|
||||
-- WHEN 1 => REG_P[].d = (GND,SL,!(SL or SR),SR);
|
||||
-- WHEN 0 => REG_P[].d = (EXP(EXP(REG_P2)),REG_P[1..0],GND);
|
||||
-- END CASE;
|
||||
|
||||
-- CASE (DFF(WD,CLK_WG,,),DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS
|
||||
|
||||
LR_T[].clk = STWG2;
|
||||
-- LR_T[].clk = CLK_WG;
|
||||
|
||||
LR_T[].d = ((WD & !(SL & TR43)),(WD & !(SR & TR43)));
|
||||
|
||||
CASE LR_T[] IS
|
||||
WHEN 0 => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0);
|
||||
REG_P[2] = EXP(EXP(REG_P[1..0] == 1));
|
||||
-- REG_P[2] = (REG_P[1..0] == 1);
|
||||
WHEN 1 => REG_P[1..0] = 1; REG_P[2] = GND;
|
||||
WHEN 2 => REG_P[1..0] = 3; REG_P[2] = GND;
|
||||
WHEN 3 => REG_P[1..0] = 2; REG_P[2] = GND;
|
||||
END CASE;
|
||||
%
|
||||
CASE (WD,DFF((SL & TR43),CLK_WG,,),DFF((SR & TR43),CLK_WG,,)) IS
|
||||
WHEN B"0XX" => REG_P[1..0] = (REG_P[1..0] - 1) & EXP(REG_P[1..0] == 0);
|
||||
WHEN B"100" => REG_P[1..0] = 2;
|
||||
WHEN B"110" => REG_P[1..0] = 1;
|
||||
WHEN B"101" => REG_P[1..0] = 3;
|
||||
WHEN B"111" => REG_P[1..0] = 2;
|
||||
END CASE;
|
||||
%
|
||||
|
||||
%
|
||||
CASE WD IS
|
||||
WHEN 0 => REG_P[3] = EXP(EXP(REG_P[1..0] == 1));
|
||||
WHEN 1 => REG_P[3] = GND;
|
||||
END CASE;
|
||||
%
|
||||
|
||||
-- === Port Controls ====================================
|
||||
%
|
||||
FDD_C0 - 0 - WG93 / 1 - kmps/ p_dos
|
||||
FDD_C1 - 0 - write / 1 - read
|
||||
FDD_C2 - 0 - no / 1 - CS_WG/ strobe
|
||||
|
||||
HDD_C0 - strobe
|
||||
HDD_C[2..1] = 00 - SYS_FN, 01 - SYS_FN, 10 - HDD1/2, 11 - CMOS
|
||||
HDD_C3 - 0 - HD_CS1, 1 HD_CS3 / 0 CMOS_DAT, 1 - CMOS_ADR
|
||||
|
||||
HDD_C[3..0] = 0001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 1.44/720
|
||||
HDD_C[3..0] = 1001, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set 320/312 lines
|
||||
HDD_C[3..0] = 0011, FDD_C[2..1] = 00; -> FDD_C0 = 1/0 -> set HDD1/HDD2
|
||||
HDD_C[3..0] = 1011, FDD_C[2..1] = 00; -> FDD_C0 = 0 -> soft_reset!
|
||||
HDD_C[3..0] = X101, FDD_C[2..1] = XX; -> HDD1/2 rd/wr
|
||||
|
||||
%
|
||||
|
||||
SOFT_RESET = !((HDD_C[] == B"1011") & (FDD_C[] == B"000"));
|
||||
SOFT_RESET2 = !((HDD_C[] == B"1011") & (FDD_C[] == B"001"));
|
||||
|
||||
-- FDD switch
|
||||
|
||||
-- NFDD_1440 = EXP(FDD_1440 & S720 & /RESET);
|
||||
-- FDD_1440 = EXP(NFDD_1440 & S144);
|
||||
FDD_1440 = 10K_D0;
|
||||
NFDD_1440 = !10K_D0;
|
||||
|
||||
S144 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"001"));
|
||||
S720 = EXP((HDD_C[] == B"0001") & (FDD_C[] == B"000"));
|
||||
|
||||
-- Screen Switch
|
||||
|
||||
T320 = EXP(NT320 & S320 & /RESET);
|
||||
NT320 = EXP(T320 & S312);
|
||||
|
||||
S312 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"001"));
|
||||
S320 = EXP((HDD_C[] == B"1001") & (FDD_C[] == B"000"));
|
||||
|
||||
-- HDD Switch
|
||||
|
||||
-- THDD = EXP(NTHDD & SHDD2 & /RESET);
|
||||
-- NTHDD = EXP(THDD & SHDD1);
|
||||
|
||||
THDD = EXP(NTHDD & NO_HDD & SHDD2 & /RESET & SOFT_RESET2);
|
||||
NTHDD = EXP(THDD & NO_HDD & SHDD1 & /RESET & SOFT_RESET2);
|
||||
NO_HDD = EXP(NTHDD & THDD & SHDD1 & SHDD2);
|
||||
|
||||
SHDD2 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"001"));
|
||||
SHDD1 = EXP((HDD_C[] == B"0011") & (FDD_C[] == B"000"));
|
||||
|
||||
-- Control signals
|
||||
|
||||
WR_PDOS = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2);
|
||||
/WG_WR = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X00")),HDD_CLK,,FDD_C2);
|
||||
/WG_RD = DFF(!((HDD_C[] == 0) & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2);
|
||||
|
||||
CMOS_DWR = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2);
|
||||
CMOS_AS =!DFF(!((HDD_C[] == B"0110") & (FDD_C[] == B"X01")),HDD_CLK,,FDD_C2);
|
||||
CMOS_DRD = DFF(!((HDD_C[] == B"1110") & (FDD_C[] == B"X10")),HDD_CLK,,FDD_C2);
|
||||
|
||||
-- HD_DIR = !HDD_C1; -- ????????????
|
||||
HD_DIR = XHD_RD;
|
||||
|
||||
-- HD_CS = GND;
|
||||
-- HD_CS = CTV8M;
|
||||
HD_CS = (CTV8M and /RESET);
|
||||
|
||||
|
||||
-- HD_CS = !/RESET;
|
||||
|
||||
-- XHD_RES = VCC;
|
||||
|
||||
-- XHD_RES = DFF(PW_GOOD,SINC_V,,);
|
||||
XHD_RES = DFF(PW_GOOD,SINC_V,EPM_RES,);
|
||||
|
||||
-- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),CLK42,,);
|
||||
-- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),CLK42,,);
|
||||
|
||||
-- HDD_CLK = EXP(EXP(HDD_C0));
|
||||
HDD_CLK = 10K_CLK;
|
||||
|
||||
-- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1 or !HDD_CLK),CLK42,,HDD_C0);
|
||||
-- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1 or !HDD_CLK),CLK42,,HDD_C0);
|
||||
-- XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,HDD_C0);
|
||||
-- XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,HDD_C0);
|
||||
XHD_WR = DFF((!(HDD_C[] == B"X101") or FDD_C1),HDD_CLK,,(HDD_C0 and /RESET));
|
||||
XHD_RD = DFF((!(HDD_C[] == B"X101") or !FDD_C1),HDD_CLK,,(HDD_C0 and /RESET));
|
||||
|
||||
-- XHD1_CS1 = DFF(!((HDD_C[] == B"010X") & NTHDD),CLK42,,);
|
||||
-- XHD1_CS2 = DFF(!((HDD_C[] == B"110X") & NTHDD),CLK42,,);
|
||||
|
||||
-- XHD2_CS1 = DFF(!((HDD_C[] == B"010X") & THDD),CLK42,,);
|
||||
-- XHD2_CS2 = DFF(!((HDD_C[] == B"110X") & THDD),CLK42,,);
|
||||
|
||||
-- XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,);
|
||||
-- XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,);
|
||||
XHD1_CS1 = DFF((!(HDD_C[] == B"010X") or THDD),CLK42,,/RESET);
|
||||
XHD1_CS2 = DFF((!(HDD_C[] == B"110X") or THDD),CLK42,,/RESET);
|
||||
|
||||
-- XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,);
|
||||
-- XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,);
|
||||
XHD2_CS1 = DFF((!(HDD_C[] == B"010X") or NTHDD),CLK42,,/RESET);
|
||||
XHD2_CS2 = DFF((!(HDD_C[] == B"110X") or NTHDD),CLK42,,/RESET);
|
||||
|
||||
|
||||
END;
|
||||
|
||||
4
src/altera/max/7128_make.bat
Normal file
4
src/altera/max/7128_make.bat
Normal file
@ -0,0 +1,4 @@
|
||||
C:
|
||||
cd "C:\users\tolik\Documents\SP_Projects\ASM\GIT\SP_Core\Build\MAX\tmp\"
|
||||
"C:\Program Files (x86)\MAXPLUS2\MAXPLUS2.EXE" -compile SP2_MAX >> compile.log
|
||||
exit
|
||||
Loading…
Reference in New Issue
Block a user