mirror of
https://github.com/xarc/harv.git
synced 2025-04-18 19:24:51 -04:00
Changes in signals names
This commit is contained in:
parent
24c0e08825
commit
2d54e7cbc2
4 changed files with 307 additions and 308 deletions
|
@ -9,12 +9,12 @@ entity control is
|
|||
port (
|
||||
-- input ports
|
||||
-- processor status
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_outofrange_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_err_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
|
||||
-- instruction decode
|
||||
opcode_i : in std_logic_vector(6 downto 0);
|
||||
|
@ -29,8 +29,8 @@ entity control is
|
|||
|
||||
-- output ports
|
||||
-- processor status
|
||||
imem_req_o : out std_logic;
|
||||
dmem_req_o : out std_logic;
|
||||
imem_req_o : out std_logic;
|
||||
dmem_req_o : out std_logic;
|
||||
|
||||
update_pc_o : out std_logic;
|
||||
trap_o : out std_logic;
|
||||
|
@ -42,7 +42,7 @@ entity control is
|
|||
imm_shamt_o : out std_logic;
|
||||
imm_up_o : out std_logic;
|
||||
-- register bank
|
||||
regwr_o : out std_logic;
|
||||
regwr_o : out std_logic;
|
||||
-- control transfer
|
||||
inv_branch_o : out std_logic;
|
||||
branch_o : out std_logic;
|
||||
|
@ -50,9 +50,9 @@ entity control is
|
|||
jalr_o : out std_logic;
|
||||
ecall_o : out std_logic;
|
||||
-- mem access
|
||||
memrd_o : out std_logic;
|
||||
memwr_o : out std_logic;
|
||||
byte_en_o : out std_logic_vector(1 downto 0);
|
||||
mem_rd_o : out std_logic;
|
||||
mem_wr_o : out std_logic;
|
||||
mem_ben_o : out std_logic_vector(1 downto 0);
|
||||
mem_usgn_o : out std_logic; -- unsigned data
|
||||
-- U type
|
||||
load_upimm_o : out std_logic;
|
||||
|
@ -102,9 +102,9 @@ architecture arch of control is
|
|||
constant SYS_CSRRCI : std_logic_vector(2 downto 0) := "111";
|
||||
|
||||
-- auxiliar signals
|
||||
signal memwr_w : std_logic;
|
||||
signal memrd_w : std_logic;
|
||||
signal memreq_w : std_logic;
|
||||
signal mem_wr_w : std_logic;
|
||||
signal mem_rd_w : std_logic;
|
||||
signal mem_req_w : std_logic;
|
||||
|
||||
-- opcodes
|
||||
|
||||
|
@ -121,7 +121,7 @@ begin
|
|||
imem_req_o <= '1' when proc_status_r = STAT_REQ_INSTR else '0';
|
||||
|
||||
-- STAT_DMEM_STALL
|
||||
memreq_w <= memrd_w or memwr_w;
|
||||
mem_req_w <= mem_rd_w or mem_wr_w;
|
||||
dmem_req_o <= '1' when proc_status_r = STAT_DMEM_STALL else '0';
|
||||
|
||||
-- STAT_UPDATE_PC
|
||||
|
@ -140,7 +140,7 @@ begin
|
|||
end if;
|
||||
end process;
|
||||
|
||||
PROC_NEXT_STATUS : process(proc_status_r, start_i, imem_gnt_i, imem_err_i, dmem_outofrange_i, memreq_w, dmem_gnt_i)
|
||||
PROC_NEXT_STATUS : process(proc_status_r, start_i, imem_gnt_i, imem_err_i, dmem_err_i, mem_req_w, dmem_gnt_i)
|
||||
begin
|
||||
case proc_status_r is
|
||||
|
||||
|
@ -163,14 +163,14 @@ begin
|
|||
end if;
|
||||
|
||||
when STAT_RUN =>
|
||||
if memreq_w = '1' then
|
||||
if mem_req_w = '1' then
|
||||
next_proc_status_w <= STAT_DMEM_STALL;
|
||||
else
|
||||
next_proc_status_w <= STAT_UPDATE_PC;
|
||||
end if;
|
||||
|
||||
when STAT_DMEM_STALL =>
|
||||
if dmem_outofrange_i = '1' then -- or dmem_sbu_i = '1' or dmem_dbu_i = '1' then
|
||||
if dmem_err_i = '1' then -- or dmem_sbu_i = '1' or dmem_dbu_i = '1' then
|
||||
next_proc_status_w <= STAT_TRAP;
|
||||
elsif dmem_gnt_i = '1' then
|
||||
next_proc_status_w <= STAT_UPDATE_PC;
|
||||
|
@ -262,11 +262,11 @@ begin
|
|||
ecall_o <= '0'; -- '1' when instr_format_w = I_system else
|
||||
|
||||
------------------------------ MEM ACCESS ---------------------------------
|
||||
memrd_w <= '1' when instr_format_w = I_load else '0';
|
||||
memrd_o <= memrd_w;
|
||||
memwr_w <= '1' when instr_format_w = S else '0';
|
||||
memwr_o <= memwr_w;
|
||||
byte_en_o <= funct3_i(1 downto 0) when funct3_i(1) = '0' else "11"; -- byte or halfword -- else word
|
||||
mem_rd_w <= '1' when instr_format_w = I_load else '0';
|
||||
mem_rd_o <= mem_rd_w;
|
||||
mem_wr_w <= '1' when instr_format_w = S else '0';
|
||||
mem_wr_o <= mem_wr_w;
|
||||
mem_ben_o <= funct3_i(1 downto 0) when funct3_i(1) = '0' else "11"; -- byte or halfword -- else word
|
||||
mem_usgn_o <= funct3_i(2);
|
||||
|
||||
-------------------------------- U type -----------------------------------
|
||||
|
|
|
@ -10,12 +10,12 @@ entity control_tmr is
|
|||
port (
|
||||
-- input ports
|
||||
-- processor status
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_outofrange_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_err_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
|
||||
-- instruction decode
|
||||
opcode_i : in std_logic_vector(6 downto 0);
|
||||
|
@ -49,7 +49,7 @@ entity control_tmr is
|
|||
imm_shamt_o : out std_logic;
|
||||
imm_up_o : out std_logic;
|
||||
-- register bank
|
||||
regwr_o : out std_logic;
|
||||
regwr_o : out std_logic;
|
||||
-- control transfer
|
||||
inv_branch_o : out std_logic;
|
||||
branch_o : out std_logic;
|
||||
|
@ -57,9 +57,9 @@ entity control_tmr is
|
|||
jalr_o : out std_logic;
|
||||
ecall_o : out std_logic;
|
||||
-- mem access
|
||||
memrd_o : out std_logic;
|
||||
memwr_o : out std_logic;
|
||||
byte_en_o : out std_logic_vector(1 downto 0);
|
||||
mem_rd_o : out std_logic;
|
||||
mem_wr_o : out std_logic;
|
||||
mem_ben_o : out std_logic_vector(1 downto 0);
|
||||
mem_usgn_o : out std_logic; -- unsigned data
|
||||
-- U type
|
||||
load_upimm_o : out std_logic;
|
||||
|
@ -87,8 +87,8 @@ architecture arch of control_tmr is
|
|||
signal jump_w : tmr_std_logic_t;
|
||||
signal jalr_w : tmr_std_logic_t;
|
||||
signal ecall_w : tmr_std_logic_t;
|
||||
signal memrd_w : tmr_std_logic_t;
|
||||
signal memwr_w : tmr_std_logic_t;
|
||||
signal mem_rd_w : tmr_std_logic_t;
|
||||
signal mem_wr_w : tmr_std_logic_t;
|
||||
signal mem_usgn_w : tmr_std_logic_t;
|
||||
signal load_upimm_w : tmr_std_logic_t;
|
||||
signal auipc_w : tmr_std_logic_t;
|
||||
|
@ -110,8 +110,8 @@ architecture arch of control_tmr is
|
|||
signal corr_jump_w : std_logic;
|
||||
signal corr_jalr_w : std_logic;
|
||||
signal corr_ecall_w : std_logic;
|
||||
signal corr_memrd_w : std_logic;
|
||||
signal corr_memwr_w : std_logic;
|
||||
signal corr_mem_rd_w : std_logic;
|
||||
signal corr_mem_wr_w : std_logic;
|
||||
signal corr_mem_usgn_w : std_logic;
|
||||
signal corr_load_upimm_w : std_logic;
|
||||
signal corr_auipc_w : std_logic;
|
||||
|
@ -133,8 +133,8 @@ architecture arch of control_tmr is
|
|||
signal error_jump_w : std_logic;
|
||||
signal error_jalr_w : std_logic;
|
||||
signal error_ecall_w : std_logic;
|
||||
signal error_memrd_w : std_logic;
|
||||
signal error_memwr_w : std_logic;
|
||||
signal error_mem_rd_w : std_logic;
|
||||
signal error_mem_wr_w : std_logic;
|
||||
signal error_mem_usgn_w : std_logic;
|
||||
signal error_load_upimm_w : std_logic;
|
||||
signal error_auipc_w : std_logic;
|
||||
|
@ -149,9 +149,9 @@ architecture arch of control_tmr is
|
|||
signal error_aluop_w : std_logic;
|
||||
|
||||
type tmr_std_logic_2_t is array(2 downto 0) of std_logic_vector(1 downto 0);
|
||||
signal byte_en_w : tmr_std_logic_2_t;
|
||||
signal corr_byte_en_w : std_logic_vector(1 downto 0);
|
||||
signal error_byte_en_w : std_logic;
|
||||
signal mem_ben_w : tmr_std_logic_2_t;
|
||||
signal corr_mem_ben_w : std_logic_vector(1 downto 0);
|
||||
signal error_mem_ben_w : std_logic;
|
||||
|
||||
begin
|
||||
gen_TMR : for i in 2 downto 0 generate
|
||||
|
@ -170,43 +170,43 @@ begin
|
|||
begin
|
||||
control_i : control
|
||||
port map (
|
||||
imem_gnt_i => imem_gnt_i,
|
||||
imem_err_i => imem_err_i,
|
||||
dmem_gnt_i => dmem_gnt_i,
|
||||
dmem_outofrange_i => dmem_outofrange_i,
|
||||
dmem_sbu_i => dmem_sbu_i,
|
||||
dmem_dbu_i => dmem_dbu_i,
|
||||
opcode_i => opcode_i,
|
||||
funct3_i => funct3_i,
|
||||
funct7_i => funct7_i,
|
||||
funct12_i => funct12_i,
|
||||
rstn_i => rstn_i,
|
||||
clk_i => clk_i,
|
||||
start_i => start_i,
|
||||
imem_req_o => imem_req_w(i),
|
||||
dmem_req_o => dmem_req_w(i),
|
||||
update_pc_o => update_pc_w(i),
|
||||
trap_o => trap_w(i),
|
||||
aluop_o => aluop_w(i),
|
||||
alusrc_imm_o => alusrc_imm_w(i),
|
||||
imm_shamt_o => imm_shamt_w(i),
|
||||
imm_up_o => imm_up_w(i),
|
||||
regwr_o => regwr_w(i),
|
||||
inv_branch_o => inv_branch_w(i),
|
||||
branch_o => branch_w(i),
|
||||
jump_o => jump_w(i),
|
||||
jalr_o => jalr_w(i),
|
||||
ecall_o => ecall_w(i),
|
||||
memrd_o => memrd_w(i),
|
||||
memwr_o => memwr_w(i),
|
||||
byte_en_o => byte_en_w(i),
|
||||
mem_usgn_o => mem_usgn_w(i),
|
||||
load_upimm_o => load_upimm_w(i),
|
||||
auipc_o => auipc_w(i),
|
||||
csr_enable_o => csr_enable_w(i),
|
||||
csr_source_imm_o => csr_source_imm_w(i),
|
||||
csr_maskop_o => csr_maskop_w(i),
|
||||
csr_clearop_o => csr_clearop_w(i)
|
||||
imem_gnt_i => imem_gnt_i,
|
||||
imem_err_i => imem_err_i,
|
||||
dmem_gnt_i => dmem_gnt_i,
|
||||
dmem_err_i => dmem_err_i,
|
||||
dmem_sbu_i => dmem_sbu_i,
|
||||
dmem_dbu_i => dmem_dbu_i,
|
||||
opcode_i => opcode_i,
|
||||
funct3_i => funct3_i,
|
||||
funct7_i => funct7_i,
|
||||
funct12_i => funct12_i,
|
||||
rstn_i => rstn_i,
|
||||
clk_i => clk_i,
|
||||
start_i => start_i,
|
||||
imem_req_o => imem_req_w(i),
|
||||
dmem_req_o => dmem_req_w(i),
|
||||
update_pc_o => update_pc_w(i),
|
||||
trap_o => trap_w(i),
|
||||
aluop_o => aluop_w(i),
|
||||
alusrc_imm_o => alusrc_imm_w(i),
|
||||
imm_shamt_o => imm_shamt_w(i),
|
||||
imm_up_o => imm_up_w(i),
|
||||
regwr_o => regwr_w(i),
|
||||
inv_branch_o => inv_branch_w(i),
|
||||
branch_o => branch_w(i),
|
||||
jump_o => jump_w(i),
|
||||
jalr_o => jalr_w(i),
|
||||
ecall_o => ecall_w(i),
|
||||
mem_rd_o => mem_rd_w(i),
|
||||
mem_wr_o => mem_wr_w(i),
|
||||
mem_ben_o => mem_ben_w(i),
|
||||
mem_usgn_o => mem_usgn_w(i),
|
||||
load_upimm_o => load_upimm_w(i),
|
||||
auipc_o => auipc_w(i),
|
||||
csr_enable_o => csr_enable_w(i),
|
||||
csr_source_imm_o => csr_source_imm_w(i),
|
||||
csr_maskop_o => csr_maskop_w(i),
|
||||
csr_clearop_o => csr_clearop_w(i)
|
||||
);
|
||||
end generate;
|
||||
|
||||
|
@ -224,9 +224,9 @@ begin
|
|||
corr_jump_w <= ( jump_w(2) and jump_w(1)) or ( jump_w(2) and jump_w(0)) or ( jump_w(1) and jump_w(0));
|
||||
corr_jalr_w <= ( jalr_w(2) and jalr_w(1)) or ( jalr_w(2) and jalr_w(0)) or ( jalr_w(1) and jalr_w(0));
|
||||
corr_ecall_w <= ( ecall_w(2) and ecall_w(1)) or ( ecall_w(2) and ecall_w(0)) or ( ecall_w(1) and ecall_w(0));
|
||||
corr_memrd_w <= ( memrd_w(2) and memrd_w(1)) or ( memrd_w(2) and memrd_w(0)) or ( memrd_w(1) and memrd_w(0));
|
||||
corr_memwr_w <= ( memwr_w(2) and memwr_w(1)) or ( memwr_w(2) and memwr_w(0)) or ( memwr_w(1) and memwr_w(0));
|
||||
corr_byte_en_w <= ( byte_en_w(2) and byte_en_w(1)) or ( byte_en_w(2) and byte_en_w(0)) or ( byte_en_w(1) and byte_en_w(0));
|
||||
corr_mem_rd_w <= ( mem_rd_w(2) and mem_rd_w(1)) or ( mem_rd_w(2) and mem_rd_w(0)) or ( mem_rd_w(1) and mem_rd_w(0));
|
||||
corr_mem_wr_w <= ( mem_wr_w(2) and mem_wr_w(1)) or ( mem_wr_w(2) and mem_wr_w(0)) or ( mem_wr_w(1) and mem_wr_w(0));
|
||||
corr_mem_ben_w <= ( mem_ben_w(2) and mem_ben_w(1)) or ( mem_ben_w(2) and mem_ben_w(0)) or ( mem_ben_w(1) and mem_ben_w(0));
|
||||
corr_mem_usgn_w <= ( mem_usgn_w(2) and mem_usgn_w(1)) or ( mem_usgn_w(2) and mem_usgn_w(0)) or ( mem_usgn_w(1) and mem_usgn_w(0));
|
||||
corr_load_upimm_w <= ( load_upimm_w(2) and load_upimm_w(1)) or ( load_upimm_w(2) and load_upimm_w(0)) or ( load_upimm_w(1) and load_upimm_w(0));
|
||||
corr_auipc_w <= ( auipc_w(2) and auipc_w(1)) or ( auipc_w(2) and auipc_w(0)) or ( auipc_w(1) and auipc_w(0));
|
||||
|
@ -249,9 +249,9 @@ begin
|
|||
error_jump_w <= ( jump_w(2) xor jump_w(1)) or ( jump_w(2) xor jump_w(0)) or ( jump_w(1) xor jump_w(0));
|
||||
error_jalr_w <= ( jalr_w(2) xor jalr_w(1)) or ( jalr_w(2) xor jalr_w(0)) or ( jalr_w(1) xor jalr_w(0));
|
||||
error_ecall_w <= ( ecall_w(2) xor ecall_w(1)) or ( ecall_w(2) xor ecall_w(0)) or ( ecall_w(1) xor ecall_w(0));
|
||||
error_memrd_w <= ( memrd_w(2) xor memrd_w(1)) or ( memrd_w(2) xor memrd_w(0)) or ( memrd_w(1) xor memrd_w(0));
|
||||
error_memwr_w <= ( memwr_w(2) xor memwr_w(1)) or ( memwr_w(2) xor memwr_w(0)) or ( memwr_w(1) xor memwr_w(0));
|
||||
error_byte_en_w <= or_reduce(( byte_en_w(2) xor byte_en_w(1)) or ( byte_en_w(2) xor byte_en_w(0)) or ( byte_en_w(1) xor byte_en_w(0)));
|
||||
error_mem_rd_w <= ( mem_rd_w(2) xor mem_rd_w(1)) or ( mem_rd_w(2) xor mem_rd_w(0)) or ( mem_rd_w(1) xor mem_rd_w(0));
|
||||
error_mem_wr_w <= ( mem_wr_w(2) xor mem_wr_w(1)) or ( mem_wr_w(2) xor mem_wr_w(0)) or ( mem_wr_w(1) xor mem_wr_w(0));
|
||||
error_mem_ben_w <= or_reduce((mem_ben_w(2) xor mem_ben_w(1)) or (mem_ben_w(2) xor mem_ben_w(0)) or ( mem_ben_w(1) xor mem_ben_w(0)));
|
||||
error_mem_usgn_w <= ( mem_usgn_w(2) xor mem_usgn_w(1)) or ( mem_usgn_w(2) xor mem_usgn_w(0)) or ( mem_usgn_w(1) xor mem_usgn_w(0));
|
||||
error_load_upimm_w <= ( load_upimm_w(2) xor load_upimm_w(1)) or ( load_upimm_w(2) xor load_upimm_w(0)) or ( load_upimm_w(1) xor load_upimm_w(0));
|
||||
error_auipc_w <= ( auipc_w(2) xor auipc_w(1)) or ( auipc_w(2) xor auipc_w(0)) or ( auipc_w(1) xor auipc_w(0));
|
||||
|
@ -265,8 +265,8 @@ begin
|
|||
error_trap_w or error_aluop_w or error_alusrc_imm_w or
|
||||
error_imm_shamt_w or error_imm_up_w or error_regwr_w or
|
||||
error_inv_branch_w or error_branch_w or error_jump_w or
|
||||
error_jalr_w or error_ecall_w or error_memrd_w or
|
||||
error_memwr_w or error_byte_en_w or error_mem_usgn_w or
|
||||
error_jalr_w or error_ecall_w or error_mem_rd_w or
|
||||
error_mem_wr_w or error_mem_ben_w or error_mem_usgn_w or
|
||||
error_load_upimm_w or error_auipc_w or error_csr_enable_w or
|
||||
error_csr_source_imm_w or error_csr_maskop_w or error_csr_clearop_w;
|
||||
|
||||
|
@ -285,9 +285,9 @@ begin
|
|||
jump_o <= corr_jump_w when correct_error_i = '1' else jump_w (0);
|
||||
jalr_o <= corr_jalr_w when correct_error_i = '1' else jalr_w (0);
|
||||
ecall_o <= corr_ecall_w when correct_error_i = '1' else ecall_w (0);
|
||||
memrd_o <= corr_memrd_w when correct_error_i = '1' else memrd_w (0);
|
||||
memwr_o <= corr_memwr_w when correct_error_i = '1' else memwr_w (0);
|
||||
byte_en_o <= corr_byte_en_w when correct_error_i = '1' else byte_en_w (0);
|
||||
mem_rd_o <= corr_mem_rd_w when correct_error_i = '1' else mem_rd_w (0);
|
||||
mem_wr_o <= corr_mem_wr_w when correct_error_i = '1' else mem_wr_w (0);
|
||||
mem_ben_o <= corr_mem_ben_w when correct_error_i = '1' else mem_ben_w (0);
|
||||
mem_usgn_o <= corr_mem_usgn_w when correct_error_i = '1' else mem_usgn_w (0);
|
||||
load_upimm_o <= corr_load_upimm_w when correct_error_i = '1' else load_upimm_w (0);
|
||||
auipc_o <= corr_auipc_w when correct_error_i = '1' else auipc_w (0);
|
||||
|
|
221
hdl/harv.vhd
221
hdl/harv.vhd
|
@ -23,24 +23,24 @@ entity harv is
|
|||
poweron_rstn_i : in std_logic;
|
||||
wdt_rstn_i : in std_logic;
|
||||
-- INSTRUCTION MEMORY
|
||||
imem_instr_i : in std_logic_vector(31 downto 0);
|
||||
imem_instr_i : in std_logic_vector(31 downto 0);
|
||||
imem_pc_o : out std_logic_vector(31 downto 0);
|
||||
imem_req_o : out std_logic;
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
-- DATA MEMORY
|
||||
hard_dmem_o : out std_logic;
|
||||
dmem_data_i : in std_logic_vector(31 downto 0);
|
||||
dmem_req_o : out std_logic;
|
||||
dmem_wren_o : out std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_outofrange_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
dmem_byte_en_o : out std_logic_vector(1 downto 0);
|
||||
dmem_usgn_dat_o : out std_logic;
|
||||
dmem_data_o : out std_logic_vector(31 downto 0);
|
||||
dmem_addr_o : out std_logic_vector(31 downto 0)
|
||||
hard_dmem_o : out std_logic;
|
||||
dmem_req_o : out std_logic;
|
||||
dmem_wren_o : out std_logic;
|
||||
dmem_ben_o : out std_logic_vector(1 downto 0);
|
||||
dmem_usgn_o : out std_logic;
|
||||
dmem_addr_o : out std_logic_vector(31 downto 0);
|
||||
dmem_wdata_o : out std_logic_vector(31 downto 0);
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_err_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
dmem_rdata_i : in std_logic_vector(31 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
|
@ -80,9 +80,9 @@ architecture arch of harv is
|
|||
signal ctl_jump_w : std_logic;
|
||||
signal ctl_jalr_w : std_logic;
|
||||
signal ctl_ecall_w : std_logic;
|
||||
signal ctl_memrd_w : std_logic;
|
||||
signal ctl_memwr_w : std_logic;
|
||||
signal ctl_byte_en_w : std_logic_vector(1 downto 0);
|
||||
signal ctl_mem_rd_w : std_logic;
|
||||
signal ctl_mem_wr_w : std_logic;
|
||||
signal ctl_mem_ben_w : std_logic_vector(1 downto 0);
|
||||
signal ctl_mem_usgn_w : std_logic;
|
||||
signal ctl_load_upimm_w : std_logic;
|
||||
signal ctl_auipc_w : std_logic;
|
||||
|
@ -92,9 +92,9 @@ architecture arch of harv is
|
|||
signal ctl_csr_clearop_w : std_logic;
|
||||
signal instr_w : std_logic_vector(31 downto 0);
|
||||
------------- REGFILE -------------
|
||||
signal data_wr_w : std_logic_vector(31 downto 0);
|
||||
signal reg_data1_w : std_logic_vector(31 downto 0);
|
||||
signal reg_data2_w : std_logic_vector(31 downto 0);
|
||||
signal data_wr_w : std_logic_vector(31 downto 0);
|
||||
signal reg_data1_w : std_logic_vector(31 downto 0);
|
||||
signal reg_data2_w : std_logic_vector(31 downto 0);
|
||||
-------------- ALU -----------------
|
||||
signal alu_data1_w : std_logic_vector(31 downto 0);
|
||||
signal alu_data2_w : std_logic_vector(31 downto 0);
|
||||
|
@ -115,8 +115,8 @@ architecture arch of harv is
|
|||
signal reg2_sbu_w : std_logic;
|
||||
signal reg2_dbu_w : std_logic;
|
||||
-- signal pc_cen_w : std_logic;
|
||||
signal pc_sbu_w : std_logic;
|
||||
signal pc_dbu_w : std_logic;
|
||||
signal pc_sbu_w : std_logic;
|
||||
signal pc_dbu_w : std_logic;
|
||||
|
||||
signal control_err_w : std_logic;
|
||||
signal alu_err_w : std_logic;
|
||||
|
@ -131,25 +131,25 @@ begin
|
|||
HAMMING_PC => HAMMING_PC
|
||||
)
|
||||
port map (
|
||||
branch_imm_i => imm_branch_w,
|
||||
jump_imm_i => alu_data_w,
|
||||
inv_branch_i => ctl_inv_branch_w,
|
||||
branch_i => ctl_branch_w,
|
||||
zero_i => alu_zero_w,
|
||||
jump_i => ctl_jump_w,
|
||||
ecall_i => ctl_ecall_w,
|
||||
branch_imm_i => imm_branch_w,
|
||||
jump_imm_i => alu_data_w,
|
||||
inv_branch_i => ctl_inv_branch_w,
|
||||
branch_i => ctl_branch_w,
|
||||
zero_i => alu_zero_w,
|
||||
jump_i => ctl_jump_w,
|
||||
ecall_i => ctl_ecall_w,
|
||||
correct_error_i => hard_pc_w,
|
||||
instr_gnt_i => imem_gnt_i,
|
||||
instr_i => imem_instr_i,
|
||||
rstn_i => rstn_i,
|
||||
clk_i => clk_w,
|
||||
update_pc_i => update_pc_w,
|
||||
trap_i => trap_w,
|
||||
instr_o => instr_w,
|
||||
sbu_o => pc_sbu_w,
|
||||
dbu_o => pc_dbu_w,
|
||||
pc_o => if_pc_w,
|
||||
pc_4_o => if_pc_4_w
|
||||
instr_gnt_i => imem_gnt_i,
|
||||
instr_i => imem_instr_i,
|
||||
rstn_i => rstn_i,
|
||||
clk_i => clk_w,
|
||||
update_pc_i => update_pc_w,
|
||||
trap_i => trap_w,
|
||||
instr_o => instr_w,
|
||||
sbu_o => pc_sbu_w,
|
||||
dbu_o => pc_dbu_w,
|
||||
pc_o => if_pc_w,
|
||||
pc_4_o => if_pc_4_w
|
||||
);
|
||||
imem_pc_o <= if_pc_w;
|
||||
|
||||
|
@ -171,20 +171,20 @@ begin
|
|||
control_i : control_tmr
|
||||
port map (
|
||||
start_i => start_i,
|
||||
imem_gnt_i => imem_gnt_i,
|
||||
imem_err_i => imem_err_i,
|
||||
dmem_gnt_i => dmem_gnt_i,
|
||||
dmem_outofrange_i => dmem_outofrange_i,
|
||||
dmem_sbu_i => dmem_sbu_i and dmem_gnt_i and not ctl_memwr_w,
|
||||
dmem_dbu_i => dmem_dbu_i and dmem_gnt_i and not ctl_memwr_w,
|
||||
imem_gnt_i => imem_gnt_i,
|
||||
imem_err_i => imem_err_i,
|
||||
dmem_gnt_i => dmem_gnt_i,
|
||||
dmem_err_i => dmem_err_i,
|
||||
dmem_sbu_i => dmem_sbu_i and dmem_gnt_i and ctl_mem_rd_w,
|
||||
dmem_dbu_i => dmem_dbu_i and dmem_gnt_i and ctl_mem_rd_w,
|
||||
opcode_i => opcode_w,
|
||||
funct3_i => funct3_w,
|
||||
funct7_i => funct7_w,
|
||||
funct12_i => funct12_w,
|
||||
rstn_i => rstn_i,
|
||||
clk_i => clk_i,
|
||||
imem_req_o => imem_req_o,
|
||||
dmem_req_o => dmem_req_o,
|
||||
imem_req_o => imem_req_o,
|
||||
dmem_req_o => dmem_req_o,
|
||||
update_pc_o => update_pc_w,
|
||||
trap_o => trap_w,
|
||||
aluop_o => ctl_aluop_w,
|
||||
|
@ -197,9 +197,9 @@ begin
|
|||
jump_o => ctl_jump_w,
|
||||
jalr_o => ctl_jalr_w,
|
||||
ecall_o => ctl_ecall_w,
|
||||
memrd_o => ctl_memrd_w,
|
||||
memwr_o => ctl_memwr_w,
|
||||
byte_en_o => ctl_byte_en_w,
|
||||
mem_rd_o => ctl_mem_rd_w,
|
||||
mem_wr_o => ctl_mem_wr_w,
|
||||
mem_ben_o => ctl_mem_ben_w,
|
||||
mem_usgn_o => ctl_mem_usgn_w,
|
||||
load_upimm_o => ctl_load_upimm_w,
|
||||
auipc_o => ctl_auipc_w,
|
||||
|
@ -215,57 +215,57 @@ begin
|
|||
control_i : control
|
||||
port map (
|
||||
-- processor status
|
||||
start_i => start_i,
|
||||
imem_gnt_i => imem_gnt_i,
|
||||
imem_err_i => imem_err_i,
|
||||
dmem_gnt_i => dmem_gnt_i,
|
||||
dmem_outofrange_i => dmem_outofrange_i,
|
||||
dmem_sbu_i => dmem_sbu_i,
|
||||
dmem_dbu_i => dmem_dbu_i,
|
||||
start_i => start_i,
|
||||
imem_gnt_i => imem_gnt_i,
|
||||
imem_err_i => imem_err_i,
|
||||
dmem_gnt_i => dmem_gnt_i,
|
||||
dmem_err_i => dmem_err_i,
|
||||
dmem_sbu_i => dmem_sbu_i,
|
||||
dmem_dbu_i => dmem_dbu_i,
|
||||
|
||||
-- instruction decode
|
||||
opcode_i => opcode_w,
|
||||
funct3_i => funct3_w,
|
||||
funct7_i => funct7_w,
|
||||
funct12_i => funct12_w,
|
||||
opcode_i => opcode_w,
|
||||
funct3_i => funct3_w,
|
||||
funct7_i => funct7_w,
|
||||
funct12_i => funct12_w,
|
||||
|
||||
rstn_i => rstn_i,
|
||||
clk_i => clk_i,
|
||||
rstn_i => rstn_i,
|
||||
clk_i => clk_i,
|
||||
|
||||
-- processor status
|
||||
imem_req_o => imem_req_o,
|
||||
dmem_req_o => dmem_req_o,
|
||||
imem_req_o => imem_req_o,
|
||||
dmem_req_o => dmem_req_o,
|
||||
update_pc_o => update_pc_w,
|
||||
trap_o => trap_w,
|
||||
|
||||
-- instruction decode
|
||||
aluop_o => ctl_aluop_w,
|
||||
alusrc_imm_o => ctl_alusrc_imm_w,
|
||||
imm_shamt_o => ctl_imm_shamt_w,
|
||||
imm_up_o => ctl_imm_up_w,
|
||||
regwr_o => ctl_regwr_w,
|
||||
inv_branch_o => ctl_inv_branch_w,
|
||||
branch_o => ctl_branch_w,
|
||||
jump_o => ctl_jump_w,
|
||||
jalr_o => ctl_jalr_w,
|
||||
ecall_o => ctl_ecall_w,
|
||||
memrd_o => ctl_memrd_w,
|
||||
memwr_o => ctl_memwr_w,
|
||||
byte_en_o => ctl_byte_en_w,
|
||||
mem_usgn_o => ctl_mem_usgn_w,
|
||||
load_upimm_o => ctl_load_upimm_w,
|
||||
auipc_o => ctl_auipc_w,
|
||||
csr_enable_o => ctl_csr_enable_w,
|
||||
csr_source_imm_o => ctl_csr_source_imm_w,
|
||||
csr_maskop_o => ctl_csr_maskop_w,
|
||||
csr_clearop_o => ctl_csr_clearop_w
|
||||
aluop_o => ctl_aluop_w,
|
||||
alusrc_imm_o => ctl_alusrc_imm_w,
|
||||
imm_shamt_o => ctl_imm_shamt_w,
|
||||
imm_up_o => ctl_imm_up_w,
|
||||
regwr_o => ctl_regwr_w,
|
||||
inv_branch_o => ctl_inv_branch_w,
|
||||
branch_o => ctl_branch_w,
|
||||
jump_o => ctl_jump_w,
|
||||
jalr_o => ctl_jalr_w,
|
||||
ecall_o => ctl_ecall_w,
|
||||
mem_rd_o => ctl_mem_rd_w,
|
||||
mem_wr_o => ctl_mem_wr_w,
|
||||
mem_ben_o => ctl_mem_ben_w,
|
||||
mem_usgn_o => ctl_mem_usgn_w,
|
||||
load_upimm_o => ctl_load_upimm_w,
|
||||
auipc_o => ctl_auipc_w,
|
||||
csr_enable_o => ctl_csr_enable_w,
|
||||
csr_source_imm_o => ctl_csr_source_imm_w,
|
||||
csr_maskop_o => ctl_csr_maskop_w,
|
||||
csr_clearop_o => ctl_csr_clearop_w
|
||||
);
|
||||
end generate;
|
||||
|
||||
data_wr_w <= dmem_data_i when ctl_memrd_w = '1' else
|
||||
imm_w when ctl_load_upimm_w = '1' else
|
||||
if_pc_4_w when ctl_jump_w = '1' else
|
||||
csr_rdata_w when ctl_csr_enable_w = '1' else
|
||||
data_wr_w <= dmem_rdata_i when ctl_mem_rd_w = '1' else
|
||||
imm_w when ctl_load_upimm_w = '1' else
|
||||
if_pc_4_w when ctl_jump_w = '1' else
|
||||
csr_rdata_w when ctl_csr_enable_w = '1' else
|
||||
alu_data_w;
|
||||
|
||||
regfile_i : regfile
|
||||
|
@ -288,27 +288,26 @@ begin
|
|||
data2_o => reg_data2_w
|
||||
);
|
||||
|
||||
imm_sel_w <= ctl_imm_shamt_w & ctl_imm_up_w & ctl_memwr_w & (ctl_jump_w and not ctl_jalr_w);
|
||||
imm_sel_w <= ctl_imm_shamt_w & ctl_imm_up_w & ctl_mem_wr_w & (ctl_jump_w and not ctl_jalr_w);
|
||||
|
||||
with imm_sel_w select imm_w <=
|
||||
std_logic_vector(resize(unsigned(imm_shamt_w), 32)) when "1000", -- ctl_imm_shamt_w = '1' else
|
||||
std_logic_vector(shift_left(resize(signed(imm_up_w), 32), 12)) when "0100", -- ctl_imm_up_w = '1' else
|
||||
std_logic_vector(resize(signed(imm_store_w), 32)) when "0010", -- ctl_memwr_w = '1' else
|
||||
std_logic_vector(resize(signed(imm_store_w), 32)) when "0010", -- ctl_mem_wr_w = '1' else
|
||||
std_logic_vector(resize(signed(imm_upj_w), 32)) when "0001", -- (ctl_jump_w and not ctl_jalr_w) = '1' else
|
||||
std_logic_vector(resize(signed(imm_i_w), 32)) when others;
|
||||
|
||||
alu_data1_w <= if_pc_w when (ctl_auipc_w or (ctl_jump_w and not ctl_jalr_w)) = '1' else
|
||||
reg_data1_w;
|
||||
alu_data2_w <= imm_w when ctl_alusrc_imm_w = '1' else reg_data2_w;
|
||||
alu_data1_w <= if_pc_w when (ctl_auipc_w or (ctl_jump_w and not ctl_jalr_w)) = '1' else reg_data1_w;
|
||||
alu_data2_w <= imm_w when ctl_alusrc_imm_w = '1' else reg_data2_w;
|
||||
|
||||
gen_ft_alu : if TMR_ALU generate
|
||||
alu_i : alu_tmr
|
||||
port map (
|
||||
data1_i => alu_data1_w,
|
||||
data2_i => alu_data2_w,
|
||||
operation_i => ctl_aluop_w,
|
||||
zero_o => alu_zero_w,
|
||||
data_o => alu_data_w,
|
||||
data1_i => alu_data1_w,
|
||||
data2_i => alu_data2_w,
|
||||
operation_i => ctl_aluop_w,
|
||||
zero_o => alu_zero_w,
|
||||
data_o => alu_data_w,
|
||||
correct_error_i => hard_alu_w,
|
||||
error_o => alu_err_w
|
||||
);
|
||||
|
@ -325,10 +324,10 @@ begin
|
|||
end generate;
|
||||
|
||||
---------- CSR registers ---------
|
||||
csr_ucause_w <= x"00000010" when dmem_sbu_i = '1' else -- SBU
|
||||
x"00000020" when dmem_dbu_i = '1' else -- DBU
|
||||
x"00000007" when ctl_memwr_w = '1' else -- store address fault
|
||||
x"00000005"; -- load address fault
|
||||
csr_ucause_w <= x"00000010" when dmem_sbu_i = '1' else -- SBU
|
||||
x"00000020" when dmem_dbu_i = '1' else -- DBU
|
||||
x"00000007" when ctl_mem_wr_w = '1' else -- store address fault
|
||||
x"00000005"; -- when ctl_mem_rd_w = '1' -- load address fault
|
||||
csr_i : csr
|
||||
generic map (
|
||||
TMR_CONTROL => TMR_CONTROL,
|
||||
|
@ -366,7 +365,7 @@ begin
|
|||
pc_cen_i => update_pc_w,
|
||||
pc_sbu_i => pc_sbu_w,
|
||||
pc_dbu_i => pc_dbu_w,
|
||||
dmem_cen_i => dmem_gnt_i and not ctl_memwr_w,
|
||||
dmem_cen_i => dmem_gnt_i and not ctl_mem_wr_w,
|
||||
dmem_sbu_i => dmem_sbu_i,
|
||||
dmem_dbu_i => dmem_dbu_i,
|
||||
control_cen_i => '1',
|
||||
|
@ -387,10 +386,10 @@ begin
|
|||
-------- DATA MEMORY --------
|
||||
-- output signals
|
||||
-- dmem_req_o is set by the control unit
|
||||
dmem_wren_o <= ctl_memwr_w;
|
||||
dmem_byte_en_o <= ctl_byte_en_w;
|
||||
dmem_usgn_dat_o <= ctl_mem_usgn_w;
|
||||
dmem_data_o <= reg_data2_w;
|
||||
dmem_addr_o <= alu_data_w;
|
||||
dmem_wren_o <= ctl_mem_wr_w;
|
||||
dmem_ben_o <= ctl_mem_ben_w;
|
||||
dmem_usgn_o <= ctl_mem_usgn_w;
|
||||
dmem_wdata_o <= reg_data2_w;
|
||||
dmem_addr_o <= alu_data_w;
|
||||
|
||||
end architecture;
|
||||
|
|
212
hdl/harv_pkg.vhd
212
hdl/harv_pkg.vhd
|
@ -20,85 +20,85 @@ package harv_pkg is
|
|||
------- COMPONENTS -----
|
||||
component harv
|
||||
generic (
|
||||
PROGRAM_START_ADDR : std_logic_vector(31 downto 0);
|
||||
TRAP_HANDLER_ADDR : std_logic_vector(31 downto 0);
|
||||
TMR_CONTROL : boolean;
|
||||
TMR_ALU : boolean;
|
||||
HAMMING_REGFILE : boolean;
|
||||
HAMMING_PC : boolean
|
||||
PROGRAM_START_ADDR : std_logic_vector(31 downto 0);
|
||||
TRAP_HANDLER_ADDR : std_logic_vector(31 downto 0);
|
||||
TMR_CONTROL : boolean;
|
||||
TMR_ALU : boolean;
|
||||
HAMMING_REGFILE : boolean;
|
||||
HAMMING_PC : boolean
|
||||
);
|
||||
port (
|
||||
rstn_i : in std_logic;
|
||||
clk_i : in std_logic;
|
||||
start_i : in std_logic;
|
||||
poweron_rstn_i : in std_logic;
|
||||
wdt_rstn_i : in std_logic;
|
||||
imem_instr_i : in std_logic_vector(31 downto 0);
|
||||
imem_pc_o : out std_logic_vector(31 downto 0);
|
||||
imem_req_o : out std_logic;
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
hard_dmem_o : out std_logic;
|
||||
dmem_data_i : in std_logic_vector(31 downto 0);
|
||||
dmem_req_o : out std_logic;
|
||||
dmem_wren_o : out std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_outofrange_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
dmem_byte_en_o : out std_logic_vector(1 downto 0);
|
||||
dmem_usgn_dat_o : out std_logic;
|
||||
dmem_data_o : out std_logic_vector(31 downto 0);
|
||||
dmem_addr_o : out std_logic_vector(31 downto 0)
|
||||
rstn_i : in std_logic;
|
||||
clk_i : in std_logic;
|
||||
start_i : in std_logic;
|
||||
poweron_rstn_i : in std_logic;
|
||||
wdt_rstn_i : in std_logic;
|
||||
imem_instr_i : in std_logic_vector(31 downto 0);
|
||||
imem_pc_o : out std_logic_vector(31 downto 0);
|
||||
imem_req_o : out std_logic;
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
hard_dmem_o : out std_logic;
|
||||
dmem_req_o : out std_logic;
|
||||
dmem_wren_o : out std_logic;
|
||||
dmem_ben_o : out std_logic_vector(1 downto 0);
|
||||
dmem_usgn_o : out std_logic;
|
||||
dmem_addr_o : out std_logic_vector(31 downto 0);
|
||||
dmem_wdata_o : out std_logic_vector(31 downto 0);
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_err_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
dmem_rdata_i : in std_logic_vector(31 downto 0)
|
||||
);
|
||||
end component harv;
|
||||
|
||||
component control
|
||||
port (
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_outofrange_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
opcode_i : in std_logic_vector(6 downto 0);
|
||||
funct3_i : in std_logic_vector(2 downto 0);
|
||||
funct7_i : in std_logic_vector(6 downto 0);
|
||||
funct12_i : in std_logic_vector(11 downto 0);
|
||||
rstn_i : in std_logic;
|
||||
clk_i : in std_logic;
|
||||
start_i : in std_logic;
|
||||
imem_req_o : out std_logic;
|
||||
dmem_req_o : out std_logic;
|
||||
update_pc_o : out std_logic;
|
||||
trap_o : out std_logic;
|
||||
aluop_o : out std_logic_vector(ALUOP_SIZE-1 downto 0);
|
||||
alusrc_imm_o : out std_logic;
|
||||
imm_shamt_o : out std_logic;
|
||||
imm_up_o : out std_logic;
|
||||
regwr_o : out std_logic;
|
||||
inv_branch_o : out std_logic;
|
||||
branch_o : out std_logic;
|
||||
jump_o : out std_logic;
|
||||
jalr_o : out std_logic;
|
||||
ecall_o : out std_logic;
|
||||
memrd_o : out std_logic;
|
||||
memwr_o : out std_logic;
|
||||
byte_en_o : out std_logic_vector(1 downto 0);
|
||||
mem_usgn_o : out std_logic;
|
||||
load_upimm_o : out std_logic;
|
||||
auipc_o : out std_logic;
|
||||
csr_enable_o : out std_logic;
|
||||
csr_source_imm_o : out std_logic;
|
||||
csr_maskop_o : out std_logic;
|
||||
csr_clearop_o : out std_logic
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_err_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
opcode_i : in std_logic_vector(6 downto 0);
|
||||
funct3_i : in std_logic_vector(2 downto 0);
|
||||
funct7_i : in std_logic_vector(6 downto 0);
|
||||
funct12_i : in std_logic_vector(11 downto 0);
|
||||
rstn_i : in std_logic;
|
||||
clk_i : in std_logic;
|
||||
start_i : in std_logic;
|
||||
imem_req_o : out std_logic;
|
||||
dmem_req_o : out std_logic;
|
||||
update_pc_o : out std_logic;
|
||||
trap_o : out std_logic;
|
||||
aluop_o : out std_logic_vector(ALUOP_SIZE-1 downto 0);
|
||||
alusrc_imm_o : out std_logic;
|
||||
imm_shamt_o : out std_logic;
|
||||
imm_up_o : out std_logic;
|
||||
regwr_o : out std_logic;
|
||||
inv_branch_o : out std_logic;
|
||||
branch_o : out std_logic;
|
||||
jump_o : out std_logic;
|
||||
jalr_o : out std_logic;
|
||||
ecall_o : out std_logic;
|
||||
mem_rd_o : out std_logic;
|
||||
mem_wr_o : out std_logic;
|
||||
mem_ben_o : out std_logic_vector(1 downto 0);
|
||||
mem_usgn_o : out std_logic;
|
||||
load_upimm_o : out std_logic;
|
||||
auipc_o : out std_logic;
|
||||
csr_enable_o : out std_logic;
|
||||
csr_source_imm_o : out std_logic;
|
||||
csr_maskop_o : out std_logic;
|
||||
csr_clearop_o : out std_logic
|
||||
);
|
||||
end component control;
|
||||
|
||||
component instr_fetch
|
||||
generic (
|
||||
PROGRAM_START_ADDR : std_logic_vector;
|
||||
TRAP_HANDLER_ADDR : std_logic_vector;
|
||||
PROGRAM_START_ADDR : std_logic_vector(31 downto 0);
|
||||
TRAP_HANDLER_ADDR : std_logic_vector(31 downto 0);
|
||||
HAMMING_PC : boolean
|
||||
);
|
||||
port (
|
||||
|
@ -208,45 +208,45 @@ package harv_pkg is
|
|||
------------- FAULT TOLERANT COMPONENTS --------------------
|
||||
component control_tmr
|
||||
port (
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_outofrange_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
opcode_i : in std_logic_vector(6 downto 0);
|
||||
funct3_i : in std_logic_vector(2 downto 0);
|
||||
funct7_i : in std_logic_vector(6 downto 0);
|
||||
funct12_i : in std_logic_vector(11 downto 0);
|
||||
correct_error_i : in std_logic;
|
||||
rstn_i : in std_logic;
|
||||
clk_i : in std_logic;
|
||||
start_i : in std_logic;
|
||||
imem_req_o : out std_logic;
|
||||
dmem_req_o : out std_logic;
|
||||
update_pc_o : out std_logic;
|
||||
trap_o : out std_logic;
|
||||
error_o : out std_logic;
|
||||
aluop_o : out std_logic_vector(ALUOP_SIZE-1 downto 0);
|
||||
alusrc_imm_o : out std_logic;
|
||||
imm_shamt_o : out std_logic;
|
||||
imm_up_o : out std_logic;
|
||||
regwr_o : out std_logic;
|
||||
inv_branch_o : out std_logic;
|
||||
branch_o : out std_logic;
|
||||
jump_o : out std_logic;
|
||||
jalr_o : out std_logic;
|
||||
ecall_o : out std_logic;
|
||||
memrd_o : out std_logic;
|
||||
memwr_o : out std_logic;
|
||||
byte_en_o : out std_logic_vector(1 downto 0);
|
||||
mem_usgn_o : out std_logic;
|
||||
load_upimm_o : out std_logic;
|
||||
auipc_o : out std_logic;
|
||||
csr_enable_o : out std_logic;
|
||||
csr_source_imm_o : out std_logic;
|
||||
csr_maskop_o : out std_logic;
|
||||
csr_clearop_o : out std_logic
|
||||
imem_gnt_i : in std_logic;
|
||||
imem_err_i : in std_logic;
|
||||
dmem_gnt_i : in std_logic;
|
||||
dmem_err_i : in std_logic;
|
||||
dmem_sbu_i : in std_logic;
|
||||
dmem_dbu_i : in std_logic;
|
||||
opcode_i : in std_logic_vector(6 downto 0);
|
||||
funct3_i : in std_logic_vector(2 downto 0);
|
||||
funct7_i : in std_logic_vector(6 downto 0);
|
||||
funct12_i : in std_logic_vector(11 downto 0);
|
||||
correct_error_i : in std_logic;
|
||||
rstn_i : in std_logic;
|
||||
clk_i : in std_logic;
|
||||
start_i : in std_logic;
|
||||
imem_req_o : out std_logic;
|
||||
dmem_req_o : out std_logic;
|
||||
update_pc_o : out std_logic;
|
||||
trap_o : out std_logic;
|
||||
error_o : out std_logic;
|
||||
aluop_o : out std_logic_vector(ALUOP_SIZE-1 downto 0);
|
||||
alusrc_imm_o : out std_logic;
|
||||
imm_shamt_o : out std_logic;
|
||||
imm_up_o : out std_logic;
|
||||
regwr_o : out std_logic;
|
||||
inv_branch_o : out std_logic;
|
||||
branch_o : out std_logic;
|
||||
jump_o : out std_logic;
|
||||
jalr_o : out std_logic;
|
||||
ecall_o : out std_logic;
|
||||
mem_rd_o : out std_logic;
|
||||
mem_wr_o : out std_logic;
|
||||
mem_ben_o : out std_logic_vector(1 downto 0);
|
||||
mem_usgn_o : out std_logic;
|
||||
load_upimm_o : out std_logic;
|
||||
auipc_o : out std_logic;
|
||||
csr_enable_o : out std_logic;
|
||||
csr_source_imm_o : out std_logic;
|
||||
csr_maskop_o : out std_logic;
|
||||
csr_clearop_o : out std_logic
|
||||
);
|
||||
end component control_tmr;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue