Hi, ich benütze in meinem VHDL-Code zwei Zahlen, die ich addieren möchte. die beiden Zahlen sind binär und jeweils 16-Bit breit. Zahl1 : in std_logic_vector(15 downto 0); Zahl2 : in std_logic_vector(15 downto 0); ... GesamtZahl <= Zahl1 + Zahl2; ... Prozess für Datenausgabe ... Die resultierende GesamtZahl dient später dazu einen Prozess zu steuern. Im Prozess wird ein Zähler gestartet, der zu einem CLK2-Event inkrementiert wird, bis es die GesamtAnzahl-Zahl erreicht. Vor jedem Inkrementieren wird eine Datenausgabe über RS232 vorgenommen. Ich müsste also immer so viele Daten über RS232 rausbekommen, wie die Anzahl der Gesamtzahl selbst. Nun bekomme ich aber jeweils verschiedene Ergebnisse für Gesamtzahl raus Bei z.B Zahl1=50 und Zahl2=100 (dezimal) erhalte ich 151 Werte =OK Bei Zahl1=10 und Zahl2=50 erhalte ich 61 Werte = auch OK ABER: Wenn ich Beispielsweise nun Zahl1=200 und Zahl2=300 einstelle erhalte ich einen Wert, der viel kleiner als 500 ist! Normalerweise erwarte ich hier 501 Werte. Also, bei gewissen Zahlen scheint irgend etwas Probleme zu machen Woran könnte dies den liegen? Unten ist der Prozess für die Ausgabensteuerung (Steuerung eines SRAM) AUSGABE:process (reset,clk) begin if reset='1' then ram_addr_reg<=(others=>'0'); data_in_reg<=(others=>'0'); ram_data_reg<=(others=>'0'); end_write_addr<=(others=>'0'); after_tl_addr<=(others=>'0'); elsif clk'event and clk='1' then if read_write_stop='0' and read_en='1' then if addr_inc='1' then ram_addr_reg<=ram_addr_reg+1; end if; if reg_mem_read_en='1' then ram_data_reg<=ram_data; end if; end if; if count_res='1' then end_write_addr<=Zahl1+Zahl2; ram_addr_reg<=(others=>'0'); after_tl_addr<=(others=>'0'); elsif CLK2='1' then if trig_level_en='1' then if read_write_stop ='0' then data_in_reg<=data_in; ram_addr_reg<=ram_addr_reg+1; else after_tl_addr<=after_tl_addr+1; data_in_reg<=data_in; end if; elsif write_en='1' then if read_write_stop ='0' then data_in_reg<=data_in; ram_addr_reg<=ram_addr_reg+1; else ram_addr_reg<=(others=>'0'); end if; end if; end if; end if; end process AUSGABE;
@VHDL-Neuling >ich benütze in meinem VHDL-Code zwei Zahlen, die ich addieren möchte. >die beiden Zahlen sind binär und jeweils 16-Bit breit. >Zahl1 : in std_logic_vector(15 downto 0); >Zahl2 : in std_logic_vector(15 downto 0); ... >GesamtZahl <= Zahl1 + Zahl2; Ich hoffe, dass deine Gesamtzahl breit genug ist (min. 17 Bit), sonst fängst du dir nen schönen Überlauf ein. >Unten ist der Prozess für die Ausgabensteuerung (Steuerung eines SRAM) Was hat der VHDL-Quellcode mit dem Problem zu tun? MFG Falk
@Falk die Gesamtzahl ist immer kleiner als 17 Bit. Beide Zahlen zusammen addiert ergeben weniger als 16 Bit. In diesem VHDL-Code habe ich diese Addition verwendet. ... if count_res='1' then end_write_addr<=Zahl1+Zahl2; ... wobei Gesamtzahl = end_write_addr mit diesem Code wird ein Zähler gestartet, der den Schreib und Lese-Prozedur eines SRAM steuert. Es sollen immer nur end_write_addr<=Zahl1+Zahl2 -Anzahl Daten in das SRAM gespeichert und ausgelesen werden.
@ VHDL-Neuling >In diesem VHDL-Code habe ich diese Addition verwendet. Solche Schnipsel bringen nichts. Zeig mir deinen vollstädigen Quelltext und ich kann dir vielleicht sagen was du falsch machst. Deine bisherigen Ausschnitte waren vollkommennichtssagend. MFG Falk
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.