mikrocontroller.net

Forum: FPGA, VHDL & Co. Konvertieren UNSIGNED zu STD_LOGIC


Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an die Fachleute :-)

Könnt ihr mir mal fix verraten, wie ich aus einem (UNSIGNED (2 downto 
0)) das Bit 2 als Std_Logic konvertieren kann ? Ich brauch das für ne 
Logikverknüpfung in einem CPLD.
 signal  Test : out Std_logic ; 
 signal  QD19 : UNSIGNED (2 downto 0);  ist definiert und ich möchte
nun dem Ausgang Test nen Wert zuweisen, nach dem Schema..

Test <= '1' when Wert='1' and QD19(2) = '1' ;  --> das ist aber falsch weil ich ja konvertieren muss

Test <= '1' when Wert='1' and STD_LOGIC(QD19(2)) = '1' --> hätte ich als richtig angesehen, geht aber nicht !!

Test <= '1' when Wert='1' and STD_LOGIC_VECTOR(QD19(2)) = '1' -->bringt verständlicherweise nen Fehler 

Was mach ich denn falsch ?

Gruß Ralph

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Test <= '1' when Wert='1' and QD19(2) = '1' ;  --> das ist aber falsch weil ich ja konvertieren muss
Warum soll das falsch sein?
Unsigned ist (zumindest im package numeric_std) als array von std_logic 
definiert.
QD19(2) ist also ein std_logic.

Übrigens :
Bist Du sicher dass Du nicht
Test <= '1' when Wert='1' and QD19(2) = '1' else '0';

möchtest? Sonst gibts ein Latch das nie mehr zurückgesetzt wird.

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort Klaus !

aaaaaaber... QD19(2)  liefert mir immer in '0' zurück, obgleich es 
Bestandteil eines Zähler ist, der permanent bis 6 zählt und auch nicht 
steht !

Test <= '1' when Wert='1' and QD19(2) = '1' else '0'; liefert immer '0'


Ich möchte gern die Zählerstände 0..3 so auswerten, weil das eben 
QD(2)='0' ist!

Das fehlende "else" war nur hier vergessen ;-)

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal noch ein Hinweis.. Ich nutze diese Bibliotheken hier..

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL ;

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> der permanent bis 6 zählt und auch nicht steht !

Sicher? Dann teste halt mal QD19(2) direkt auszugeben, oder Wert 
auszugeben.
Soviele Möglichkeiten gibts nicht, weil VHDL-mäßig stimmts.

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh shitt... wenn es stimmt und doch nicht geht :-(

Also das hier geht !!
Test  <= '1' when QD19 = 0 else '0' ; --> Zählerstand 0

Das hier geht nicht !! und liefert immer '0' in Test !!

Test <= QD19(2) ;

auch das liefert '0'

Test <= STD_LOGIC(QD19(2)) ;

Mist was mach ich da nur ??

Das hier geht auch... ist aber wohl Ressorcenverschwendend ?

Test  <= '1' when CPU_Zugriff='1' and QD19 < 4 else '0'

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sag mal, hast Du eine Testbench dazu?

DUke

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein Duke.. das wäre zu aufwendig, weil das Project ansich sehr 
umfangreich ist und im Kern ja geht, nur dieses kleine Detail stört.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha. Und statt dessen murkst Du rum. Ich habe eine Testbench (bzw. 
mehrere), weil meine Projekte umfanreich sind...

Duke

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du magst Recht haben Duke... nur frag ich mich was ich murkse, nur weil 
ich keine Testbench hab, bzw. einrichte. Bis vorhin bin ich davon 
ausgegangen, dass ICH irgendwo nen Denkfehler drin hab.

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr werdet es nicht glauben !! Es war KEIN VHDL Problem! sondern ein 
banales Hardwareproblem.. ne Zinnbrück hat für nen Schluß gesorgt und 
zufälligerweise genau das Testsignal immer verhunzt :)

Danke Euch allen Dir versucht haben, mir zu helfen !! Gruß Ralph

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Es war KEIN VHDL Problem!
Genau das hättest Du mit einer Testbench gesehen...

Duke

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na Duke.. das erklär mir mal, wie ich das hätte sehen sollen !
Ich hab in meinem Projekten für solche Testzwecke Testpins und wenn nun
genau das außen!! nen Schluß hat, dann erkenn ich in der Testbench nur 
das es hätte gehen müssen ! und das wusste ich an sich schon im Beitrag 
001 nach Klaus seiner Antwort. Ich bin sogar überzeugt, das mich die 
Testbenchn noch verrückter gemacht hätte ;-)

Aber dennoch Danke für Deine Hilfe, ich weiß das schon zu schätzen !

Liebe Grüße von Ralph

PS: Das Projekt hat übrigens 39 InputPins und 36 Output Pins... Da macht 
ne Testbench ne Menge Arbeit :)

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Na Duke.. das erklär mir mal, wie ich das hätte sehen sollen !
Wenn man sieht das die Simulation tut, kann man den Fehler in der 
Synthese oder in der Hardware suchen. Du hast im ersten Beitrag mit 
verschiedenen Beschreibungsvarianten rumprobiert, obwohl Dir die 
Simulation/Testbench sofort gesagt hätte, ob das klappt oder nicht :-(

> Ich hab in meinem Projekten für solche Testzwecke Testpins
Ja und ich habe in meinen Projekten eine Testbench und einen Simulator.
Und solange wie das Design nicht im Simulator läuft, brauche ich es gar 
nicht in den FPGA zu packen...

> PS: Das Projekt hat übrigens 39 InputPins und 36 Output Pins... Da macht
> ne Testbench ne Menge Arbeit :)
WTF?
Im einem meiner aktuellen Projekte nutze ich ca. 200 Pins. Das im 
übrigen noch nicht wirklich viel. Es gibt FPGAs mit > 1000 Pins. Und 
auch dafür würde ich einmal eine Testbench machen. Danach hab ich nicht 
mehr viel Arbeit damit, sondern eher viel Freude...

Duke

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm--über 1000 Pins ?? Wow.. da brauchste ja ewig um alle Signale in der 
Testbench richtig zu definieren und das Ding zum laufen zu bekommen !
Respekt.. aber ich geb auch zu, kein besonders gutes Verhältnis zur 
Testbench zu haben, denn ich hab bisher lieber schnell mal den COde 
geändert.

Ich seh aber schon ein das es bei solch großen Projekten absolut 
unerlässlich ist, den Code erstmal zu testen. Das ist meine kleine 
Grafikkarte einfach ein Baby dagegen.. was übrigens auf Anhieb lief !
Der Fehler trat erst beim Löten bei einer Erweiterung auf !

LG Ralph

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> da brauchste ja ewig um alle Signale in der
> Testbench richtig zu definieren und das Ding zum laufen zu bekommen !

Mit einem guten Editor, der vertikale Blöcke verarbeiten kann, geht es 
eingentlich ziemlich schnell:

Die Entity in die Testbench kopieren:
entity top is
    port (
        -- ==== Pushbuttons (BTN) ====
        BTN_EAST        : in    std_logic;
        BTN_NORTH       : in    std_logic;
        BTN_SOUTH       : in    std_logic;
        BTN_WEST        : in    std_logic;
        -- ...
Das ganze etwas umformatieren (ich lass in den Instanzierungen immer die 
Definition als Kommentar mit dran):
    top_i0: top
        port map (
            BTN_EAST        => tb_BTN_EAST        , -- : in std_logic;
            BTN_NORTH       => tb_BTN_NORTH       , -- : in std_logic;
            BTN_SOUTH       => tb_BTN_SOUTH       , -- : in std_logic;
            BTN_WEST        => tb_BTN_WEST        , -- : in std_logic;
            -- ...
Und fix die Signale definieren:
    -- ==== Pushbuttons (BTN) ====
    signal   tb_BTN_EAST       : std_logic;
    signal   tb_BTN_NORTH      : std_logic;
    signal   tb_BTN_SOUTH      : std_logic;
    signal   tb_BTN_WEST       : std_logic;
Dann muß man sich noch sinnvolle Stimuli überlegen...
    tb_BTN_EAST   <= '0';
    tb_BTN_NORTH  <= '0';
    tb_BTN_SOUTH  <= '0';
    tb_BTN_WEST   <= '0', '1' after 600 us, '0' after 650 us;

Alles in allem nicht wirklich viel Arbeit. (Außer vielleicht Du 
verwendest den ISE-Editor...)

Duke

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na das hört sich so leicht bei Dir an hihi.. ich bin ja blutiger Leie 
und hab mir schon Stunden mit der Testbench um die Ohren gehauen, nur um 
dann festzustellen alles geht, nur die Testbench war nicht richtig 
gemacht grins..
Allerdings seh ich das auch als immer gutes Lernen an ! Nur so kann ich 
weiterkommen und mach das auch, aber nicht immer ist Zeit und Lust dazu 
:-)

Machst Du das beruflich hier ?  Ich verkauf ja eher Wertpapiere und muss 
da meine ganze Aufmerksamkeit haben ;) Übrigens gibt da auch sowas wie 
ne Testbench :D

Gruß Ralph

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

Bewertung
0 lesenswert
nicht lesenswert
Duke Scarring schrieb:
> Mit einem guten Editor, der vertikale Blöcke verarbeiten kann, geht es
> eingentlich ziemlich schnell:
Mit der ISE geht es noch schneller:
New Source --> VHDL Testbench -->
Associate Source --> Top-Level-Modul auswählen
und fertig ist der Rahmen...

Dann geht es weiter bei:
> Dann muß man sich noch sinnvolle Stimuli überlegen...

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Testbenches sind was für Weicheier, VHDL ist eh überbewertet und viel zu 
abstrakt.

Der wahre Könner programmiert seine Xilinx Bausteine in XDL (Xilinx 
Description Language)!

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.