|
楼主 |
发表于 2014-2-2 10:32:54
|
显示全部楼层
*********************************
day5-1 的理解
简单乘法指令的实现
*********************************
day 5-1 的内容是从 day 4-2 内容上发展的,这样在画流水线时,就显得臃肿。因为day5-1 与day4内容的独立性,同时为了简洁,流水线直接从day3发展,而不是day4。
首先是访存和回写阶段寄存器增加了
whilo : std_logic; --是否要写hi、lo 寄存器
hilo : std_logic_vector(63 downto 0); --要写入hi、lo 寄存器的值
在访存阶段,
--将HI、LO的写信号传递到回写阶段
v.w.whilo := r.m.whilo;
v.w.hilo := r.m.hilo;
在执行阶段,(以day3 基准,而不是day4-2)
--操作数选择,是立即数还是寄存器的值
opdata_select(r, v, ex_opdata1, ex_opdata2);
--向访存阶段传递要写的目的寄存器、是否要写入目的寄存器
v.m.waddr := r.e.rd;
v.m.wreg := r.e.wreg;
--调用过程logic_op进行逻辑运算,结果存储在ex_logic_res中
logic_op(r, ex_opdata1, ex_opdata2, ex_logic_res);
--调用过程mul_op进行乘法运算,结果存储在ex_mul_res中
mul_op(r, ex_opdata1, ex_opdata2, ex_mul_res);
--调用过程alu_select,依据操作类型,选择对应的运算结果存储到ex_result中
alu_select(r, ex_logic_res, ex_shift_res, ex_arithmetic_res, ex_mul_res, ex_result);
--将最终的运算结果传递到访存阶段
v.m.result := ex_result;
--依据乘法结果,给出新的hilo、whilo的值
set_new_hilo(r, v, ex_mul_res, v.m.hilo, v.m.whilo );
蓝色部分即为增加部分
多了两个procedure , mul_op 和 set_new_hilo。
同时需要在inst_decode增加 对 简单乘法指令的译码。 |
|