|
|
- var eqnType = 0;
- var spcStr = " ";
- var nlStr = "<br>";
- var tabStr = spcStr + spcStr + spcStr + spcStr + spcStr;
- var nlTabStr = nlStr + tabStr;
- var rClrS = "<font color='blue'>";
- var rClrE = "</font>";
- var cClrS = "<font color='green'>";
- var cClrE = "</font>";
-
- var abelOper = new Array();
- abelOper["GND"] = new Array("Gnd");
- abelOper["VCC"] = new Array("Vcc");
- abelOper["NOT"] = new Array(rClrS + "!" + rClrE);
- abelOper["AND"] = new Array(rClrS + "&" + rClrE);
- abelOper["OR"] = new Array(rClrS + "#" + rClrE);
- abelOper["XOR"] = new Array(rClrS + "$" + rClrE);
- abelOper["EQUAL_COLON"] = new Array(":= ");
- abelOper["EQUAL"] = new Array("= ");
- abelOper["ASSIGN"] = new Array("");
- abelOper["OPEN_NEGATE"] = new Array("(");
- abelOper["CLOSE_NEGATE"] = new Array(")");
- abelOper["OPEN_PTERM"] = new Array("");
- abelOper["CLOSE_PTERM"] = new Array("");
- abelOper["OPEN_BRACE"] = new Array("<");
- abelOper["CLOSE_BRACE"] = new Array(">");
- abelOper["INVALID_OPEN_BRACE"] = new Array("<");
- abelOper["INVALID_CLOSE_BRACE"] = new Array(">");
-
- abelOper["ENDLN"] = new Array(";");
- abelOper["COMMENT"] = new Array("//");
- abelOper["IMPORT"] = new Array(";Imported pterms ");
- abelOper["GCK_COM"] = new Array("GCK");
- abelOper["GTS_COM"] = new Array("GTS");
- abelOper["GSR_COM"] = new Array("GSR");
- abelOper["OD_COM"] = new Array("Open Drain");
- abelOper["START_EQN"] = new Array("");
- abelOper["END_EQN"] = new Array("");
-
- abelOper["_I"] = new Array(".I");
- abelOper["_T"] = new Array(".T");
- abelOper["_D"] = new Array(".D");
- abelOper["_C"] = new Array(".CLK");
- abelOper["_DEC"] = new Array(".DEC");
- abelOper["_LH"] = new Array(".LH");
- abelOper["_CLR"] = new Array(".AR");
- abelOper["_PRE"] = new Array(".AP");
- abelOper["_CE"] = new Array(".CE");
- abelOper["_OE"] = new Array(".OE");
-
- abelOper["OE_START"] = new Array(" <= ");
- abelOper["OE_WHEN"] = new Array(" when ");
- abelOper["OE_EQUAL"] = new Array(" = ");
- abelOper["OE_ELSE"] = new Array(" else ");
- abelOper["B0"] = new Array("'0'");
- abelOper["B1"] = new Array("'1'");
- abelOper["BZ"] = new Array("'Z'");
-
- abelOper["FD"] = new Array(".D");
- abelOper["FT"] = new Array(".T");
- abelOper["FDD"] = new Array(".DEC");
- abelOper["FTD"] = new Array(".T");
- abelOper["LD"] = new Array(".LH");
- abelOper["Q"] = new Array(".Q");
-
- var vhdlOper = new Array();
- vhdlOper["GND"] = new Array("'0'");
- vhdlOper["VCC"] = new Array("'1'");
- vhdlOper["NOT"] = new Array(rClrS + "NOT " + rClrE);
- vhdlOper["AND"] = new Array(rClrS + "AND" + rClrE);
- vhdlOper["OR"] = new Array(rClrS + "OR" + rClrE);
- vhdlOper["XOR"] = new Array(rClrS + "XOR" + rClrE);
- vhdlOper["EQUAL_COLON"] = new Array("<= ");
- vhdlOper["EQUAL"] = new Array("<= ");
- vhdlOper["ASSIGN"] = new Array("");
- vhdlOper["OPEN_NEGATE"] = new Array("(");
- vhdlOper["CLOSE_NEGATE"] = new Array(")");
- vhdlOper["OPEN_PTERM"] = new Array("(");
- vhdlOper["CLOSE_PTERM"] = new Array(")");
- vhdlOper["OPEN_BRACE"] = new Array("(");
- vhdlOper["CLOSE_BRACE"] = new Array(")");
- vhdlOper["INVALID_OPEN_BRACE"] = new Array("<");
- vhdlOper["INVALID_CLOSE_BRACE"] = new Array(">");
-
- vhdlOper["ENDLN"] = new Array(";");
- vhdlOper["COMMENT"] = new Array("--");
- vhdlOper["IMPORT"] = new Array("");
- vhdlOper["GCK_COM"] = new Array("GCK");
- vhdlOper["GTS_COM"] = new Array("GTS");
- vhdlOper["GSR_COM"] = new Array("GSR");
- vhdlOper["OD_COM"] = new Array("Open Drain");
- vhdlOper["START_EQN"] = new Array(rClrS + "port map" + rClrE + " (");
- vhdlOper["END_EQN"] = new Array(")");
-
- vhdlOper["_I"] = new Array("_I");
- vhdlOper["_T"] = new Array("_T");
- vhdlOper["_D"] = new Array("_D");
- vhdlOper["_C"] = new Array("_C");
- vhdlOper["_DEC"] = new Array("_C");
- vhdlOper["_LH"] = new Array("_C");
- vhdlOper["_CLR"] = new Array("_CLR");
- vhdlOper["_PRE"] = new Array("_PRE");
- vhdlOper["_CE"] = new Array("_CE");
- vhdlOper["_OE"] = new Array("_OE");
-
- vhdlOper["OE_START"] = new Array(" <= ");
- vhdlOper["OE_WHEN"] = new Array(" when ");
- vhdlOper["OE_EQUAL"] = new Array(" = ");
- vhdlOper["OE_ELSE"] = new Array(" else ");
- vhdlOper["B0"] = new Array("'0'");
- vhdlOper["B1"] = new Array("'1'");
- vhdlOper["BZ"] = new Array("'Z'");
-
- vhdlOper["FD"] = new Array("FDCPE");
- vhdlOper["FT"] = new Array("FTCPE");
- vhdlOper["FDD"] = new Array("FDDCPE");
- vhdlOper["FTD"] = new Array("FTDCPE");
- vhdlOper["LD"] = new Array("LDCP");
- vhdlOper["Q"] = new Array("");
-
- var verOper = new Array();
- verOper["GND"] = new Array("1'b0");
- verOper["VCC"] = new Array("1'b1");
- verOper["NOT"] = new Array(rClrS + "!" + rClrE);
- verOper["AND"] = new Array(rClrS + "&&" + rClrE);
- verOper["OR"] = new Array(rClrS + "||" + rClrE);
- verOper["XOR"] = new Array(rClrS + "XOR" + rClrE);
- verOper["EQUAL_COLON"] = new Array("= ");
- verOper["EQUAL"] = new Array("= ");
- verOper["ASSIGN"] = new Array("assign ");
- verOper["OPEN_NEGATE"] = new Array("(");
- verOper["CLOSE_NEGATE"] = new Array(")");
- verOper["OPEN_PTERM"] = new Array("(");
- verOper["CLOSE_PTERM"] = new Array(")");
- verOper["OPEN_BRACE"] = new Array("[");
- verOper["CLOSE_BRACE"] = new Array("]");
- verOper["INVALID_OPEN_BRACE"] = new Array("<");
- verOper["INVALID_CLOSE_BRACE"] = new Array(">");
-
- verOper["ENDLN"] = new Array(";");
- verOper["COMMENT"] = new Array("//");
- verOper["IMPORT"] = new Array("");
- verOper["GCK_COM"] = new Array("GCK");
- verOper["GTS_COM"] = new Array("GTS");
- verOper["GSR_COM"] = new Array("GSR");
- verOper["OD_COM"] = new Array("Open Drain");
- verOper["START_EQN"] = new Array(" (");
- verOper["END_EQN"] = new Array(")");
-
- verOper["_I"] = new Array("_I");
- verOper["_T"] = new Array("_T");
- verOper["_D"] = new Array("_D");
- verOper["_C"] = new Array("_C");
- verOper["_DEC"] = new Array("_C");
- verOper["_LH"] = new Array("_C");
- verOper["_CLR"] = new Array("_CLR");
- verOper["_PRE"] = new Array("_PRE");
- verOper["_CE"] = new Array("_CE");
- verOper["_OE"] = new Array("_OE");
-
- verOper["OE_START"] = new Array(" = ");
- verOper["OE_WHEN"] = new Array(" ? ");
- verOper["OE_EQUAL"] = new Array("");
- verOper["OE_ELSE"] = new Array(" : ");
- verOper["B0"] = new Array("1'b0");
- verOper["B1"] = new Array("1'b1");
- verOper["BZ"] = new Array("1'bz");
-
- verOper["FD"] = new Array("FDCPE");
- verOper["FT"] = new Array("FTCPE");
- verOper["FDD"] = new Array("FDDCPE");
- verOper["FTD"] = new Array("FTDCPE");
- verOper["LD"] = new Array("LDCP");
- verOper["Q"] = new Array("");
-
- var operator = abelOper;
-
- var pterms = new Array();
- var d1 = new Array();
- var d2 = new Array();
- var clk = new Array();
- var set = new Array();
- var rst = new Array();
- var trst = new Array();
- var d1imp = new Array();
- var d2imp = new Array();
- var clkimp = new Array();
- var setimp = new Array();
- var rstimp = new Array();
- var trstimp = new Array();
- var gblclk = new Array();
- var gblset = new Array();
- var gblrst = new Array();
- var gbltrst = new Array();
- var ce = new Array();
- var ceimp = new Array();
- var prld = new Array();
- var specSig = new Array();
- var clkNegs = new Array();
- var setNegs = new Array();
- var rstNegs = new Array();
- var trstNegs = new Array();
- var ceNegs = new Array();
- var fbnand = new Array();
- var inreg = new Array();
- var iostyle = new Array();
-
- var dOneLit = true;
-
- function setOper(type) {
- if (type == "1") { operator = vhdlOper; eqnType = 1; }
- else if (type == "2") { operator = verOper; eqnType = 2; }
- else { operator = abelOper; eqnType = 0; }
- }
-
- function isXC95() {
- if (device.indexOf("95") != -1) return true;
- return false;
- }
-
- function is9500() {
- if ((device.indexOf("95") != -1) &&
- (device.indexOf("XL") == -1) &&
- (device.indexOf("XV") == -1)) return true;
- return false;
- }
-
- function retSigType(s) {
- var sigType = sigTypes[s];
- var str = operator["Q"];
- if (sigType == "D") str = operator["FD"];
- else if (sigType == "T") str = operator["FT"];
- else if (sigType.indexOf("LATCH") != -1) str = operator["LD"];
- else if (sigType.indexOf("DDEFF") != -1) str = operator["FDD"];
- else if (sigType.indexOf("DEFF") != -1) str = operator["FD"];
- else if (sigType.indexOf("DDFF") != -1) str = operator["FDD"];
- else if (sigType.indexOf("TDFF") != -1) str = operator["FTD"];
- else if (sigType.indexOf("DFF") != -1) str = operator["FD"];
- else if (sigType.indexOf("TFF") != -1) str = operator["FT"];
- return str;
- }
-
- function retSigIndex(signal) {
- for (s=0; s<signals.length; s++) { if (signals[s] == signal) return s; }
- return -1;
- }
-
- function retSigName(signal) {
- var str = "";
- if (specSig[signal]) str += specSig[signal];
- else str += signal;
-
- var idx1 = str.indexOf(operator["INVALID_OPEN_BRACE"]);
- var idx2 = str.indexOf(operator["INVALID_CLOSE_BRACE"]);
- if ((idx1 != -1) && (idx2 != -1))
- str = str.substring(0,idx1) + operator["OPEN_BRACE"] +
- str.substring(idx1+1,idx2) + operator["CLOSE_BRACE"] +
- str.substring(idx2+1,str.length);
- return str;
- }
-
- function removePar(signal) {
- var str = signal;
-
- var idx = str.indexOf(operator["OPEN_BRACE"]);
- if (idx != -1)
- str = str.substring(0,idx) +
- str.substring(idx+1,str.indexOf(operator["CLOSE_BRACE"]));
-
- return str;
- }
-
-
- function isOneLiteral(str) {
- if ((str.indexOf(operator["AND"]) != -1) ||
- (str.indexOf(operator["OR"]) != -1) ||
- (str.indexOf(operator["XOR"]) != -1)) return false;
- return true;
- }
-
- function updateName(signal, index) {
- var str;
-
- var idx = signal.indexOf(operator["OPEN_BRACE"]);
- if (idx != -1)
- str = signal.substring(0,idx) +
- index + signal.substring(idx);
- else str = signal + index;
-
- return str;
- }
-
- function retPterm(pt) {
- var str = "";
- if (!pterms[pt]) {
- if (specSig[pt]) pt = specSig[pt];
- return pt;
- }
-
- if (pterms[pt].length > 1) str += operator["OPEN_PTERM"];
- for (p=0; p<pterms[pt].length; p++) {
- var sig = pterms[pt][p];
- if (sig.indexOf("xPUP_0") != -1) continue;
- if (p>0) str += " " + operator["AND"] + " ";
- var neg = 0;
- if (sig.indexOf("/") != -1) {
- sig = sig.substring(1, sig.length);
- str += operator["NOT"];
- neg = 1;
- }
-
- str += retSigName(sig);
- }
- if (pterms[pt].length > 1) str += operator["CLOSE_PTERM"];
-
- return str;
- }
-
- function retFBMC(str) {
- return str.substring(0,str.length-2) + nlStr + tabStr;
- }
-
- function retD1D2(signal) {
- var str = "";
-
- dOneLit = true;
- if (d1[signal]) {
- var currImp = "";
- for (i=0; i<d1[signal].length; i++) {
- if (!eqnType && d1imp[signal] && (d1imp[signal][i] == "1")) {
- if ((currImp != retFBMC(d1[signal][i])) &&
- (d1[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(d1[signal][i]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(d1[signal][i]);
- }
-
- if (d2[signal]) str += nlTabStr + operator["XOR"]+ spcStr;
- }
-
- if (d2[signal]) {
- var currImp = "";
- for (i=0; i<d2[signal].length; i++) {
- if (!eqnType && d2imp[signal] && (d2imp[signal][i] == "1")) {
- if ((currImp != retFBMC(d2[signal][i])) &&
- (d2[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(d2[signal][i]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(d2[signal][i]);
- }
- }
-
- if (str == "GND") str = operator["GND"];
- else if (str == "VCC") str = operator["VCC"];
- else if (!isOneLiteral(str)) {
- dOneLit = false;
-
- var type = retSigType(retSigIndex(signal));
- if ((type == operator["FD"]) ||
- (type == operator["FDD"])) type = operator["_D"];
- else if ((type == operator["FT"]) ||
- (type == operator["FTD"])) type = operator["_T"];
- else if (type == operator["LD"] && eqnType) type = "_D";
-
- var tmpStr = updateName(retSigName(signal), type);
- tmpStr += spcStr + operator["EQUAL_COLON"];
- var idx = retSigIndex(signal);
- if (eqnType && sigNegs[idx] == "ON") tmpStr += operator["NOT"] + operator["OPEN_NEGATE"];
- str = tmpStr + str;
- if (eqnType && sigNegs[idx] == "ON") str += operator["CLOSE_NEGATE"];
- str += operator["ENDLN"];
- }
-
- return str;
- }
-
- function retClk(signal) {
- var str = "";
-
- if (clk[signal]) {
- if (clk[signal].length == 1) {
- var pterm = retPterm(clk[signal][0]);
- if (clkNegs[signal]) {
- str += operator["NOT"];
- if (!isOneLiteral(pterm)) str += operator["OPEN_NEGATE"];
- }
- str += pterm;
- if (clkNegs[signal] && !isOneLiteral(pterm)) str += operator["CLOSE_NEGATE"];
- }
- else {
- if (clkNegs[signal]) str += operator["NOT"] + operator["OPEN_NEGATE"];
- var currImp = "";
- for (i=0; i<clk[signal].length; i++) {
- if (!eqnType && clkimp[signal] && (clkimp[signal][i] == "1")) {
- if ((currImp != retFBMC(clk[signal][i])) &&
- (clk[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(clk[signal][i]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(clk[signal][i]);
- }
- if (clkNegs[signal]) str += operator["CLOSE_NEGATE"];
- str += operator["ENDLN"];
- }
- }
- else if (gblclk[signal]) {
- if (gblclk[signal].length == 1) {
- var pterm = retPterm(gblclk[signal][0]);
- if (clkNegs[signal]) {
- str += operator["NOT"];
- if (!isOneLiteral(pterm)) str += operator["OPEN_NEGATE"];
- }
- str += pterm;
- if (clkNegs[signal] && !isOneLiteral(pterm)) str += operator["CLOSE_NEGATE"];
- }
- else {
- if (clkNegs[signal]) str += operator["NOT"] + operator["OPEN_NEGATE"];
- for (i=0; i<gblclk[signal].length; i++) {
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(gblclk[signal][i]);
- }
- if (clkNegs[signal]) str += operator["CLOSE_NEGATE"];
- str += operator["ENDLN"] + tabStr + cClrS +
- operator["COMMENT"] + spcStr + operator["GCK_COM"] + cClrE;
- }
- }
- else if (eqnType) str += operator["B0"];
-
- return str;
- }
-
- function retRst(signal) {
- var str = "";
-
- if (rst[signal]) {
- if (rst[signal].length == 1) {
- var currImp;
- if (!eqnType && rstimp[signal] && (rstimp[signal][0] == "1")) {
- if ((currImp != retFBMC(rst[signal][i])) &&
- (rst[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(rst[signal][0]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (rstNegs[signal]) str += operator["NOT"];
- str += retPterm(rst[signal][0]);
- }
- else {
- var currImp = "";
- if (rstNegs[signal]) str += operator["NOT"] + operator["OPEN_NEGATE"];
- for (i=0; i<rst[signal].length; i++) {
- if (!eqnType && rstimp[signal] && (rstimp[signal][i] == "1")) {
- if ((currImp != retFBMC(rst[signal][i])) &&
- (rst[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(rst[signal][i]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(rst[signal][i]);
- }
- if (rstNegs[signal]) str += operator["CLOSE_NEGATE"];
- str += operator["ENDLN"];
- }
- }
- else if (gblrst[signal]) {
- if (gblrst[signal].length == 1) {
- if (rstNegs[signal]) str += operator["NOT"];
- str += retPterm(gblrst[signal][0]);
- }
- else {
- if (rstNegs[signal]) str += operator["NOT"] + operator["OPEN_NEGATE"];
- for (i=0; i<gblrst[signal].length; i++) {
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(gblrst[signal][i]);
- }
- if (rstNegs[signal]) str += operator["CLOSE_NEGATE"];
- str += operator["ENDLN"] + tabStr + cClrS +
- operator["COMMENT"] + spcStr + operator["GSR_COM"] + cClrE;
- }
- }
- else if (eqnType) str += operator["B0"];
-
- return str;
- }
-
- function retSet(signal) {
- var str = "";
-
- if (set[signal]) {
- if (set[signal].length == 1) {
- var currImp = "";
- if (!eqnType && setimp[signal] && (setimp[signal][0] == "1")) {
- if ((currImp != retFBMC(set[signal][i])) &&
- (set[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(set[signal][0]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (setNegs[signal]) str += operator["NOT"];
- str += retPterm(set[signal][0]);
- }
- else {
- var currImp = "";
- if (setNegs[signal]) str += operator["NOT"] + operator["OPEN_NEGATE"];
- for (i=0; i<set[signal].length; i++) {
- if (!eqnType && setimp[signal] && (setimp[signal][i] == "1")) {
- if ((currImp != retFBMC(set[signal][i])) &&
- (set[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(set[signal][i]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(set[signal][i]);
- }
- if (setNegs[signal]) str += operator["CLOSE_NEGATE"];
- str += operator["ENDLN"];
- }
- }
- else if (gblset[signal]) {
- if (gblset[signal].length == 1) {
- if (setNegs[signal]) str += operator["NOT"];
- str += retPterm(gblset[signal][0]);
- }
- else {
- if (setNegs[signal]) str += operator["NOT"] + operator["OPEN_NEGATE"];
- for (i=0; i<gblset[signal].length; i++) {
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(gblset[signal][i]);
- }
- if (setNegs[signal]) str += operator["CLOSE_NEGATE"];
- str += operator["ENDLN"] + tabStr + cClrS +
- operator["COMMENT"] + spcStr + operator["GSR_COM"] + cClrE;
- }
- }
- else if (eqnType) str += operator["B0"];
-
- return str;
- }
-
- function retCE(signal) {
- var str = "";
-
- if (ce[signal]) {
- if (ce[signal].length == 1) {
- var currImp = "";
- if (!eqnType && ceimp[signal] && (ceimp[signal][0] == "1")) {
- if ((currImp != retFBMC(ce[signal][i])) &&
- (ce[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(ce[signal][0]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (ceNegs[signal]) str += operator["NOT"];
- str += retPterm(ce[signal][0]);
- }
- else {
- var currImp = "";
- if (ceNegs[signal]) str += operator["NOT"] + operator["OPEN_NEGATE"];
- for (i=0; i<ce[signal].length; i++) {
- if (!eqnType && ceimp[signal] && (ceimp[signal][i] == "1")) {
- if ((currImp != retFBMC(ce[signal][i])) &&
- (ce[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(ce[signal][i]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(ce[signal][i]);
- }
- if (ceNegs[signal]) str += operator["CLOSE_NEGATE"];
- str += operator["ENDLN"];
- }
- }
- else if (eqnType) str += operator["B1"];
-
- return str;
- }
-
- function retTrst(signal) {
- var str = "";
- if (trst[signal]) {
- if (trstNegs[signal])
- str += operator["NOT"] + operator["OPEN_NEGATE"];
- for (i=0; i<trst[signal].length; i++) {
- var currImp = "";
- if (!eqnType && trstimp[signal] && (trstimp[signal][0] == "1")) {
- if ((currImp != retFBMC(trst[signal][i])) &&
- (trst[signal][i].indexOf("FB") == 0)) {
- currImp = retFBMC(trst[signal][0]);
- str += nlStr + operator["IMPORT"] + currImp;
- }
- }
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(trst[signal][i]);
- }
- if (trstNegs[signal]) str += operator["CLOSE_NEGATE"];
- }
- else if (gbltrst[signal]) {
- if (trstNegs[signal])
- str += operator["NOT"] + operator["OPEN_NEGATE"];
- for (i=0; i<gbltrst[signal].length; i++) {
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(gbltrst[signal][i]);
- }
- if (trstNegs[signal]) str += operator["CLOSE_NEGATE"];
- }
-
- str += operator["ENDLN"];
- return str;
- }
-
- function retEqn(signal) {
- var str = inregStr = "";
- var iStr = qStr = "";
- var dStr = dEqn = "";
- var cStr = cEqn = "";
- var clrStr = clrEqn = "";
- var preStr = preEqn = "";
- var ceStr = ceEqn = "";
- var oeStr = oeEqn = "";
- var sigName = retSigName(signal);
-
- var type = retSigType(retSigIndex(signal));
-
- if (gbltrst[signal] || trst[signal]) iStr = operator["_I"];
- if (eqnType) qStr = updateName(sigName, iStr);
-
- if (inreg[signal]) {
- if (!eqnType)
- inregStr = operator["COMMENT"] + " Direct Input Register" + nlStr;
- dStr = retSigName(inreg[signal][0]);
- }
- else dStr = retD1D2(signal);
- if (eqnType && !dOneLit) {
- dEqn = dStr;
- dStr = dStr.substring(0,dStr.indexOf(operator["EQUAL_COLON"]));
- }
- else if (!eqnType) {
- if (!dOneLit) dStr = dStr.substring(dStr.indexOf(operator["EQUAL_COLON"])+2);
- if (sigNegs[retSigIndex(signal)] == "ON") dEqn += operator["NOT"];
- dEqn += sigName;
- if ((type == operator["FT"]) ||
- (type == operator["FTD"])) dEqn += operator["_T"];
- else if ((type == operator["FD"]) ||
- (type == operator["FTD"])||
- (type == operator["LD"])) dEqn += operator["_D"];
- dEqn += " ";
- if ((type != operator["Q"]) && (type != operator["LD"]))
- dEqn += operator["EQUAL_COLON"];
- else dEqn += operator["EQUAL"];
- dEqn += dStr;
- if (dOneLit) {
- dEqn += operator["ENDLN"];
- if (iostyle[signal] && iostyle[signal].indexOf("OD"))
- dEqn += tabStr + operator["COMMENT"] + " " + operator["OD_COM"];
- }
- }
-
- cStr = retClk(signal);
- if (eqnType && !isOneLiteral(cStr)){
- cEqn = cStr;
- if (cEqn.indexOf(operator["ENDLN"]) == -1)
- cEqn += operator["ENDLN"];
- cStr = updateName(sigName, operator["_C"]);
- }
- else if (!eqnType && cStr) {
- cEqn += cStr;
- cStr = tabStr + sigName;
- if (type == operator["LD"]) cStr += operator["_LH"];
- else if (type == operator["FDD"]) cStr += operator["_DEC"];
- else cStr += operator["_C"];
- if (cEqn.indexOf(operator["ENDLN"]) == -1)
- cEqn += operator["ENDLN"];
- if (gblclk[signal]) cEqn += tabStr + operator["COMMENT"] + " " + operator["GCK_COM"];
- }
-
- clrStr = retRst(signal);
- if (eqnType && !isOneLiteral(clrStr)){
- clrEqn = clrStr;
- if (cEqn.indexOf(operator["ENDLN"]) == -1)
- clrEqn += operator["ENDLN"];
- clrStr = updateName(sigName, operator["_CLR"]);
- }
- else if (!eqnType && clrStr) {
- clrEqn += clrStr;
- clrStr = tabStr + sigName + operator["_CLR"];
- if (clrEqn.indexOf(operator["ENDLN"]) == -1)
- clrEqn += operator["ENDLN"];
- if (gblrst[signal]) clrEqn += tabStr + operator["COMMENT"] + " " + operator["GSR_COM"];
- }
-
- preStr = retSet(signal);
- if (eqnType && !isOneLiteral(preStr)){
- preEqn = preStr;
- if (cEqn.indexOf(operator["ENDLN"]) == -1)
- preEqn += operator["ENDLN"];
- preStr = updateName(sigName, operator["_PRE"]);
- }
- else if (!eqnType && preStr) {
- preEqn += preStr;
- preStr = tabStr + sigName + operator["_PRE"];
- if (preEqn.indexOf(operator["ENDLN"]) == -1)
- preEqn += operator["ENDLN"];
- if (gblset[signal]) preEqn += tabStr + operator["COMMENT"] + " " + operator["GSR_COM"];
- }
-
- if (!is9500()) {
- ceStr = retCE(signal);
- if (eqnType && !isOneLiteral(ceStr)){
- ceEqn = ceStr;
- if (cEqn.indexOf(operator["ENDLN"]) == -1)
- ceEqn += operator["ENDLN"];
- ceStr = updateName(sigName, operator["_CE"]);
- }
- else if (!eqnType && ceStr) {
- ceEqn += ceStr;
- ceStr = tabStr + sigName + operator["_CE"];
- if (ceEqn.indexOf(operator["ENDLN"]) == -1)
- ceEqn += operator["ENDLN"];
- }
- }
-
- if (eqnType && gbltrst[signal]) oeEqn = retTrst(signal);
- else if (!eqnType && (trst[signal] || gbltrst[signal])) oeEqn = retTrst(signal);
-
- var newline = false;
- if ((type == "") && (clrStr == "")) {
- str += operator["ASSIGN"] + qStr + " " + operator["EQUAL"];
- if (dOneLit) str += dStr;
- else str += dEqn.substring(dEqn.indexOf(operator["EQUAL"])+2);
- if (oeEqn != "") {
- var oeStr = updateName(sigName, operator["_OE"]);
- if (eqnType == 1) {
- str += nlStr + sigName + operator["OE_START"] + qStr + operator["OE_WHEN"] + oeStr +
- operator["OE_EQUAL"] + operator["B1"] + operator["OE_ELSE"] +
- operator["OE_EQUAL"] + operator["BZ"] + operator["ENDLN"];
- }
- else if (eqnType == 2) {
- str += nlStr + operator["ASSIGN"] + sigName + operator["OE_START"] +
- oeStr + operator["OE_WHEN"] + qStr +
- operator["OE_ELSE"] + operator["BZ"] + operator["ENDLN"];
- }
- str += nlStr + operator["ASSIGN"] + oeStr + " " + operator["EQUAL"] + " " + oeEqn;
- }
- }
- else {
- if (eqnType == 1) {
- str += type + "_" + removePar(retSigName(signal)) +
- ": " + type + " " + operator["START_EQN"] +
- qStr + ", " + dStr + ", " + cStr + ", " +
- clrStr + ", " + preStr;
- if (!is9500() && (type != operator["LD"])) str += ", " + ceStr;
- str += operator["END_EQN"] + operator["ENDLN"];
- newline = true;
- }
- else if (eqnType == 2) {
- str += type + " " +
- type + "_" + removePar(retSigName(signal)) +
- operator["START_EQN"] +
- qStr + ", " + dStr + ", " + cStr + ", " +
- clrStr + ", " + preStr;
- if (!is9500() && (type != operator["LD"])) str += ", " + ceStr;
- str += operator["END_EQN"] + operator["ENDLN"];
- newline = true;
- }
-
- if (dEqn != "") {
- if (newline) str += nlStr;
- if (inregStr) str += inregStr;
- str += operator["ASSIGN"] + dEqn;
- }
-
- if (cEqn != "") {
- if (newline || !eqnType) str += nlStr;
- str += operator["ASSIGN"] + cStr + " " + operator["EQUAL"] + " " + cEqn;
- }
-
- if (clrEqn != "") {
- if (newline || !eqnType) str += nlStr;
- str += operator["ASSIGN"] + clrStr + " " + operator["EQUAL"] + " " + clrEqn;
- }
-
-
- if (preEqn != "") {
- if (newline || !eqnType) str += nlStr;
- str += operator["ASSIGN"] + preStr + " " + operator["EQUAL"] + " " + preEqn;
- }
-
- if (ceEqn != "") {
- if (newline || !eqnType) str += nlStr;
- str += operator["ASSIGN"] + ceStr + " " + operator["EQUAL"] + " " + ceEqn;
- }
-
- if (oeEqn != "") {
- if (eqnType == 1) {
- // var oeStr = updateName(sigName, operator["_OE"]);
- var oeStr = sigName;
- str += nlStr + sigName + operator["OE_START"] + qStr + operator["OE_WHEN"] + oeStr +
- operator["OE_EQUAL"] + operator["B1"] + operator["OE_ELSE"] +
- operator["OE_EQUAL"] + operator["BZ"] + operator["ENDLN"];
- // str += nlStr + oeStr + " " + operator["EQUAL"] + " " + oeEqn;
- }
- else if (eqnType == 2) {
- // var oeStr = updateName(sigName, operator["_OE"]);
- var oeStr = sigName;
- str += nlStr + operator["ASSIGN"] + sigName + operator["OE_START"] + oeStr + operator["OE_WHEN"] + qStr +
- operator["OE_ELSE"] + operator["BZ"] + operator["ENDLN"];
- // str += nlStr + operator["ASSIGN"] + oeStr + " " + operator["EQUAL"] + " " + oeEqn;
- }
- else {
- var oeStr = sigName + operator["_OE"];
- if (gbltrst[signal])
- oeEqn += tabStr + operator["COMMENT"] + " " + operator["GTS_COM"];
- str += nlStr + tabStr + oeStr + " " + operator["EQUAL"] + " " + oeEqn;
- }
- }
- }
-
- if (iostyle[signal] && iostyle[signal].indexOf("OD")) {
- if (str.indexOf("//") == -1)
- str += tabStr + operator["COMMENT"] + " " + operator["OD_COM"];
- }
-
- return str;
- }
-
- function retFamily() {
- var family = "xc9500";
- if (device.indexOf("XC2C") != -1) {
- if (device.indexOf("S") != -1) family = "cr2s";
- else family = "xbr";
- }
- else if (device.indexOf("XCR3") != -1) family = "xpla3";
- else {
- if (device.indexOf("XL") != -1) family = "xc9500xl";
- if (device.indexOf("XV") != -1) family = "xc9500xv";
- }
-
- return family;
- }
-
- function retDesign() { return design; }
-
- function getPterm(pt, type) {
- if (type) return type + " = " + retPterm(pt);
- return "PT" + pt.substring(pt.indexOf('_')+1,pt.length) + " = " + retPterm(pt);
- }
-
- function getPRLDName(prld) {
- if (eqnType != 0) return prld;
- else if (prld == "VCC") return "S";
- return "R";
- }
-
- function retFbnand(signal) {
- var str = operator["COMMENT"] + spcStr + "Foldback NAND";
- str += nlStr + retSigName(signal) + spcStr + operator["EQUAL"] + spcStr;
- for (i=0; i<fbnand[signal].length; i++) {
- if (i>0) str += nlTabStr + operator["OR"] + spcStr;
- str += retPterm(fbnand[signal][i]);
- }
-
- return str;
- }
-
- function getEqn(signal) { return retEqn(signal); }
-
- function retUimPterm(pt) {
- var str = "";
- if (!uimPterms[pt]) return pt;
- for (p=0; p<uimPterms[pt].length; p++) {
- if (p>0) str += spcStr + operator["AND"] + spcStr;
- var sig = uimPterms[pt][p];
- if (sig.indexOf("/") != -1) sig = sig.substring(1, sig.length);
-
- str += retSigName(sig);
- }
- return str;
- }
-
- function retUimEqn(signal) {
- var str = operator["COMMENT"] + spcStr + "FC Node" + nlStr;
- var neg = 0;
- if (uimSigNegs[s] == "ON") str += operator["NOT"];
- str += retSigName(signal) + spcStr + operator["EQUAL"];
- str += retUimPterm(signal) + ";";
-
- return str;
- }
-
- function retLegend(url) {
- var str = "";
- if (!eqnType && !isXC95()) {
- str = "Legend: " + "<" + "signame" + ">" + ".COMB = combinational node mapped to ";
- str += "the same physical macrocell as the FastInput \"signal\" (not logically related)";
- }
- else if (eqnType) {
- str = "Register Legend:";
- if (is9500()) {
- str += nlTabStr + "FDCPE (Q,D,C,CLR,PRE);";
- str += nlTabStr + "FTCPE (Q,D,C,CLR,PRE);";
- str += nlTabStr + "LDCP (Q,D,G,CLR,PRE);";
- }
- else if (retFamily() == "xbr") {
- str += nlTabStr + "FDCPE (Q,D,C,CLR,PRE,CE);";
- str += nlTabStr + "FDDCPE (Q,D,C,CLR,PRE,CE);";
- str += nlTabStr + "FTCPE (Q,D,C,CLR,PRE,CE);";
- str += nlTabStr + "FTDCPE (Q,D,C,CLR,PRE,CE);";
- str += nlTabStr + "LDCP (Q,D,G,CLR,PRE);";
- }
- else {
- str += nlTabStr + "FDCPE (Q,D,C,CLR,PRE,CE);";
- str += nlTabStr + "FTCPE (Q,D,C,CLR,PRE,CE);";
- str += nlTabStr + "LDCP (Q,D,G,CLR,PRE);";
- }
- }
- return str;
- }
-
|