mikrocontroller.net

Forum: FPGA, VHDL & Co. Vhdl Konkatenation


Autor: Pat Rik (patrik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, ich stehe vor scheinbar einfachem Problem, komme aber nicht 
weiter.
Ich habe folgendes:

signal a, b, c : std_logic_vector(3 downto 0);

und möchte c:= 2*a + b berechnen. Die Multiplikation möchte ich durch 
einfache Linksverschiebung berechnen(ich kann sicherstellen dass a<=7 
ist). Ich habe folgendes versucht:

c <= (a & B"0") + b;

Das was er berechnet ist c:= (2*a + b)/2. Aus der Addition kommen 5 Bit 
raus und er nimmt die 4 oberen und weisst sie c zu. Wenn ich c als (4 
downto 0) deklariere und c <= ((a & B"0") + (B"0" & b) zuweise, dann 
rechnet er korrekt.
Weisst jemand wie ich das Problem lösen kann ohne c als 5Bit deklarieren 
zu müssen?
danke
patrik

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht nicht, bei der Multiplikation von 2 4-Bit-Werten kommt ein Wert mit 
5 Bit raus, der muss händisch bearbeitet werden.
Eine Möglichkeit ist der Zwischenschritt über eine Variable:
   process (a,b) 
   variable zw : std_logic_vector(4 downto 0);
   begin
      zw := a & '0';
      c <= zw(3 downto 0) + b;
   end process;


Wenn das gilt:
>ich kann sicherstellen dass a<=7 ist
dann machs doch so:
c <= a(2 downto 0)&'0' + b;
Richtig wäre dann aber, schon die Deklaration von a so auszulegen, dass 
a zum Wertebereich passt.



So gehts auch:
c <= a+a+b;

Das Synthese-Ergebnis:
:
Synthesizing Unit <muladd>.
WARNING:Xst:647 - Input <a<3>> is never used.
    Found 4-bit adder for signal <c>.
    Summary:
  inferred   1 Adder/Subtractor(s).
Unit <muladd> synthesized.
:
Also: der Synthesizer hat erkannt, dass a(3) nicht verwendet wird.

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.