Forum: FPGA, VHDL & Co. Nochmal Frage zu Typ-Umwandlung


von TheMason (Gast)


Lesenswert?

Hallo Leute,

ich hatte vor einiger Zeit schonmal nachgefragt wegen der möglichkeit
einen signed-vektor in einen std_logic_vector umzuwandeln, hatte bis
jetzt aber noch keinen erfolg bzw. noch keine Antwort erhalten. Langsam
weiß ich aber auch nicht mehr weiter.
Mein Problem ist an sich ganz einfach. Ich möchte einen signed-vektor
den ich für arithmetische Zwecke habe als std_logic-vektor (also
unsigned) ansprechen (speziell in der entity, und intern soll es dann
als signed dargestellt werden).

bsp :

entity dsp_alu
   port (clock : in std_logic;
         ...
         dataout1 : out std_logic_vector (31 downto 0);

         ...
         datain1  : in  std_logic_vector (31 downto 0);
        );
end entity;

...

architecture behave of dsp_alu is

  signed dsp_acc : signed (31 downto 0);

begin

  dataout1 <= dsp_acc; -- funzt net

  ...

  dsp_acc <= datain1; -- funzt auch net

end behave;


hat jemand eine idee wie man sowas löst ? kann ja eigentlich kein
problem sein oder seh ich das falsch ?

danke schonmal im voraus
gruß

rene

von FPGA-User (Gast)


Lesenswert?

probier mal :

data_out <= std_logic_vector(dsp_acc);

...

dsp_acc <= signed(data_in);

von TheMason (Gast)


Lesenswert?

hallo fpga-user,

ich hatte das schonmal verwendet, aber dann in zusammenhang damit das
ich teile des signed vektors in einen unsigned kopieren wollte. da ging
es darum das ich den 32-bit signed vektor 8-bit weise unsigned
angesprechen wollte (für ein späteres debug-interface, also schreibend
und lesend). da kam er aus dem meckern nicht mehr raus. von wegen
ungültige typ-konversion. kann es sein das man nur komplette vektoren
konvertieren kann ?

das ganze sah dann so aus :

entity ...
   port (...
         dsp_data8b : out std_logic_vector (7 downto 0);
        );
end entity;

...
  signal dsp_reg1 : signed (31 downto 0);

...

  process...
  ...
    case regnum_8bit is
      when "0000" => dsp_data8b <= std_logic_vector (dsp_reg1) (31
downto 24);
      when "0001" => dsp_data8b <= std_logic_vector (dsp_reg1) (23
downto 16);
      when "0010" => dsp_data8b <= std_logic_vector (dsp_reg1) (15
downto  8);
      when "0011" => dsp_data8b <= std_logic_vector (dsp_reg1) ( 7
downto  0);
   ...

oder ist das ein syntaktischer fehler, von wegen das std_logic_vector
(x) ( y downto z) nicht funktioniert ?

vielen dank schonmal
rene

von FPGA-User (Gast)


Lesenswert?

hast die Klammern falsch gesetzt, so sollte es gehen:


sig2 <= std_logic_vector(sig1(7 downto 0));

von TheMason (Gast)


Lesenswert?

aaaarrrrgggghhhh...

bitte anstellen zum schlagen. *mann, bin ich doof.

danke fpga-user.
jetzt sollte meinen ersten dsp-entwicklungsversuchen nichts mehr im
wege stehen.

gruß
rene

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.