Forum: FPGA, VHDL & Co. constanter Buswert in der Schematic (ISE WEBpack)


von Fabian H. (Firma: Technische Universität Berlin) (brein)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich versuche in der Schematic eines VHDL-Projektes in ISE WEBpack einen 
konstanten Wert auf den Eingang meiner 7-Segemnt-Anzeige zu lesen 
(bcddecoder).

Müsste eigentlich enorm einfach sein, könnte man meinen, aber ich habe 
es weder hinbekommen noch im Internet nützliche Informationen dazu 
gefunden.

Constant aus der Symbol-Rubrik General kann man hier nicht nutzen. 
Vermutlich weil es ein STD_LOGIC_VECTOR sein müsste.

Nun dachte ich mir, selbst ist der Mann, und ich bastel mir ein Modul, 
welches einen konstanten vier-Bit-Vector ausgibt und den man über 
generic parametrisieren kann.

Das funktioniert zwar, aber auf dem Display meines Nexys2 sehe ich nur 4 
Nullen, weil die Parametrisierung wohl nicht klappt. Auch da sucht man 
ne Weile bis man was im Internet nützliches findet. Die Weile dauert 
aber noch an, denn gefunden habe ich ja noch nichts! :D (Bin aber noch 
optimistisch.)
Hat da jemand mal n Link?

Habe mal ein Bild von der Einstellung gemacht und in den Anhang gepackt.
Wahrscheinlich wird das so nicht gemacht. Aber selbsterklärend ist das 
Interface auch nicht gerade.

Hier mal mein const4Bits.vhd:
1
entity const4Bits is
2
   Generic ( constValue : STD_LOGIC_VECTOR (3 downto 0));
3
    Port ( BitVector : out  STD_LOGIC_VECTOR (3 downto 0));
4
end const4Bits;
5
6
architecture Behavioral of const4Bits is
7
8
begin
9
  BitVector <= constValue;
10
11
end Behavioral;

Hat jemand eine Ahnung wie man einen konstanten Wert auf den Eingang 
legen kann?
Ich dachte, das wäre sehr trivial. Aber nichts in VHDL und ISE WEBpack 
ist trivial habe ich den Eindruck. ;)

Danke
Fabian.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Was mir gerade einfällt, ginge das mit dem UCF-File zu lösen?

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Gut! Zum Thema generic habe ich jetzt nun alles gelesen, was auch nur im 
Ansatz informativ aussah.

Es schein wohl wirklich so zu sein, dass man das nicht macht. Warum auch 
immer.

Ansonsten kann ich mir nicht erklären, warum das nirgends erklärt wird.
Selbst im Xilinx-Forum wird weder danach gefragt noch wird es erklärt.
Also, wie man es macht, wenn VHDL-Module in andere VHDL-Module als 
Components eingebunden werden und man deren Generics dann zuweisen will 
(über Generic_Map und INIT), wird erklärt. Möchte man dieses Modul aber 
in eine Schematic einbinden, so scheint das nicht zu gehen.

Das einzige, das ich finden könnte war in einem c't-Lab-Artikel 
http://www.heise.de/ct/artikel/Spielende-Synthese-291914.html in dem ein 
Projekt (Bunte Bilder) erklärt wurde in dem es heißt:
/Wenn Sie die FPGA-Sourcen (wie immer vollständig auf www.ct-lab.de) 
genauer untersuchen, werden Sie feststellen, dass das SPI gegenüber dem 
des Frequenzzählers auf das Nötigste zusammengestrichen wurde. Der 
Video-Sync-Generator „fbas_sync“ ist dagegen beispielhaft und kann (über 
Konstanten im zugehörigen VDHL-Code, siehe Kommentare dort) in weiten 
Grenzen parametriert werden./
Praktischerweise gibt es weder einen Link zu den Sources des Projektes 
noch ist dieses direkt benamt.
Wühlt man aber in den Sources von c't-Lab, so sieht folgendes Projekt 
sehr danach aus: 
http://www.heise.de/ct/projekte/machmit/ctlab/browser/FPGA_ISE/ct-QVGA.zip 
.
Leider werden eben in dessen Datei sync.vhd von der wohl die Rede war, 
keine Generics verwendet. So dass ich mir dort auch keine Ideen holen 
konnte.

__
Ich komme leider wieder zu dem Schluss: Wer bauen will nutzt 
Mikrocontroller, wer frickeln will nutzt FPGAs.
Das mit der Parametrisierung wäre wohl zu praktisch gewesen. :(

Wer mich eines besseren belehren kann, dem wäre ich sehr dankbar.

Gruß
Fabian

von Kay (Gast)


Lesenswert?

Also das geht glaube ich beim ISE Webpack wie folgt:
1. du hast ein Generic-Teil in deiner Entity... z.B.:
1
Generic ( period  : integer range 0 to 65535 := 400);
2. du hast ein Symbol erzeugt und eine Instanz davon in einer Schematic 
eingebunden
3. Rechtsklick -> Object Properties -> New
4. gib den Namen des Attributs ein (in diesem Fall "period")
5. gib den gewünschten Wert an (z.B. 17)
6. gib den Typen an (in diesem Fall Integer)
7. ok -> ok

leider gibt es dadurch eine Warnmeldung bei der Synthetisierung... das 
missfällt mir noch an der Lösung

Gruß Kay

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fabian Hoemcke schrieb:
> ich versuche in der Schematic eines VHDL-Projektes
Das passt soweiso nicht zusammen. Mach das bischen Verdrahtung doch von 
Hand. Meine VHDL-Projekte enthalten prinzipiell keine Schematic.

Fabian Hoemcke schrieb:
> Hat jemand eine Ahnung wie man einen konstanten Wert auf den Eingang
> legen kann?
Ich nehme deinen VHDL-Code und erhalte die Meldung:
1
ERROR:Xst:2434 - "C:/.../dfgsfdg.vhd" line 5: Generic <constValue> has not been given a value.
Also eine Zeile geändert, dann hab ich schon mal einen Defaultwert:
1
   Generic ( constValue : STD_LOGIC_VECTOR (3 downto 0)) := "1010");
Das wäre jetzt ausreichend, wenn das schon der Top-Level wäre.


Sonst kommt jetzt der nächste Schritt: dieses Modul mit dem Generic als 
Komponente verwenden...
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity const4Bits is
5
   Generic ( constValue : STD_LOGIC_VECTOR (3 downto 0) := "1010");
6
    Port ( BitVector : out  STD_LOGIC_VECTOR (3 downto 0));
7
end const4Bits;
8
9
architecture Behavioral of const4Bits is
10
11
begin
12
  BitVector <= constValue;
13
end Behavioral;
14
15
16
17
18
library IEEE;
19
use IEEE.STD_LOGIC_1164.ALL;
20
21
entity out4Bits is
22
    Port ( outVector : out  STD_LOGIC_VECTOR (3 downto 0));
23
end out4Bits;
24
25
architecture Behavioral of out4Bits is
26
component const4Bits is
27
    Generic ( constValue : STD_LOGIC_VECTOR (3 downto 0));
28
    Port ( BitVector : out  STD_LOGIC_VECTOR (3 downto 0));
29
end component;
30
signal BV : STD_LOGIC_VECTOR (3 downto 0);
31
begin
32
33
  c4b : const4Bits
34
  generic map (constValue => "1100")
35
  port map (BitVector => BV);
36
  
37
  outVector <= BV;
38
39
end Behavioral;
Und der RTL-Plan zeigt: der Defaultwert von "1010" wird durch "1100" 
überschreiben und ausgegeben.

Mein Tipp des Tages: VERGISS diese Schaltplanmimik schnellstmöglich 
wieder, du wirst ihr nicht eine Sekunde nachweinen. Garantiert.
In den (mindestens) drei Stunden, in denen du da rumgebastelt hast, 
kannst du mit VHDL auch große Modelle manuell verdrahten....

von Duke Scarring (Gast)


Lesenswert?

Fabian Hoemcke schrieb:
> ich versuche in der Schematic eines VHDL-Projektes in ISE WEBpack einen
> konstanten Wert auf den Eingang meiner 7-Segemnt-Anzeige zu lesen
> (bcddecoder).
>
> Müsste eigentlich enorm einfach sein, könnte man meinen, aber ich habe
> es weder hinbekommen noch im Internet nützliche Informationen dazu
> gefunden.
Das liegt daran, das niemand ernsthaft die Xilinx-Schematic verwendet. 
Und das es niemand verwendet, wird da auch von Xilinx nix dran gemacht 
und Du findest auch nichts im Netz dazu.

Ich habe es damals(tm) auch mit Schematic versucht. Es ist (und bleibt) 
frustrierend. Inzwischen bin ich mit VHDL sehr zufrieden.

Duke

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Lothar Miller schrieb:
> Fabian Hoemcke schrieb:
>> ich versuche in der Schematic eines VHDL-Projektes
> Das passt soweiso nicht zusammen. Mach das bischen Verdrahtung doch von
> Hand. Meine VHDL-Projekte enthalten prinzipiell keine Schematic.

Ja, im aktuellen Fall ist es noch recht einfach, wollte für diesen Fall 
nicht auch gleich ein riesen Projekt reinstellen.
Aber im c't-Link sieht man ja, wie groß Projekte sein können.
Ich glaube Du kennst das ja, ich kenne auch deine Webseite.

Danke für's Beispiel.

Duke Scarring schrieb:
> Fabian Hoemcke schrieb:
>> ich versuche in der Schematic eines VHDL-Projektes in ISE WEBpack einen
>> konstanten Wert auf den Eingang meiner 7-Segemnt-Anzeige zu lesen
>> (bcddecoder).
>>
>> Müsste eigentlich enorm einfach sein, könnte man meinen, aber ich habe
>> es weder hinbekommen noch im Internet nützliche Informationen dazu
>> gefunden.
> Das liegt daran, das niemand ernsthaft die Xilinx-Schematic verwendet.
> Und das es niemand verwendet, wird da auch von Xilinx nix dran gemacht
> und Du findest auch nichts im Netz dazu.
>
> Ich habe es damals(tm) auch mit Schematic versucht. Es ist (und bleibt)
> frustrierend. Inzwischen bin ich mit VHDL sehr zufrieden.
>
> Duke

Es ist irgendwie schon schade. Das ist als hätte man ein Auto in der 
Garage, aber man läuft immer, weil das Auto kaputt ist.
Egal wie viel man zu tragen hat.

Das Dogma alles in VHDL zu schreiben, kommt ja nur daher, weil der 
Schematic-Editor im ISE WEBpeck buggy ist. Nicht weil die Idee oder das 
Prinzip damit zu programmieren schlecht ist.
Das finde ich schade.

Da kann ich verstehen weshalb es bei Sigasi (VHDL-Plugin für Eclipse) 
keinen Schematiceditor gibt.

Kay schrieb:
> Also das geht glaube ich beim ISE Webpack wie folgt:
> 1. du hast ein Generic-Teil in deiner Entity... z.B.:Generic ( period  : integer 
range 0 to 65535 := 400);2. du hast ein Symbol erzeugt und eine Instanz davon in 
einer Schematic
> eingebunden
> 3. Rechtsklick -> Object Properties -> New
> 4. gib den Namen des Attributs ein (in diesem Fall "period")
> 5. gib den gewünschten Wert an (z.B. 17)
> 6. gib den Typen an (in diesem Fall Integer)
> 7. ok -> ok
>
> leider gibt es dadurch eine Warnmeldung bei der Synthetisierung... das
> missfällt mir noch an der Lösung
>
> Gruß Kay

Danke.
Leider arbeiten wir mit STD_LOGIC_VECTOR. Das kann man als Datentyp 
nicht auswählen. Wenn man BIT-Vectoren nutzt, sehe ich trotz 
verschiedener Werte immer das gleiche auf allen Display.
Ich werde mal versuchen, auf Integer zu setzen diese zu konvertieren.

Danke Leute!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fabian Hoemcke schrieb:
> Das Dogma alles in VHDL zu schreiben, kommt ja nur daher, weil der
> Schematic-Editor im ISE WEBpeck buggy ist.
Nein, es kommt daher, dass nur solche "reinen" VHDL-Projekte wirklich 
portierbar sind. VHDL ist auch nach 20 Jahren noch VHDL. Ob dein 
Schematic-Editor nach 20 Jahren noch das alte Zeug öffnen kann, ist aber 
sehr fraglich.
Und ein Schematic-Editor eines anderen Herstellers kann damit sowieso 
nichts anfangen...

von Christian R. (supachris)


Lesenswert?

Fabian Hoemcke schrieb:
> Das Dogma alles in VHDL zu schreiben, kommt ja nur daher, weil der
> Schematic-Editor im ISE WEBpeck buggy ist.

Nee, wie schon gesgat, hauptsächlich wegen der Portierbarkeit. Was ich 
aber viel wichtiger finde: Es ist einfacher wartbar. Bei einem Schematic 
Design artet jede Änderung in wildes Schieben von Leitungen aus. Ein 
anderer ganz wesentlicher Punkt ist die Möglichkeit der Versionierung 
mit Standard-Tools wie SVN, Git oder CVS. Das geht bei Schematic nur 
extrem mühselig, weil es binäre Files sind. Ein VHDL/Verilog ist überall 
lesbar und lässt sich vernünftig in ein Versionskontrollsystem 
einpflegen.

Fabian Hoemcke schrieb:
> Nicht weil die Idee oder das
> Prinzip damit zu programmieren schlecht ist

Schlecht nicht, aber schlicht nicht passend und nicht zeitgemäß für 
einen FPGA. Mit einem Schematic Design zwingst du den Synthesizer in 
eine Struktur, der ist aber drauf ausgelegt, ein Verhalten 
beschrieben zu bekommen. Die Struktur kann der in 99,5% der Fälle selbst 
viel effizienter und besser an den Ziel-FPGA angepasst herstellen.
Ich hab hier ein Design zunächst 1:1 von Schematic in VHDL übersetzt. 
Selbst ohne Optimierungen wurde es 40% schneller.

von Kay (Gast)


Lesenswert?

zum Thema Portierung: Xilinx ISE Webpack erstellt mit Hilfe der 
Schematic lediglich die Strukturelle Beschreibung (liegt in 
gleichnamiger .vhf Datei) und diese kann portiert werden solang man nur 
eigene Module verwendet. Ich persönlich finde Schematics & State 
Diagramms an sich ein gutes Mittel um ein Projekt übersichtlich 
darzustellen und schnell begreifbar zu machen. Dass die Schematic in ISE 
ein Krampf ist.. ok, das kann man wirklich nicht bestreiten.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Danke! Kaum macht man es richtig, geht es! ^^

Habe es so gemacht, wie Ihr es gesagt habt. Die Generics in der 
VHDL-Datei eingefügt, bei Object-Properties (dann NEW) den Attributnamen 
und den Wert sowie Typ angegeben.
[Für die, die später das gleiche Problem haben wie ich.]
Schade ist nur, dass man nicht gleich den Attributnamen aus der Liste 
auswählen kann. Schlimmer aber ist, dass man als Typ nicht 
STD_LOGIC_VECTOR angeben kann. So muss man BIT-VECTOR nehmen und den 
Wert im Modul konvertieren. Was unnötig scheint. Wenn das Top-Modul ein 
VHDL-File wäre und man das ganze über generic map regeln würde, wie oben 
zu sehen, geht das ja auch.

_____________________________________

Lothar Miller schrieb:
> Nein, es kommt daher, dass nur solche "reinen" VHDL-Projekte wirklich
> portierbar sind.
Das ist natürlich ein Punkt! Das hat Sinn.

Christian R. schrieb:
> Es ist einfacher wartbar. Bei einem Schematic
> Design artet jede Änderung in wildes Schieben von Leitungen aus. Ein
> anderer ganz wesentlicher Punkt ist die Möglichkeit der Versionierung
Den Punkt mit der Versionierung lasse ich gelten. Den Punkt mit der 
Wartbarkeit nur zum Teil. Ähnlich wie ein gut gemachter Schaltplan hat 
man den Vorteil der Übersicht. Hat man so viele Komponenten wie ich 
hier: Beitrag "kruder Fehler bei FPGA-Programmierung (ISE WEBpack-Schematic)" (als nur 
eines von vielen Beispielen). Würde ich all die Module als Components 
einbinden, müsste ich ausführlich kommentieren um die selbe 
Übersichtlichkeit zu gewährleisten. Aber ja, muss man etwas ändern, 
braucht es schon viel Glück, dies mit wenig Aufwand machen zu können.

_____________________________________

Mal noch eine andere Sache zum Thema Schematic. Gibt es eine 
Möglichkeit, das Feld einer Schematic in die man die Symbole zieht zu 
vergrößern?

Klar könnte man Teile der Schematic in Untermodule kapseln. Aber das 
wiederum schadet, wie ich finde die Übersichtlichkeit. Zumal wenn alle 
Teile im Grunde die gleiche Funktion haben. WO sich das also einfach 
nicht anbietet.

Hat da mal jemand noch einen Tipp?
Danke
Fabian

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Angehängte Dateien:

Lesenswert?

Habe es raus gefunden. Unter den Object-Properties des Hintergrundes 
kann man es einstellen.

Damit wären auch hier alle Punkte geklärt.

Danke euch viel Mals!
Fabian


[Close]

von Christian R. (supachris)


Lesenswert?

Fabian Hoemcke schrieb:
> Ähnlich wie ein gut gemachter Schaltplan hat
> man den Vorteil der Übersicht.

Naja, ich weiß ja nicht. Gerade dein Beispiel ist meiner Meinung nach 
ziemlich unübersichtlich. Irgendwo mitten im Blatt Ausgänge, haufen 
Strippen....ich weiß ja nicht. Sicher, es ist Hardware, was man 
beschreibt, aber eine strukturierte, textuelle Sprache ist da schon 
sinnvoller.
Aber auch du wirst bei einem größeren Projekt, oder wenn du 
professionell damit arbeiten musst, auch eine texturelle HDL umsteigen.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Christian R. schrieb:
> Gerade dein Beispiel ist meiner Meinung nach
> ziemlich unübersichtlich.
Ja, das ist richtig. Deshalb suchte ich ja nach einem Weg für mehr 
Platz.

Christian R. schrieb:
> Aber auch du wirst bei einem größeren Projekt, oder wenn du
> professionell damit arbeiten musst, auch eine texturelle HDL umsteigen.
Das glaube ich auch. Vorerst aber arbeite ich nicht alleine an dem 
Projekt. Und um mit meinen Kollegen weiter daran arbeiten zu können 
bleibe ich erstmal noch dabei.

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.