Forum: FPGA, VHDL & Co. Komponente Warnung: node of sequential type is unconnected in block


von Martina M. (xaiven-be)


Lesenswert?

Hallo!

Ich bin blutiger Anfänger, also verzeiht mir bitte eventuelle dumme 
Fragen und Fehler.
Ich habe mir in einer .vhd-Datei folgenden Addierer gebastelt:
1
entity a1 is 
2
 Port ( 
3
  clk: IN std_logic;
4
  a1_a : in  STD_LOGIC_VECTOR (39 downto 0);
5
  a1_b : in  STD_LOGIC_VECTOR (39 downto 0);
6
  a1_sum : out  STD_LOGIC_VECTOR (39 downto 0)
7
 );
8
end a1;
9
10
architecture Behavioral of a1 is
11
begin
12
 process(clk)
13
 begin
14
  if (clk'event and clk = '1') then
15
   a1_sum <= a1_a + a1_b;
16
  end if;
17
 end process;
18
end Behavioral;
In meiner Hauptdatei binde ich diesen ein:
1
architecture Behavioral of calc is
2
 component a1
3
 port (
4
  clk:   IN std_logic;
5
  a1_a: in  std_logic_vector (39 downto 0);
6
  a1_b: in  std_logic_vector (39 downto 0);
7
  a1_sum: out  std_logic_vector (39 downto 0)
8
 );
9
end component;
10
signal a1_a: std_logic_vector(39 downto 0) :=(OTHERS => '0');
11
signal a1_b: std_logic_vector(39 downto 0):=(OTHERS => '0');
12
signal a1_sum: std_logic_vector(39 downto 0):=(OTHERS => '0');
13
:
14
begin
15
 adder1 : a1
16
   port map (
17
   clk => clk,
18
   a1_a => a1_a,
19
   a1_b => a1_b,
20
   a1_sum => a1_sum
21
  );
Dann kommt eine SM, in der die Signal (a1_a, a1_b) mit verschiedenen 
Werten beladen werden. Jetzt kommen hier bei der Synthese sehr viele 
Warnungen:  node ... of sequential type is unconnected in block. Mehr 
als 90 Warnungen sind einfach nicht gut, oder?
Allerdings funktioniert alles, mit einer Testbench getestet.

Was habe ich da "unschönes gemacht"?
Hintergrund:
Ich muss eine komplexe Berechnung in HW realisieren. Dafür muss ich 
hintereinander mehrere Multiplikationen und Addition ausführen. Ich darf 
jeweils nur einen Multiplizierer und Addierer verwenden, weshalb in eine 
SM verwende, die den Eingängen des Multiplizierer und Addieres 
nacheinander verschiedene Werte/Signale aufschaltet.
Software:
Xilinx ISE 10.1.03

Danke für eure Hilfe!!
Viele Grüße
Martina

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


Lesenswert?

Du hast die interessanten Teile der Warnungen ausgelassen. Häng die 
gesamten Warnungen doch einfach als Text-File mit an.

Zu deinem Code:
1
  a1_a : in  STD_LOGIC_VECTOR (39 downto 0);
2
  a1_b : in  STD_LOGIC_VECTOR (39 downto 0);
3
  a1_sum : out  STD_LOGIC_VECTOR (39 downto 0)
4
  :
5
  if (clk'event and clk = '1') then
6
     a1_sum <= a1_a + a1_b;
7
  end if;
8
  :
Warum muß die Addition getaktet sein? Auf diese Art handelst du dir nur 
1 Takt Latency ein. Die Addition ist ein rein kombinatorischer Vorgang.

Das Ergebnis zweier 40-Bit Additionen sind 41 Bit. Wie gehst du mit 
einem evtl. Übertrag um?

> Allerdings funktioniert alles, mit einer Testbench getestet.
Das bedeutet nur, dass sich deine Beschreibung fehlerfrei simulieren 
lässt. Ob du die fehlerfrei implementiert bekommst, steht auf einem 
anderen Blatt ;-)

von Martina M. (xaiven-be)


Angehängte Dateien:

Lesenswert?

Hallo,

hier meine kompletten Warnungen... Sind noch ne Menge... Arbeite an 
vielen Baustellen gleichzeitig. Auch an unsinnigen Latches, deshalb habe 
ich auch versucht, bei der Addition zu takten, damit hier keine Latches 
entstehen. Vielleicht auch falsch gedacht, vielleicht in der Kombination 
mit der SM falsch.

Gruß
Martina

von Xenu (Gast)


Lesenswert?

"node ... of sequential type is unconnected" bedeutet dass die Signale 
keine Ausgänge (direkt oder indirekt) treiben. Kann ein Fehler sein, 
muss aber nicht.

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


Lesenswert?

> One or more signals are missing in the process sensitivity list.
Diese Warnung ist kritisch.
Deine Simulation macht nicht das, was die Hardware macht!

Aus den ganzen Warnungen ist zu entnehmen, dass du viel in 
kombinatorischen Prozessen machst. In solchen Prozessen ist es schon mal 
hilfreich, den Ergebnissen vorher einen Defaultwert zuzuweisen. Dann 
wird dafür kein Latch sondern Kombinatorik generiert.
Das Ganze einfach nur zu takten ist dann erstmal nur Makulatur. Denn 
dann werden keine Latches sondern FFs erzeugt und das Ergebnis daraus 
heißt dann Latency.

von Nephilim (Gast)


Lesenswert?

was ich in dem code irgendwie viel kritischer finde ist, dass die ein- 
und ausgangssignale im hauptfile genau gleich heissen wie die in- und 
outputs. also die signale werden dann wohl mit der componente verbunden, 
aber diese dann nicht mit den in- und outputs. oder nimmt er jetzt die 
in- und outputs für die component und lässt die signale links liegen ?

ich wäre zumindest mal dafür eineindeutige namen zu vergeben.

von Nephilim (Gast)


Lesenswert?

argh, die entitiy is ja garnich dabei, hab das mit dem anfangteil der 
componente verwechselt grad

von Martina M. (xaiven-be)


Lesenswert?

Danke für die vielen und schnelle Antworten. Ich habe gemerkt, dass ich 
wohl zu viel für den Anfang wollte. Das hat so keinen wert. Will da 
nicht eure Zeit verschwenden, weil ich da so ein durcheinander habe. 
Habe jetzt noch einmal ganz sauber von vorne angefangen, um Schritt für 
Schritt die aufkommenden Probleme zu lösen. Das erste Problem ist 
nämlich die Berechnung selber und die (eventuell schlechten) Latches. 
Ist wohl auch besser, wenn ich dazu einen neuen Thread öffne.
Das werde ich gleich machen, mit allen Angaben.

Viele Grüße
Martina

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.