mikrocontroller.net

Forum: FPGA, VHDL & Co. std_logic zu std_logic_vector


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie kann ich ein Signal std_logic zu einem Signal std_logic_vector 
vervielfachen?
Ich benoetige mehrer Ausgaenge, die exakt das Gleiche tun.
Ich habe ein Design, was fuer einen Ausgang, das tut, was es soll, nun 
wollte ich das Design nicht verzigfachen, nur weil mehrere Ausgange 
benoetigt werden.

P.S.: Den entsprechenden VHDL Code kann ich morgen nachreichen, da 
gerade am Handy.

Autor: Sei nett zu jedem deppen, er koennte morgen dein C (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
s_exa_slv <= (others => s_exa_sl);

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sei nett zu jedem deppen, er koennte morgen dein C schrieb im Beitrag 
#5912783:
>
> s_exa_slv <= (others => s_exa_sl);
> 

Danke, hat funktioniert.
Ich hatte es vorher so probiert, hat in diesem Fall aber nicht geklappt.
s_exa_slv(15) <= s_exa_sl;
s_exa_slv(14) <= s_exa_sl;
--usw...

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark W. schrieb:
> Ich hatte es vorher so probiert, hat in diesem Fall aber nicht geklappt.
Müsste aber. Welche Fehlermeldung hast du da erhalten?

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Mark W. schrieb:
>> Ich hatte es vorher so probiert, hat in diesem Fall aber nicht geklappt.
> Müsste aber. Welche Fehlermeldung hast du da erhalten?

Fehlermeldung(bei Synthesis):
ERROR - c:/allmyfiles/latticediamondprojects/pulser03/pulser03.vhd(42): 
net PD_OUT_P[15] is constantly driven from multiple places at instance 
PD_OUT_P, on port q[15]. VDB-1000
Done: error code 2
Also VHDL checking geht durch, nur beim Synthetisieren gibt es obige 
Fehlermeldung.

Hier ist der Code:
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity PULSER_DRIVE is
     port(
         PD_CLK   : in std_logic;
     PD_MODE   : in std_logic;
         PD_OUT_P   : out std_logic_vector(15 downto 0);
     PD_OUT_N  : out std_logic_vector(15 downto 0)
         );
end PULSER_DRIVE;


architecture ARCH of PULSER_DRIVE is

signal IDATA_P : std_logic_vector(63 downto 0):= "0000000000000000000000000000000010111111111111111111111111111111";
signal IDATA_N : std_logic_vector(63 downto 0):= "0000000000000000000000000000000001111111111111111111111111111111";
signal TEST : std_logic;

begin

    SM_PISO : process (PD_CLK)
    
    begin
        if PD_CLK'event and PD_CLK = '1' then
      case PD_MODE is
        when '0' =>
          PD_OUT_P <= "1111111111111111";
          PD_OUT_N <= "1111111111111111";
        when '1' =>
          TEST <= IDATA_P(63);
            for PLOOP in 62 downto 0 loop
          IDATA_P(PLOOP+1) <= IDATA_P(PLOOP);
          end loop;
          PD_OUT_N <= (others => IDATA_N(63));
            for NLOOP in 62 downto 0 loop
          IDATA_N(NLOOP+1) <= IDATA_N(NLOOP);
          end loop;
        when others =>
          null;
      end case;
        end if;
    end process SM_PISO;
  
PD_OUT_P(15) <= TEST;
PD_OUT_P(14) <= TEST;

end ARCH;
Es gibt 2x16 Ausgaenge, wie es jetzt bei PD_OUT_N ist, geht es.
Es soll das Pattern ausgegeben werden immer wenn MODE 1 ist. Mit der 
Laenge des MODE Pulses bestimme ich wie viele Bits rausgehen.

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark W. schrieb:
> net PD_OUT_P[15] is constantly driven from multiple places at instance
> PD_OUT_P,
Da wird PD_OUT_P 0 bis 15 zugewiesen
PD_OUT_P <= "1111111111111111";
und da nochmal PD_OUT_P 14 und 15
PD_OUT_P(15) <= TEST;
PD_OUT_P(14) <= TEST;

Damit werden die beiden letzten zweimal zugewiesen. Das funktioniert in 
Hardware nicht.

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dussel schrieb:
> Mark W. schrieb:
>> net PD_OUT_P[15] is constantly driven from multiple places at instance
>> PD_OUT_P,
> Da wird PD_OUT_P 0 bis 15 zugewiesen
>
PD_OUT_P <= "1111111111111111";
> und da nochmal PD_OUT_P 14 und 15
>
PD_OUT_P(15) <= TEST;
> PD_OUT_P(14) <= TEST;
>
> Damit werden die beiden letzten zweimal zugewiesen. Das funktioniert in
> Hardware nicht.

Ja, habe mir schon gedacht, dass das was damit zu tun hat, dass ich es 
außerhalb des Prozesses gemacht habe. Allerdings sind die Zuweisungen ja 
nie gleichzeitig, denn MODE kann ja nur 1 oder 0 sein.
Naja, die Schreibweise innerhalb des Prozesses gefaelt mir auch besser, 
weil sie kuerzer ist.

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark W. schrieb:
> Allerdings sind die Zuweisungen ja nie gleichzeitig,
> denn MODE kann ja nur 1 oder 0 sein.
PD_OUT_P(15) <= TEST;
PD_OUT_P(14) <= TEST;
wird immer 'ausgeführt'.
Manchmal zusätzlich noch
PD_OUT_P <= "1111111111111111";
Das kann in normaler Hardware nicht gehen.
In der Simulation funktioniert es übrigens, weil std_logic aufgelöst 
wird. Dann kommt 'X' raus, wenn die beiden Zuweisungen unterschiedlich 
sind. Das gibt so schöne Muster X0X0X0X0X0 und man wundert sich erstmal, 
wenn man das zum ersten Mal sieht. ;-)

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll der Code eigentlich bringen? Selbst wenn du die Zuweisungen 
unten weglässt, wird PD_OUT_P nur einmal auf 1 gesetzt und bleibt dann 
für immer so.

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dussel schrieb:
> Was soll der Code eigentlich bringen? Selbst wenn du die Zuweisungen
> unten weglässt, wird PD_OUT_P nur einmal auf 1 gesetzt und bleibt dann
> für immer so.
Nein, wenn MODE 0 ist, dann sind die Ausgaenge auf 1 gesetzt. Wenn MODE 
1 ist, dann wird das Pattern IDATA_X entsprechend ausgegeben, 1 Bit pro 
Takt. Und zwar so lange, wie MODE 1 bleibt. Also um das ganze Patterns 
auszugeben muss MODE fuer 64 Taktzyklen 1 sein.

Edit: Ich habe dafuer eine Parallel zu Serial Schieberegister 
modifiziert.

: Bearbeitet durch User
Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt sehe ich es. Über TEST soll das zugewiesen werden. Aber wie schon 
gesagt, so geht das nicht, weil PD_OUT_P nicht gleichzeitig im Prozess 
und außerhalb etwas zugewiesen bekommen kann.
Du könntest ein Hilfssignal im Prozess erzeugen, dass du unten zuweist. 
Oder du weist direkt im Prozess an PD_OUT_P zu.

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dussel schrieb:
> Jetzt sehe ich es. Über TEST soll das zugewiesen werden. Aber wie schon
> gesagt, so geht das nicht, weil PD_OUT_P nicht gleichzeitig im Prozess
> und außerhalb etwas zugewiesen bekommen kann.
> Du könntest ein Hilfssignal im Prozess erzeugen, dass du unten zuweist.
> Oder du weist direkt im Prozess an PD_OUT_P zu.

Ja, TEST hatte ich jetzt nur nochmal eingebaut, um die Fehlermeldung zu 
produzieren. So wie es im obigen Code bei PD_OUT_N ist geht es und ich 
bin damit zufrieden.

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist ja alles geklärt. Erfahrungsgemäß ist das ein relativ häufiger 
Fehler Jetzt weißt du, was die Meldung bedeutet. ;-)

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.

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