Vhdl Konkatenation

OP #925561
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
Gast #925637
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:
1
   process (a,b) 
2
   variable zw : std_logic_vector(4 downto 0);
3
   begin
4
      zw := a & '0';
5
      c <= zw(3 downto 0) + b;
6
   end process;


Wenn das gilt:
>ich kann sicherstellen dass a<=7 ist
dann machs doch so:
1
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:
1
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.