mikrocontroller.net

Forum: FPGA, VHDL & Co. Realisierung mit Shift-Funktion


Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen -

habe folgenden Ausdruck:

pix2(15 downto (15-DPIXrange)) := pix1(DPIXrange downto 0);

DPIXrange ist ein input.
Synopsys will das nicht synthetisieren.
Ich würde da gerne die shift Funktion verwenden. Habe die aber noch nie 
verwendet - wie sieht das denn dann mit der shift Funktion aus?

Würde mich über Hilfe freuen,

Simon

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

Bewertung
0 lesenswert
nicht lesenswert
> pix2(15 downto (15-DPIXrange)) := pix1(DPIXrange downto 0);
Das geht ja wohl nur, wenn DPIXrange genau 7 ist. Sonst passt die 
Verktorbreite nicht.

> wie sieht das denn dann mit der shift Funktion aus?
Ja, was denn überhaupt?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> pix2(15 downto (15-DPIXrange)) := pix1(DPIXrange downto 0);
Das geht ja wohl nur, wenn DPIXrange genau 7 ist. Sonst passt die
Verktorbreite nicht.

Nö -das kanns nicht sein:
(15 downto (15-DPIXrange)) =
(15+DPIXrange downto 15) =
(DPIXrange downto 0)

wie gewünscht

evtl. der ":"
-> is pix2 eine variable oder ein signal !

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

Bewertung
0 lesenswert
nicht lesenswert
> Nö -das kanns nicht sein: ...
Richtig, leichter Anfall von Dyskalkulie  :-/

>> Synopsys will das nicht synthetisieren.
> evtl. der ":"
Zitat: Nö -das kanns nicht sein: ...
Sonst würde nicht die Synthese meckern, sondern schon der 
Syntax-Check...

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon schrieb:
> DPIXrange ist ein input.
> Synopsys will das nicht synthetisieren.

Lothar Miller
> Sonst würde nicht die Synthese meckern, sondern schon der
Naja... 'Synopsys will das nicht synthetisieren' kann auch bedueten das 
er schon beim Syntax Check abbricht ;)

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

Bewertung
0 lesenswert
nicht lesenswert
> Ich würde da gerne die shift Funktion verwenden.
Aufpassen:
Das ist kein Shift, den du da beschreibst, sondern ein Monster-Mux.

> Naja... 'Synopsys will das nicht synthetisieren' kann auch bedueten das
> er schon beim Syntax Check abbricht ;)
Ok, wenn man seine Tools nicht kennt...
Wenn DPIXrange ein Input ist, dann ist es vermutlich auch ein 
std_logic_vector. Und die müssen für eine range-Angabe natürlich erst 
mal in einen integer gewandelt werden. So gehts:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity VarMux is
    Port ( iv  : in   STD_LOGIC_VECTOR (15 downto 0);
           ov  : out  STD_LOGIC_VECTOR (15 downto 0);
           rng : in   STD_LOGIC_VECTOR (3 downto 0));
end VarMux;

architecture Behavioral of VarMux is
begin
-- Original, so gehts nicht:
   ov(15 downto rng) <= iv(rng downto 0);

-- So gehts:
   ov(15 downto (15-to_integer(unsigned(rng)))) <= iv(to_integer(unsigned(rng)) downto 0);
end Behavioral;


>   :=
Diese Variablenrechnerei gibt mir zu Denken....... :-/

> pix2(15 downto (15-DPIXrange)) := ...
Durch die unvollständige Beschreibung des Ausgangsvektors handelst du 
dir 16 Latches ein. Ist dir das bewusst? Willst du das?

Autor: Matthias F. (flint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, es gibt auch Leute die integers in ihren Port-Listen übergeben ... 
und wenn das Ding nicht constrained ist ...

Aber das ist alles Kaffeesudleserei, der OP sollte mehr verraten, wie 
das genau bei ihm aussieht.

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

Bewertung
0 lesenswert
nicht lesenswert
> Naja, es gibt auch Leute die integers in ihren Port-Listen übergeben ...
Naja, dann  hätte es ja auch gleich geklappt...
Sogar mit einem unconstrained Integer.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity VarMux is
    Port ( iv  : in   STD_LOGIC_VECTOR (15 downto 0);
           ov  : out  STD_LOGIC_VECTOR (15 downto 0);
           rng : in   integer);
end VarMux;

architecture Behavioral of VarMux is
begin
   ov(15 downto 15-rng) <= iv(rng downto 0);
end Behavioral;
Zwar mit verheerendem Ressourcenverbrauch (wegen des nicht
eingeschränkten Integers), aber immerhin.

Auch interessant:
dieses kombinatorische Design verwendet bei Xilinx S3 immerhin drei 
Taktnetze (wegen der 15 Latches).

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.