一、设计目的
完整、连贯地运用《数字逻辑》所学到的知识,熟练掌握 EDA 工具基本使用方法,为学习好后续《计算机原理》课程做铺垫。

二、设计内容
① 按照给定的数据通路、数据格式和指令系统,使用 EDA 工具设计一台用硬连线逻
辑控制的简易计算机;
② 要求灵活运用各方面知识,使得所设计的计算机具有较佳的性能;
③ 对所设计计算机的性能指标进行分析,整理出设计报告。

三、详细设计
3.1设计的整体架构
模型机的基本结构和整体框架大致如下面三张图所示。



3.2各模块的具体实现
1.寄存器组+ALU+移位逻辑
① 寄存器组
设计寄存器组,包括寄存器组的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


clk为时钟信号,WE为写入使能,RA和WA分别为对应源和目的的地址,i为从总线上输入到寄存器组的8位信号,S,D分别为寄存器组的源口输出和目的口输出。

功能设计实现部分如下图:

功能设计实现部分如上图,A,B,C信号分别为A,B,C三个寄存器,用于储存中间信号。
当时钟处于下降沿并且WE信号为‘0’时(WE信号为逆逻辑信号,低电平时有效),根据WA信号,在A,B,C三个寄存器中选择对应的寄存器存储总线来的输入i(WA=“00”选择A寄存器,WA=“01”选择B寄存器,WA=“10”选择C寄存器);其余时候,A,B,C寄存器内值不变。
S,D口输出不受时钟沿控制,换句话说,S口D口随时有数据输出。根据RA信号,在A,B,C三个寄存器中选择对应的寄存器内的值,从S口输出(RA=“00”输出A,RA=“01”输出B,RA=“10”或“11”输出C);根据WA信号,在A,B,C三个寄存器中选择对应的寄存器内的值,从D口输出(WA=“00”输出A,WA=“01”输出B,WA=“10”或“11”输出C)。

功能仿真如下图所示:


从波形仿真来看,在时钟下降沿且WE=‘0’时,根据输入i和WA信号,在A,B,C寄存器中分别储存了00000001,00000010,00000011的值,在后续的读取操作中,当RA=’00’时,S口输出A寄存器中的00000001,;当RA=’01’时,S口输出B寄存器中的00000010,;当RA=’10’时,S口输出C寄存器中的00000011,;同理,D口也受WA控制输出对应寄存器中的值。
可见,寄存器组可以完成预计的指令。

② ALU
设计ALU,包括ALU的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


M=1表示ALU进行逻辑运算操作,包括或运算、非运算;输入s1位指令的高四位,用于区分ALU发生的不同函数操作;S,D分别接收来自寄存器组S口、D口输送来的信号;T为经过函数发生器后的八位输出信号;cf用于存储进位位,zf用于记录输出是否为0值,若输出为0则zf值为1,反之zf为0。

功能设计实现部分如下图:

功能设计实现部分如上图,trans1,trans2信号分别为D口输入、S口输入值的九位信号(最高位为进位位)。
当M=‘1’时,进行逻辑运算。如果指令的高四位s1=”1011”,进行或运算,s1=“0101”,进行非运算,此时cf和zf的值不变。
当M=‘0’时,进行算术运算。如果指令的高四位s1=”1001”,进行’+’运算,进位位存储在cf中,若计算结果为0,则zf=1,否则zf=0;指令的高四位s1=”0110”,进行’-’运算,借位位存储在cf中,若计算结果为0,则zf=1,否则zf=0;指令的高四位s1=”1111”,进行MOVE操作,此时直接将S口的输入输出即可,zf,cf值均为0;指令的高四位s1=”1010”,进行移位操作,此时直接将S口的输入输出到移位逻辑即可,zf,cf值均为0;

功能仿真如下图所示:


从波形仿真来看,M=0,sl=1001,进行加法运算:T=S+D=15+63=78,此时无进位,进位位cf=0;T不为0,zf=0;T=S+D=0+0=0,此时无进位,进位位cf=0;T为0,zf=1;T=S+D=64+249=57(+266),此时进位位cf=1;T不为0,zf=0。
M=0,sl=0110,进行减法运算:T=S-D=26-15=11,此时无借位,借位位cf=0;T不为0,zf=0;T=S-D=0-1=0,因为采用转化为补码运算,此时有借位,cf=1;T为0,zf=1;T=S-D=15-26=(-)11,此时借位位cf=1;T不为0,zf=0。
M=1,sl=1011,进行或逻辑运算。T=S OR D=12(00001100) OR 19(00010011)=31(00011111);M=1,sl=0101,进行非逻辑运算。T=NOT D=NOT 63(00111111)=192(11000000)。
M=1,sl=1111,输出S,T=S=27;M=1,sl=1010,输出D,T=D=77。
可见,ALU可以完成预计的指令。

③ 移位逻辑
设计移位逻辑,包括移位逻辑的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


Fbus,flbus,frbus分别控制移位逻辑的直通、左移位和右移位;a为ALU到移位逻辑的输入;cf存储左移或者右移时移位最大的那一个信号值;w为移位逻辑的八位数出。

功能设计实现部分如下图:

功能设计实现部分如上图,fbus=’1’时,直通,输出w=a,cf为0;flbus=’1’时,进行左移操作,同时cf储存最高位;frbus=’1’时,进行右移操作,同时cf储存最低位。

功能仿真如下图所示:

从波形仿真来看,fbus=1,flbus=frbus=0,a向量11110000直达通过移位模块,输出w为11110000,此时cf保持原值不变;flbus=1,fbus=frbus=0,a向量11110000左移一位,输出w为11100001,并将第一位的移位数值1传给cf;frbus=1,fbus=flbus=0,a向量11110000右移一位,输出w为01111000,并将最后一位的移位数值0传给cf。
可见,移位逻辑可以完成预计的指令。

2.PC+多路选择器+RAM
① PC
设计ALU,包括ALU的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


clk为时钟信号,LD_PC,IN_PC分别控制PC的加载和累加;a为总线对PC的输入,c为PC对多路选择器的输出。

功能设计实现部分如下图:

功能设计实现部分如上图,trans信号为PC的初始默认值。
时钟下降沿时,如果IN_PC=‘1’ 并且 LD_PC=‘0’,PC进行自加1;如果IN_PC=‘0’ 并且 LD_PC='1,PC加载a输入;其他情况时,PC值不变。
当时钟不处于下降沿的其他时间,PC值不变。

功能仿真如下图所示:

从波形仿真来看:
处于时钟下降沿,IN_PC=1,LD_PC=0,对c进行自加操作,c=00000000+00000001=00000001;
处于时钟下降沿,IN_PC=0,LD_PC=1,对c进行传输a值操作,c=a=10101010;
处于时钟下降沿,IN_PC=1,LD_PC=0,对c进行自加操作,c=10101010+00000001=10101011;
处于时钟下降沿,IN_PC=1,LD_PC=0,对c进行自加操作,c=10101011+00000001=10101100;
处于时钟下降沿,IN_PC=0,LD_PC=1,对c进行传输a值操作,c=a=10101010;
处于时钟下降沿,IN_PC=0,LD_PC=1,对c进行传输a值操作,c=a=10101010。

可见,PC可以完成预计的指令。

② 多路选择器
设计多路选择器,包括多路选择器的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


x,y,z分别接收来自PC、S口、D口的输入信号;s为WADD选择器的选择输入值,通过s来控制选择哪组数据;d为多路选择器的选择输出。

功能设计实现部分如下图:

功能设计实现部分如上图,当s=”00”时,d口输出来自PC的x信号;当s=”01”时,d口输出来自S口的y信号;当s=”10”时,d口输出来自D口的z信号;其余以后多路选择器不输出信号,即输出高阻”ZZZZZZZZ”。

功能仿真如下图所示:

从波形仿真来看,s=00,输出d=x=1;s=01,输出d=y=2;s=10,输出d=z=3;其余时间无输入,对应输出高阻。

可见,多路选择器可以完成预计的指令。

③ RAM
设计RAM,包括RAM的接口设计、功能实现、功能仿真。
其中,接口设计和功能设计实现如下图:

功能仿真如下图所示:

从波形仿真来看:
时钟信号处于上升沿,DL=1,XL=0,进行读取操作,RAM从目的地址[0]处读取数据,从输出口输出,DATAOUT=[0]=0;
时钟信号处于上升沿,DL=1,XL=0,进行读取操作,RAM从目的地址[1]处读取数据,从输出口输出,DATAOUT=[1]=1;
时钟信号处于上升沿,DL=0,XL=1,进行写入操作,RAM从将输入DATAIN写入目的地址[1]处,[1]=10,此时输出DATAOUT=[1]=10;
时钟信号处于上升沿,DL=1,XL=0,进行读取操作,RAM从目的地址[1]处读取数据,从输出口输出,DATAOUT=[1]=10;;
其余时间,当DL=XL=0时,输出DATAOUT=Z为高阻。
可见,RAM可以完成预计的指令。

3.指令译码器+指令寄存器
① 指令译码器
设计指令译码器,包括指令译码器的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


EN为指令译码器的使能信号;IR为来自总线的数据输入;MOVA,MOVB,MOVC,ADD,SUE,OR0,NOT0,RSR,RSL,JMP,JZ,JC,IN0,OUT0,NOP,HEAL为对应的指令操作。

功能设计实现部分如下图:

功能设计实现部分如上图,对应指令系统表,选择相应的指令。

功能仿真如下图所示:



从波形仿真来看:
输入为11111101,查表可知对应指令为MOVA,此时MOVA为1,其余为0;
输入为11110110,查表可知对应指令为MOVB,此时MOVB为1,其余为0;
输入为11110111,查表可知对应指令为MOVC,此时MOVC为1,其余为0;
输入为10011010,查表可知对应指令为ADD,此时ADD为1,其余为0;
输入为01100110,查表可知对应指令为SUE,此时SUE为1,其余为0;
输入为10110000,查表可知对应指令为OR0,此时OR0为1,其余为0;
输入为01011000,查表可知对应指令为NOT0,此时NOT0为1,其余为0;
输入为10101000,查表可知对应指令为RSR,此时RSR为1,其余为0;
输入为10101011,查表可知对应指令为TSL,此时TSL为1,其余为0;
输入为00110000,查表可知对应指令为JMP,此时JMP为1,其余为0;
输入为00110001,查表可知对应指令为JZ,此时JZ为1,其余为0;
输入为00110010,查表可知对应指令为JC,此时JC为1,其余为0;
输入为00101000,查表可知对应指令为IN0,此时IN0为1,其余为0;
输入为01000000,查表可知对应指令为OUT0,此时OUT0为1,其余为0;
输入为01110000,查表可知对应指令为NOF,此时NOP为1,其余为0;
输入为10000000,查表可知对应指令为HALT,此时HALT为1,其余为0。
可见,指令译码器可以完成预计的指令。

② 指令寄存器
设计指令寄存器,包括指令寄存器的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


clock为时钟信号,ld为指令寄存器的使能信号;input为指令译码器的输入,output为指令寄存器的对应输出。

功能设计实现部分如下图:

功能设计实现部分如上图,当时钟处于下降沿并切使能信号ld=’1’时,指令寄存器让信号进入;否则,在其他时间指令保持原值。
可见,指令寄存器可以完成预计的指令。

4.SM
设计SM,包括SM的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


SM_EN为指令译码器的使能信号;clk为时钟信号;z为SM的输出。

功能设计实现部分如下图:

当时钟处于下降沿,并且使能信号为1时,SM值取反;否则,在其他情况下SM保持不变。

5.CF
设计CF,包括CF的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


EN为CF的使能信号;clk为时钟信号;x为上一次cf的值;cf为CF的输出。

功能设计实现部分如下图:

当时钟信号处于下降沿,并且使能信号为1时,CF加载行数值,否则保持不变。
6.ZF
设计SM,包括SM的接口设计、功能实现、功能仿真。
其中,接口设计如下图:


EN为指令译码器的使能信号;clk为时钟信号;zf为SM的输出。
功能设计实现部分如下图:

当时钟信号处于下降沿,并且使能信号为1时,CF加载行数值,否则保持不变。

7.控制逻辑生成
设计控制逻辑生成,包括控制逻辑生成的接口设计、功能实现、功能仿真。
其中,接口设计如下图:

MOVA,MOVB,MOVC,ADD,SUB,OR0,NOT0,RSR,RSL,JMP,JZ,JC,IN0,OUT0,NOP,HALT,SM,CF,ZF,IR为对应的指令输入,RAA,RWBA,WE,ALU_S,M,F_BUS,FR_BUS,FL_BUS,LD_PC,IN_PC,MADD,XL,DL,LD_IR,CF_EN,ZF_EN,IN_EN,OUT_EN,SM_EN为对应指令的使能信号。
功能设计实现部分如下图:

功能仿真如下图所示:



从波形仿真来看:
输入为11110110,查表可知对应指令为MOVB,此时MOVB为1,其余为0;
输入为11111101,查表可知对应指令为MOVA,此时MOVA为1,其余为0;
输入为11110111,查表可知对应指令为MOVC,此时MOVC为1,其余为0;
输入为10011010,查表可知对应指令为ADD,此时ADD为1,其余为0;
输入为01100110,查表可知对应指令为SUE,此时SUE为1,其余为0;
输入为10110000,查表可知对应指令为OR0,此时OR0为1,其余为0;
输入为01011000,查表可知对应指令为NOT0,此时NOT0为1,其余为0;
输入为10101000,查表可知对应指令为RSR,此时RSR为1,其余为0;
输入为10101011,查表可知对应指令为TSL,此时TSL为1,其余为0;
输入为00110000,查表可知对应指令为JMP,此时JMP为1,其余为0;
输入为00110001,查表可知对应指令为JZ,此时JZ为1,其余为0;
输入为00110010,查表可知对应指令为JC,此时JC为1,其余为0;
输入为00101000,查表可知对应指令为IN0,此时IN0为1,其余为0;
输入为01000000,查表可知对应指令为OUT0,此时OUT0为1;
输入为01110000,查表可知对应指令为NOF,此时NOP为1,其余为0;
输入为10000000,查表可知对应指令为HALT,此时HALT为1,其余为0。

可见,控制逻辑生成的部件可以完成预计的指令。

8.CPU顶层文件设计
顶层文件的设计如下图所示:
此图是最初一版,采取直接拉线的方式,结果页面上全是各种交错混杂的线,给纠错和检查造成了很大困扰。

这张是经过改良后的页面,采用命名拉线,解决了“蜘蛛网”眼花缭乱的困扰,在这个基础上检查也轻松了很多。为了检查输出,拉出了很多引脚。

这是在测试数据通过后,将引脚删去,并且加上触发器连上板的bfd文件。

四、系统测试
4.1 测试环境
在Cyclone中选用EP1C3T100C8芯片,进行仿真测试。

4.2 测试代码

这17步操作逐步验证了全部的16条指令。

mif文件:

4.3测试结果
从模拟的测试数据可以看出,正确的输出是“11100111”,经过波形仿真后,可以看到结果无误。

外接板后,板的输入为16(00010000),可以看到输出为11100111,输出无误。


4.4 模型机性能分析
进行时序仿真

最小周期为32.184ns,在设置时钟信号时,我最初采用的是40ns是合适的。

性能分析如图:

五、总结
心得体会:
本次实验,我学到了很多,有知识方面的,也有精神方面的。
知识方面,我进一步深入地学习了Quartus的操作,学会了根据自己的设计来生成元件,理解了简单CPU的运行原理,知道了各种指令的详细运行方式;并且试着去制作这样一个简单的CPU器件。
尽管这次实验我还有很多不足之处,但还是让我收益良多。我试着静下心来一个指令一个指令去分析,哪一个指令应该对应哪些信号的变化,这锻炼了我的思维方式;同时,一遍一遍不厌其烦地纠错、一次又一次的推到重来,磨炼了我的心智,一次次的推导缜密了我的思维;在向别的同学请教的过程中,我也发现自己和别的优秀同学之间还有很大的差距,值得我在日后向他们学习,跟上优秀同学的步伐。

hnu 数字电路 实验5 CPU大综合相关推荐

  1. 中山大学数字电路实验时钟设计大作业

    中山大学数字电路实验时钟设计大作业 一.实验题目 Proteus设计时钟 二.实验目的 使用Proteus实现具有分.秒计时的计数器,计数结果要求在7段数码管(7SEG-MPX4-CC-RED)上显示 ...

  2. hnu 数字电路 实验2.4 4位先行进位加法器

    4.用VHDL语言设计一个4位先行进位加法器 ① 理解要求,需要完成一个先行进位加法器,可采取化简后的公式,直接用逻辑门构造一个4位先行进位加法器. ② 公式和原理图: ③ 打开QuartusII,新 ...

  3. hnu 数字电路 实验1.3 模型机指令译码器

    3.用VHDL语言设计一个模型机指令译码器 ① 理解模型机指令译码器,相应的输入要对应上相应的输出. ② 打开QuartusII,新建工程,工程命名为zhi_ling,开始编写源代码. ③ 写好源代码 ...

  4. hnu 数字电路 实验4.4 RAM

    4.用LPM_RAM_IO 定制一个 2568 的 RAM,实现对 RAM 的读写操作. ① 理解要求,需要用LPM_RAM_IO 定制一个 2568 的 RAM,实现对 RAM 的读写操作. ② 打 ...

  5. hnu 数字电路 实验2.1 8重3-1多路复用器

    一.实验目的 1.熟悉多路复用器.加法器的工作原理. 2.学会使用 VHDL 语言设计多路复用器.加法器. 3.掌握 generic 的使用,设计 n-1 多路复用器. 4.兼顾速度与成本,设计行波加 ...

  6. hnu 数字电路 实验2.2 n-1多路复用器

    2.用VHDL语言设计一个n-1多路复用器,调用该多路复用器定制为8-1多路复用器. ① 理解题意,分析题目要求我们先设计一个n-1的多路复用器,再调用这个多路复用器,构造一个8-1多路复用器. ② ...

  7. 南京邮电大学电工电子(数电)实验报告——数字电路与模拟电路的综合应用

    文章目录 数字电路与模拟电路的综合应用 (1)实验目的 (2)实验原理或设计过程 (3)RTL代码设计(加分项) (4)实验电路图 (5)实验数据分析和实验结果 (6)附录:示波器图像 数字电路与模拟 ...

  8. 数字电路实现简单CPU

    数字电路实现简单CPU 一.设计目的 贯彻以CPU设计为核心,以层次化.模块化设计方法为抓手的组织思路,培养学生设计与实现数字系统的能力.本设计要求在进行了多个单元实验后,综合利用所学的理论知识,并结 ...

  9. 「面试必备」常见Java面试题大综合 马云见了都点赞

    一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理 答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSor ...

最新文章

  1. 卡莱特led显示屏调试教程_恒彩光电重庆P3 LED显示屏项目顺利完工
  2. linux正则表达式_号称“天书”的正则表达式,要这么来讲,我小学三年级已经满分了
  3. 电脑如何进入bios模式_电脑如何进入bios关闭软驱
  4. MyBatis 流式查询
  5. 使用git在两台机器间同步代码
  6. 尝试 Docker + Nginx 部署单页应用
  7. linux监测node进程,通过node_exporter监控linux服务器一
  8. php 百度报表工具下载,PHP Report Maker12最新版
  9. html5获取经纬度失败,h5获取经纬度有问题
  10. c语言乒乓球对手算法,乒乓球学生论文,关于例c语言教学案例设计相关参考文献资料-免费论文范文...
  11. 把小说放到mysql中_小说系统有必要把内容存到数据库不?
  12. Python爬虫——王者荣耀全皮肤拉取
  13. 2020年最鼓舞人心的句子
  14. 数学与应用数学专业考计算机研究生,数学与应用数学专业学生考研有哪些方向 数学与应用数学专业学生考研方向是怎样的...
  15. 求两个三维向量的夹角(带正负)
  16. Eclipse is not responding
  17. Paperreading之五  Stacked Hourglass Networks(SHN)和源码阅读(PyTorch版本)
  18. 数学学习与研究杂志数学学习与研究杂志社数学学习与研究编辑部2023年第3期目录
  19. SAS/SATA/SSD/IDE硬盘介绍区别
  20. UI设计学习流程写给零基础学习的你

热门文章

  1. Linux安装Opencc
  2. BlackBerry 用户界面开发实例(一)
  3. 基于EasyExcel模板填充方式进行二次导出(动态表头、合并单元格问题处理)
  4. 从0-1事务-柔性事务-分布式事务
  5. TPR FPR 真阳率(true positive rate)、假阳率(false positive rate),AUC,ROC
  6. 我的世界设置java路径_我的世界启动器Java路径怎么设置?java路径设置攻略
  7. (python)常用数学字符(tcy)
  8. Uber大型实时数据智能平台建设
  9. 中国超级计算机全国产化,我国万万亿次超级计算机CPU有望全部国产化
  10. xdebug php7.3配置,PhpStorm配置Xdebug