目录
Moore型有限状态机例题
Moore型有限状态机例题
实验任务
你需要搭建一个Moore型
实验具体要求
小刘同学在每个时钟上升沿到来时说1、2、3中的任意一个数,由于小刘同学比较笨,他可能连续几次说出同一个数,只要总体顺序没错,我们原谅他。只要他能顺序不错地最终数出1、2、3的顺序正确的序列(例如“1 1 1 2 2 3 3 3 3”、“1 2 3”、“1 2 3 3”……,即文法满足:“<若干个1><若干个2><若干个3>”),就算对(输出1)!
Valgrind与Cache评测
本实验应用了Valgrind这一强大的工具来辅助我们完成Cache的设计与评测,为了方便同学们理解memory trace(即我们所说的内存访问记录),并理解我们如何获取矩阵转置函数的内存访问记录,我们对Valgrind和实验中的评测代码进行进一步的说明(此部分不理解完全不影响实验的完成,只需成功安装Valgrind用于本地实验评测即可)。
Valgrind简介
Valgrind 是运行在Linux 上的多用途代码剖析和内存调试软件。主要包括Memcheck、Callgrind、Cachegrind 等工具,每个工具都能完成一项任务调试、检测或分析。可以检测内存泄漏、线程违例和Cache 的使用等。Valgrind 基于仿真方式对程序进行调试,它先于应用程序获取实际处理器的控制权,并在实际处理器的基础上仿真一个虚拟处理器,并使应用程序运行于这个虚拟处理器之上,从而对应用程序的运行进行监视。应用程序并不知道该处理器是虚拟的还是实际的,已经编译成二进制代码的应用程序并不用重新进行编译,Valgrind 直接解释二进制代码使得应用程序基于它运行,从而能够检查内存操作时可能出现的错误。
Valgrind的安装
由于valgrind没有提供Windows版本,因此建议是使用Linux系统(可以使用虚拟机)来进行相关的调试。
关于Mac:官方的valgrind不支持Mac或对Mac后续版本支持的不好,需要安装Mac的镜像版本,可以在github上找到:https://github.com/LouisBrunner/valgrind-macos
在安装时遇到的常见问题,可以参考博文:https://zhuanlan.zhihu.com/p/508470880
笔者用的是ubuntu,在ubuntu下直接使用系统包管理工具即可安装(无特殊需要建议直接以此方式安装):
sudo apt-get install valgrind
如果有特定需求需要安装一些其他版本,可以进入valgrind官网,下载对应的源码并make安装(本实验不推荐此种安装方式):
首先是进入官网下载对应版本:http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2
然后解压缩:
tar -jxvf valgrind-3.14.0.tar.bz2进入目录,进行安装,其中/home/user1/valgrind是你想安装的目录:
cd valgrind-3.14.0 ./configure --prefix=/home/user1/valgrind make make install配置环境变量,首先打开~/.bashrc,将下面一段话加入该文件,路径即为安装目录下bin目录:
export PATH=$PATH:~/valgrind/bin/使改变生效:
source ~/.bashrc
Valgrind的使用
valgrind的使用可以简要概括为以下表示:
valgrind [valgrind-options] <your-prog> [your-prog-options]
其中,<your-prog> [your-prog-options]部分是需要进行内存调试的程序执行命令,与在shell命令行中执行命令的方式完全相同。[valgrind-options]是我们重点需要关注的部分,通过这些options我们得以应用valgrind的功能。valgrind提供了丰富的调试选项,以下列出一些常用的选项。
--tool=<toolname> [default: memcheck]最核心的命令,选择了valgrind当前的工作模式。
-h --help与一般的帮助选项相同,可以比较便捷的查看valgrind的命令用法。
-v --verbose输出详细信息。
--log-fd=<number> [default: 2, stderr]打印输出访问记录的位置,
number为1表示stdout,number为2表示stderr,用此命令时一般设number为1在命令交互界面查看输出。--log-file=<filename>与上一条命令类似,但是将记录日志输出到对应的文件中(更加推荐这种方式)。
Valgrind在Cache评测中的应用
Part1:Cache的模拟器实现
valgrind可以通过简单的命令生成程序模拟执行过程中产生的记录日志(memory trace)。
memory trace的格式如下:
入门篇
入门篇
MIPS 的指令非常多,指导书当中也只会列举出完成实验常用的指令。
在课件下载区新增了《MIPS32-Quick Reference》,是常用 MIPS 指令的快速查询手册。

MIPS 汇编编写的主要的一个难点就是,一次只能做一个运算,但是会用到好几个寄存器,稍微复杂一点就乱了。我的建议是对每一个使用到的寄存器,都做上注释防止出现混乱。
另外,希望大家在写 MIPS 汇编的时候,多多参考 MARS Help 当中的内容。

赋值
在 C 语言中,我们最先用到的便是给变量赋值,这个在 MIPS 中该如何实现呢?
下面这条指令的意思,就是将 t1 寄存器的值赋值为 100,其实际含义是给 $t1 赋值为 100 和 0 进行按位或运算后得到的结果。
ori $t1, 100
当然了,我们也可以使用扩展指令(伪指令)li(load immediate),下面这条指令的意思,便是直接将 $t1 寄存器赋值为 100,该指令与上一条指令的效果完全一致。
实验1 - 简单部件与状态机设计
实验1 - 简单部件与状态机设计
本篇教程将会结合logisim向大家介绍数字电路中的门电路、组合逻辑、时序逻辑、有限状态机的相关原理和实现。
关于本教程的一切问题,请联系@助教-李彦埙
实验2 - MIPS 汇编实验指导
实验2 - MIPS 汇编实验指导
在阅读本指导书前,需要你先下载 MARS 软件并配置 java 运行环境,具体方式可以查看 PDF 版指导书《MARS 使用教程》。
如果你对于 MIPS 汇编是完完全全的零基础,那么,欢迎阅读本指导书,尽力使用最为朴实的语言、最为细致的样例,突出方法,尽可能少的涉及原理,手把手教你写汇编程序。
实验3 - 模拟Cache设计
本次实验的相关代码请在【课程信息】-->【课件下载】区域下载获得。
本指导书包含Cache的理论介绍先导和实验题目的具体说明,建议阅读顺序如下:
阅读第一章高速缓存简介,对基本的Cache结构有一定理论上的掌握。