|
|
@ -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;
|
|
|
|