6 .実行アドレス
実行アドレスモジュールは、その名の通り実行アドレスを生成します。順序ロジックはありません。組み合わせ回路のみです。デコーダからの指示を受け生成します。
//May.30.2004
//Jun.4.2004 add `DISP24_567
`include "define.h"
module ea_unit(clock,sync_reset,EA,irword,ea_left_sel,ea_right_sel,RO_left,alu_out,MOUT,pc_reg,next_pc_offset,int_vector);
input clock;
input sync_reset;
output [23:0] EA;
input [63:0] irword;
input [3:0] ea_left_sel;
input [2:0] ea_right_sel;
input [23:0] pc_reg;
input [31:0] RO_left;
input [31:0] alu_out;
input [31:0] MOUT;
input [2:0] next_pc_offset;
input [7:0] int_vector;
wire [23:0] left,right;
wire [7:0] IR1=irword[23+32:16+32];
wire [15:0] IR23=irword[15+32:32];
wire [15:0] IR45=irword[31:16];
wire [31:0] IR2345=irword[15+32:16];
wire [31:0] IR4567=irword[31:0];
wire [23:0] IR567=irword[23:0];//Jun.4.2004
assign EA=left+right;
assign left=ea_left_sel==`PC_SEL ? pc_reg :
ea_left_sel==`ABS8_SEL ? {16'hffff,IR1} :
ea_left_sel==`ABS16_23_SEL ? { {8{IR23[15]}},IR23} :
ea_left_sel==`ABS16_45_SEL ? { {8{IR45[15]}},IR45} :
ea_left_sel==`ABS24_4567_SEL ? IR4567[23:0] :
ea_left_sel==`ABS24_2345_SEL ? IR2345[23:0] :
ea_left_sel==`IR1H_SEL_EA ? RO_left[23:0] :
ea_left_sel==`IR3H_SEL_EA ? RO_left[23:0] :
ea_left_sel==`aa8_SEL ? { 16'h0000,IR1} :
ea_left_sel==`ALU_OUT_SEL_EA ? alu_out[23:0] :
ea_left_sel==`ABS123 ? {IR1,IR23} :
ea_left_sel==`NEXT_PC_EA ? pc_reg+{next_pc_offset,1'b0} :
ea_left_sel==`NEXT_PC_EA2 ? pc_reg+{next_pc_offset,1'b0} ://May.31.2004
ea_left_sel==`INT_VECTOR ? { 16'h0000,int_vector} ://May.31.2004
MOUT[23:0];
assign right=ea_right_sel==`ZERO_SEL ? 0 :
ea_right_sel==`DISP8_SEL ? {{16{IR1[7]}},IR1} :
ea_right_sel==`DISP16_23_SEL ? {{8{IR23[15]}},IR23} :
ea_right_sel==`DISP16_45_SEL ? {{8{IR45[15]}},IR45} :
ea_right_sel==`VAL_MINUS4_SEL ? -4 :
ea_right_sel==`VAL_MINUS2_SEL ? -2 :
ea_right_sel==`DISP24_567 ? IR567 : -1;//Jun.4.2004
endmodule
|