您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > SAP-1 Cpu 电路设计
SAP-1Cpu电路设计一.SAP-1CPU及计算机的组成架构简介二.SAP-1CPU指令.寻址法.程序设计三.16*8的ROM设计与仿真四.SAP-1CPU设计与仿真实验目的:实验原理小组成员薛宝(20054440118)汪威(20054440119)高亮(20054440120)吴安乐(2005444021)陆仁聪(20054440122)谢素斌(20054440123)吴运兴(20054440124)江宪清(20054440126)一.SAP-1CPU及计算机的组成架构简介•所有寄存器是以三态(threestate)输出方式,连接至webus上。虽然现在不是使用传统TTL电路组成,而是使用CPLD&FPGA类型组件来实现它,这也就意味着图1的一些功能方块或一些控制线需要作部分调整或修改,但无论如何对于每个方块所扮演的角色,是绝对有必要了解的!Programcounter48InputandMAR4416*8RAMInstructiontegisterController/sequencer41248888AccumulatorA8Adder/subtractorBregisterOutputregisterBinarydisplay88888WbusLACLKEASUEULBCLKLOCLKCLRCLKL1E1CECLKLMEPCLRCPCLKCLKCLKCLRCLRCPEPLMCELIEILAEASUEULBLO图1:SAP-1结构说明:1.程序计数器它是一个4Bits的计数器,计数范围由0~15。主要功用是记录下每个执行的指令地址,并把这个地址传送至MAR寄存器存放。2.输入与MAR(MemoryAccessRegister)这个方块应分成两个部分,一个是接受由“输入”部分输入到RAM内存的外部程序和数据,另一部分“MAR”是用来在CPU执行上述所加载的程序时,暂存下一个要执行的指令地址。3.16×8RA这个RAM和其它的部分构成图10-1的SAP-1计算机,而且它的内存大小共有16地址×8位。所以这个RAM的地址总线是4bit,地址编码是由0000,0001,0010…1111,这个地址内容是由上述MAR传送过来,然后通过译码将地址存放的8位数据或指令输出至Wbus。•4.指令寄存器•属于CPU内的控制单元,主要是将在RAM的8位数据,通过Wbus后读入指令寄存器,然后再把数据一分为二,较高的4位属于指令部分,送至下一级的“控制器”,而较低的4位属于数据部分,将会被送至Wbus。5.控制器/序列发生器•这个项目也是属于CPU内控制单元的一部分,这个控制器在程序执行时,负责送出整个计算机的时序信号CLK,而且会把指令寄存器送来的4位指令,解译成12位的控制信号,由这组控制信号指挥其它的功能方块,完成该指令的运作。由于使用VHDL语言设计整个SAR-1,依照语法的使用,这部分会被省略,而且不会影响整个CPU运作。6.累加器累加器是个8位的缓冲寄存器,它是存放目前计算机执行的实时数据地方。不同的指令也将使它产生不同的工作方式。7.加减法器这个加减法器负责执行数学的加法和减法运算,而且运算的结果会放回“累加器”暂存。8.B寄存器这个寄存器用来配合“累加器”、“加减法器”,执行“加法”或“减法”的工作。9.输出寄存器这个输出寄存器的用途是,SAP-1CPU执行到“输出结果”的指令时,便将“累加器”的结果传至“输出寄存器”,所以它是负责存放输出结果,当然这个存放的结果是二进制形式的。10.二进制显示在图1的SAP-1计算机里,以8个LED作程序执行结果的显示,这个算是这台计算机的输出部分,而不是SAP-1CPU的功能方块。最后就VHDL语言设计的观点来对图1作设计分类:SAP-1CPU部分:程序计数器、MAR、指令寄存器、控制器/序列发生器、累加器、加减法器、B寄存器、输出寄存器。16×8MAR部分:考虑直接改成ROM的形式,这是因为程序执行时,它不接受外界输入。二.SAP-1CPU指令.寻址法.程序设计SAP-1的CPU指令,共有5个且可分成两种类型,如表指令运算码范例说明LDA0000LDA9H将9H内存的内容值加载累加器ADD0001ADDBH将BH的内存内容值和累加器内容值相加,再存放运算结果回累加器SUB0010SUBEH将EH的内存内容值和累加器内容值相减,再存放运算结果回累加器直接寻址法(DirectAddressing)指令运算码范例说明OUT1110OUT将累加器内容输出至“输出寄存器”HLT1111HLT结果CPU执行零位寻址法(ZeroAddressing)范例:•试使用SAP-1指令,执行下列运算结果。10+20+30-15=4B(十六进制)•解答:•首先将运算数据10,20,30,15依序放在9H-CH地址里•第一个指令写在0H地址,功能是先将10加载累加器,所以指令写成:LDA0H这是因为9H存放着数值10的内容•第二个指令写在1H地址,功能是将20加载B寄存器,然后与累加器里的10作相加后,再将结果30存回累加器,所以指令写成(地址AH内存数值20):ADDAH•第三个指令写成在2H地址,功能是将30加载B寄存器,然后与累加器里的30作相加后,再将结果60存回累加器,所以指令写成(地址BH内存放数值30数据):ADDBH•第四个指令写在3H地址,功能是将15加载B寄存器,然后与累加器里的60作相减后,再将结果4B存回累加器,所以指令写成(地址CH内存放数值15数据):SUBCN•第五个指令写在4H地址,是将累加器数值结果4B作输出显示,所以指令写成:OUT•第六个指令写在5H地址,功能在停止CPU运算,所以指令写成:HLT最后,整个程序和数据写在RAM里,机械码表示如下:地址汇编语言机械码0HLDA9H000010011HADDAH000110102HADDBH000110113HSUBCH001011004HOUT1110xxxx5HHLT1111xxxx6HXXXxxxxxxxx地址汇编语言机械码7HXXXxxxxxxxx8HXXXxxxxxxxx9H10H00010000AH20H00100000BH30H00110000CH15H00010101三.16*8的ROM设计与仿真范例:•配合SAP-1指令,设计16(Word)x8(Bit)的ROM,使其能够执行如下预算:10+14+18-20=1C(Hex)地址汇编语言机械码0HLDA9H000010011HADDAH000110102HADDBH000110113HSUBCH001011004HOUT111000005HHLT111100006HXXX000000007HXXX00000000地址汇编语言机械码8HXXX000000009H10H00010000AH14H00100100BH18H00011000CH20H00100000对于原本Don’tcare部分,直接写入0,这是因为Altera软件会将Don’tcare视为0处理.程序:ROM16_8.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYROM16_8isPORT(DATAOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);--DataOutputADDR:INSTD_LOGIC_VECTOR(3DOWNTO0);--ADDRESSCE:INSTD_LOGIC--ChipEnable);ENDROM16_8;ARCHITECTUREaOFROM16_8ISBEGINDATA=“00001001”WHENADDR=“0000”ANDCE=‘0’--LDA9H“00011010”WHENADDR=“0001”ANDCE=‘0’ELSE--ADDAH“00011011”WHENADDR=“0010”ANDCE=‘0’ELSE--ADDBH“00101100”WHENADDR=“0011”ANDCE=‘0’ELSE--SUBCH“11100000”WHENADDR=“0100”ANDCE=‘0’ELSE--OUT“11110000”WHENADDR=“0101”ANDCE=‘0’ELSE--HLT“00010000”WHENADDR=“1001”ANDCE=‘0’ELSE“00010100”WHENADDR=“1010”ANDCE=‘0’ELSE“00011000”WHENADDR=“1011”ANDCE=‘0’ELSE“00100000”WHENADDR=“1100”ANDCE=‘0’ELSE“00000000”;ENDa;程序说明:•实际上仍是使用when-else方式,以类似查表方式作ROM的设计.•这个ROM有个CE使能接脚,它必须为“0”时,才接受读取数据的命令.仿真结果:略四.SAP-1CPU设计与仿真SAP-CPU在前面所提的指令,它们执行的指令周期总长度基本上都是6个脉冲长度,这可以用下图说明S0S1S2S3S4S5(Fetch)磅(Execute)MachineCycleInstructionCycle图2:SAP-1指令周期(InstructionCycle)时序状态S0-S2范围为指令周期,而时序状态S3-S5为指令执行周期.下面是每个时序状态下,SAP-1CPU的工作任务:1.指令捉取周期(FetchCycle)(1)状态S0:(寻址状态,AddressState)这个状态下,“程序计数器”负责将所要执行的指令地址值传递至MAR存放.(2)状态S2:(增加状态,IncrementState)这个状态下,“程序计数器”的值加1,代表计数器将指针指向下一个要执行的指令地址值.例如:原先在状态S0时,“程序计数器”的值是01H,它会传递01H给“MAR”,然后在这个状态S1时,将内容值加1后变成02H,这样以便记录下次要执行的指令地址值.(3)状态S2:(记忆状态,MemoryState)这个状态下,将把记录在“MAR”里的指令地址值,送入“RAM”里后,由“RAM”读出该地址的指令码,再将该指令放入“指令寄存器”.有一点必须强调的是,不论是执行哪个指令,它们的状态S0-S2的动作方式都是相同的,不过状态S3-S5的动作方式就会因执行对那个指令而有所不同.2.指令执行周期•(1)LDA指令状态S3:这个状态下,上述的09H数据传入MAR,以便下个状态能取出该数值所代表的地址里的值,比如20H.状态S4:这个状态是将存放在“MAR”里的09数据,通过RAM读出09H地址的数据,比如是数值20H数值至“累加器”状态S5:这个状态下的LDA指令并没有作用(2)ADD指令状态S3:这个状态下,上述的AH数据将传入MAR,以便下个状态取出该数值所代表地址里的内容值,比如是数值14H状态S4:这个状态是将存放“MAR”里的AH数据,通过RAM读出AH地址内的数据状态S5:这个状态是将存在“累加器”和“B寄存器”的数值内容存放入“加减法器”相加后,再将相加结果放回“累加器”(3)SUB指令状态S3:这个状态下,上述的BH数据传入MAR,以便下个状态能取出该数值所代表地址里的值状态S4:这个状态是将存放在“MAR”的BH数据,通过RAM读出BH地址内的数据状态S5:这个状态是将存放在“累加器”和“B寄存器”的数值放入“加减法器”相减后,再将相减后结果放回“累加器”OUT指令状态S3:这个状态下,累加器的内容将经Wbus传至“输出寄存器”,然后显示在二进制显示装置.状态S4:这个状态OUT指令没有作用.状态S5:这个状态OUT指令没有作用(5)HLT指令状态S3:这个状态下“控制器/序列发生器”将停止送出脉冲信号CLK,这时SAP-1CPU会停止执行工作.状态S4:这个状态HLT指令没有作用状态S5:这个状态HLT指令没有作用SAP-1CPU设计1.使用Process
本文标题:SAP-1 Cpu 电路设计
链接地址:https://www.777doc.com/doc-12079 .html