Unterschiedliches Design eh nach Toolchain bauen

Gast #4231334
Lesenswert?
• ▲
▼
Hallo
gibt es eine möglichkeit in VHDL ein unterschiedliches Design in 
abhängigkeit von der Toolchain(hier: Xilinx, Altera) zu bauen?
Also sowas wie in C:
[c]
#ifdef _XILINXMAKRO_
   build Ver1
#elsif _ALTERAMAKRO_
   build Ver1
#else // Simulation
   rest
#endif

Wie kann man sowas in VHDL umsetzen, wenn es überhaupt geht?
Gast #4231443
Lesenswert?
• ▲
▼
Hi,

die generate Anweisung hätt ich auch als erstes genannt, aber die 
meisten Toolchains erfordern dabei, dass auch die Designfiles der 
nicht-generierten Instanzen eingelesen werden. Das gibt immer wieder mal 
Probleme, wenn sich ein Hersteller nicht genau an den VHDL-Standard (ok, 
der ist auch wirklich komplex) hält.
Die andere Variante ist die per cpp/Makefile, wie z.B. per folgender 
Regel:
1
%.vhdl : %.chdl
2
        cpp -P -o $@ $<

Nachteil mag sein, dass man vor der grafischen Synthese mit den diversen 
Klickitools immer ein "make" aufrufen muss, aber die echten Nerds packen 
auch die ganze Synthese ins Makefile :-)

Dritte Variante wäre per configuration. Ziemlich hässlicher Moloch, und 
ich bin mir nicht mehr sicher, ob nicht die Xilinx-Tools das alles 
wieder hochwürgen...

Beispiel:
1
configuration gna of soc_top is
2
  use work.Bla;
3

4
  for behaviour
5
    for maybe_foo
6
    for foo : Blabla
7
      use entity work.Bla;
8
    end for;
9
    end for;
10
  end for;
11

12
end gna;

Das konfiguriert also die Instanz 'foo', um statt Design 'Blabla' 'Bla' 
zu nutzen (keine Garantie für Richtigkeit..):
1
entity soc_top is
2
...
3
end entity soc_top;
4

5
architecture behavour of soc_top is
6
...
7
begin
8
maybe_foo:
9
if SIMULATION generate
10

11
  foo: Blabla
12
    generic map (
13
      ...
14
    )
15
    port map (
16
    ...
17
    );
18

19
end generate;
20
...
21

22
end behaviour;
23
...

Das geht allerdings nur, wenn das Design entsprechend modular ist, und 
man muss die Hierarchien genau beachten.

Grüsse,

- Strubi
Gast #4231458
Lesenswert?
• ▲
▼
Strubi schrieb:
> Hi,
>
> die generate Anweisung hätt ich auch als erstes genannt, aber die
> meisten Toolchains erfordern dabei, dass auch die Designfiles der
> nicht-generierten Instanzen eingelesen werden. Das gibt immer wieder mal
> Probleme, wenn sich ein Hersteller nicht genau an den VHDL-Standard (ok,
> der ist auch wirklich komplex) hält.
> Die andere Variante ist die per cpp/Makefile, wie z.B. per folgender
> Regel:
> %.vhdl : %.chdl
>         cpp -P -o $@ $<
>
> ...
> Grüsse,
>
> - Strubi

Hmmm... Das mit generate hatte ich auch im Hinterkopf. Ich hab halt 2 
Schaltungsmakros für Altera und Xilinx, und würde halt gern automatisch 
das richtige auswählen lassen, ohne nochmal irgendwas rumeditieren zu 
müssen. Generic(oder #defines^^) auf Top-Level Hierachie wären kein 
allzu großes Problem.
Aber da Xilinx die Altera-Schaltmakros wohl nicht akzeptieren wird, 
wirds mit der if generate Anweisung wohl nicht umzusezten... :(

Ja an den Präprozessor hatte ich auch schon gedacht, es ist halt leider 
nicht gerade die schönste Variante(weil: nicht im Sprachstandard). Aber 
wenns nicht anders geht werd ichs wohl so machen :)
Moderator (Firma: Titel) Persönliche Seite #4231512
Lesenswert?
• ▲
▼
hmmm schrieb:
> Aber da Xilinx die Altera-Schaltmakros wohl nicht akzeptieren wird
So ein Makro ist auf VHDL Ebene doch sowieso nur ein Wrapper. Und der 
kann ja durchaus unabhängig von der Toolchain eingelesen werden. Er 
muss ja nicht synthetisiert oder gemappt werden...

Was mich interessieren würde: welche Makros lassen sich da so einfach 
austauschen? Auf welcher Ebene bist du da unterwegs?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren