
本书从数字电路与数字逻辑课程的组合逻辑、时序逻辑电路的设计开始,逐步构建计算机组成与体系结构及相关课程中的运算器、存储器和控制器,实现基于MIPS指令集的CPU。 本书采用Verilog HDL,以Vivado软件为EDA工具,在Xilinx FPGA平台上进行实验验证和设计,让读者掌握硬件功能的仿真与测试方法,具备计算机系统的设计能力。 全书共5章,包括:EDA基础和龙芯中科LS-CPU-EXB实验系统介绍,数字逻辑与数字电路实践,计算机组成原理实践,计算机体系结构实践,计算机组成与体系结构实践。附录简单介绍了Icarus Verilog开发环境及使用、Verilog HDL语法,给出了引脚对应关系表和部分MIPS指令。 本书可作为高等院校计算机类、电子信息类各专业的教材,也可供其他理工科专业选用或相关技术人员参考。
前 言 本书关注计算机系统能力培养的全过程,从数字逻辑与数字电路的组合逻辑、同步时序、数字系统的设计,到计算机组成与体系结构的运算器、存储器、控制器、CPU的设计,从易到难,层层递进,环环相扣。实践安排贯穿了计算机硬件系列课程,紧扣计算机系统硬件重点问题,引导读者利用Verilog HDL进行计算机主要功能部件设计和整机系统构建,结合功能仿真与系统测试,全方位培养构造能力、系统能力和工程能力。 一、本书特色 (1)贯穿计算机硬件系列课程,全面培养计算机系统能力 针对新形势下的工程教育认证要求,本书以成果导向的OBE教育理念为指导,围绕计算机系统能力培养的目标,精心组织计算机硬件体系系列课程实践。本书采用Verilog HDL,以Vivado软件为EDA工具,在Xilinx FPGA平台上进行实验验证和设计。 本书从数据选择器、译码器、计数器、寄存器等逻辑电路的设计出发,到运算器、控制器和存储器等基本部件,再逐层递进到简单计算机系统的设计,可以帮助读者深入理解计算机硬件系统,掌握硬件功能的仿真与测试方法,具备计算机系统的设计能力。 (2)开放的课程平台,线上线下同步学 本书的实验配有微课视频,通过生动、直观的视频讲解,可以提高读者学习效率。作者开设了湖南省线上线下混合一流课程“计算机组成与体系结构”课程,方便读者在系统学习理论知识的同时,可以自主进行实践训练。授课教师可以根据不同课程的教学需要,对部分章节内容进行灵活取舍,可根据学生具体情况选择相应的实验内容。 本书为读者提供了丰富的教学资源,包括教案和项目源代码等,实验操作均采用视频演示,方便读者快速上手。 本书配套的中国大学MOOC在线课程链接如下: http://www.i***163.org/learn/preview/XTU-1463206166?tid=1464015447#/learn/ (3)在线实训充满挑战性,硬件设计用编程实现 本书秉持硬件课程贯通实践的方案,从数字逻辑与数字电路的逻辑门设计到计算机组成与体系结构的CPU设计一脉相承。课程实训采用硬件描述语言进行设计,发布在头歌(Educoder)在线实训平台上,没有硬件的读者可以选择在线实训。每个实训都是一个挑战性的任务,具有一定的挑战性,让读者利用Verilog HDL编程实现硬件设计。头歌实训平台简单易用,可实现自动评分,使硬件实验和评测都变得轻松快意。 本书配套的在线实训包括以下2个实训课程,链接如下。 ① 数字逻辑与数字电路实训,用Verilog HDL玩转数字系统设计: https://www.ed***er.net/paths/1027 ② 计算机组成与设计实训—用Verilog HDL玩转计算机硬件系统设计: https://www.ed***er.net/paths/431? (4)紧扣计算机系统能力比赛,系统梳理竞赛知识点 本书紧扣计算机系统能力各类比赛,对复杂繁多的竞赛知识进行了系统梳理,关注比赛评测标准,帮助参加计算机系统大赛的选手快速突破“计算机系统设计”的重点难点,非常适合作为计算机系统能力各类比赛的参考资料。 二、本书内容 第1章简单介绍电子设计自动化技术EDA和硬件描述语言Verilog HDL,同时介绍Xilinx FPGA的开发工具Vivado的安装和使用方法,以及龙芯中科研制的计算机系统实验平台LS-CPU-EXB的硬件组成和电路结构。 第2章面向初学者,紧扣数字逻辑与数字电路课程内容,通过对数据选择器、译码器、计数器、移位寄存器等逻辑电路的设计,让读者深入理解基于FPGA的数字系统设计,为进一步掌握计算机系统的设计与开发方法奠定基础。 第3~5章紧扣计算机系统硬件重点问题,通过对运算器、存储器、控制器和CPU的设计,让读者掌握硬件功能的仿真与测试方法,具备计算机系统的设计能力。 三、致谢 在编写过程中,我们得到了湘潭大学计算机学院?网络空间安全学院领导、教师和实验技术人员的大力支持,以及湘潭大学教务处的关怀和鼓励。 教材的编写与实验室的建设和发展密切相关,感谢龙芯中科的工程师团队及李德国经理的大力支持和帮助。本书也参考了龙芯中科的相关资料和兄弟院校的理论教材、实验教材,我们在此一并表示感谢! 本书由成洁主编,周黎黎老师编写了第1章和附录D,成洁老师编写了第2章、第5章和附录E,王毅老师编写了第3章和附录A~C,肖赤心老师编写了第4章,湘潭大学黎自强教授对本书进行了全面的审阅,并提出了宝贵的修改意见。在此谨向他们表示衷心的感谢! 由于时间仓促和编者的水平有限,同时因FPGA芯片和EDA软件的不断更新换代,书中难免存在一些疏漏和遗憾之处,敬请各位专家和广大读者批评指正! 本书为任课教师提供配套的教学资源,需要者可登录华信教育资源网(http://www.hxedu.com.cn),注册后免费下载。 作 者
目 录 第1章 EDA基础和实验系统 1 1.1 EDA简介 1 1.2 Verilog HDL简介 1 1.3 Vivado安装及使用说明 3 1.3.1 Vivado安装说明 3 1.3.2 Vivado使用说明 9 1.4 LCD触摸屏调用方法 27 1.5 实验系统 33 第2章 数字逻辑与数字电路实践 40 2.1 三人表决电路实验 40 2.1.1 实验类别 40 2.1.2 实验目的 40 2.1.3 实验原理 40 2.1.4 实验内容和要求 40 2.1.5 实验步骤 41 2.1.6 可研究与探索的问题 46 2.1.7 源代码 47 2.2 数据选择器实验 47 2.2.1 实验类别 47 2.2.2 实验目的 47 2.2.3 实验原理 47 2.2.4 实验内容和要求 47 2.2.5 实验步骤 48 2.2.6 可研究与探索的问题 49 2.2.7 源代码 49 2.3 半加器和全加器实验 50 2.3.1 实验类别 50 2.3.2 实验目的 50 2.3.3 实验原理 50 2.3.4 实验内容和要求 50 2.3.5 半加器实验步骤 51 2.3.6 全加器实验步骤 52 2.3.7 可研究与探索的问题 55 2.3.8 源代码 55 2.4 七段数码显示译码器实验 55 2.4.1 实验类别 55 2.4.2 实验目的 55 2.4.3 实验原理 56 2.4.4 实验内容和要求 56 2.4.5 实验步骤 58 2.4.6 可研究与探索的问题 59 2.4.7 源代码 59 2.5 计数器实验 60 2.5.1 实验类别 60 2.5.2 实验目的 60 2.5.3 实验原理 60 2.5.4 实验内容和要求 60 2.5.5 实验步骤 61 2.5.6 可研究与探索的问题 63 2.5.7 源代码 63 2.6 移位寄存器实验 64 2.6.1 实验类别 64 2.6.2 实验目的 64 2.6.3 实验原理 64 2.6.4 实验内容和要求 64 2.6.5 实验步骤(方案二) 66 2.6.6 可研究与探索的问题 68 2.6.7 源代码(实验设计方案二) 68 2.7 序列信号发生器实验 73 2.7.1 实验类别 73 2.7.2 实验目的 73 2.7.3 实验原理 74 2.7.4 实验内容和要求 74 2.7.5 可研究与探索的问题 76 2.8 序列检测器实验 76 2.8.1 实验类别 76 2.8.2 实验目的 76 2.8.3 实验原理 76 2.8.4 实验内容和要求 77 2.8.5 可研究与探索的问题 78 2.9 数字钟实验 78 2.9.1 实验类别 78 2.9.2 实验目的 78 2.9.3 实验原理 79 2.9.4 实验内容和要求 79 2.9.5 可研究与探索的问题 80 2.10 交通灯控制器实验 80 2.10.1 实验类别 80 2.10.2 实验目的 80 2.10.3 实验原理 80 2.10.4 实验内容和要求 80 2.10.5 可研究与探索的问题 82 第3章 计算机组成原理实践 83 3.1 32位算术逻辑运算器实验 83 3.1.1 实验类型 83 3.1.2 实验目的 83 3.1.3 实验原理 83 3.1.4 实验内容和要求 84 3.1.5 可研究与探索的问题 85 3.2 存储器实验 85 3.2.1 实验类别 85 3.2.2 实验目的 85 3.2.3 实验原理 85 3.2.4 实验内容和要求 87 3.2.5 建议的实验步骤 87 3.2.6 可研究与探索的问题 89 3.3 指令系统实验 89 3.3.1 实验类别 89 3.3.2 实验目的 89 3.3.3 实验原理 89 3.3.4 实验内容和要求 90 3.3.5 可研究与探索的问题 90 3.4 单周期CPU实验 90 3.4.1 实验类别 91 3.4.2 实验目的 91 3.4.3 实验原理 91 3.4.4 实验内容和要求 92 3.4.5 可研究与探索的问题 92 3.5 多周期CPU实验 93 3.5.1 实验类别 93 3.5.2 实验目的 93 3.5.3 实验原理 93 3.5.4 实验内容和要求 94 3.5.5 可研究与探索的问题 95 3.6 中断实验 95 3.6.1 实验类别 95 3.6.2 实验目的 95 3.6.3 实验原理 95 3.6.4 实验内容和要求 96 3.6.5 可研究与探索的问题 97 第4章 计算机体系结构实践 98 4.1 流水线CPU设计 98 4.1.1 实验类别 98 4.1.2 实验目的 98 4.1.3 实验原理 99 4.1.4 实验内容和要求 103 4.1.5 实验步骤 104 4.1.6 可研究与探索的问题 110 4.2 流水线带Cache的CPU设计 110 4.2.1 实验类别 110 4.2.2 实验目的 110 4.2.3 实验原理 110 4.2.4 实验内容和要求 112 4.2.5 可研究与探索的问题 113 第5章 计算机组成与体系结构实践 114 5.1 ALU实验 114 5.1.1 实验类型 114 5.1.2 实验目的 114 5.1.3 实验原理 114 5.1.4 实验内容和要求 115 5.1.5 实验步骤 116 5.1.6 可研究与探索的问题 124 5.1.7 源代码 125 5.2 存储器实验 130 5.2.1 实验类型 130 5.2.2 实验目的 130 5.2.3 实验原理 130 5.2.4 实验内容和要求 131 5.2.5 FPGA中ROM定制与读出实验步骤 131 5.5.6 FPGA的RAM定制与读写实验 137 5.2.7 可研究与探索的问题 139 5.2.8 源代码 140 5.3 多周期控制器实验 144 5.3.1 实验类型 144 5.3.2 实验目的 144 5.3.3 实验原理 144 5.3.4 实验内容和要求 145 5.3.5 实验步骤 146 5.3.6 可研究与探索的问题 148 5.3.7 源代码 148 5.4 多周期CPU实验 153 5.4.1 实验类型 153 5.4.2 实验目的 153 5.4.3 实验原理 153 5.4.4 实验内容和要求 155 5.4.5 实验步骤 156 5.4.6 可研究与探索的问题 157 5.4.7 源代码 157 附录A Icarus Verilog开发环境及使用 161 A.1 Icarus Verilog的安装 161 A.2 Icarus Verilog环境变量设置 162 A.3 Icarus Verilog的使用 163 附录B Verilog HDL语法简介 171 B.1 Verilog HDL基本结构 171 B.2 数据类型及常量、变量 173 B.3 运算符 175 B.4 语句 176 B.5 编译预处理语句 182 B.6 测试台、系统任务和函数 183 附录C 实验报告 185 附录D 引脚对应关系表 188 附录E MIPS指令 193 参考文献 203