现代计算机组成原理潘明潘松编著科学出版社第6章16位CISCCPU设计6.1顶层系统设计6.1.116位CPU的组成结构图6-116位CPU结构框图6.1顶层系统设计6.1.2指令系统设计(1)单字指令1.指令格式表6-1单字节指令格式6.1顶层系统设计(2)双字指令表6-2双字指令格式表6-3双字节指令6.1顶层系统设计6.1.2指令系统设计2.指令操作码表6-4操作码功能表6.1顶层系统设计6.1.2指令系统设计2.指令操作码表6-5常用指令举例6.1顶层系统设计6.1.3顶层结构的VHDL设计1.CPU元件的VHDL描述【例6-1】CPU_LIB.VHDlibraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;packagecpu_libistypet_shiftis(shftpass,shl,shr,rotl,rotr);subtypet_aluisunsigned(3downto0);(接下页)6.1顶层系统设计6.1.3顶层结构的VHDL设计1.CPU元件的VHDL描述constantalupass:unsigned(3downto0):=0000;constantandOp:unsigned(3downto0):=0001;constantorOp:unsigned(3downto0):=0010;constantnotOp:unsigned(3downto0):=0011;constantxorOp:unsigned(3downto0):=0100;constantplus:unsigned(3downto0):=0101;constantalusub:unsigned(3downto0):=0110;constantinc:unsigned(3downto0):=0111;constantdec:unsigned(3downto0):=1000;constantzero:unsigned(3downto0):=1001;typet_compis(eq,neq,gt,gte,lt,lte);subtypet_regisstd_logic_vector(2downto0);typestateis(reset1,reset2,reset3,reset4,reset5,reset6,execute,nop,load,store,move,load2,load3,load4,store2,store3,store4,move2,move3,move4,incPc,incPc2,incPc3,incPc4,incPc5,incPc6,loadPc,loadPc2,loadPc3,loadPc4,bgtI2,bgtI3,bgtI4,bgtI5,bgtI6,bgtI7,bgtI8,bgtI9,bgtI10,braI2,braI3,braI4,braI5,braI6,loadI2,loadI3,loadI4,loadI5,loadI6,inc2,inc3,inc4);subtypebit16isstd_logic_vector(15downto0);endcpu_lib;6.1顶层系统设计6.1.3顶层结构的VHDL设计1.CPU元件的VHDL描述【例6-2】top.vhdlibraryIEEE;useIEEE.std_logic_1164.all;usework.cpu_lib.all;entitytopisendtop;architecturebehaveoftopiscomponentmemport(addr:inbit16;sel,rw:instd_logic;ready:outstd_logic;data:inoutbit16);endcomponent;componentcpuport(clock,reset,ready:instd_logic;addr:outbit16;rw,vma:outstd_logic;data:inoutbit16);endcomponent;signaladdr,data:bit16;signalvma,rw,ready:std_logic;signalclock,reset:std_logic:='0';beginclock=notclockafter50ns;reset='1','0'after100ns;m1:memportmap(addr,vma,rw,ready,data);u1:cpuportmap(clock,reset,ready,addr,rw,vma,data);endbehave;6.1顶层系统设计6.1.3顶层结构的VHDL设计2.顶层文件的原理图设计(接下页)图6-2CPU顶层结构图6.1顶层系统设计6.1.3顶层结构的VHDL设计3.CPU与LCD显示模块的接口图6-3显示模块dsp的实体结构图6.1顶层系统设计6.1.3顶层结构的VHDL设计3.CPU与LCD显示模块的接口图6-4LCD显示屏的数据显示6.1顶层系统设计6.1.4软件设计实例表6-6示例程序WIDTH=16;DEPTH=256;ADDRESS_RADIX=HEX;DATA_RADIX=HEX;CONTENTBEGIN0:2001;--源操作数(10)送REG11:0010;--2:2002;--目的操作数(30)送REG23:0030;--4:2006;--结束地址(2f)送REG65:002f;--6:080b;--取数7:101a;--存数8:300e;--比较R1R6?9:0000;--若yes,则停止a:3801;--修改源指针R1=R1+1b:3802;--修改目的指针R2=R2+1c:280d;--goto[06]单元地址,循环d:0006;--e:0000;;-----地址10H—2fH单元为数据块f:0001;10:0002;11:0003;12:0004;13:0005;14:0006;15:0007;16:0008;17:0009;18:000a;19:000b;1a:000c;1b:000d;1c:000e;1d:000f;1e:0010;1f:0011;20..7F::0000;END;表6-7存储器初始化文件RAM_16.mif的内容6.2CPU基本部件设计6.2.1运算器ALU表6-8运算器ALU的功能操作说明0000C=A通过PASS0001C=AANDB与0010C=AORB或0011C=NOTA非0100C=AXORB异或0101C=A+B加法0110C=A–B减法0111C=A+1加11000C=A–1减11001C=0清0Sel输入a[15..0]b[15..0]sel[3..0]c[15..0]aluinst图6-5运算器ALU结构图6.2CPU基本部件设计6.2.1运算器ALU图6-5运算器ALU结构图【例6-3】alu.vhdlibraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;usework.cpu_lib.all;entityaluisport(a,b:inbit16;sel:int_alu;c:outbit16);endalu;architecturertlofaluisbeginaluproc:process(a,b,sel)begincaseseliswhenalupass=c=aafter1ns;whenandOp=c=aandbafter1ns;whenorOp=c=aorbafter1ns;whenxorOp=c=axorbafter1ns;whennotOp=c=notaafter1ns;whenplus=c=a+bafter1ns;whenalusub=c=a-bafter1ns;wheninc=c=a+0000000000000001after1ns;whendec=c=a-0000000000000001after1ns;whenzero=c=0000000000000000after1ns;whenothers=c=0000000000000000after1ns;endcase;endprocess;endrtl;6.2CPU基本部件设计6.2.1运算器ALU图6-6运算器ALU的仿真波形⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾6.2CPU基本部件设计6.2.1运算器ALU表6-9ALU运算仿真结果说明sel输入数据运算结果cab(1)0000C=A,C=4567(2)0001与C=AANDB=4567∧23AC=0124(3)0010或C=AORB=4567∨23AC=67EF(4)0011非C=NOTA=BA98(5)0100异或C=AXORB=A⊕B=4567⊕23AC=66CB(6)0101加法C=A+B=4567+23AC=6913(7)0110减法C=A–B=4567-35AC=0FBB(8)0111加1C=A+1=4567+1=4568(9)1000减1C=A–1=4567-1=4566(10)1001清0C=0000(11)其它C=0000工作点波形功能选择运算类型通过PASS4567456745674567454674567456745674567xxxxxxxxxxxxxxxx23AC23AC23AC23AC35AC1010~11116.2CPU基本部件设计6.2.2比较器COMP表6-10比较器的运算类型t_comp比较类型操作说明000eq(等于)若a=b,compout=1001neq(不等于)若ab,compout=1010gt(大于)若ab,compout=1011gte(大于等于)若a=b,compout=1100lt(小于)若ab,compout=1101lte(小于等于)若a=b,compout=1其他compout=0其他6.2CPU基本部件设计6.2.2比较器COMP图6-7比较器结构图a[15..0]b[15..0]sel[2..0]compoutcompinst6.2CPU基本部件设计6.2.2比较器COMP【例6-4】COMP.VHDlibraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;useIEEE.std_logic_unsigned.all;usework.cpu_lib.all;entitycompisport(a,b:inbit16;sel:int_comp;compout:outstd_logic);endcomp;architecturertlofcompisbegincompproc:process(a,b,sel)begincaseseliswheneq=ifa=bthencompout='1'after1ns;elsecompout='0'after1ns;endif;whenneq=ifa/=bthencompout='1'after1ns;elsecompout='0'after1ns;endif;whengt=ifabthencompout='1'after1ns;elsecompout='0'after1ns;endif;whengte=ifa=bthencompout='1'after1ns;elsecompout='0'after1ns;endif;whenlt=ifabthencompout='1'after1ns;elsecompout='0'after1ns;endif;whenlte=ifa=bthencompout='1'after1ns;elsecompout='0'after1ns;endif;endcase;endprocess;endrtl;6.2CPU基本部件设计6.2.2比较