Forum: FPGA, VHDL & Co. hexadezimalzahl drehung


von reno k. (Firma: student) (rayes)


Lesenswert?

hallo zusammen bin ein FPGA anfänger und will einfach eine 
hexadezimalzahl drehen zb 0xADFE zu 0xFEAD ich benutze ein Zynq7000
ich habe an dem User_logic.vhd datei rum gespielt aber es funktioniert 
immer nicht
wäre dankbar für jede hilfe
mein Code :


  -- implement slave model software accessible register(s)
  SLAVE_REG_WRITE_PROC : process( Bus2IP_Clk ) is
  begin

    if Bus2IP_Clk'event and Bus2IP_Clk = '1' then
      if Bus2IP_Resetn = '0' then
        slv_reg0 <= (others => '0');
      else
        case slv_reg_write_sel is
          when "1" =>
            for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
              if ( Bus2IP_BE(byte_index) = '1' ) then
                slv_reg0((3-byte_index)*8+7 downto (3-byte_index*8) <= 
Bus2IP_Data(byte_index*8+7 downto byte_index*8);
              end if;
            end loop;
          when others => null;
        end case;
      end if;
    end if;

  end process SLAVE_REG_WRITE_PROC;

  -- implement slave model software accessible register(s) read mux
  SLAVE_REG_READ_PROC : process( slv_reg_read_sel, slv_reg0 ) is
  begin

    case slv_reg_read_sel is
      when "1" => slv_ip2bus_data <= slv_reg0;
      when others => slv_ip2bus_data <= (others => '0');
    end case;

  end process SLAVE_REG_READ_PROC;

  ------------------------------------------
  -- Example code to drive IP to Bus signals
  ------------------------------------------
  IP2Bus_Data  <= slv_ip2bus_data when slv_read_ack = '1' else
                  (others => '0');

  IP2Bus_WrAck <= slv_write_ack;
  IP2Bus_RdAck <= slv_read_ack;
  IP2Bus_Error <= '0';

end IMP;

von Schlumpf (Gast)


Lesenswert?

reno kortes schrieb:
> will einfach eine
> hexadezimalzahl drehen zb 0xADFE zu 0xFEAD

Und warum deswegen so einen Aufwand?
Mappe doch einfach die Bits um..

ergebnis(15 downto 0) <= original(7 downto 0) & original(15 downto 8);

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


Lesenswert?

Mal abgesehen davon, dass die Lösung schon gepostet wurde, hättest du 
schon ein wenig mehr sagen können:

reno kortes schrieb:
> ich habe an dem User_logic.vhd datei rum gespielt aber es funktioniert
> immer nicht
WAS funktioniert da immer noch nicht?

von reno k. (Firma: student) (rayes)


Lesenswert?

erstmal vielen dank für ihre rückmeldung
also der alte code war nur zum schreiben und lesen von einem 
Register,dann habe ich versucht den Code zu verstehen was er genau 
macht.
und ich habe nur die eine Zeile geändert:

der alte code:

 slv_reg0(byte_index*8+7 downto byte_index*8) <= 
Bus2IP_Data(byte_index*8+7 downto byte_index*8);

das liest eine Bitfolge zb:0x123456 und schreibt sie im register
und durch ein c-code kann ich dann die bitfolge wieder lesen also: 
123456

ich will aber die bitfolge im Register schreiben aber umgekehrt lesen 
also jedes Byte zb:0x123456
ausgabe :0x563412

ich dachte vielleicht wenn ich die Zeile so ändere dann macht mein code 
das.

slv_reg0((3-byte_index)*8+7 downto 
(3-byte_index*8)<=Bus2IP_Data(byte_index*8+7 downto byte_index*8);

aber an der ausgabe habe ich immer :0x123456

was soll ich noch ändern??

danke im Voraus

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


Lesenswert?

reno kortes schrieb:
> aber an der ausgabe habe ich immer :0x123456
Was sind die Defaultwerte von slv_reg0?
Ändert sich da überhaupt was in diesem Register?

Es ist übrigens ziemlich verwirrend und schlecht wartbar, wenn du 
stellenweise was generisch machst, an anderer Stelle aber eine fixe Zahl 
reinschreibst...
1
  for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop -- hier generisch mit variabler Schleifenlänge
2
     if ( Bus2IP_BE(byte_index) = '1' ) then
3
        slv_reg0((3-byte_index)*8+7 ...          -- und hier fester Wert: 3
Ich würde das erst mal mit einer festen Wortbreite ausprobieren und 
anschließend (wenn überhaupt nötig) den Schritt zum generischen Modul 
machen...

: Bearbeitet durch Moderator
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.