Gast
#531725
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;