Line 115... |
Line 115... |
reset : std_ulogic;
|
reset : std_ulogic;
|
bus_err_ack : std_ulogic;
|
bus_err_ack : std_ulogic;
|
end record;
|
end record;
|
signal fetch_engine : fetch_engine_t;
|
signal fetch_engine : fetch_engine_t;
|
|
|
-- instrucion prefetch buffer (IPB) --
|
-- instrucion prefetch buffer (IPB, real FIFO) --
|
type ipb_data_fifo_t is array (0 to ipb_entries_c-1) of std_ulogic_vector(2+31 downto 0);
|
type ipb_data_fifo_t is array (0 to ipb_entries_c-1) of std_ulogic_vector(2+31 downto 0);
|
type ipb_t is record
|
type ipb_t is record
|
wdata : std_ulogic_vector(2+31 downto 0); -- write status (bus_error, align_error) + 32-bit instruction data
|
wdata : std_ulogic_vector(2+31 downto 0); -- write status (bus_error, align_error) + 32-bit instruction data
|
we : std_ulogic; -- trigger write
|
we : std_ulogic; -- trigger write
|
free : std_ulogic; -- free entry available?
|
free : std_ulogic; -- free entry available?
|
Line 153... |
Line 153... |
buf : std_ulogic_vector(2+15 downto 0);
|
buf : std_ulogic_vector(2+15 downto 0);
|
buf_nxt : std_ulogic_vector(2+15 downto 0);
|
buf_nxt : std_ulogic_vector(2+15 downto 0);
|
end record;
|
end record;
|
signal issue_engine : issue_engine_t;
|
signal issue_engine : issue_engine_t;
|
|
|
-- instruction buffer --
|
-- instruction buffer ("FIFO" with just one entry) --
|
type i_buf_t is record
|
type i_buf_t is record
|
wdata : std_ulogic_vector(35 downto 0); -- 4-bit status + 32-bit instruction
|
wdata : std_ulogic_vector(35 downto 0); -- 4-bit status + 32-bit instruction
|
rdata : std_ulogic_vector(35 downto 0); -- 4-bit status + 32-bit instruction
|
rdata : std_ulogic_vector(35 downto 0); -- 4-bit status + 32-bit instruction
|
status : std_ulogic;
|
status : std_ulogic;
|
clear : std_ulogic;
|
clear : std_ulogic;
|
Line 1835... |
Line 1835... |
|
|
-- machine information registers --
|
-- machine information registers --
|
when csr_mvendorid_c => -- R/-: mvendorid - vendor ID
|
when csr_mvendorid_c => -- R/-: mvendorid - vendor ID
|
csr.rdata <= (others => '0');
|
csr.rdata <= (others => '0');
|
when csr_marchid_c => -- R/-: marchid - architecture ID
|
when csr_marchid_c => -- R/-: marchid - architecture ID
|
csr.rdata <= (others => '0');
|
csr.rdata(4 downto 0) <= "10011"; -- official open-source arch ID
|
when csr_mimpid_c => -- R/-: mimpid - implementation ID / NEORV32 hardware version
|
when csr_mimpid_c => -- R/-: mimpid - implementation ID
|
csr.rdata <= hw_version_c;
|
csr.rdata <= hw_version_c; -- NEORV32 hardware version
|
when csr_mhartid_c => -- R/-: mhartid - hardware thread ID
|
when csr_mhartid_c => -- R/-: mhartid - hardware thread ID
|
csr.rdata <= HW_THREAD_ID;
|
csr.rdata <= HW_THREAD_ID;
|
|
|
-- custom machine read-only CSRs --
|
-- custom machine read-only CSRs --
|
when csr_mzext_c => -- R/-: mzext
|
when csr_mzext_c => -- R/-: mzext
|
csr.rdata(0) <= bool_to_ulogic_f(CPU_EXTENSION_RISCV_Zicsr); -- Zicsr CPU extension
|
csr.rdata(0) <= bool_to_ulogic_f(CPU_EXTENSION_RISCV_Zicsr); -- RISC-V.Zicsr CPU extension
|
csr.rdata(1) <= bool_to_ulogic_f(CPU_EXTENSION_RISCV_Zifencei); -- Zifencei CPU extension
|
csr.rdata(1) <= bool_to_ulogic_f(CPU_EXTENSION_RISCV_Zifencei); -- RISC-V.Zifencei CPU extension
|
|
|
-- undefined/unavailable --
|
-- undefined/unavailable --
|
when others =>
|
when others =>
|
csr.rdata <= (others => '0'); -- not implemented
|
csr.rdata <= (others => '0'); -- not implemented
|
|
|