habe gerade das ispLever in der Version 6.1 installiert und seit DOS Zeiten wo ich zum letzen mal Abel gemacht habe ich mich erfolgreich um DesignExpert gedrückt. Offensichtlich hat sich da aber einiges getan. Leider sind die Anleitungen etwas chaotisch und länglich zu lesen. Deshalb hier mal dummfrag: 1) Die neuen Beispiele enthalten keine Pin Nummern vermutlich um es dem Fitter einfacher zu machen. Trägt man die Pin Nummern wie früher im abl Quellfile ein, so kommt ein alberner Dialog hoch, was mit dem Constraints zu tun wäre. (gabs früher gar nicht) Soll man die Pin Nummern nun gleich mit dem Constraint Editor eintragen oder werden die dann überschrieben (wann - von wem?) oder kann man nicht alle Angaben aus dem Constraint Editor auch im Quellfile ablegen? Wie ist die bevorzugte Arbeitsweise bei welcher Sprache? Das Fitting ist für diesmal wirklich unkritisch. 2) obwohl ich momentan einen Mach 4A5 habe, denke ich beim nächsten Mal auf einen Mach XO umzusteigen was wohl nur noch auf VHDL zu programmieren geht. Im Tuturial wird aber für VHDL als Projektart EDIF angegeben und synplifiy übersetzt offensichtlich von vhdl auf edif. Was ist nun der Unterschied wenn man gleich vhdl als Projekt angibt? Die 4A5 müsste man ja genauso in vhdl ansprechen können?
Hi! zu 1.) Ich persönlich vergebe constraints nie im Code. Aus dem Einfachen Grund, dass somit der Code an eine Technologie gebunden wird und du, wenn du das Design auf ne andere Technologie implementieren willst, im Code editieren musst. Die Eintragungen im Constraint-Editor werden nicht überschrieben! zu 2.) Man "spricht" keinen PLD in einer bestimmten Sprache an. Grundsätzlich funktiniert ein Flow immer folgendermassen: Quelltext wird von Syntheseprogramm in eine Netzliste gewandelt, die das Design auf die Ressourcen des entsprechendne Chips abbildet. (Synplify ist so ein Programm). Ob du VHDL, ABEL oder sonstwas verwenden kannst, hängt davon ab, welche Sprachen dieses Tool versteht... Das sollte also unabhängig von deiner Zieltechnologie sein. Das Herstellerspezifische Backend (Place and Route) platziert dann letztendlich die in der EDIF-Netzliste beschriebenen Komponenten auf den Chip.
> Man "spricht" keinen PLD in einer bestimmten Sprache an.
hmm - ich denke Abel geht für Mach XO nicht aber offensichtlich weis ich
auch nicht was Abel ist. Habe nämlich versucht ein altes Design (ich
glaube das DOS Werkzeug hat damals MachXL geheissen) zu übersetzen und
es kracht überall. Die Syntax ist wie in Palasm und das geht irgendwie
nicht gut.
;** Kommentar
bringt Fehler, daß keine Operationen (*) im Kontext erlaubt sind,
TITLE bla bla bla
bringt Fehler dass ein String erwartet wird
usw. usw.
Hier mal aus dem alten Listing (ein VME Interface) - welche Sprache ist
das?
PIN 38 apo[01] ;Adressbus parallel Ausgang
PIN 37 apo[00] ;Adressbus parallel Ausgang
PIN 93 j9
STRING ready '#B00' ;kein Zugriff auf die Karte, kein dtack erzeugen
STRING wait1 '#B01' ;erster Wartetakt
STRING wait2 '#B10' ;zweiter Wartetakt
STRING aktiv '#B11' ;Zugriff wird mit dtack quittiert
STRING short_user '#h29' ;Adressmodifier Code fuer user
STRING short_supervisor '#h2D' ;Adressmodifier Code fuer supervisor
NODE ? kwsok ;Adresse des KWS liegt an
NODE ? vxiadr
NODE ? dzust[1..0] REGISTERED ;Zustandsmerker fuer dtack Sequencer
NODE ? dboe1 ;Datenbus Output Enable Highbyte
NODE ? dboe0 ;Datenbus Output Enable Lowbyte
NODE ? ck3r[5..0] REGISTERED ;Zeitzaehler fuer Clock3
NODE ? ck2r[5..0] REGISTERED ;Zeitzaehler fuer Clock2
NODE ? extern REGISTERED ;Clk2 extern Merker
NODE ? extres ;Reset Term fuer Clk2 Extern Register
NODE ? breset ;Bosch Reset Register
NODE ? hzust[6..0] REGISTERED ;Zustandsregister fuer Haupt Sequencer
NODE ? rzust[1..0] REGISTERED ;Zustandsregister fuer Read Sequencer
NODE ? adrbt1
NODE ? dbo1 ;Hilfsknoten fuer Datenmultiplexer
NODE ? esr[15..0] REGISTERED ;Eingangs - Schieberegister
NODE ? drg[15..0] ;Bosch Daten Register
NODE ? argm[15..0] ;Bosch Adress Register Master
NODE ? args[15..0] ;Bosch Adress Register Slave
NODE ? mcreg[1..0] REGISTERED ;Mikrokontroller Handshake Register
NODE ? clksel[1,0] REGISTERED ;Register zur Umschaltung vom Bosch Takt
NODE ? intff REGISTERED ;Interrupt Anforderungs Flip-Flop
NODE ? izust[1..0] REGISTERED ;Interupt Sequencer
NODE ? ident ;eigener IRQ Level ist mit ACK Level identisch
NODE ? irqlev[2..0] REGISTERED ;Register zum Einstellen des Interupt
Levels
NODE ? intres ;eigene Interrupt Anforderung zuruecksetzen
NODE ? pdrireg REGISTERED ;pdr Eingangssynchronisation
NODE ? sdrireg1 REGISTERED ;sdr Eingangssynchronisation
NODE ? sdrireg2 REGISTERED ;sdr Eingangssynchronisation
NODE ? 20_mhz REGISTERED ;Taktteiler von 40 auf 20 Mhz
NODE ? 10_mhz REGISTERED ;Taktteiler von 20 auf 10 Mhz
NODE ? clkvar ;variabel geschaltete Taktfrequenz
NODE ? request REGISTERED ;Vorsynchronisation der Datenanforderung
EQUATIONS
j9 = vxiadr ;wird ohne Testpin nicht geroutet
20_mhz.T = VCC
10_mhz.T = 20_mhz
20_mhz.CLKF = 40_mhz
10_mhz.CLKF = 40_mhz
20_mhz.RSTF = sysrst
10_mhz.RSTF = sysrst
CASE (clksel[1,0])
BEGIN
0:
BEGIN
clkvar = 10_mhz
END
1:
BEGIN
clkvar = 20_mhz
END
2:
BEGIN
clkvar = 40_mhz
END
3:
BEGIN
clkvar = 40_mhz
END
END
pdrireg.CLKF = /40_mhz ;Parallel Data Ready muss vorsynchronisiert
pdrireg = pdr ;sein weil es im Read Sequencer 2 FF kippt
sdrireg1.CLKF = /40_mhz ;Seriell Data Ready muss vorsynchronisiert
sdrireg1 = sdr1 ;sein weil es im Read Sequencer 2 FF kippt
sdrireg2.CLKF = /40_mhz ;Seriell Data Ready muss vorsynchronisiert
sdrireg2 = sdr2 ;sein weil es im Read Sequencer 2 FF kippt
IF ((a[05]=1) * vxiadr) THEN ;ab Adresse 0x20 ist Erweiterungskarte
aktiv
BEGIN
IF(/wr ds0 ds1 * /dtack) THEN ;bei allen Lesezugriffen wird das
virtuelle
BEGIN ;Read auf dem Erweiterungsbus freigeschaltet
vrd = VCC
END
IF(wr ds1 ds0 * /dtack) THEN ;bei allen High Byte Lesezugriffen
wird das
BEGIN ;High Byte auf dem VME Bus freigeschaltet
vwr = VCC
END
va[3..1] = a[3..1] ;Adressen als virtuelle Adresse weitergeben
va[0] = GND ;es gibt nur Wortadressen
END
intff.RSTF = intres ;nur bei eigenem Interupt Acknowlege ruecksetzen
intff.CLKF = 40_mhz ;SDR und PDR setzt den Interupt (auch mit 10mhz)
intres = (izust[1] * /izust[0]) + sysrst
CASE (irqlev[2..0])
BEGIN
0: BEGIN irq1 = GND ;Bei Registerinhalt 0 sind alle Interupts blockiert
irq2 = GND
irq3 = GND
irq4 = GND
irq5 = GND
irq6 = GND
irq7 = GND
END
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.