Forum: FPGA, VHDL & Co. Shift von 9 Bit Vektoren


von guest (Gast)


Lesenswert?

Tag auch,

ich wüsste gerne wo in dem Minimalbeispiel das Problem liegt. Die 
Synthese beim Shift mit dem 3 Feld breitem Array funktioniert, beim 2 
Feld Array bekommen ich jedoch die Fehlermeldung "Size of concat 
operation is different than size of the target." (ISE 13.1)

Habe ich da etwas übersehen oder spinnt das Synthesetool?
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
5
entity top_level is
6
  port(  clk        : in std_logic;
7
      rst        : in std_logic;
8
      data_in      : in std_logic_vector(8 downto 0);
9
      result      : out std_logic_vector(8 downto 0)  
10
  );
11
end top_level;
12
13
architecture rtl of top_level is
14
  
15
  subtype  std_9bit is std_logic_vector(8 downto 0);
16
    type vec_9bit_2Felder is array(0 to 1) of std_9bit;
17
  type vec_9bit_3Felder is array(0 to 2) of std_9bit;
18
  
19
  signal sig_error  : vec_9bit_2Felder;  
20
  signal sig_ok    : vec_9bit_3Felder;
21
22
begin
23
24
  p1 : process(clk)
25
  begin
26
    if(rising_edge(clk)) then
27
      if(rst = '1') then
28
        sig_error <= (others => "000000000");
29
        sig_ok <= (others => "000000000");
30
      else        
31
        sig_error <= data_in & sig_error(0); --// funktioniert nicht mit 2 Feldern
32
        --sig_ok <= data_in & sig_ok(0 to 1);  --// funktioniert mit 3 Feldern.. Wieso?
33
      end if;
34
    end if;
35
  end process;
36
37
  result <= sig_error(1);
38
  --result <= sig_ok(2);
39
40
end rtl;

von Duke Scarring (Gast)


Lesenswert?

guest schrieb:
> sig_error <= data_in & sig_error(0);

Wenn man die Datentypen aufdröselt steht da:
vec_9bit_2Felder <= std_logic_vector(8 downto 0) & std_9bit;

Bei der Verknüpfung (&) entsteht dann ein 18 Bit breiter Vektor.

Vielleicht willst Du ja eher sowas:
1
sig_error <= ( 0 => data_in,
2
               1 => sig_error(0));

Duke

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


Lesenswert?

Probier das mit dem neuen Parser mal aus:
http://www.lothar-miller.de/s9y/archives/79-use_new_parser-YES.html
Der kann mit Arrays wesentlich besser umgehen.. ;-)

von guest (Gast)


Lesenswert?

> Bei der Verknüpfung (&) entsteht dann ein 18 Bit breiter Vektor

Das ist ja auch ok, die zwei 9 Bit Vektoren (sig_error(0) und data_in) 
werden konkateniert und im 18 Bit Vektor sig_error abgelegt. So 
zumindest
das gewünschte Verhalten.

So läuft es ja auch bei sig_ok, nur das dort ein 27 Bit Vektor (sig_ok) 
durch das Konkatenieren von data_in & sig_ok(0 to 1) beschrieben wird.

Das Vorgehen ist bei beiden Vektoren das gleiche nur mit dem Ergebnis, 
dass es bei 3 Feldern synthetisiert wird, bei 2 Feldern ein Fehler 
kommt.

> sig_error <= ( 0 => data_in,
>                1 => sig_error(0));

So habe ich das als alternative dann auch beschrieben
sig_error(0) <= data_in;
sig_error(1) <= sig_error_(0);

Aber warum da nun in Abhängigkeit von der Feldgröße ein Fehler kommt 
geht mir nicht in den Kopf.

von guest (Gast)


Lesenswert?

> Probier das mit dem neuen Parser mal aus:
> http://www.lothar-miller.de/s9y/archives/79-use_ne...
> Der kann mit Arrays wesentlich besser umgehen.. ;-)

Danke, werd es gleich mal ausprobieren.

von guest (Gast)


Lesenswert?

> Probier das mit dem neuen Parser mal aus:
> http://www.lothar-miller.de/s9y/archives/79-use_ne...
> Der kann mit Arrays wesentlich besser umgehen.. ;-)

Nu läuft es. Gibt es irgendwelche bekannten Nachteile bei der Nutzung 
von dem Parser?

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


Lesenswert?

guest schrieb:
> Gibt es irgendwelche bekannten Nachteile bei der Nutzung von dem Parser?
Ich nehme den jetzt immer, und mir ist nichts aufgefallen.

von Duke Scarring (Gast)


Lesenswert?

guest schrieb:
> Nu läuft es. Gibt es irgendwelche bekannten Nachteile bei der Nutzung
> von dem Parser?
Der einzige Nachteil dürfte der fehlende Support durch Xilinx sein.
Ansonsten ist mir bisher auch noch nichts negatives aufgefallen.

Duke

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


Lesenswert?

guest schrieb:
> Gibt es irgendwelche bekannten Nachteile bei der Nutzung von dem Parser?
Doch, eines war da noch: der TCL-Script zur automatischen Erzeugung 
einer Testbench hat diesen Parameter noch nicht. Deshalb wird bei "Add 
New File --> Testbench" noch der Fehler angezeigt. Der TB-Rahmen wird 
aber trotzdem korrekt angelegt...

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.