Forum: FPGA, VHDL & Co. loop synthese problem


von jojo (Gast)


Lesenswert?

Hallo,

Ich hab eine VHDL-code in meinem Projekt wie folgenden geschrieben, aber 
leider nicht synthesierbar:

entity test is
generic ( ARR_SIZE: integer := 4; iteration : integer := 0);
port (
    clk         : in  STD_LOGIC;
    x_in        : in  MY_ARRAY (ARR_SIZE-1 downto 0);
    y_in        : in  MY_ARRAY (ARR_SIZE-1 downto 0);
    x_out       : out MY_ARRAY (ARR_SIZE-1 downto 0);
    y_out       : out MY_ARRAY (ARR_SIZE-1 downto 0)
    );
end test;
architecture Behavioral of test is

begin
    process (clk)
    variable Xtemp,Ytemp     :  MY_ARRAY(ARR_SIZE-1 downto 0);
      begin
        if clk'event and clk ='1' then
     for i in ARR_SIZE-1 downto 0 loop
           Xtemp(i) := x_in(i) + (y_in(i) sra iteration);
     Ytemp(i) := y_in(i) - (x_in(i) sra iteration);
           end loop;
        end if;
  x_out <= Xtemp;
  y_out <= Ytemp;
   end process;
end Behavioral;

wenn ich  Xtemp(i) := x_in(i) + y_in(i);
    Ytemp(i) := y_in(i) - x_in(i);
statt
          Xtemp(i) := x_in(i) + (y_in(i) sra iteration);
    Ytemp(i) := y_in(i) - (x_in(i) sra iteration);
versucht, klappt es schon.

Kennt jemand wie kann es korrigiert werden?

vielen danke!

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


Lesenswert?

jojo schrieb:
> aber leider nicht synthesierbar:
Mag sein.

> Kennt jemand wie kann es korrigiert werden?
Welche FEHLERMELDUNG bekommst du?
Vermutlich hast du für deinen Arraytyp MY_ARRAY keinen SRA Operator 
definiert.

von jojo (Gast)


Lesenswert?

hallo,

meine Fehlermeldung ist: 
FATAL_ERROR:Xst:Portability/export/Port_Main.h:143:1.17 - This 
application has discovered an exceptional condition from which it cannot 
recover.  Process will terminate. For technical support on this issue, 
please open a WebCase with this project attached at 
http://www.xilinx.com/support.

Process "Synthesis" failed

SRA funktioniert gut. wenn ich z.B nur
    Xtemp(i) := y_in(i) sra iteration;
    Ytemp(i) := x_in(i) sra iteration;
schreib,Synthese klappt auch.

Danke!

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


Lesenswert?

jojo schrieb:
> wenn ich
>     Xtemp(i) := x_in(i) + y_in(i);
>     Ytemp(i) := y_in(i) - x_in(i);
> versucht, klappt es schon.

jojo schrieb:
> SRA funktioniert gut. wenn ich z.B nur
>     Xtemp(i) := y_in(i) sra iteration;
>     Ytemp(i) := x_in(i) sra iteration;
> schreib,Synthese klappt auch.

Dann probier doch mal, noch einen Zwischenschritt in der Berechnung 
einzuführen:
1
begin
2
    process (clk)
3
    variable Xtemp,Ytemp     :  MY_ARRAY(ARR_SIZE-1 downto 0);
4
    variable help            :  MY_ARRAY(0 downto 0);
5
    begin
6
      if clk'event and clk ='1' then
7
          for i in ARR_SIZE-1 downto 0 loop
8
           help(0)  := y_in(i) sra iteration;
9
           Xtemp(i) := x_in(i) + help;
10
           help(0)  := x_in(i) sra iteration;
11
           Ytemp(i) := y_in(i) - help;
12
          end loop;
13
       end if;
14
     x_out <= Xtemp;
15
     y_out <= Ytemp;
16
   end process;
17
end Behavioral;

von jojo (Gast)


Lesenswert?

hallo  Lothar,

Den ähnlichen Zwischenschritt hatte ich auch versucht, aber es ging auch 
nicht.

Aber danke dir sehr!

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


Lesenswert?

jojo schrieb:
> meine Fehlermeldung ist: FATAL_ERROR:Xst...
Welche Version verwendest du?

Probier das mal aus:
Beitrag "Re: Signal initialisieren"

von jojo (Gast)


Lesenswert?

Ich benutze version 10.1, danke

von Duke Scarring (Gast)


Lesenswert?

1
ERROR:HDLCompiler:69 - "\xst_errors\synthese\array_test\../../rtl/array_test.vhd" Line 13: <my_array> is not declared.
2
ERROR:HDLCompiler:69 - "\xst_errors\synthese\array_test\../../rtl/array_test.vhd" Line 14: <my_array> is not declared.
3
ERROR:HDLCompiler:69 - "\xst_errors\synthese\array_test\../../rtl/array_test.vhd" Line 15: <my_array> is not declared.
4
ERROR:HDLCompiler:69 - "\xst_errors\synthese\array_test\../../rtl/array_test.vhd" Line 16: <my_array> is not declared.
Wie sieht denn die Definition von MY_ARRAY aus?

Duke

von jojo (Gast)


Lesenswert?

hallo,
Ich hab in meinen eigenen Library "LIB_TYP" eine Package:

 package  ARRAY_TYPE is
 type MY_ARRAY is array(natural range <>) of sfixed (3 downto -10);
 end  ARRAY_TYPE;

definiert.

Danke!

von Duke Scarring (Gast)


Lesenswert?

jojo schrieb:
1
 type MY_ARRAY is array(natural range <>) of sfixed (3 downto -10);
Mutig, mutig. Kannst Du mal bitte auf die von Dir verwendete Version der 
fixed-Bibliothek verweisen?!?

Duke

von jojo (Gast)


Lesenswert?

hallo duke,

library IEEE, ieee_proposed;
use IEEE.STD_LOGIC_1164.ALL;
use ieee_proposed.fixed_float_types.all;
use ieee_proposed.fixed_pkg.all;
use IEEE.NUMERIC_STD.ALL;
library LIB_TYP;
use LIB_TYP.ARRAY_TYPE.ALL;


Die Package fixed_float_types_c und fixed_pkg_c werden unter
 http://www.eda-stds.org/fphdl/  herunterladen, siehe  source code von 
xilinx 11.1.

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

jojo schrieb:
> library IEEE, ieee_proposed;
> use IEEE.STD_LOGIC_1164.ALL;
> use ieee_proposed.fixed_float_types.all;
> use ieee_proposed.fixed_pkg.all;
> use IEEE.NUMERIC_STD.ALL;
> library LIB_TYP;
> use LIB_TYP.ARRAY_TYPE.ALL;
Eieiei, das man Dir alles aus der Naes ziehem muß, nur um mal Code zu 
erhalten, der sich compilieren läßt ;-)
1
$ vcom ../rtl/array_test.vhd
2
Model Technology ModelSim PE vcom 10.0c Compiler 2011.07 Jul 21 2011
3
-- Loading package STANDARD
4
-- Loading package TEXTIO
5
-- Loading package std_logic_1164
6
-- Loading package NUMERIC_STD
7
-- Loading package fixed_float_types
8
-- Loading package fixed_pkg
9
-- Compiling package ARRAY_TYPE
10
-- Loading package ARRAY_TYPE
11
-- Compiling entity test
12
-- Compiling architecture Behavioral of test

Nächste Frage: Hast Du eine Testbench?

Ansonsten habe ich mal die Zuweisung von den Variablen zum Signal mit in 
den synchronen Teil reingenommen. Das sagt xst folgendes:
1
Elaborating entity <test> (architecture <Behavioral>) with generics from library <work>.
2
ERROR:HDLCompiler:410 - "../rtl/array_test.vhd" Line 51: Expression has 15 elements ; expected 14

Jetzt bist Du erstmal wieder dran.

Duke

von jojo (Gast)


Lesenswert?

Hallo Duke,

Danke dir. Und das Compile ist kein problem wenn mann
     Xtemp(i) := resize( x_in(i) + (y_in(i) sra iteration),3,-10);
     Ytemp(i) := resize( y_in(i) - (x_in(i) sra iteration),3,-10);
schreibt. Das problem ist,dass es  immer nicht synthesierbar ist.

Ich hab eine Testbench geschrieben,aber gib's auch noch fehler.

noch mal danke.

von Duke Scarring (Gast)


Lesenswert?

jojo schrieb:
> Ich hab eine Testbench geschrieben,aber gib's auch noch fehler.
Die muß erstmal laufen.

Und immer dran denken: Du willst Hardware bauen. Dein Testmodul hat 
schon 225 Ein-/Ausgänge. Kommen die Daten wirklich parallel? Und muß in 
jedem Takt ein Ergebnis entstehen?

Duke

von Christian R. (supachris)


Lesenswert?

Naja, wie er die Zahl der IOBs verringert, hat er ja auch schon mehrfach 
angefragt. So richtig den Eindruck, dass er weiß, was er da tut, habe 
ich nicht....

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.