Forum: FPGA, VHDL & Co. ispLever Constrains


von Janvi (Gast)


Lesenswert?

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?


von Schlumpf (Gast)


Lesenswert?

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.





von Janvi (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.