http://www.hope-city.com
第四天 为CPU扩充转移指令
一、设计要求
在初级CPU的基础上进行功能扩充,使其支持转移类指令。 二、硬件uAG模块设计
(自己修改的设计部分,加上适当注释)
3'd3: uAGout = {NA[8:1], BM3_uAR0}; //条件转移指令产生两条分支(即条件满足
//条件不满足两种情况)
2'b00: Flag_MUX <= SZOC[0]; //IR7,IR6为00时,选择PSW的最低位,即CF 2'b01: Flag_MUX <= SZOC[1]; //IR7,IR6为01时,选择PSW的倒数第二位,即OF 2'b10: Flag_MUX <= SZOC[2]; //IR7,IR6为10时,选择PSW的第二位,即ZF 2'b11: Flag_MUX <= SZOC[3]; //IR7,IR6为11时,选择PSW的最高位,即SF 三、转移指令微程序的设计
EXEC转移指令入口3:转移条件满足YN条件不满足076077076条件满足ARoe,PCce0:固定转移0000:固定转移000000NOP1àFIC(a)(b)
四、测试程序、数据及运行结果
1、
测试内容:TEST 0010,R1 INZ 0001H 运行结果及分析:
五、设计中遇到的问题及解决办法
9
http://www.hope-city.com
第五天 为CPU扩充移位指令
一、设计目标
在前面CPU的基础上扩充硬件,使其支持移位指令。 二、硬件设计
1、SHIFTER模块设计
mux#(1) mux_1(.d1(0),.d2(0),.d3(d[15]),.d4(CF),.addr(IR76),.q(data_lsb)); //实例化最低有效位生成的四选一多路选择器
//addr选择哪种移位操作,为01时,选择逻辑左移(与
//算术左移相同),最低位补0;为10时,选择循环左移 //最低位用最高位补;为11时,选择带进位循环左移, //最低位用CF补
mux#(1) mux_2(.d1(d[15]),.d2(0),.d3(d[0]),.d4(CF),.addr(IR76),.q(data_hsb));
//实例化最高有效位生成的四选一多路选择器
//addr选择哪种移位操作,为00时,选择算是右移,最高
//位复制;为01时,选择逻辑右移,最高位补0;为10时, //选择循环左移最高位用最低位补;为11时,选择带进位 //循环左移,最高位用CF补
2、CF模块设计
`timescale 1ns / 1ps
module CF (d15, d0, Cout, q, SL, SR); input d15, d0, Cout; input SL, SR; output q; reg q;
always @(*) begin case ({SL, SR}) 3'b01: q = d0; //右移时,最低位送CF 3'b10: q = d15;//左移时,最高位送CF default:q = Cout; //其他情况CF不变 endcase end
endmodule
3、IR_DECODE模块设计(自己增加修改的设计部分)
2'b00: BM4_uA<={5'b01001,IR[7:5],1'b0}; //移位类指令微程序的入口地形成规则 4、顶层模块设计(增加自己修改的设计部分) //wire CF = CF_out;
CF CF_MUX(.d15(ALU_out[15]),.d0(ALU_out[0]),.Cout(Cout),.q(CF_out),.SL(SL),.SR(SR)); //CF_MUXs实例化,ALU_out[15],输入,来自移位数据的最高位;ALU_out[0],输入,来//自移位数据的最低位;Cout,输入,来自ALU的进位输出;SL,输入,SHIFTER移位器//的左移信号;SR,输入,SHIFTER移位器的右移信号;q,输出,来自进位的输出。 R#(DATAWIDTH)
10
http://www.hope-city.com
PSW(.q(PSW_out), .clk(clock),.n_reset(n_reset),.ce(PSWce),.d({12'b0,SF,ZF,OF,CF_out})); //将PSW的最低位CF与CF_MUX联接起来 三、移位指令微程序的设计
微地址(H) 092 094 096 098 09A 09C 09E 微指令(H) F0 F1 F2 0 0 0 0 0 0 0 F3 1 2 1 2 1 1 1 F4 0 0 0 0 0 0 0 F5 0 0 0 0 0 0 0 F6 0 0 0 0 0 0 0 F7 0 0 0 0 0 0 0 F8 0 0 0 0 0 0 0 F9 06F 06F 06F 06F 06F 06F 06F 微指令字段(H) 微命令 1810006F 0 6 1820006F 0 6 1810006F 0 1820006F 0 1810006F 0 1820006F 0 1810006F 0 6 6 6 6 6 SR,PSWce SL,PSWce SR,PSWce SL,PSWce SR,PSWce SL,PSWce SR,PSWce
四、测试程序、数据及运行结果
1、
测试内容:SHL 直接寻址 运行数据:SHL 0010H 运行结果及分析:
2、测试内容:SAR 直接寻址
运行数据:SAR 0010H 运行结果及分析:
…… ……
四、设计中遇到的问题及解决办法
11
http://www.hope-city.com
第六天 为CPU扩充堆栈类指令
一、设计目标
二、硬件设计 1、SP模块设计
(加上适当注释)
2、顶层模块设计(自己增加修改的设计部分)
三、PUSH、POP、CALL、RET指令微程序的设计 微地址(H) 微指令(H) 微命令 BM NA 注释
四、测试程序、数据及运行结果
1、
测试内容:
运行数据:
运行结果及分析:
…… ……
四、设计中遇到的问题及解决办法
12
相关推荐: