vector mit 0 initalisieren

Gast #2312084
Lesenswert?

Hallo,

leider bekomme ich eine Fehlermeldung die ich nicht einordnen kann.

ERROR:HDLParsers:808 - "C:/Projekte/VHDL/trash/test/test.vhd" Line 36. 
resize can not have such operands in this context.

Unten der Quellcode:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_logic_arith.all;
4
use IEEE.numeric_std.all;
5
use work.test2.all;
6

7
entity test is
8

9
port(
10
  out_vector: out std_ulogic_vector(16 downto 0));
11
end test;
12

13
architecture Behavioral of test is
14

15
begin
16

17
out_vector <= std_ulogic_vector(resize(unsigned(testt), out_vector'length));
18

19
end Behavioral;
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.all;
3

4
package test2 is
5

6
constant testt : std_ulogic_vector(2 downto 0) := "001";
7

8
end test2;
9

10
package body test2 is
11

12
end test2;
Gast #2312096
Lesenswert?

Michael K^3 schrieb:
> use IEEE.STD_logic_arith.all;
Raus damit!

vorher:
1
Model Technology ModelSim PE vcom 10.0b Compiler 2011.05 May  5 2011
2
-- Loading package STANDARD
3
-- Loading package TEXTIO
4
-- Loading package std_logic_1164
5
-- Loading package std_logic_arith
6
-- Loading package NUMERIC_STD
7
-- Loading package test2
8
-- Compiling entity test
9
-- Compiling architecture Behavioral of test
10
** Error: res.vhd(17): (vcom-1078) Identifier "unsigned" is not directly visible.
11
   Potentially visible declarations are:
12
        ieee.NUMERIC_STD.UNSIGNED (subtype declaration)
13
        ieee.std_logic_arith.UNSIGNED (type declaration)
14
** Error: res.vhd(17): Illegal type conversion to ieee.std_logic_1164.STD_ULOGIC_VECTOR (operand type is not known).
15
** Error: res.vhd(19): VHDL Compiler exiting

nachher:
1
Model Technology ModelSim PE vcom 10.0b Compiler 2011.05 May  5 2011
2
-- Loading package STANDARD
3
-- Loading package TEXTIO
4
-- Loading package std_logic_1164
5
-- Loading package NUMERIC_STD
6
-- Loading package test2
7
-- Compiling entity test
8
-- Compiling architecture Behavioral of test

Duke
Moderator (Firma: Titel) Persönliche Seite #2312262
Lesenswert?

Und dann der:
> std_ulogic_vector
Nimm stattdessen die weltweit üblichen std_logic...

Der ulogic hatte vor geraumer Zeit mal den Vorteil, dass die Simulation 
schneller durchlief. Mit aktuellen Compilern ist dieser Vorteil weg, und 
alle anderen verwenden weltweit std_logic. Damit lassen sich dann 
nämlich auch Tristate Busse beschreiben...
#2312705
Lesenswert?

@manhunt
Die gleichen Regeln kenne ich auch. std_logic ist nur fuer Chip IOs 
erlaubt, die auch einen tri-state driver haben. Jedes andere Signal ist 
std_ulogic,
@lkmiller
In meinem Environment geht es da nicht um Simulationsperformance, 
sondern darum, dass das  versehentlichte Zuweisen zweier Gleichungen auf 
das gleiche Signal, bei std_logic hat der Compiler eine resolution 
function (worst case ein 'X' innerhalb des Chips) hat, bei std_ulogic 
aber eine Fehlermeldung provoziert wird. Das hilft viele Probleme schon 
sehr frueh zu erkennen. Das letzte Mal, das mir chipinterne tri-atate 
Signale begegnet sind, ist ca. 20 Jahre her, aber da hatte es schon mehr 
Nachteile als Vorteile ('x' als Ergebnis der resolution function, double 
selection an Multiplexer Stufen [war nicht vhdl, sondern eine 
syntaktisch aehnliche Sprache]).
Seit dieser Zeit gilt fuer mich:
Chipintern : std_Ulogic fuer interne Signale um doppelte Zuweisungen vom 
Compiler erkennen zu lassen und std_ulogic nur da, wo ich weiss, das 
tri-state (HZ) im Spiel ist, also an chip IOs.

PS: Spaetestens die Synthese wird (sollte) meckern, wenn zwei 
Zuweisungen auf ein Signale erfogen, aber das wird in der Regel 
wesentlich spaeter erkannt.
Moderator (Firma: Titel) Persönliche Seite #2313660
Lesenswert?

Dietmar Schmunkamp schrieb:
> PS: Spaetestens die Synthese wird (sollte) meckern, wenn zwei
> Zuweisungen auf ein Signale erfogen, aber das wird in der Regel
> wesentlich spaeter erkannt.
Die Synthese wird bei std_logic sowas einfach in einen Multiplexer 
auflösen:
1
   output <= inputA when sel='1' else 'Z';
2
   :
3
   output <= inputB when sel='0' else 'Z';
Und in Fällen, in denen ein Buskonflikt oder ein undefinierter Pegel 
rauskommt, erscheint eine Fehlermeldung.

> Das letzte Mal, das mir chipinterne tri-atate Signale begegnet sind,
> ist ca. 20 Jahre her,
Die letzte Architektur bei Xilinx war der Spartan (ohne II oder 3 oder 
E/A/AN).
> aber da hatte es schon mehr Nachteile als Vorteile
Begrenzte Ressourcen, lange Turn-Around Zeiten, Bustreiber-Konflikte...
Gast #2313783
Lesenswert?

Lothar Miller schrieb:
> Dietmar Schmunkamp schrieb:
>> PS: Spaetestens die Synthese wird (sollte) meckern, wenn zwei
>> Zuweisungen auf ein Signale erfogen, aber das wird in der Regel
>> wesentlich spaeter erkannt.
> Die Synthese wird bei std_logic sowas einfach in einen Multiplexer
> auflösen:   output <= inputA when sel='1' else 'Z';
>    :
>    output <= inputB when sel='0' else 'Z';
> Und in Fällen, in denen ein Buskonflikt oder ein undefinierter Pegel
> rauskommt, erscheint eine Fehlermeldung.
>
>> Das letzte Mal, das mir chipinterne tri-atate Signale begegnet sind,
>> ist ca. 20 Jahre her,
> Die letzte Architektur bei Xilinx war der Spartan (ohne II oder 3 oder
> E/A/AN).
>> aber da hatte es schon mehr Nachteile als Vorteile
> Begrenzte Ressourcen, lange Turn-Around Zeiten, Bustreiber-Konflikte...

Da ich den Dietmar kenne, weiss ich auch worueber er redet: Es geht hier 
nicht um FPGAs sondern um ASICs/Custom Logic Chips! Und da wird seeeeehr 
lange nur simuliert, bevor ueberhaupt mal eine Synthese angeworfen wird. 
Und dann bist du echt froh, wenn du rechtzeitig (also bei der 
Simulation) einen potentiellen Konflikt gemeldet bekommst. Bis die Jungs 
vom Physical Design ueberhaupt anfangen dauert, und wenn du dann wegen 
sowas deine komplette Logic ueberdenken/-arbeiten musst dann geht da was 
ganz gewaltig schief...

Also nicht nur an FPGA denken, sondern auch an 'was Groesseres...'
Gast #2313795
Lesenswert?

berndl schrieb:
> Und da wird seeeeehr
> lange nur simuliert, bevor ueberhaupt mal eine Synthese angeworfen wird.

Erklaerung dazu: Die Jungs und Maedels von PD (physical design) koennen 
gar nicht frueher anfangen, da z.B. Macros wie RAMs, CAMs, irgendwelche 
Logic-Macros parallel zum Design entwickelt werden. D.h. da gibt es halt 
lange Zeit nix fertiges was man synthetisieren kann. Beim FPGA ist das 
easy, der Chip ist ja schon fertig, also kann man auch beim entwickeln 
auf alle Resourcen zugreifen. Aber wenn's ASIC oder sowas ist, dann 
sieht die Welt gleich ganz anders aus...
#2314622
Lesenswert?

@berndl

Danke fuer deine Erlaeuterungen:

In der Tat handelt es sich um (komplexe) ASICs, d.h. mit einem Versuch 
sind >100.000$ 'verbrannt'. 'Einfaches' Nachprogrammieren geht da nicht, 
und auf neue Hardware wartest du auch eine gewisse Zeit (mindestens 
einen Monat fuer Aenderungen im Metall, wenn es ins Silizium auch 
laenger...). Daraus folgt fuer mich: Wenn dir der Compiler beim Finden 
eines Fehlers hilfreich sein kann, nutze dieses. Und std_ulogic hat 
haertere Bedingungen als std_logic in der resolution function.
@manhunt

Ich halte den Coding style aufgrund meines (speziellen?) Backgrounds 
fuer sinnvoll, er koennte deiner Firma Geld sparen (nicht nur wegen den 
einmaligen Kosten, sondern auch wegen Time-to-Market).

@lkmiller
Es waren unerkannte Bus-Konflikte, und ein re-spin des Designs mit den 
oben genannten Folgen.

Da es kein FPGA design war, war mein post evtl. deplaziert, aber 
trotzdem bin ich der Meinung, wenn ein Fehler frueh erkannt wird, sind 
die Folgekosten am Geringsten.

PS: Selbst das Debugging der Buskonflikte hat den Fortschritt der 
gesamten Inbetriebnahme empfindlich gestoert.
Gast #2314809
Lesenswert?

Es gibt in Modelsim eine "Synthesis check"-Option, die bereits beim 
Kompilieren anzeigt, ob ein Signal einen Cross-Treiber hat.

>>Warning: Nonresolved signal 'test_sig' may have multiple sources.

Wenn diese Simulator-Option zur Verfügung steht (vcom -synthesis_check), 
dann benötigt man auch beim ASIC-Design kein "std_Ulogic" mehr.

VG, SuperWilly

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