计算机组成CPU数据通路verilog实验报告.doc
- 格式:doc
- 大小:79.01 KB
- 文档页数:12
西安邮电大学Verilog HDL大作业报告书学院名称:电子工程学院学生姓名:专业名称:电子信息工程班级:实验一异或门设计一、实验目的(1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容my_or,my_and和my_not门构造一个双输入端的xor门,其功能是计算z=x’y+xy’,其中x和y为输入,z为输出;编写激励模块对x和y的四种输入组合进行测试仿真1、实验要求用Verilog HDL 程序实现一个异或门,Modelism仿真,观察效果。
2、步骤1、建立工程2、添加文件到工程3、编译文件4、查看编译后的设计单元5、将信号加入波形窗口6、运行仿真实验描述如下:module my_and(a_out,a1,a2);output a_out;input a1,a2;wire s1;nand(s1,a1,a2);nand(a_out,s1,1'b1);endmodulemodule my_not(n_out,b);output n_out;input b;nand(n_out,b,1'b1); endmodulemodule my_or(o_out,c1,c2);output o_out;input c1,c2;wire s1,s2;nand(s1,c1,1'b1);nand(s2,c2,1'b1);nand(o_out,s1,s2); endmodulemodule MY_XOR(z,x,y);output z;input x,y;wire a1,a2,n1,n2;my_not STEP01(n1,x);my_not STEP02(n2,y);my_and STEP03(a1,n1,y);my_and STEP04(a2,n2,x);my_or STEP05(z,a1,a2); Endmodulemodule stimulus;reg X,Y;wire OUTPUT;MY_XOR xor01(OUTPUT,X,Y);initialbegin$monitor($time,"X=%b,Y=%b --- OUTPUT=%b\n",X,Y,OUTPUT);endinitialbeginX = 1'b0; Y = 1'b0;#5 X = 1'b1; Y = 1'b0;#5 X = 1'b1; Y = 1'b1;#5 X = 1'b0; Y = 1'b1;endendmodule二、实验结果波形图:三、分析和心得通过这次的实验,我基本熟悉Modelsim 软件,掌握了Modelsim 软件的编译、仿真方法。
计算机组成原理数据通路实验报告计算机组成原理实验报告计算机组成原理实验报告实验一基本运算器实验一、实验目的1. 了解运算器的组成结构2. 掌握运算器的工作原理3. 深刻理解运算器的控制信号二、实验设备PC机一台、TD-CMA实验系统一套三、实验原理1. (思考题)运算器的组成包括算数逻辑运算单元ALU(Arithmetic and Logic Unit)、浮点运算单元FPU(Floating Point Unit)、通用寄存器组、专用寄存器组。
①算术逻辑运算单元ALU (Arithmetic and Logic Unit)ALU主要完成对二进制数据的定点算术运算(加减乘除)、逻辑运算(与或非异或)以及移位操作。
在某些CPU中还有专门用于处理移位操作的移位器。
通常ALU由两个输入端和一个输出端。
整数单元有时也称为IEU(IntegerExecution Unit)。
我们通常所说的“CPU 是XX位的”就是指ALU所能处理的数据的位数。
②浮点运算单元FPU(Floating Point Unit)FPU主要负责浮点运算和高精度整数运算。
有些FPU还具有向量运算的功能,另外一些则有专门的向量处理单元。
③通用寄存器组通用寄存器组是一组最快的存储器,用来保存参加运算的操作数和中间结果。
④专用寄存器专用寄存器通常是一些状态寄存器,不能通过程序改变,由CPU自己控制,表明某种状态。
而运算器内部有三个独立运算部件,分别为算术、逻辑和移位运算部件,逻辑运算部件由逻辑门构成,而后面又有专门的算术运算部件设计实验。
下图为运算器内部原理构造图2. 运算器的控制信号实验箱中所有单元的T1、T2、T3、T4都连接至控制总线单元的T1、T2、T3、T4,CLR都连接至CON单元的CLR按钮。
T4由时序单元的TS4提供(脉冲信号),其余控制信号均由CON单元的二进制数据开关模拟给出。
控制信号中除T4为脉冲信号外,其余均为电平信号,其中ALU_B为低有效,其余为高有效。
计算机组成原理运算器实验报告计算机组成原理运算器实验报告1. 简介本报告旨在介绍我们小组进行的计算机组成原理运算器实验,包括实验目的、实验过程、实验结果以及总结。
2. 实验目的•理解运算器在计算机系统中的作用和原理。
•掌握运算器设计和实现的基本方法。
•熟悉计算机寄存器的结构和功能。
•熟练使用Verilog HDL进行电路设计和仿真。
3. 实验过程实验准备•阅读相关教材和文献,了解运算器的基本原理和设计方法。
•确定实验所需的功能和性能要求。
•分析运算器的输入输出信号及其功能。
•设计运算器的数据通路和控制逻辑。
运算器设计与实现1.根据实验要求,设计运算器的数据通路和控制逻辑,并使用Verilog HDL进行电路定义。
2.编写仿真测试程序,验证设计的运算器在不同情况下的正确性和性能。
3.将设计的电路综合为目标器件,并进行逻辑门级的仿真和验证。
4.将综合结果下载到目标芯片上进行验证和测试。
实验结果•实验结果表明,设计的运算器在满足要求的情况下能够正确地完成各种运算操作。
•通过仿真和验证,验证了运算器的正确性和性能。
4. 实验总结•本实验通过设计和实现计算机组成原理运算器,进一步加深了我们对运算器原理和设计的理解。
•验证了运算器的正确性和性能,提高了我们的动手实践能力和团队协作能力。
•在实验过程中,我们遇到了一些问题和挑战,但通过不断学习和尝试,最终解决了这些问题。
•通过本次实验,我们深刻认识到如何将理论知识应用于实际问题的重要性,同时也意识到了自己在计算机组成原理领域的不足之处,将继续努力提高自己的能力。
5. 参考文献•张泽民. 计算机组成原理. 电子工业出版社, 2018. •Patterson, D. A., & Hennessy, J. L. (2017). Computer Organization and Design: The Hardware Software Interface.Morgan Kaufmann.。
非常简单CPU数据通路设计实验目的:1.掌握CPU的设计步骤2.学会芯片的运用及其功能即是本次实验的主要内容是利用Quarters2仿真平台设计非常简单的CPU的数据通路,加深对CPU的分析和理解。
实验方法:在Quarter2环境下实现非常简单CPU数据通路的设计实验内容:绘制非常简单CPU的寄存器:一个8位累加器AC,一个6位的地址寄存器AR,一个6位的程序计数器PC,一个8位的数据寄存器DR,一个2位的指令寄存器IR。
其数据通路详见教材P。
注:6位寄存器、6位计数器两个元件的设计文件:reg6.gdf和cou6.gdf已经给出。
1、零件制作6位寄存器reg6.gdf(自行设计)6位计数器cou6.gdf(自行设计)8位寄存器(可选择74系列宏函数74273)8位计数器(由两个74161构成)2位寄存器(由D触发器构成,自行设计)6三态缓冲器(自行设计,可由74244内部逻辑修改而成)8三态缓冲器(选择74系列宏函数74244,或作修改)alu模块(自行设计,限于时间,其内部逻辑不作要求)2、选择器件,加入数据通路顶层图8位累加器AC:选择8位计数器6位地址寄存器AR:reg66位的程序计数器PC:cou68位的数据寄存器DR:选择8位寄存器2位的指令寄存器IR:选择2位寄存器3、为PC、DR加入三态缓冲器。
4、调整版面大小,器件位置。
5、设计地址引脚、数据引脚、8位内部总线,加入数据引脚到内部总线的缓冲器。
6、连接各器件之间以及到内部总线的线路,设计并标注各控制信号。
7、(选做)编译之后,给出微操作AR<-PC 的测试方法及仿真结果。
8、实验报告中应给出各元部件的实现方法、内部逻辑贴图、打包符号说明及顶层的“非常简单CPU”数据通路图。
实验步骤与具体过程分析基于前面非常简单CPU的讲解,我掌握了非常简单CPU的指令集结构及非常简单CPU的指令读取过程和执行过程,本次实验是在上次实验的基础之上完成非常简单CPU数据通路的设计,其步骤如下:(1)、AC累加器原理图如下:打包框图如下:分析: 8位累加器AC是由8位计数器(cou8)组成。
CPU计算机组成原理实验报告实验名称:CPU计算机组成原理实验一、实验目的:1.了解计算机硬件的基本组成原理,特别是CPU的工作原理;2.掌握计算机的组装和调试技能;3.熟悉计算机操作系统的安装和配置方法;4.学习使用计算机进行基本的应用程序开发。
二、实验设备和材料:1.CPU主机:包括主板、CPU、内存、硬盘等;2.显示设备:显示器、键盘、鼠标等;3.软件:操作系统、开发工具等。
三、实验步骤:1.将主板、CPU、内存、硬盘等硬件组件组装到主机箱中,连接电源、显示器、键盘、鼠标等外设;2.打开电源,按照BIOS界面提示进行主板和硬件设置;3.插入操作系统安装光盘,根据安装界面提示进行操作系统的安装;4.安装完成后,进入操作系统,根据提示进行相应驱动程序的安装和配置;5.打开开发工具,进行编程实践。
四、实验结果与分析:通过以上步骤,成功组装了一台计算机并安装了操作系统。
在操作系统中,能够正常运行各种应用程序,并且能够进行编程开发。
通过实验,可以清楚地了解到计算机硬件的组成原理,特别是CPU的工作原理。
CPU 作为计算机的核心部件,负责指令的执行和数据的处理。
通过对CPU的组装和调试,可以更深入地了解其工作原理和操作方法。
五、实验心得与体会:通过实验,我对计算机硬件的组装和设置有了更深入的理解。
计算机硬件的组成非常复杂,需要我们仔细阅读说明书,按照步骤进行操作。
在实验过程中,我们学会了解决一些常见的硬件问题,如硬件不兼容、连接错误等。
此外,操作系统的安装和配置也是非常重要的一步,只有正确地安装和配置操作系统,才能保证计算机的正常运行。
通过这个实验,我不仅学到了理论知识,还锻炼了实际操作的能力。
计算机的组装和调试需要我们仔细、耐心地进行,一丝不苟地对待每一步操作。
只有掌握了计算机组成原理,才能更好地理解和应用计算机技术。
通过实验,我深刻地认识到计算机是一台高度复杂的机器,它可以帮助我们解决各种问题,提高工作效率。
cpu设计实验报告CPU设计实验报告摘要:本实验旨在设计一个基本的中央处理器(CPU),并通过实验验证其性能和功能。
在设计过程中,我们使用了Verilog硬件描述语言和ModelSim仿真工具。
通过对CPU的设计和仿真实验,我们验证了CPU的正确性和性能,并对其进行了性能分析和优化。
1. 引言CPU是计算机系统中最核心的部件之一,它负责执行计算机指令和控制数据流动。
因此,设计一个高效、稳定的CPU对于计算机系统的性能至关重要。
本实验旨在通过Verilog硬件描述语言和ModelSim仿真工具,设计一个基本的CPU,并验证其性能和功能。
2. 设计过程我们首先对CPU的功能和性能进行了分析和规划,确定了CPU的基本架构和指令集。
然后,我们使用Verilog语言编写了CPU的硬件描述,并通过ModelSim进行了仿真验证。
在设计过程中,我们重点关注了CPU的时序逻辑、数据通路和控制逻辑,确保CPU能够正确地执行指令并保持稳定的性能。
3. 实验结果通过对CPU的设计和仿真实验,我们验证了CPU的正确性和性能。
我们使用了一系列的测试用例对CPU进行了功能和性能测试,并对其进行了性能分析和优化。
实验结果表明,我们设计的CPU能够正确地执行各种指令,并在性能上达到了预期的目标。
4. 总结和展望本实验通过Verilog硬件描述语言和ModelSim仿真工具,设计并验证了一个基本的CPU。
通过实验,我们对CPU的设计和性能有了更深入的了解,并对其进行了性能分析和优化。
未来,我们将进一步完善CPU的设计,提高其性能和功能,以满足计算机系统的需求。
综上所述,本实验为我们提供了一个宝贵的机会,通过实际设计和验证,深入了解了CPU的工作原理和性能特点,为我们今后的学习和研究打下了坚实的基础。
希望通过不懈的努力,我们能够设计出更加高效、稳定的CPU,为计算机系统的发展做出更大的贡献。
数据通路组成实验实验报告数据通路组成实验实验报告一、引言数据通路是计算机系统中的重要组成部分,它负责处理和传输数据,实现各个功能模块之间的协调和通信。
本实验旨在通过构建一个简单的数据通路,探索数据通路的组成和工作原理。
二、实验目的1. 理解数据通路的基本概念和功能;2. 掌握数据通路的组成和工作原理;3. 实践数据通路的设计和实现。
三、实验设备和材料1. 计算机;2. Verilog HDL开发环境;3. 开发板;4. 连接线。
四、实验步骤1. 设计数据通路的功能模块:包括输入模块、输出模块、运算模块等;2. 使用Verilog HDL语言编写各个功能模块的代码;3. 将各个功能模块进行连接,形成完整的数据通路;4. 在开发板上下载并运行数据通路的代码;5. 输入测试数据,观察数据通路的运行情况。
五、实验结果与分析在实验过程中,我们成功地设计并实现了一个简单的数据通路。
通过输入测试数据,我们观察到数据在各个功能模块之间的传输和处理过程。
数据通路能够正确地完成各个功能模块的任务,并将最终结果输出。
六、实验总结通过本次实验,我们深入了解了数据通路的组成和工作原理。
数据通路在计算机系统中起着至关重要的作用,它负责处理和传输数据,保证各个功能模块的正常运行。
通过实践,我们掌握了数据通路的设计和实现方法,提高了我们的计算机系统设计能力。
七、实验心得本次实验让我对数据通路有了更深入的了解。
通过实践,我不仅掌握了数据通路的组成和工作原理,还学会了使用Verilog HDL语言进行代码编写和调试。
这对我的计算机系统设计能力的提升具有重要意义。
八、参考文献[1] 《计算机组成与设计:硬件/软件接口》- David A. Patterson, John L. Hennessy[2] 《数字系统设计与Verilog HDL》- Mark Zwolinski九、附录实验代码和测试数据见附件。
以上为数据通路组成实验实验报告的简要内容。
专业:计算机科学与技术班级:CS1409学号:U**********名:***电话:158****5005邮件:*****************完成日期:2016.6.13 2016Verilog 语言·实验报告·计算机科学与技术学院目录1数据通路实验 (1)1.1实验目的 (1)1.2实验内容及要求 (1)1.3实验方案 (2)1.4实验步骤 (2)1.5故障及分析 (2)1.6仿真与结果 (3)1.7心得与体会 (4)2FSM实验 (5)2.1实验目的 (5)2.2实验内容及要求 (5)2.3实验方案 (6)2.4实验步骤 (6)2.5故障及分析 (7)2.6仿真与结果 (7)2.7心得与体会 (8)3意见和建议 (9)4附录 (10)1 数据通路实验1.1 实验目的综合应用掌握的简单组合电路和时序电路的设计方法,完成一个简单的数据通路的设计。
1.2 实验内容及要求1. 根据下图给出的数据通路(图中R0、R1和ACC是寄存器,+是加法器,其它则是多路选择器),完成相应的Verilog程序设计,图中数据线的宽度为8位,要求可以扩充至16位或者是32位;2. 根据下图给出的数据通路(图中SUM和NEXT是寄存器,Memory是存储器,+是加法器,==0是比较器,其它则是多路选择器),完成相应的Verilog程序设计,图中数据线的宽度为8位,要求可以扩充至16位或者是32位。
实验要求:程序必须自己编写,满足数据通路设计要求,综合结果正确。
1.3 实验方案根据要求,先把选择器、加法器、寄存器、比较器和存储器分模块编写,在主模块中根据数据通路调用即可。
题目中要求数据线宽度为8位,并且可以扩充至16位或32位,所以在前面定义WIDTH,利用parameter的参数传递功能来实现。
1.4 实验步骤1.分模块编写代码(见附录)2.运行综合Run Synthesis3.综合成功后检查RTL Analysis中的电路图Schematic1.5 故障及分析刚开始跑出来很多线是断的,后来发现是引脚对应部分的代码没有写完整。
计算机组成原理实验报告心得体会一、引言在计算机组成原理实验中,我有幸参与了多次实验,涵盖了CPU的设计与模拟、数据通路与控制器的实现、存储器的设计与测试等多个方面。
通过这些实验,我深刻认识到了计算机组成原理在实际应用中的重要性,同时也收获了许多宝贵的经验和心得体会。
二、CPU的设计与模拟通过这次实验,我深入了解了CPU的组成和原理。
我首先完成了对CPU的整体设计,包括指令集、指令译码、数据通路等方面的设计。
然后,我使用多种模拟软件,如Proteus和Logisim,对我设计的CPU进行模拟验证。
这个过程非常有趣,我能够通过模拟软件来观察CPU的内部执行过程,了解每个时钟周期中各个部件的工作情况。
通过实验,我深刻认识到了CPU对于计算机运行的关键作用,同时也意识到了CPU设计和优化的重要性。
三、数据通路与控制器的实现数据通路和控制器的实现是计算机组成原理中的核心部分之一。
在实验中,我使用Verilog语言进行了数据通路和控制器的设计和实现。
我首先对数据通路进行了拓扑图的设计,并使用Verilog语言将其转换为硬件描述。
接着,我设计了对应的控制器,实现了对数据通路的控制和调度。
通过这个实验,我深刻理解到了数据通路和控制器之间的紧密联系,以及二者的协同工作是如何实现计算功能的。
四、存储器的设计与测试存储器在计算机系统中具有关键的地位。
在实验中,我使用Verilog 语言设计了存储器的模块,并进行了相应的功能测试。
我设计了读取和写入操作,同时进行了多个读写操作的并发测试。
通过实验,我深刻认识到了存储器的重要性和设计原则,也意识到了存储器访问速度和容量的影响对于计算机性能的重要性。
五、其他实验心得在以上的实验之外,我还参与了其他一些实验,如中断、流水线和指令缓存等的设计与实现。
这些实验拓宽了我的视野,让我了解到计算机组成原理在实际应用中的诸多问题和挑战。
在实验过程中,我也遇到了许多困难,但通过团队合作和导师的帮助,我最终找到了解决问题的方法。
计算机组成与系统结构实验报告院(系):计算机科学与技术学院专业班级:学号:姓名:同组者:指导教师:实验时间: 2012 年 5 月 23 日实验目的:完成处理器的单周期cpu的设计。
实验仪器:PC机(安装Altebra 公司的开发软件 QuartusII)一台实验原理:控制器分为主控制器和局部ALU控制器两部分。
主控制器的输入为指令操作码op,输出各种控制信号,并根据指令所涉及的ALU运算类型产生ALUop,同时,生成一个R-型指令的控制信号R-type,用它来控制选择将ALUop输出作为ALUctr信号,还是根据R-型指令中的func字段来产生ALUctr信号。
实验过程及实验记录:1.设计过程:第一步:分析每条指令的功能,并用RTL来表示。
第二步:根据指令的功能给出所需的元件,并考虑如何将它们互连。
第三步:确定每个元件所需控制信号的取值。
第四步:汇总各指令涉及的控制信号,生成所反映指令与控制信号之间的关系图。
第五步:根据关系表,得到每个控制信号的逻辑表达式,据此设计控制电路。
2.完成代码的编写,并调试运行。
1)controlmoduleControl(op,func,Branch,Jump,RegDst,ALUSrc,ALUctr,MemtoReg, RegWr,MemWr,ExtOp);input [5:0] op,func;output regBranch,Jump,RegDst,ALUSrc,MemtoReg,RegWr,MemWr,ExtOp; output reg [2:0] ALUctr;always @(op)case(op)6'b000000:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;MemtoReg=0;RegWr=1;MemWr =0;case(func)6'b100000:ALUctr=3'b001;6'b100010:ALUctr=3'b101;6'b100011:ALUctr=3'b100;6'b101010:ALUctr=3'b111;6'b101011:ALUctr=3'b110;endcaseend6'b001101:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr =0;ExtOp=0;ALUctr=3'b010;end6'b001001:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr =0;ExtOp=1;ALUctr=3'b000;end6'b100011:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=1;RegWr=1;MemWr =0;ExtOp=1;ALUctr=3'b000;end6'b101011:beginBranch=0;Jump=0;ALUSrc=1;RegWr=0;MemWr=1;ExtOp=1;ALUctr=3' b000;end6'b000100:beginBranch=1;Jump=0;ALUSrc=0;RegWr=0;MemWr=0;ALUctr=3'b100; end6'b000010:beginBranch=0;Jump=1;RegWr=0;MemWr=0;endendcaseendmodule2)数据通路DataRoadmoduleDataRoad(Run,Clk,RegWr,MemWr,MemtoReg,RegDst,Branch,Jump,E xtOp,ALUctr,ALUSrc,busA,busB,busW,Instruction,Reg0,Reg1,Re g2,Reg3,Reg4,Mem1,Mem2,Mem3,Result,Im);inputRun,Clk,RegWr,MemWr,MemtoReg,RegDst,Branch,Jump,ExtOp,ALUS rc;input [2:0] ALUctr;output [31:0]Instruction,busA,busB,busW,Reg0,Reg1,Reg2,Reg3,Reg4,Mem1,M em2,Mem3,Result,Im;wire [31:0] busC,DataOut;wire [15:0] im;wire [4:0] Rs,Rd,Rt;wire Overflow,Zero;QZL qzl(Clk,Branch,Jump,Zero,Instruction,Run);assign Rs=Instruction[25:21];assign Rt=Instruction[20:16];assign Rd=Instruction[15:11];assign im=Instruction[15:0];Registerregister(Run,RegWr,Overflow,RegDst,Rd,Rs,Rt,busW,busA,busB ,Clk,Reg0,Reg1,Reg2,Reg3,Reg4);ALU alu(busA,busC,ALUctr,Zero,Overflow,Result);DataMem(Run,MemWr,Clk,busB,DataOut,Result,Mem1,Mem2,Mem3); MUX mux1(ALUSrc,busB,Im,busC);MUX mux2(MemtoReg,Result,DataOut,busW);Extender ext(im,Im,ExtOp);endmodule3)取指令module QZL(Clk,Branch,Jump,Zero,Instruction,Run);input Clk,Branch,Jump,Zero,Run;output [31:0] Instruction;wire [4:0] addmem;reg [29:0] PC;wire [29:0] Newpc,pc_1,pc_2,pc_3,pc_12,imm30;wire Branch_Zero;assign addmem={PC[2:0],2'b00};InsMem GetIns(addmem,Instruction);always @(negedge Clk)if(Run==1)beginPC<=Newpc;endelsebeginPC<=0;endassign pc_1=PC+1;assign imm30={{14{Instruction[15]}},Instruction[15:0]}; assign pc_2=pc_1+imm30;assign pc_3={PC[29:26],Instruction[25:0]};assign Branch_Zero=Branch&Zero;MUX m1(Branch_Zero,pc_1,pc_2,pc_12);MUX m2(Jump,pc_12,pc_3,Newpc);endmodulemodule InsMem(addmem,Instruction);input [4:0] addmem;output reg[31:0] Instruction;reg [31:0] Mem[31:0];always @(*)beginMem[0]<={6'b100011,5'b00000,5'b00001,5'b00000,5'b00000,6'b 000001};Mem[4]<={6'b100011,5'b00000,5'b00010,5'b00000,5'b00000,6'b 000010};Mem[8]<={6'b000000,5'b00001,5'b00010,5'b00011,5'b00000,6'b 100000};Mem[12]<={6'b101011,5'b00000,5'b00011,5'b00000,5'b00000,6' b000010};Mem[16]<={6'b001101,5'b00100,5'b00100,5'b11111,5'b11111,6' b111111};Mem[20]<={6'b000000,5'b00011,5'b00010,5'b00010,5'b00000,6' b100010};Mem[24]<={6'b000100,5'b00010,5'b00001,5'b00000,5'b00000,6' b001000};Mem[28]<={6'b000010,5'b00000,5'b00000,5'b00000,5'b00000,6' b000000};endalways @(*)。