信息学院2018年暑期综合实训日志

7/9  周一  第一天  阴

  暑期综合实训的第一天,上午结束了漫长而艰难的考试周,下午带着轻松愉快的心情来到逸夫楼实验室,开始了为期一周的暑期综合实训。

  我的实训题目是CPU的设计,指导老师是班主任刘善梅老师和曾经教过我汇编语言和计算机组成原理的别丽华老师。在前几门实验课里,我也做过相应的单周期CPU设计和EDA的流水灯等,对于这个实训题目也不是非常陌生。

  但是时间相隔较长,有很多东西已经有点遗忘了,所以今天下午的任务就是把过去的知识捡起来,并且明确往后的实验如何去做。老师给我们的目标是在回顾单周期CPU制作的基础上,实现多周期CPU以及异常中断处理的电路设计,需要用到verilog hdl。

  首先回顾一下单周期和多周期的区别,这个周期是指时钟周期,取时钟脉冲的两个上升沿或者下降沿为一个周期,这样会因为电平的变化产生一系列的电信号连锁反映,易于动作的实现。单周期是指一条指令只使用一个时钟周期,所以也只能实现比较简单的指令操作,实现起来也比较简单(多周期类推)。实现的指令有常用的add、sub、and、or、xor、sll、srl、sra,前面几个指令一目了然比较熟悉,后面的xor是寄存器异或,sll是左移操作,srl是逻辑右移操作(logical),sra是算数右移操作(arithmetic)。这些都是MIPS指令集里的R型指令,一条指令长度为32位,可以用8位十六进制数来表示,所用到的寄存器都是五位的寄存器。

  明确了目标指令集之后需要设计数据通路,数据通路是个模块单元通过总线连接形成的一条数据传输线路,数据通路的设计直接影响到了控制器的设计以及数字系统的速度指标和成本,所以设计一个好的数据通路是非常有必要的。数据通路包括了两种元件:操作元件和存储元件。操作元件有加法器(Adder)、多路选择器(MUX)、算术逻辑单元(ALU)等,构成组合逻辑电路。存储元件有寄存器(Register)和寄存器组(R File),具有存储功能,在时钟控制下输入被写到电路中,直到下个时钟到达输入端状态由时钟决定何时被写入,输出端状态随时可以读出。

  今天复习了CPU设计中的一些主要概念,明天打算重新实现单周期cpu,以熟悉实验环境,为后面的工作打下基础。

 

 

7/10   周二  第二天  晴

  上午继续看老师给的教材和PPT,并且找到了logisim软件的资源。logisim是一个体积非常精巧,功能十分强大的编辑器,可以在上面模拟开发板,供有各种复杂线路、逻辑门、复用器、运算器、存储、I/O的元器件,将其组合成为一个模拟的电路板。

  下午看了以前的《计算机组成原理》的课本,看了一些老师给的代码,并写了相关注释,学习了SingalTapII的使用。

  整理所学知识:对于verilog语言,需要明确代码中所描述硬件的实现功能,这就要主要看输入和输出以及代码内容。wire变量rom代表线网,用assign对rom赋值,在逻辑上将其连通;wire是一种向量型式的变量,向量与标量的区别:标量是只具有一个二进制位的变量,而向量表示具有多个二进制位的变量。

  设计一个简易的CPU要明确有哪些需要设计的模块:指令集、数据通路(组合、时序逻辑元件、ALU)、寄存器、时钟、中断等。然后对各个模块作出设计。

 

7/10  周三  第三天  晴

  上午开始看关于多周期CPU的设计以及异常和中断处理的内容。感觉有点难,于是找了几个同学分小组,把书上的代码copy下来,然后组合起来运行,直到下午才敲完。由于对verilog语言不熟悉,怕很难在编译阶段发现程序产生错误的原因,于是只能在誊抄阶段多下功夫,反复检查代码错误,减少编译时出错的可能性。

  我负责的是带有异常和中断处理功能的CPU模块代码,是整个框架的核心部分,需要和多个模块产生对接,其中包括时钟、指令、存储器、PC、寄存器、ALU等。其他同学有的工作量比较大,还没有copy完,所以只能等他们都完成了再汇总。 

 7/11  周四  第四天  阴

  上午debug昨天的代码,继续看多周期和中断,学习了signalTapII的使用。发现自己信息安全分数异常,找老师改成绩跑了很久。下午继续debug中断异常部分的代码,经过长时间的调试,终于在signaltap上成功运行并显示对应指令。

  多周期处理器是在单周期的基础上,把时钟周期细分,每条指令分配一定数量的周期。之前的单周期指令是每一条指令分配一个时钟周期,所以每个时钟周期只能迎合最复杂的指令,对于简单的如跳转指令,在工作完成之后,还需要等待这个时钟结束才能进行下一条指令,造成了时间的浪费。多周期将时钟细分,指令同时也分为若干条基指令,每一条基指令对应一个细分后的时钟周期。所以在设计的时候,需要在单周期的基础上改变时钟和指令格式,以及每条指令对应的时钟数目,每条指令的细分指令。

7/12  周五  第五天  晴

  上午仔细检查了昨天debug完成的异常中断的代码,发现基本功能已经实现,产生的仿真图也都正确;下午将仿真图和测试代码的对应关系捋了一下,并且为明天的答辩做准备。

  CPU是一个循环往复执行指令的硬件,在指令执行的过程中,难免会产生一些异常和中断。异常和中断的区别是,异常发生在程序内部,如溢出或者除零异常;中断出现在程序的外部,如外设请求。在异常和中断产生的时候,我们需要保存当前地址,以备处理完成之后继续正常执行当前指令;然后查询中断向量表,找到中断的产生原因;跳转到中断异常处理程序处理之;最后返回到之前保存的地址,继续执行指令。

  由于时间原因,我们设计的中断异常处理cpu只能实现一些简单的模拟情况,我们假定:

1 只有一个外部中断请求(intr)
2 只处理3个异常:结果溢出、出现未实现的指令以及系统调用。
3 返回地址:异常时保存当前指令地址,中断时保存下一条指令的地址。
4 采用查询中断方式。
5 响应异常或中断时把Status寄存器的内容左移4位关中断。
6 中断返回时把Status寄存器的内容右移4位,恢复原来的内容。

然后对异常和中断

 

转载于:https://www.cnblogs.com/caiziqi/p/9287078.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值