Signal initialisieren

Gast #2266621
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?
Moderator (Firma: Titel) Persönliche Seite #2266712
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
Gast #2274790
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?
#2275193
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
Gast #2276210
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!
Gast #2277627
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.
#2277792
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
Gast #2277933
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
Gast #2284069
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.
Moderator (Firma: Titel) Persönliche Seite #2284378
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...
#2284577
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ß
Gast #2284603
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
Moderator (Firma: Titel) Persönliche Seite #2284692
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...
#2284727
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.

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