网页设计和网站建设书,企业网站前端模板下载,网站做系统叫什么名字吗,企业融资渠道有哪些7、设计一个只有4条指令的CPU我们要设计一个简单的CPU既然做CPU#xff0c;我们要做流水线的#xff0c;要简单#xff0c;做2级流水线就够了。为了实例的简单#xff0c;我们选择设计一个8bit的MCU的内核仍然我们要简单#xff0c;所以选择RISC的内核#xff0c;类似PIC…7、设计一个只有4条指令的CPU我们要设计一个简单的CPU既然做CPU我们要做流水线的要简单做2级流水线就够了。为了实例的简单我们选择设计一个8bit的MCU的内核仍然我们要简单所以选择RISC的内核类似PIC的结构还是为了要简化我们只支持4条指令继续为了要简化我们不考虑Status寄存器有人会问只有4条指令你还加减法都有有一个不就可以了。这也是我有意的你想假设ALU只能做加法你不觉得ALU这个名称太不名副其实了吗。mov A,#35H 把立即数mov到A寄存器add A,#42H (A) 12 - Asub A,#62H (A) - 12 - AJMP imd 跳转到某地址我们先给他们做机器编码我们用16bit宽度的指令集编码0x0035 00是MOV的OP code0x0142 01是ADD的OP Code0x0265 02是SUB的OP code0x8000 80是JMP的OP CODE我们继续看指令集用Verilog的方式来描述16b0000_0000_????_???? MOV16b0000_0001_????_???? ADD16b0000_0010_????_???? SUB16b1???_????_????_???? JMP我们可以看到JMP的跳转地址范围是15个bit地址也就是32K地址范围有人说ALU很重要好我们就先来看ALU的组成,因为只有加减2种情况所有ALU的OP代码只用1个bit表示op为1的时候做加法为0的时候做减法。module alu(input op, input[7:0] in1, input[7:0] in2, output[7:0] out) assign out op ? (in1in2) : (in1-in2);看到上面的代码估计不少人大跌眼镜莫非传说中的alu就这么简陋。没错如果你只要做加法和减法而且不考虑进位和溢出的ALU就是这么easy的。好了cpu的运转过程包括加载指令解码指令执行指令大家都知道。我们还要使用流水线技术虽然这里不用也许更简单但我们的目标是学习。 一 | 加载指令1 | 加载指令2 | 加载指令3 | ..........-------------------------------------------------------------------------- 二 | | 解码1 执行1 | 解码2 执行2 | 解码3 执行3我们可以看到加载和解码和执行并没有在一个周期中完成而是分开了在运行第二条指令的时候CPU正在加载第三条指令一心二用事事不耽搁。clkcnt;always (posdge clk) if(nCS) clkcnt 0; instr 0; else instr rom_dat_out;下面是CPU的解码和执行过程always (posdge clk) if(!nCS) casex(instr) 16b0000_0000_????_????: //MOV begin acc instr[7:0]; pc pc 16h0001; end 16b0000_0001_????_????: //ADD begin acc aluout; pc pc 16h0001; end 16b0000_0010_????_????: //SUB begin acc aluout; pc pc 16h0001; end 16b1???_????_????_????: //JMP begin pc instr[14:0]; pc pc 16h0001; end下面完成CPU核心和ALU之间的连线assign aluop (instr[15:8]8h01);assign aluin1 acc;assign aluin2 instr[7:0];alu alu1(aluop, aluin1, aluin2, aluout);有人说只看到执行指令没看到解码指令的过程有木有啊当然有16b0000_0000_????_???? MOV16b0000_0001_????_???? ADD16b0000_0010_????_???? SUB16b1???_????_????_???? JMP这几个逐个的case不就是在做解码只是没有独立的解码步骤而已因为太简单了嘛。还有个地方我故意做了遗漏就是JMP指令的处理。所谓流水线就是取指和执行是同时的但JMP的到来带来了异常。正常都是PC加一所以取指其实一直在取下一条指令而JMP的目标是不确定的所以取的指令就不对了我们一般称之为预测失败然后继续取JMP目标地址的指令但执行部分会有一个空的指令周期。从CPU的用户角度看就是JMP指令要使用2个指令周期。CPU的设计基本到此结束了。。