SREAD_SPACE_GET_SIGN, SREAD_SPACE_PROC, SREAD_SPACE_PROC_SIGN, SREAD_OP1, SREAD_OP2,
SREAD_SIGN, SREAD_NEXTBYTE, SREAD_CALCNUMBER1, SREAD_CALCNUMBER2, SCALC_1,
SCALC_14, SCALC_15, SCALC_2, SWRITE_CHAR0, SWRITE_CHAR1, SWRITE_CHAR2,
- SWRITE_SIGN1, SWRITE_SIGN2, SDONE, SERROR1, SERROR2);
+ SWRITE_SIGN1, SWRITE_SIGN2, SDONE, SERROR1, SERROR2, SBLANK1, SBLANK2);
signal state_int, state_next : PARSER_STATE;
signal z_int, z_next, strich_int, strich_next, wtmp_int, wtmp_next : csigned;
signal punkt_int, punkt_next : csigned;
signal calc_done : std_logic;
signal calc_error : std_logic;
begin
- instalu : entity work.alu(beh)
- port map
- (
+ instalu : alu
+ port map (
sys_clk => sys_clk,
sys_res_n => sys_res_n,
do_calc => do_calc,
wtmp_next <= op3;
if p_wdone = '1' then
+ errc_next <= errc_int - 1;
-- ueberpruefung auf -2147483648 fuer testfall 39 und 40
-- x"80000000": xst (xilinx) workaround
if strich_int < 10 and strich_int /= x"80000000" then
if z_sign_int = '1' then
state_next <= SWRITE_SIGN1;
else
- state_next <= SDONE;
+ state_next <= SBLANK1;
end if;
else
state_next <= SWRITE_CHAR2;
end if;
if p_wdone = '1' then
+ errc_next <= errc_int - 1;
state_next <= SDONE;
end if;
+ when SBLANK1 =>
+ p_wtake_next <= '1';
+ p_write_next <= x"20";
+ errc_tmp_next <= errc_int - 1;
+ if p_wdone = '1' then
+ if errc_int <= 2 then
+ state_next <= SDONE;
+ else
+ state_next <= SBLANK2;
+ end if;
+ end if;
+ when SBLANK2 =>
+ errc_next <= errc_tmp_int;
+ if p_wdone = '0' then
+ state_next <= SBLANK1;
+ end if;
+
when SERROR1 =>
p_wtake_next <= '1';
p_write_next <= hbyte(to_unsigned (character'pos(error_str(err_int)(errc_int)),8));