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


von Simon (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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?

von Gast (Gast)


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 !

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Läubi .. (laeubi) Benutzerseite


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 ;)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity VarMux is
6
    Port ( iv  : in   STD_LOGIC_VECTOR (15 downto 0);
7
           ov  : out  STD_LOGIC_VECTOR (15 downto 0);
8
           rng : in   STD_LOGIC_VECTOR (3 downto 0));
9
end VarMux;
10
11
architecture Behavioral of VarMux is
12
begin
13
-- Original, so gehts nicht:
14
   ov(15 downto rng) <= iv(rng downto 0);
15
16
-- So gehts:
17
   ov(15 downto (15-to_integer(unsigned(rng)))) <= iv(to_integer(unsigned(rng)) downto 0);
18
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?

von Matthias F. (flint)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity VarMux is
6
    Port ( iv  : in   STD_LOGIC_VECTOR (15 downto 0);
7
           ov  : out  STD_LOGIC_VECTOR (15 downto 0);
8
           rng : in   integer);
9
end VarMux;
10
11
architecture Behavioral of VarMux is
12
begin
13
   ov(15 downto 15-rng) <= iv(rng downto 0);
14
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).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.