wishbone_debug_master: Fix address auto-increment for memory writes

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
jtag-port
Paul Mackerras 5 years ago
parent 102b304db7
commit fe789190e4

@ -49,6 +49,7 @@ architecture behaviour of wishbone_debug_master is
type state_t is (IDLE, WB_CYCLE, DMI_WAIT); type state_t is (IDLE, WB_CYCLE, DMI_WAIT);
signal state : state_t; signal state : state_t;
signal do_inc : std_ulogic;


begin begin


@ -84,16 +85,16 @@ begin
reg_addr <= (others => '0'); reg_addr <= (others => '0');
reg_ctrl <= (others => '0'); reg_ctrl <= (others => '0');
else -- Standard register writes else -- Standard register writes
if dmi_req and dmi_wr then if do_inc = '1' then
-- Address register auto-increment
reg_addr <= std_ulogic_vector(unsigned(reg_addr) +
decode_autoinc(reg_ctrl(10 downto 9)));
elsif dmi_req and dmi_wr then
if dmi_addr = DBG_WB_ADDR then if dmi_addr = DBG_WB_ADDR then
reg_addr <= dmi_din; reg_addr <= dmi_din;
elsif dmi_addr = DBG_WB_CTRL then elsif dmi_addr = DBG_WB_CTRL then
reg_ctrl <= dmi_din(10 downto 0); reg_ctrl <= dmi_din(10 downto 0);
end if; end if;
elsif state = WB_CYCLE and (wb_in.ack and reg_ctrl(8))= '1' then
-- Address register auto-increment
reg_addr <= std_ulogic_vector(unsigned(reg_addr) +
decode_autoinc(reg_ctrl(10 downto 9)));
end if; end if;
end if; end if;
end if; end if;
@ -145,6 +146,7 @@ begin
if (rst) then if (rst) then
state <= IDLE; state <= IDLE;
wb_out.stb <= '0'; wb_out.stb <= '0';
do_inc <= '0';
else else
case state is case state is
when IDLE => when IDLE =>
@ -162,11 +164,13 @@ begin
-- --
wb_out.stb <= '0'; wb_out.stb <= '0';
state <= DMI_WAIT; state <= DMI_WAIT;
do_inc <= reg_ctrl(8);
end if; end if;
when DMI_WAIT => when DMI_WAIT =>
if dmi_req = '0' then if dmi_req = '0' then
state <= IDLE; state <= IDLE;
end if; end if;
do_inc <= '0';
end case; end case;
end if; end if;
end if; end if;

Loading…
Cancel
Save