[Libre-soc-bugs] [Bug 484] Write VHDL to expose CR and XER from Microwatt so single-stepping is possible
bugzilla-daemon at libre-soc.org
bugzilla-daemon at libre-soc.org
Wed Sep 2 11:29:15 BST 2020
https://bugs.libre-soc.org/show_bug.cgi?id=484
--- Comment #1 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
there are a number of parts to this: 1) add CR (first) and (2) add XER second.
CR is a priority.
this patch - which is on libresoc dmi.py - adds CR as an "address" (0b1000)
and adds a "CR data fetching interface"
https://git.libre-soc.org/?p=soc.git;a=commitdiff;h=e5ee8ce9589d73ef01ac0a0f25452978a586b607
given the similarity to microwatt core_debug.vhdl adding the same to
that should be pretty obvious, starting with:
-- CR register read port
dbg_cr_req : out std_ulogic;
dbg_cr_ack : in std_ulogic;
dbg_cr_data : in std_ulogic_vector(32 downto 0);
next will be to add the same signals to core.vhdl
-- Debug actions
signal dbg_core_stop: std_ulogic;
signal dbg_core_rst: std_ulogic;
signal dbg_icache_rst: std_ulogic;
<here>
signal dbg_gpr_req : std_ulogic;
signal dbg_gpr_ack : std_ulogic;
signal dbg_gpr_addr : gspr_index_t;
signal dbg_gpr_data : std_ulogic_vector(63 downto 0);
and connect them up in the debug_0 port
debug_0: entity work.core_debug
generic map (
LOG_LENGTH => LOG_LENGTH
)
port map (
clk => clk,
rst => rst_dbg,
dmi_addr => dmi_addr,
dmi_din => dmi_din,
....
....
<here>
dbg_gpr_req => dbg_gpr_req,
dbg_gpr_ack => dbg_gpr_ack,
dbg_gpr_addr => dbg_gpr_addr,
dbg_gpr_data => dbg_gpr_data,
and add them to the cr_0 file port map
cr_file_0: entity work.cr_file
generic map (
SIM => SIM,
LOG_LENGTH => LOG_LENGTH
)
port map (
clk => clk,
d_in => decode2_to_cr_file,
d_out => cr_file_to_decode2,
w_in => writeback_to_cr_file,
<here>
sim_dump => sim_cr_dump,
log_out => log_data(184 downto 172)
);
then, in cr_file.vhdl the same signals need adding as have been added
everywhere else (dbg_cr_*) followed finally by a section similar to this
that puts crs_updated into dbg_cr_data
-- asynchronous reads
cr_read_0: process(all)
begin
-- just return the entire CR to make mfcrf easier for now
if d_in.read = '1' then <- dbg_cr_req here
report "Reading CR " & to_hstring(crs_updated);
end if;
d_out.read_cr_data <= crs_updated; <- dbg_cr_data here
<set dbg_cr_ack here>
end process;
as a *second* step, getting XER can be added, which can be done by adding
another DMI register at address 0b1001
https://git.libre-soc.org/?p=soc.git;a=commitdiff;h=8d3ee4eac8868f4116a13b900228918dce7c51d9
let's do the first step first though
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the libre-soc-bugs
mailing list