Forum: FPGA, VHDL & Co. Signal initialisieren


von Mick (Gast)


Lesenswert?

Hallo,
ich stelle mich hier gerade wirklich blöd an. Ich möchte den Klassiker 
angehen-eine gemultiplexte Led Anzeige. 8x8, soäter wärs schön 
vielleicht 8x24 oder so zu machen, daher habe ich ein generic für die 
Anzahl der Spalten gemacht.
Um das Signal für die Spalten am Anfang mit einem sinnigen Wert zu 
initialisieren, also nur ein bit zu setzen, habe ich etwas wie
1
Generic( NO_COLUMNS: natural := 8);
2
3
...
4
5
6
signal COLUMS_S : STD_LOGIC_VECTOR (NO_COLUMNS-1 downto 0) := 1&(others=>'0');

Der Fehler ist erklärt: der operator '&' cannot have such operands in 
this context. Ich bin etwas verwirrt und denke mir, daß das doch 
bestimmt in Zukunft öfter Thema sein wird.
Wie mache ich das: ein Signal mit Nullen initialisieren und nur ein bit 
setzen? Gingen auch 2 Bit?

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


Lesenswert?

Mick schrieb:
> 1&(others=>'0');
Da passt schon der Literal 1 nicht zum Vektor. Wenn, dann müsste es '1' 
heißen. Aber: das geht dann "natürlich" trotzdem nicht....

>  ein Signal mit Nullen initialisieren und nur ein bit setzen?
Probier mal das hier:
...  :=  ((NO_COLUMNS-1)=>'1',others=>'0');

> Gingen auch 2 Bit?
Ja. Probiers aus... ;-)
Als letzte Zuweisung muß das nur
 ... ,others=>'0');
kommen

von Mick (Gast)


Lesenswert?

super, vielen Dank!

P.S. Habe wohl falsch gesucht. So einfach wie es aussieht - ich habs 
nicht herausbekommen. Als Buch habe ich 'vhdl Synthese'.

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


Lesenswert?

Mick schrieb:
> Als Buch habe ich 'vhdl Synthese'.
Wenn du das dann mal soweit verdaut hast, kauf dir noch den "Designers 
Guide to VHDL" von Peter Ashenden.

von Panko (Gast)


Lesenswert?

Muss noch mal aufwärmen.

Daran habe ich mir auch schon öfter die Zähne ausgebissen. Schon gefreut 
und die Enttäuschung. Ich bekomm da den Fehler:
"ERROR:HDLParsers:3375 - "D:/VHDL/_xc95000/led_disp/top.vhd" Line 18. 
Choices for an array aggregate (result of operator) must be locally 
static unless there is only one choice. "

woran könnte das liegen?

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


Lesenswert?

Panko schrieb:
> "ERROR:HDLParsers:3375 - "D:/VHDL/_xc95000/led_disp/top.vhd" Line 18.
Zeig mal die Zeile 18 und das was dazugehört...

von Clemens M. (panko)


Lesenswert?

Ja. Das würde helfen... Schande über mich. Mache ich heute Abend ich bin 
noch unterwegs und habe keinen Zugriff.
Eigentlich genau wie oben erklärt. Ein generic was die Länge des Signals 
definiert und dann in der Zuweisung benutzt wird.
Aus dem Kopf sinngemäß , also nur so zu 95% richtig ;-)
1
 generic( LENGTH : integer := 8);
2
 port( vec : out std_logic_vector(LENGTH-1 downto 0) );
3
4
5
 architecture Behavioral of TEST is
6
 signal vec_sig: STD_LOGIC_VECTOR (LENGTH-1 downto 0) := ((LENGTH-1)=>'1',others=>'0');
7
8
begin
9
 vec <= vec_sig;
10
end

von Panko (Gast)


Lesenswert?

So. Dieses ist ein entartetes Design, was mit der Fehlermeldung 
abbricht. Die Initialisierung ist ja für ein seriell-parallel 
Schieberegister mit Sicherheit nicht nötig. Aber es ist ein konkretes 
Beispiel, was hier bei mir nicht syntetisiert werden kann. :-(

Vielleicht platzt ja der Knoten ich dachte ich hätte das others=>'0' 
Konstrukt verstanden. das habe ich nämlich quasi als Blackbox als 
gegeben hingenommen ;-) Auch hier auf der page wird ja gesagt: um alle 
bits auf Null zu setzen schreibt man...
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity top is
5
Generic( WIDTH : integer := 8);
6
    Port ( CLK : in  STD_LOGIC;
7
           SER_DAT : in  STD_LOGIC;
8
           PAR_DAT : out  STD_LOGIC_VECTOR (WIDTH-1 downto 0));
9
end top;
10
11
architecture Behavioral of top is
12
signal serdat : STD_LOGIC_VECTOR ( (WIDTH-1) downto 0) := ((WIDTH-1)=>'1', others=>'0');
13
signal bits   : integer range 0 to (WIDTH-1) := 0;
14
begin
15
  
16
  --Eingangs Schieberegister
17
  process (clk) begin
18
    if(rising_edge(clk)) then
19
      serdat <= serdat(serdat'left-1 downto 0) & SER_DAT; --bit hereinschiften
20
      if(bits < (WIDTH-1)) then
21
        bits <= bits + 1;
22
      else
23
        bits <= 0;
24
      end if;
25
    end if;
26
  end process;
27
  
28
  --alle WIDTH bits den Ausgang aktualisieren
29
  process (clk) begin
30
    if(rising_edge(clk)) then
31
      if(bits = (WIDTH-1)) then
32
        PAR_DAT <= serdat;
33
      end if;
34
    end if;
35
  end process;
36
  
37
38
end Behavioral;

"ERROR:HDLParsers:3375 - "D:/VHDL/_xc95000/versuch/top.vhd" Line 12. 
Choices for an array aggregate (result of operator) must be locally 
static unless there is only one choice. "

Danke für Hilfe und wünsche ein allseits schönes Wochenende!

von Mustafa (Gast)


Lesenswert?

ich habe deinen code mit dem quartus software compiliert und es hat
keine Fehlermeldung gegebebn.
Vielleicht hilft dir das!
Mus.

von Panko (Gast)


Lesenswert?

So direkt nicht ;-)
Mangels Wissen und Erfahrung kann ich ja nur raten und fragen. Ist es 
möglich, daß -irgendwelche- falschen Projekt Einstellungen 
verantwortlich sind? Verwendet wird ise 12.3. Neues Projekt anlegen 
hilft nichts.

von Christian R. (supachris)


Lesenswert?

Panko schrieb:
> So. Dieses ist ein entartetes Design, was mit der Fehlermeldung
> abbricht.

Läuft unter ISE 13.2 einwandfrei durch.
1
Started : "Synthesize - XST".
2
Running xst...
3
Command Line: xst -intstyle ise -ifn "D:/Christian/FPGA/Test_S6T/top.xst" -ofn "D:/Christian/FPGA/Test_S6T/top.syr"
4
Reading design: top.prj
5
6
=========================================================================
7
*                          HDL Parsing                                  *
8
=========================================================================
9
Parsing VHDL file "D:\Christian\FPGA\Test_S6T\Test.vhd" into library work
10
Parsing entity <top>.
11
Parsing architecture <Behavioral> of entity <top>.
12
13
=========================================================================
14
*                            HDL Elaboration                            *
15
=========================================================================
16
17
Elaborating entity <top> (architecture <Behavioral>) with generics from library <work>.
18
19
=========================================================================
20
*                           HDL Synthesis                               *
21
=========================================================================
22
23
Synthesizing Unit <top>.
24
    Related source file is "d:/christian/fpga/test_s6t/test.vhd".
25
        WIDTH = 8
26
    Found 3-bit register for signal <bits>.
27
    Found 8-bit register for signal <PAR_DAT>.
28
    Found 8-bit register for signal <serdat>.
29
    Found 3-bit adder for signal <bits[2]_GND_3_o_add_1_OUT> created at line 21.
30
Found 3-bit comparator greater for signal <bits[2]_PWR_3_o_LessThan_1_o> created at line 20
31
    Summary:
32
  inferred   1 Adder/Subtractor(s).
33
  inferred  19 D-type flip-flop(s).
34
  inferred   1 Comparator(s).
35
Unit <top> synthesized.
36
    
37
=========================================================================
38
HDL Synthesis Report
39
40
Macro Statistics
41
# Adders/Subtractors                                   : 1
42
 3-bit adder                                           : 1
43
# Registers                                            : 3
44
 3-bit register                                        : 1
45
 8-bit register                                        : 2
46
# Comparators                                          : 1
47
 3-bit comparator greater                              : 1
48
49
=========================================================================
50
51
=========================================================================
52
*                       Advanced HDL Synthesis                          *
53
=========================================================================
54
55
56
Synthesizing (advanced) Unit <top>.
57
The following registers are absorbed into counter <bits>: 1 register on signal <bits>.
58
Unit <top> synthesized (advanced).
59
60
=========================================================================
61
Advanced HDL Synthesis Report
62
63
Macro Statistics
64
# Counters                                             : 1
65
 3-bit up counter                                      : 1
66
# Registers                                            : 16
67
 Flip-Flops                                            : 16
68
# Comparators                                          : 1
69
 3-bit comparator greater                              : 1
70
71
=========================================================================
72
73
=========================================================================
74
*                         Low Level Synthesis                           *
75
=========================================================================
76
77
Optimizing unit <top> ...
78
79
Mapping all equations...
80
Building and optimizing final netlist ...
81
Found area constraint ratio of 100 (+ 5) on block top, actual ratio is 0.
82
83
Final Macro Processing ...
84
85
=========================================================================
86
Final Register Report
87
88
Macro Statistics
89
# Registers                                            : 19
90
 Flip-Flops                                            : 19
91
92
=========================================================================
93
94
=========================================================================
95
*                           Partition Report                            *
96
=========================================================================
97
98
Partition Implementation Status
99
-------------------------------
100
101
  No Partitions were found in this design.
102
103
-------------------------------
104
105
=========================================================================
106
*                            Design Summary                             *
107
=========================================================================
108
109
Clock Information:
110
------------------
111
-----------------------------------+------------------------+-------+
112
Clock Signal                       | Clock buffer(FF name)  | Load  |
113
-----------------------------------+------------------------+-------+
114
CLK                                | BUFGP                  | 19    |
115
-----------------------------------+------------------------+-------+
116
117
Asynchronous Control Signals Information:
118
----------------------------------------
119
No asynchronous control signals found in this design
120
121
Timing Summary:
122
---------------
123
Speed Grade: -3
124
125
   Minimum period: 2.216ns (Maximum Frequency: 451.233MHz)
126
   Minimum input arrival time before clock: 1.903ns
127
   Maximum output required time after clock: 3.634ns
128
   Maximum combinational path delay: No path found
129
130
=========================================================================
131
132
Process "Synthesize - XST" completed successfully

von Panko (Gast)


Lesenswert?

Dann werde ich die 13er ise runterladen und installieren. Ich poste dann 
das Ergebnis, sofern der Thread dann nicht schon zu weit nach unten 
gerutscht ist.

Danke fürs ausprobieren.

Grüße, verwirrter Clemens

von Klaus (Gast)


Lesenswert?

Panko schrieb:
> Ich poste dann
> das Ergebnis, sofern der Thread dann nicht schon zu weit nach unten
> gerutscht ist.

Man kann auch Threads, die weiter hinten liegen, immernoch aufrufen...

von Panko (Gast)


Lesenswert?

Ich habe ise 13.2 soeben zu Ende installiert. Das Testprojekt 
konvertieren lassen und... es bricht mit derselben Fehlermeldung ab. :-(

Kann die Wahl des fpga (S3 1200) eine Rolle spielen. Oder sonst ein 
Fehler in den Projekteinstellungen? Ist doch schon seltsam.


P.S. Ja, ist mir bewusst, daß auch uralte Threads wiederbelebt werden 
können - ist aber in vielen Foren nicht unbedingt gern gesehen.

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


Lesenswert?

Panko schrieb:
> Ich habe ise 13.2 soeben zu Ende installiert. Das Testprojekt
> konvertieren lassen und... es bricht mit derselben Fehlermeldung ab. :-(
Es ist eine Einschränkung des XST-Synthesizers.
1
signal serdat : STD_LOGIC_VECTOR ( (WIDTH-1) downto 0) := (7=>'1', others=>'0');         -- XST: OK  / Synplify: OK
2
3
signal serdat : STD_LOGIC_VECTOR ( (WIDTH-1) downto 0) := ((WIDTH-1)=>'1', others=>'0'); -- XST: fail  / Synplify: OK
4
5
constant breite : integer := 8;
6
signal serdat : STD_LOGIC_VECTOR ( (WIDTH-1) downto 0) := ((breite-1)=>'1', others=>'0'); -- XST: OK  / Synplify: OK
XST hält sich hier an den alten VHDL-Standard und sieht sich (quasi) nur 
diese Zeile an. Er fragt sich: ist WITDH hier statisch? Die Antwort 
lautet: NEIN, denn es kann über einen Generic geändert werden. Dann 
bricht er ab. Natürlich KÖNNTE er das ganz problemlos auflösen. Er tut 
es aber nicht.
Synplify (Lattice) nutzt (wie Altera) die Möglichkeiten besser und setzt 
das Ganze wie gewünscht um.


> P.S. Ja, ist mir bewusst, daß auch uralte Threads wiederbelebt werden
> können - ist aber in vielen Foren nicht unbedingt gern gesehen.
Naja, es ist etwas anderes, den ursprünglichen Faden (=Thread) wieder 
aufzunehmen, als einen 3 Jahre alten für eine neue Frage zu kapern...

von Clemens M. (panko)


Lesenswert?

ok Danke für die Erklärung, nur Christian R. hat wenn ich das recht 
verstehe mein Beispiel durch ise 13.2 synthetisiert bekommen. Da komme 
ich noch nciht so mit klar. :-o
Gäbe es denn einen workaround? Wie würdest du mit so einem Problem 
umgehen? Denn durch das constant wäre der Nutzen eines generic nicht 
gegeben finde ich.
Der OP ist ja anscheinend auch zufrieden. Oder weg.

Gruß

von Duke Scarring (Gast)


Lesenswert?

Clemens M. schrieb:
> Gäbe es denn einen workaround?
Ohne das ich mir jetzt den komplette thread nochmal durchgelesen habe, 
aber es verbietet Dir keiner eine Konstante mit einem generic zu 
belegen:
1
entity my is
2
  generic 
3
  (
4
    my_g : integer
5
  );
6
  port 
7
  (
8
    ...
9
  );
10
end entity my;
11
12
architecture rtl of my is
13
  
14
  constant my_c : integer := my_g;
15
16
begin
17
  ...
18
end architecture rtl;

Duke

von Christian R. (supachris)


Lesenswert?

Hm, das ist ja spannend:
Der Quelltext von oben für einen Spartan 6 übersetzt: OK
Für den Spartan 3 E 1200: Der gleiche Fehler wie bei dir.

Versteh einer den XST ?!?

Edit:
Virtex 4: Fehler
Virtex 5: Fehler
Virtex 6: OK
Extended Spartan 3A: Fehler

von Duke Scarring (Gast)


Lesenswert?

Du könntest den Test auch nochmal mit der XST-Option "-use_new_parser" 
durchführen.

Duke

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


Lesenswert?

Duke Scarring schrieb:
> aber es verbietet Dir keiner eine Konstante mit einem generic zu
> belegen:
So also:
1
constant breite : integer := WIDTH;
2
signal serdat : STD_LOGIC_VECTOR ( (WIDTH-1) downto 0) := ((breite-1)=>'1', others=>'0'); -- XST: fail
Schon ausprobiert. Geht auch nicht...  :-(

Christian R. schrieb:
> Der Quelltext von oben für einen Spartan 6 übersetzt: OK
Ab der 6er Reihe geht das gut.
Offenbar wird da ein anderer Synthesizer verwendet...

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


Angehängte Dateien:

Lesenswert?

Duke Scarring schrieb:
> Du könntest den Test auch nochmal mit der XST-Option "-use_new_parser"
> durchführen.
Kaum zu glauben. So ein wichtiger Schalter nicht in der GUI...   :-/

von Clemens M. (panko)


Lesenswert?

Ich werde diese Option ausprobieren. Hoffentlich finde ich mich in der 
ise soweit zurecht, daß ich auch den richtigen Dialog (s.o.) finde ;-)

Aber schon interessant, daß auch die 'gurus' aus dem fpga-Forum 
wenigstens etwas verblüfft sind.

von Christian R. (supachris)


Lesenswert?

Hehe, damit klappts. Uns ed kommt eine lustige Warnung.
1
Xst:3152 - You have chosen to run a version of XST which is not the default solution
2
   for the specified device family. You are free to use it in order to take
3
   advantage of its enhanced HDL parsing/elaboration capabilities. However,
4
   please be aware that you may be impacted by  language support differences.
5
   This version may also result in circuit performance and device utilization
6
   differences for your particular design. You can always revert back to the
7
   default XST solution by setting the "use_new_parser" option to value "no" 
8
   on the XST command line or in the XST process properties panel.

Clemens: Einfach rechte Maustaste auf Systhesize und dann Process 
properties.

von Clemens M. (panko)


Lesenswert?

Danke an alle!

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.