[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


--- 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"


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;


    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,


            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,


            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)
        -- 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


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