计算机组成原理实验报告二题目:Datapath基本逻辑组件设计一、实验目的1.掌握程序计数器(PC)、多路选择器、符号扩展模块及简单加法器的原理及原理2.ALU基本模块的设计与实现3.基于XilinxISE软件平台的逻辑组件仿真验证方法二、实验设备1.装有ISE的计算机一台2.EDK-3SAISE实验平台三、实验任务1.设计并验证程序计数器(PC)的功能2.设计并验证多路选择器的功能3.设计并验证符号扩展模块的功能4.设计并验证简单加法器的功能四、实验步骤程序计数器(PC)用于控制机器指令的执行顺序,实际上是存放指令的内存地址。计算机由指令指针来控制程序指令的顺序执行,CPU根据这个地址来读取当前要执行的指令,每执行一条指令都要改变PC的值。正常运行时,输出并更新当前PC值。以后要完成的简单计算机内存组织形式为32bit*512,因此地址宽度为9位。又因为内存地址宽度为32位,所以每次PC加1而不是加4,其基本工作原理如下在以字为单位寻址的存储器中,对于指令字、数据的寻址有一个是否对齐的问题。对于指令寻址,每一条指令刚好为一个字,必须设置其与存储器的字对齐即指令字地址的低2位始终为0。而对于数据寻址,有读写字节、半字、字等操作,如果没有与存储器字对齐需要额外的总线操作。当低2位不为0时需要对读入的数据根据要求进行重新组合。如果读一个字节,先读入包含这个字节的字然后再通过移位、逻辑与的方式取出相应的字节。如果是读一个字或半字则需要先读入存储器中包含这个字或半字相邻的两个字在进行移位、逻辑与、逻辑或等操作组合成所需的数据字或半字。数据的写入同样需要额外的处理,这些额外的处理会使访问存储器的速度变慢。因此有些机器的编译器在对数据操作时自动选择按字边界对齐。数据选择器是基本的逻辑电路,在VerilogHDL中一般用case语句生成一个多路选择器,但如果是二路选择器也可以采用三目运算符?实现。(参考源程序包括多个数据选择器)。符号扩展模块用于将短字长数据扩展成长字长数据。由于在计算机内部整数均以补码形式表示,按照补码运算规则对整数进行字长扩展时最高位填充的数据位与数据本身的符号位有关。如果数据大于零即最高符号位为0则高位扩展填充位均为0;如果数据小于零即最高符号位为1则高位扩展填充位均为1。本模块主要用于CPU设计中将16位的输入扩展为32位的输出。按照以上的扩展规则,当第16位为1时,扩展位用1填充,为0时扩展位用0填充。加法器实现两个数的相加,在VerilogHDL中只需要直接用’+’就会自动生成加法器,本实验所做加法器将在后面的CPU设计中使用。1、开启ISE9.1i软件:[程序]-[XilinxISE9.1i]-[ProjectNavigator]。会出现ISE9.1i的画面,画面打开时候,会出现[TipoftheDay],可以将之关掉。2、在ISE9.1软件环境下,开启一个新的工程:[File]-[NewProject],工程名为PcTest,设置[ProjectLocation],Top-LevelModuleType选择为Verilog。(注意工程路径不要有中文)3、下一个画面就是设定硬件组件的参数[FPGA系列(DeviceFamily)]:Spartan3AandSpartan3AN(请看板子的FPGA的编号)[FPGA名称(Device)]:XC3S200AN(请参考开发板的FPGA的编号)[FPGA包装(Package)]:FT256(请参考开发板的FPGA组件的编号)[FPGA速度等级(Speed)]:-4(FPGA速度等级)[综合器工具(SynthesisTool)]:XST[仿真器(Simulator)]:ISESimulator(ISE9.1内建的仿真器)[产生仿真器的语言(GeneratedSimulationLanguage)]:Verilog4、下一个画面CreateaNewSource先跳过,按[下一步].下一个画面AddaExistingSource亦跳过,按[下一步].此时出现此项目所有设定的信息,若需重新设定,则可[上一步].若无误,则按[完成]。5、[Project]-[NewSource];选择VerilogModule,分别建立程序计数器模块的两个子模块PcAdder和PcBuffer和顶层模块Pc,具体源代码查看附件。注意建立源文件时端口要选择正确,包括总线宽度以及输入输出特性。各个模块源文件输入后应该具有以下文件结构:6、建立仿真测试文件,[Project]-[NewSource];选择VerilogTestFixture,并取文件名为PcTest。7、选择测试对象为Pc8.输入测试文件,注意理解其中的含义,最关键的是产生时钟信号以及相关的输入。9.选择BehavioralSimulation,并选中PcTest文件,然后双击SimulateBehavioralModel运行放着。10.仿真运行完毕后查看仿真结果,点击Simulation即可以查看。11.仿真结果如下程序计数器(PC)功能:用来存放下一条指令的地址的。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指今的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令!12.依据上述步骤,分别仿真Mux1、Mux5、Mux9、Mux32、SignExt以及Adder模块并结合波形产生源文件以及仿真结果波形解释这些模块的功能以及其正确性。五、实验结果(此部分需要自己补充,根据程序功能进行相应的测试,可以贴图--用手机拍实验结果或对仿真结果进行截图)13.Mux1仿真结果如下:该相应模块的功能是一位二路选择器。14.Mux5仿真的结果如下:该相应模块的功能是五位二路选择器。16.Mux9仿真结果如下:该相应模块的功能是九位二路选择器。17.Mux32仿真结果如下:该相应模块的功能是32位二路选择器。18.SignExt仿真结果如下:该相应模块的功能是把16位有符号数转32位。19.Adder仿真结果如下:该相应模块的功能是32位的加法器。六、问题分析、实验心得和建议问题分析:1.Mux1是一位二路选择器;Mux5是5位二路选择器;Mux9是9位二路选择器;Mux32是32位二路选择器;数据选择器是基本的逻辑电路,在VerilogHDL中一般用case语句生成一个多路选择器,但如果是二路选择器也可以采用三目运算符?实现。2.SignExt是把16位有符号数转32位;符号扩展模块用于将短字长数据扩展成长字长数据。由于在计算机内部整数均以补码形式表示,按照补码运算规则对整数进行字长扩展时最高位填充的数据位与数据本身的符号位有关。如果数据大于零即最高符号位为0则高位扩展填充位均为0;如果数据小于零即最高符号位为1则高位扩展填充位均为1。本模块主要用于CPU设计中将16位的输入扩展为32位的输出。按照以上的扩展规则,当第16位为1时,扩展位用1填充,为0时扩展位用0填充。3.Adder是32位的加法器。加法器是为了实现加法的,在VerilogHDL中只需要直接用’+’就会自动生成加法器。4.程序计数器(PC)功能:用来存放下一条指令的地址的。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指今的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令!实验心得:掌握了程序计数器(PC)、多路选择器、符号扩展模块及简单加法器的原理及原理。七、附件(查看独立源文件,附于附件中)