projects
/
calu.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0234188
)
return added
author
Markus Hofstätter
<markus.hofstaetter@gmx.net>
Sat, 11 Dec 2010 11:22:47 +0000
(12:22 +0100)
committer
Markus Hofstätter
<markus.hofstaetter@gmx.net>
Sat, 11 Dec 2010 11:22:47 +0000
(12:22 +0100)
cpu/src/alu.vhd
patch
|
blob
|
history
cpu/src/alu_b.vhd
patch
|
blob
|
history
cpu/src/alu_pkg.vhd
patch
|
blob
|
history
cpu/src/execute_stage_b.vhd
patch
|
blob
|
history
cpu/src/extension.vhd
patch
|
blob
|
history
cpu/src/extension_b.vhd
patch
|
blob
|
history
cpu/src/extension_pkg.vhd
patch
|
blob
|
history
diff --git
a/cpu/src/alu.vhd
b/cpu/src/alu.vhd
index 4d2e74782873112374ab3a230d4ce327c8c86b09..df26eb15e34b5b1b67b2474aadacb9c6ae8922b9 100755
(executable)
--- a/
cpu/src/alu.vhd
+++ b/
cpu/src/alu.vhd
@@
-27,6
+27,7
@@
entity alu is
\r
alu_state : in alu_result_rec;
\r
pval : in gp_register_t;
\r
\r
alu_state : in alu_result_rec;
\r
pval : in gp_register_t;
\r
+ pval_nxt : in gp_register_t;
\r
\r
alu_result : out alu_result_rec;
\r
addr : out word_t; --memaddr
\r
\r
alu_result : out alu_result_rec;
\r
addr : out word_t; --memaddr
\r
diff --git
a/cpu/src/alu_b.vhd
b/cpu/src/alu_b.vhd
index de8980d67866bc865dac894842392ba651093736..60d33530cd242e702820d210d48013b33f2efcb9 100755
(executable)
--- a/
cpu/src/alu_b.vhd
+++ b/
cpu/src/alu_b.vhd
@@
-41,7
+41,7
@@
begin
shift_inst : entity work.exec_op(shift_op)
\r
port map(clk,reset,left_o, right_o, op_detail, alu_state, shift_result);
\r
\r
shift_inst : entity work.exec_op(shift_op)
\r
port map(clk,reset,left_o, right_o, op_detail, alu_state, shift_result);
\r
\r
-calc: process(left_operand, right_operand,displacement, cond, op_group, op_detail ,alu_state,and_result,add_result,or_result,xor_result,shift_result, prog_cnt,brpr, pval)
\r
+calc: process(left_operand, right_operand,displacement, cond, op_group, op_detail ,alu_state,and_result,add_result,or_result,xor_result,shift_result, prog_cnt,brpr, pval
, pval_nxt
)
\r
variable result_v : alu_result_rec;
\r
variable res_prod : std_logic;
\r
variable cond_met : std_logic;
\r
variable result_v : alu_result_rec;
\r
variable res_prod : std_logic;
\r
variable cond_met : std_logic;
\r
@@
-152,9
+152,12
@@
begin
\r
addr <= pval;
\r
data <= prog_cnt_nxt;
\r
\r
addr <= pval;
\r
data <= prog_cnt_nxt;
\r
- -- if(op_detail(RET_OPT) = '1' then
\r
- -- null;
\r
- -- end if;
\r
+ if op_detail(RET_OPT) = '1' then
\r
+ addr <= pval_nxt;
\r
+ mem_en := '0';
\r
+ pinc_v := '0';
\r
+ res_prod := '0';
\r
+ end if;
\r
\r
end case;
\r
\r
\r
end case;
\r
\r
diff --git
a/cpu/src/alu_pkg.vhd
b/cpu/src/alu_pkg.vhd
index 57e2dc4b82b7d36a45731834e0c4ef2a614dc10c..2019e83d2cfe926cabd5295f66323a023ed1eed6 100755
(executable)
--- a/
cpu/src/alu_pkg.vhd
+++ b/
cpu/src/alu_pkg.vhd
@@
-84,6
+84,7
@@
package alu_pkg is
alu_state : in alu_result_rec;
pval : in gp_register_t;
alu_state : in alu_result_rec;
pval : in gp_register_t;
+ pval_nxt : in gp_register_t;
alu_result : out alu_result_rec;
addr : out word_t; --memaddr
alu_result : out alu_result_rec;
addr : out word_t; --memaddr
diff --git
a/cpu/src/execute_stage_b.vhd
b/cpu/src/execute_stage_b.vhd
index f2c2dc2a98341f59583b3fe81d138e1bf66b8d98..7221e60a0da726e5d314c313ba4eacc1a91f902f 100644
(file)
--- a/
cpu/src/execute_stage_b.vhd
+++ b/
cpu/src/execute_stage_b.vhd
@@
-19,7
+19,7
@@
signal psw : status_rec;
signal ext_gpmp : extmod_rec;
signal data_out : gp_register_t;
signal ext_gpmp : extmod_rec;
signal data_out : gp_register_t;
-signal pval : gp_register_t;
+signal pval
, pval_nxt
: gp_register_t;
signal paddr : paddr_t;
signal pinc, pwr_en : std_logic;
signal paddr : paddr_t;
signal pinc, pwr_en : std_logic;
@@
-39,7
+39,7
@@
begin
alu_inst : alu
port map(clk, reset, condition, op_group,
alu_inst : alu
port map(clk, reset, condition, op_group,
- left_operand, right_operand, dec_instr.displacement, dec_instr.prog_cnt, dec_instr.brpr, op_detail, alu_state, pval, alu_nxt,addr,data, pinc, pwr_en, paddr);
+ left_operand, right_operand, dec_instr.displacement, dec_instr.prog_cnt, dec_instr.brpr, op_detail, alu_state, pval,
pval_nxt,
alu_nxt,addr,data, pinc, pwr_en, paddr);
@@
-55,7
+55,8
@@
port map(clk, reset, condition, op_group,
pinc,
pwr_en,
psw,
pinc,
pwr_en,
psw,
- pval
+ pval,
+ pval_nxt
);
);
diff --git
a/cpu/src/extension.vhd
b/cpu/src/extension.vhd
index 27513590cefebcef231f05f9ed76f8b7be7ea898..f37f3caa21112967db5b5270351480fc58140496 100644
(file)
--- a/
cpu/src/extension.vhd
+++ b/
cpu/src/extension.vhd
@@
-27,7
+27,8
@@
entity extension_gpm is
pwr_en : in std_logic;
-- Ouput
psw : out status_rec;
pwr_en : in std_logic;
-- Ouput
psw : out status_rec;
- pval : out gp_register_t
+ pval : out gp_register_t;
+ pval_nxt : out gp_register_t
);
end extension_gpm;
);
end extension_gpm;
diff --git
a/cpu/src/extension_b.vhd
b/cpu/src/extension_b.vhd
index 46decaf833ef9e78c51a09787f9bfae85984be2f..8ccd6ea2c8edfaed929164d42285c1947d63ecbb 100644
(file)
--- a/
cpu/src/extension_b.vhd
+++ b/
cpu/src/extension_b.vhd
@@
-34,11
+34,12
@@
end process syn;
asyn : process (clk, reset, reg, psw_nxt, ext_reg, pwr_en, pinc, paddr)
variable reg_nxt_v : gpm_internal;
variable incb : ext_addr_t;
asyn : process (clk, reset, reg, psw_nxt, ext_reg, pwr_en, pinc, paddr)
variable reg_nxt_v : gpm_internal;
variable incb : ext_addr_t;
- variable sel_pval : ext_addr_t;
+ variable sel_pval
, sel_pval_nxt
: ext_addr_t;
variable data_out_v : gp_register_t;
variable data_v : gp_register_t;
variable tmp_data : gp_register_t;
variable data_out_v : gp_register_t;
variable data_v : gp_register_t;
variable tmp_data : gp_register_t;
+
begin
reg_nxt_v := reg;
data_v := ext_reg.data;
begin
reg_nxt_v := reg;
data_v := ext_reg.data;
@@
-99,9
+100,9
@@
begin
end if;
sel_pval:= reg_nxt_v.preg(to_integer(unsigned(paddr)));
end if;
sel_pval:= reg_nxt_v.preg(to_integer(unsigned(paddr)));
-
+ sel_pval_nxt := std_logic_vector(unsigned(sel_pval)+unsigned(incb));
if pwr_en = '1' then
if pwr_en = '1' then
- reg_nxt_v.preg(to_integer(unsigned(paddr))) := s
td_logic_vector(unsigned(sel_pval)+unsigned(incb))
;
+ reg_nxt_v.preg(to_integer(unsigned(paddr))) := s
el_pval_nxt
;
end if;
reg_nxt_v.status := psw_nxt;
end if;
reg_nxt_v.status := psw_nxt;
@@
-111,6
+112,8
@@
begin
pval <= (others =>'0');
pval(pval'high downto BYTEADDR) <= sel_pval;
pval <= (others =>'0');
pval(pval'high downto BYTEADDR) <= sel_pval;
+ pval_nxt <= (others =>'0');
+ pval_nxt(pval'high downto BYTEADDR) <= sel_pval_nxt;
end process asyn;
end behav;
end process asyn;
end behav;
diff --git
a/cpu/src/extension_pkg.vhd
b/cpu/src/extension_pkg.vhd
index 5d3eb12d55f2744a6d250888884a68282c415f19..ba4aec5a8b079ded3c26dec7dd999c1a7cc687aa 100644
(file)
--- a/
cpu/src/extension_pkg.vhd
+++ b/
cpu/src/extension_pkg.vhd
@@
-61,7
+61,8
@@
constant EXT_GPMP_ADDR: ext_addrid_t := x"FFFFFFF";
pwr_en : in std_logic;
-- Ouput
psw : out status_rec;
pwr_en : in std_logic;
-- Ouput
psw : out status_rec;
- pval : out gp_register_t
+ pval : out gp_register_t;
+ pval_nxt : out gp_register_t
);
end component extension_gpm;
);
end component extension_gpm;