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;
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);
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.