www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Frage zu Cast


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein VHDL Modul, an dem ich gern einen Vektor beliebiger Länge 
übergeben möchte.
Das klappt soweit ganz gut, nur habe ich leider ein Problem, eine 
Konstante der selben Länge zu definieren.

Kann mir jemand sagen, wie ich der Konstante c10ms den wert 0b0...01010 
zuweisen kann? ich habe schon verschiedene Casts probiert, jedoch leider 
ohne Erfolg...

Anbei ein kleiner Codeausschnitt, in dem das Problem aufgeführt ist.
entity myEntity is
port
( iSysRstR        : in  std_logic;            -- Reset, active high
  iSysClkC        : in  std_logic;            -- Clock 40MHz
  iReactDurS      : in  std_logic_vector;     -- Timeout Duration
  [...]
);
end myEntity;

architecture myArchitecture of myEntity is
  constant c10ms      : std_logic_vector(iReactDurS'high downto 0) := 10;
  signal sDurCntI     : std_logic_vector(iReactDurS'high downto 0);
  
begin
[...]

Viele Grüße
Martin

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   constant c10ms      : std_logic_vector(iReactDurS'high downto 0) := 10;
10 ist eine Integer Zahl, ein 2-Bit-Vektor wäre z.B. "10"

> wie ich der Konstante c10ms den wert 0b0...01010 zuweisen kann?
In diese Richtung etwa:
   constant c10ms      : std_logic_vector(iReactDurS'high downto 0) := (3 downto 0 => "1010", others => '0');

Du wirst übrigens ein Problem haben bzw. bekommen können, denn 
uneingeschränkte Vektoren haben die Zählrichtung (0 to x). Du kannst 
also durchaus Probleme bei der Zuweisung und der Interpretation der 
Bitreihenfolge bekommen...
Übergib besser gleich z.B. anhand eines Generic definierte Vektoren.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für Deine Antwort. Leider funktioniert Dein vorgeschlagenes 
Vorgehen nicht ganz:
if (sDurCntI >= c10ms ) then 
führt zu den folgenden Fehlermeldungen:
@E: CD393 :"W:\design\file.vhd":39:86:39:91|String doesn't match type 
std_logic
@E: CD393 :"W:\design\file.vhd":39:86:39:91|String doesn't match type 
std_logic "1010"
@E: CD308 :"W:\design\file.vhd":39:86:39:91|Unable to evaluate 
expression type
@E: CD351 :"W:\design\file.vhd":39:86:39:91|Can't implement expression 
type string yet

Hast Du noch eine Idee, wie ich dem beikommen kann?

Bezüglich der Reihenfolge des Vektors sehe ich in diesem Fall kein 
Problem, da wir diesbezüglich einen Coding Style haben, der auch 
eingehalten wird.

Viele Grüße,
  Martin

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So klappt das bei mir:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity UV is
    Port ( vector  : in   STD_LOGIC_VECTOR;
           equal   : out  STD_LOGIC;
           less    : out  STD_LOGIC;
           greater : out  STD_LOGIC);
end UV;

architecture Behavioral of UV is
constant const     : unsigned := to_unsigned(10,vecin'length);
signal   var       : unsigned(vector'high downto 0);
begin
   var     <= unsigned(vector);
   equal   <= '1' when var = const else '0';
   less    <= '1' when var < const else '0';
   greater <= '1' when var > const else '0';
end Behavioral;

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, ich werd es nachher mal ausprobieren.

Viele Grüße,
Martin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.