add wave -radix hexadecimal /pipeline_tb/decode_st/reg_wr_data
add wave -radix hexadecimal /pipeline_tb/decode_st/reg_we
-add wave -radix hexadecimal /pipeline_tb/exec_st/gpm_inst/psw
+add wave -radix hexadecimal /pipeline_tb/exec_st/gpmp_inst/psw
run 5000 ns
add wave -group execstage -radix hexadecimal /pipeline_tb/exec_st/reg_nxt
-add wave -group execstageregister -radix hexadecimal /pipeline_tb/exec_st/gpm_inst/psw
+add wave -group execstageregister -radix hexadecimal /pipeline_tb/exec_st/gpmp_inst/psw
add wave -group execstageregister -radix hexadecimal /pipeline_tb/exec_st/reg
add wave -group writebackstage -radix hexadecimal /pipeline_tb/writeback_st/result
add wave -group writebackstage -radix hexadecimal /pipeline_tb/writeback_st/result_addr
signal hword_pin : std_logic;
signal byte_s_pin : std_logic;
signal nop_pin : std_logic;
- -- extension signals
- signal ext_gpmp : extmod_rec;
- signal pointer : pointer_count;
- signal dec_in,p_en : std_logic;
- signal data_out : gp_register_t;
- signal pointer_val : gp_register_t;
+
begin
reg_wr_data_pin, reg_we_pin, reg_w_addr_pin, jump_result_pin, alu_jump_bit_pin);
- gpmp_inst : extension
- generic map ('0')
- port map (
- sys_clk,
- sys_reset,
- ext_gpmp,
- pointer,
- dec_in,
- p_en,
- data_out,
- pointer_val
-
- );
+
--init : process(all)
signal left_operand, right_operand : gp_register_t;
signal alu_state, alu_nxt : alu_result_rec;
signal psw : status_rec;
+ -- extension signals
+ signal ext_gpmp : extmod_rec;
+ signal data_out : gp_register_t;
+
type exec_internal is record
port map(clk, reset, condition, op_group,
left_operand, right_operand, dec_instr.displacement, op_detail, alu_state, alu_nxt,addr,data);
-gpm_inst : gpm
- generic map(RESET_VALUE)
- port map(clk,reset,alu_nxt,psw);
+ gpmp_inst : extension_gpm
+ generic map (RESET_VALUE)
+ port map (
+ clk,
+ reset,
+ ext_gpmp,
+ data_out,
+ alu_nxt,
+ psw
+
+ );
use work.common_pkg.all;
use work.extension_pkg.all;
+use work.alu_pkg.all;
+use work.gpm_pkg.all;
-entity extension is
+entity extension_gpm is
generic (
-- active reset value
--System inputs
clk : in std_logic;
reset : in std_logic;
+ -- Standartinterface
+ ext_reg : in extmod_rec;
+ data_out : out gp_register_t;
-- Input
- ext_reg : in extmod_rec;
- pointer : in pointer_count;
- dec_inc : in std_logic;
- p_en : in std_logic;
+ alu_nxt : in alu_result_rec;
-- Ouput
- data_out : out gp_register_t;
- pointer_val : out gp_register_t
+ psw : out status_rec
+
);
-end extension;
+end extension_gpm;
use work.mem_pkg.all;
use work.extension_pkg.all;
-architecture behav of extension is
+architecture behav of extension_gpm is
+type gpm_internal is record
+ status : status_rec;
+end record gpm_internal;
+signal reg, reg_nxt : gpm_internal;
begin
-
-
-syn: process(clk, reset)
-
+syn : process (clk, reset)
begin
+ if (reset = RESET_VALUE) then
+ reg.status <= ('0','0','0','0');
+ elsif rising_edge(clk) then
+ reg <= reg_nxt;
+ end if;
+end process syn;
+
+asyn : process (clk, reset, alu_nxt)
+begin
+ reg_nxt.status <= alu_nxt.status;
+end process asyn;
- if (reset = RESET_VALUE) then
-
- elsif rising_edge(clk) then
-
- end if;
-
-end process;
-
+psw <= reg.status;
end behav;
use IEEE.numeric_std.all;
use work.common_pkg.all;
-
+use work.alu_pkg.all;
+use work.gpm_pkg.all;
package extension_pkg is
constant EXT_UART_ADDR: ext_addrid_t := x"FFFFFFE";
constant EXT_GPMP_ADDR: ext_addrid_t := x"FFFFFFF";
- component extension is
+ component extension_gpm is
--some modules won't need all inputs/outputs
generic (
-- active reset value
--System inputs
clk : in std_logic;
reset : in std_logic;
+ -- Standartinterface
+ ext_reg : in extmod_rec;
+ data_out : out gp_register_t;
-- Input
- ext_reg : in extmod_rec;
- pointer : in pointer_count;
- dec_inc : in std_logic;
- p_en : in std_logic;
+ alu_nxt : in alu_result_rec;
-- Ouput
- data_out : out gp_register_t;
- pointer_val : out gp_register_t
+ psw : out status_rec
+
);
- end component extension;
+ end component extension_gpm;
signal hword_pin : std_logic;
signal byte_s_pin : std_logic;
signal nop_pin : std_logic;
- -- extension signals
- signal ext_gpmp : extmod_rec;
- signal pointer : pointer_count;
- signal dec_in,p_en : std_logic;
- signal data_out : gp_register_t;
- signal pointer_val : gp_register_t;
+
begin
reg_wr_data_pin, reg_we_pin, reg_w_addr_pin, jump_result_pin, alu_jump_bit_pin);
- gpmp_inst : extension
- generic map ('0')
- port map (
- sys_clk_pin,
- sys_res_n_pin,
- ext_gpmp,
- pointer,
- dec_in,
- p_en,
- data_out,
- pointer_val
-
- );
-
nop_pin <= (alu_jump_bit_pin xor brpr_pin);
3 => "11100000001000010001100000000000", -- r4 = r2 + r3
4 => "11100010001010100000100000000000", -- r5 = r4 and r1
5 => "11100111101010100000000000000001", -- stw r5,r4,1
+ 6 => "11101100001000100000000000000000", --cmp r4 , r4 => 2-2 => 1001
others => x"F0000000");