0%

仿真实验

[TOC]

计算机仿真实验

目标——从逻辑门到流水CPU

  • 组合逻辑电路-同步时序逻辑电路-小型数字系统

  • 运算器,存储器,控制器,处理各种冲突冒险的五段流水CPU

设计课程

  • 数字逻辑

    • 正向计数——运动码表

      image-20230416104910258

      组合逻辑电路设计

      同步时序电路设计

      寄存器数据传输

  • 计算机组成原理

    • 硬布线控制器&微程序控制器——MIP单周期,多周期CPU

      image-20230416105248978

      运算器

      存储器

      控制器

  • 计算机体系结构

    • 处理冲突冒险——五段流水CPU

      image-20230416105335746

      资源相关,分支相关,数据相关

      中断

      动态分支预测

  • 逻辑与计算机系统设计基础

image-20230416104553203

logisim

采用原理图方式对电路图进行仿真

工作区

点阵(显示消除):

image-20230416105706186

工作区(放大缩小):

image-20230416105804130

工具栏

image-20230416105958760

组件的调用关系

image-20230416203105090

侧边栏为组件库

引脚

方向键,决定组件的引脚方向

  • 左键,则引脚在左

数据位宽,决定引脚输入位数

  • Alt+数字键
  • 按住 Alt+3+2表示32位输入

标签:

  • 引脚文字说明

与门

输入:

  • 数字键切换引脚数,3+2表示32位引脚

数据选择器(多选一)

复用器-数据选择器

image-20230416193734324

输入端:长边引脚

输出端:一个

使能端:长线

控制端:短线

image-20230416193947503

探针

用于查看线路当前值

image-20230416194415816

线路颜色

约定:

  • 亮绿:高电平

  • 深绿:低电平

  • 蓝色:未知状态

    尽量消除

  • 灰色:飞线

    两端并未连接

  • 红色:信号冲突

    image-20230416201607933

  • 黑色:多位总线

  • 橙色:数据宽度不兼容

    image-20230416201634350

封装

子电路布局

image-20230416110940366

封装子电路外观

image-20230416111006998

  • 引脚朝向决定芯片上的位置

image-20230416194631907

  • 拖动可以改变引脚位置

电路工程

点击电路工程可以复用到其他电路工程

image-20230416195245463

image-20230416195559609

  • 点击组件,悬浮会得到电路相应标签

菜单栏

分析电路

image-20230416204115668

image-20230416204143665

可以通过表达式修改电路组件

image-20230416204312707

电路简化——最小式

image-20230416204541372

image-20230416204603400

选项

仿真
  • 振荡频率

  • 对于未定义的引脚如何处理

工具栏

工具栏项目

模拟

信号模拟

直接输出最终结果

重置模拟器

将电路中所有带有存储状态的组件复位为0

时钟前进一步

时钟信号前进

  • 关闭信号模拟,可以用于单步调试
启用时钟模拟

自动完成时钟的翻转

时钟频率

指定时钟模拟的翻转频率

记录器

对所有引脚,探针做日志记录

自动生成电路

logisim

  • 只能自动生成组合逻辑电路
  • 输入引脚只能是一位
  • 输入引脚的个数最多只有8个
一位全加器

输入:x y cin

输出:sum(求和) cout(进位)

表达式:

  • sum = x ^ y ^ cin
  • cout=x y + x cin + y cin

logisim组件有延迟

logisim不能精准仿真所有组件的延迟,在系统中所有硬件延迟都是相等的

image-20230417100633869

如图所示的电路,由于与门的两个输入端有差异,一个输入端存在一个非门的硬件延迟,会造成计数器累计——输出端险像

解决

  1. 增加一个缓冲器,使各个输入端信号的传播路径一致,消除信号的竞争

    image-20230417101254822

  2. 反转与门引脚(实际不可取)

    image-20230417134342702

logisim中的震荡现象

电路由于反馈回路的存在,无法进入稳态

  • logisim的一种保护机制,避免仿真系统进入死循环

image-20230417135538029

image-20230417140047860

解决

  • 修改引脚值
  • 排除法:断开一些关键路径,若震荡消失,则这一路径中存在反馈回路

工具库

组件公共属性

#属性描述快捷键
1朝向组件在画布中放置的方向方向键
2数据位宽引脚对应的数据宽度Alt+数字键
3引脚数逻辑门电路输入的引脚数数字键
4外观调整组件外观
5尺寸逻辑门电路可以设置组件大小
6标签与组件相关联的标签文字,用于注释
7标签位置标签在组件上的显示位置
8标签字体组件标签文字的字体

线路库

分线器

将多位宽线路中的某些位分离出来,也可以将多位数据合成一个数据

  • 无时间延迟
  • 无方向特性

image-20230417142207493

属性功能
朝向分线端的期间方向
输出fanout分线端端口数
位宽汇聚端位宽
外观外观选择
位x汇聚端第x位映射至分线端端口号

image-20230417142556905

  • 默认将汇聚端位宽平均分配到每一个输出端口
引脚

子电路输入输出接口

  • 输入端口:子电路封装的左侧
  • 输出端口:子电路封装的右侧

image-20230417144203970

属性功能
朝向期间方向
输出输入/输出
数据位宽引脚的数据bit数
三态是否有三态值(0-1-x高阻)
未定义处理未连接时的默认值
不变/上拉/下拉
探针

动态检测线路值

  • 用于调试

image-20230417150411258

隧道

远程线路连接,具有相同标签名的隧道,逻辑上是连接在一起的

image-20230417150628775

上/下拉电阻

处理线路中的悬浮态、不确定值

  • 强制将所有x变为电阻相应的方向

image-20230417151201622

  • 无位宽属性
时钟

提供时钟源

image-20230417151423567

启用时钟模拟后,会按照设定的时钟频率自动跳变

常量

可定义位宽

image-20230417151537203

电源,接地
位扩展器

数据位宽扩展(输入位宽小于输出位宽,则扩展)或截断(输入位宽大于输出位宽,则截断)

输入位宽:

输出位宽:

扩展方式:

image-20230417152211599

逻辑门库

与或非,与非,或非,异或,异或非
奇偶校验
三态门、三态非门

控制开关,用于总线传输方向控制

image-20230417152639235

复用器库

多路选择器

从多路输入中选择一路输出

选择数据宽度:选择信号宽度为2,表示有从 $2^2=4$ 个输入中选一个

数据位宽:每个输入的位宽

image-20230417155051934

  • 使能端默认为1

选择端不能使用多路选择器

解复用器

将一路输入选择某一路输出——与多路选择器功能相反

选择数据长度:选择信号宽度为2,表示有从 $2^2=4$ 个输出中选一个

image-20230417155418115

解码器

用于地址译码,将选择端的输入,转变为一位的输出

image-20230417155704675

优先编码器

获得输入信号的编码——与解码器相反

  • 输出最高位1的最大输入引脚编号
  • 通常用于中断请求的中断优先判断

image-20230417192443210

运算器库

带进位加法器

image-20230417194943799

带借位减法器

image-20230417204754569

无符号乘法器

image-20230417205009406

无符号除法器

image-20230417205138952

求补码器

符号位取反,其余位取反加一

image-20230417205229786

image-20230417205259010

比较器

image-20230417205705378

移位器

image-20230417205858363

存储库

触发器

异步:电平敏感

image-20230417213257687

  • 异步置位:当变为1时,所有触发器Q端为1
    • 此时异步清零端需为0(失效)
  • 异步清零:当变为0时,所有触发器Q端为0
    • 此时异步置位端需为0(失效)
寄存器

多个D触发器并行构成

image-20230417211607623

当时钟信号到来时,可以将数据锁存在Q端

清零:

  • 异步信号:在异步清零信号为1时,将寄存器清零

  • 同步信号:在时钟信号到来时,将寄存器清零

    image-20230417213652321

    当异步清零失效,且同步清零有效时,通过多路选择器,将0输入到D端,时钟信号到来时,Q端锁存为0

计数器

image-20230417214654160

  • 异步清零:电平为1,则清零
  • Carry:当计数器达到最大值,则进位1

image-20230417215425149

随机数生成器
RAM

image-20230417220234497

  • 通常使用输入输出分离同步模式

双向输入输出同步模式

image-20230417220357542

  • 写使能失效,三态门输出端无数据,待写数据不能写入D端

    在非门作用下,读信号有效,寄存器中值从D端输出

输入输出端分离同步模式

image-20230417221125863

ROM

image-20230417220123953

输入输出库

键盘,哑终端

image-20230417223047970

  • 键盘预设输入,并转化为ASCII

    当一个时钟信号来时,将一个8bit的ASCII数据输出

    文字终端进行显示

数码管

image-20230417223220859

logisim应用实验

1

  • 自动生成电路

任务:

  • LED计数电路
  • 构建一个数据编码器
  • 设计7段数码管显示电路板

image-20230418082443764

image-20230418083035112

image-20230418083333751

2

image-20230418083400240

编码器

image-20230418083346501

image-20230418083823415

image-20230418084635493

image-20230418084610352

image-20230418084944234

Out1: In5+In3&~In4&~In5+In1&~In2&~In3&~In4&~In5

MIPS

CPU设计

概念

CPU类型

单周期:定长指令周期

  • 所有指令在一个时钟周期内完成,CPI=1
  • 性能取决于最慢的指令,时钟周期过长

多周期:变长指令周期

  • 缩短时钟周期,复用器件和数据通路
指令格式

image-20230418085850084

image-20230418090149310

image-20230418090208098

数据通路

取指

$Mem[PC++]\rightarrow IR$

  • 单周期不能设计 AR , DRIR 寄存器

    由于一个时钟周期内完成取指操作,所以直接用PC内容取内存内容

  • 程序和数据分开存放——哈佛结构

    由于取指令与取操作数都要访问主存,存在资源冲突

  • 运算器和PC累加器分离‘

image-20230418091022396

image-20230418091222528

image-20230418091320354

image-20230418091413530

实验

设计目标

设计单周期MIPS处理器,支持:addusubuorilwswbeqlui

image-20230417000214534

image-20230417000302933

image-20230417000341244

image-20230417000354067

image-20230417000410237

image-20230417000433363

image-20230417000441163

要求

image-20230417001140441

  • Figure1 中Tunnel 的用途是将具有相同name 的tunnel 连接在一起。Tunnel可以避免将图画的很乱。
  • Probe 的用途是显示被probed 信号的值,便于调试。
  • Splitter 的用途是从某组信号中提取其中部分信号。例如,IFU 输
    出32位指令,需要提取高6位(OpCode)和低6位(Funct)分别输入controller。
    • splitter是有位序的!但字号太小,需要放大设计图(界面左下有比例设置)。
    • 建议高位永远在上,低位永远在下
  • 建议先在MARS中编写测试程序并调试通过。
  • 片选信号就是对存储器地址的高位分析。
    • 假设DM有256MB容量,并且映射在0x3000_0000~0x3FFF_FFFF区间。那么只需要把高4 位地址与0x3 进行比较,比较结果就是DM的片选信号。
    • 为了实现片选,你需要用基本逻辑门搭2 个片选信号生成逻辑,一个输出至IM,一个输出至DM。
    • Logisim 内置的RAM 有片选信号!
  • 你可以考虑增加7 段数码管等输入输出设备来让你的测试结果更加直观。
    • 7 段数码管也需要类似片选等信号,其工作原理与上一项类似。

部件

Controller(控制器)、IFU(取指令单元)、GPR(通用寄存器组,也称为寄存器文件、寄存器堆)、ALU(算术逻辑单元)、DM(数据存储器)、EXT(扩展单元)、多路选择器及splitter

有效驱动信号

clk

即如Figure1中绿圈所示。

只有设置了时钟源,系统才能自动运行,从而让程序连续运行。

reset

模块化

image-20230417001302115

IFU——取指令单元

内部包括PC、IM(指令存储器)及相关逻辑。

  • PC:用寄存器实现,宽度为30 位。PC 应具有复位功能。

    PC 复位后初值为0x0000 3000,目的是与MARS 的Memory Configuration相配合。

    • 教师用测试程序将通过MARS 产生,其配置模式如Figure3 所示。因此你也需要用MARS 编写测试程序并生成能够在Logisim 中运行的代码。

      image-20230417001028255

  • IM:容量为32bit×32 字,用ROM 实现。

    说明:由于IM 地址仅为5 位,因此需要用Splitter 连接PC 低位地址与IM地址。

GPR——通用寄存器

以32 个32 位具有写使能的寄存器为基础,辅以多路选择器。

ALU

实现加法及减法时,允许使用Logisim 内置的Adder 及Subtractor。也欢迎以门电路为基础自行开发。

EXT

可以使用Logisim 内置的Bit Extender

DM——内存

容量为32bit×32 字,用RAM 实现。

  • DM应采用双端口模式,即设置RAM 的“Data Interface”属性为“Separate load and store ports”。

模块定义

1.仿照下面给出的 IFU 模块定义,自行给出所有功能部件的模块定义

  • IFU、GPR、ALU、EXT、DM、Controller。

IFU 模块定义(参考样例)

基本描述

IFU 主要功能是完成取指令功能。IFU 内部包括PC、IM(指令存储器)以及其他相关逻辑。IFU 除了能执行顺序取值令外,还能根据BEQ 指令的执行情况决定顺序取值令还是转移取值令。

模块接口
信号名I/O描述
IfBeqI当前指令是否为beq指令标志。
1:当前指令为beq
0:当前指令非beq
ZeroIALU计算结果为0标志。
1:计算结果为0
0:计算结果非0
clkI时钟信号
ResetI复位信号。
1:复位
0:无效
Instr[31:0]O32 位MIPS指令
功能定义
序号功能名称功能描述
1复位当复位信号有效时,PC被设置为0x00003000。
2取指令根据PC从IM 中取出指令。
3计算下一条指令地址如果当前指令不是beq 指令,则 $PC\leftarrow PC+1$
如果当前指令是beq指令,并且zero为0,则$PC\leftarrow PC+1$
如果当前指令是beq 指令, 并且zero 为1 , 则 $PC\leftarrow PC+sign_ext(当前指令15..0)$
[注]PC取地址为4 字节,固低2位地址可以去除。

MIPS寄存器组

基本描述

32位寄存器,两个读端口,一个写端口

寄存器组包含32个寄存器及相关逻辑电路,每个寄存器有相应编号

  • 给定两个读出寄存器编号,可以得到两个寄存器值
  • 给定一个写入寄存器编号,可以将数据写入指定寄存器中
模块接口
信号名I/O位宽描述
R1#I5第2个读寄存器的编号
R2#I5第2个读寄存器的编号
W#I5写入寄存器编号
DinI32写入数据
WEI1写使能信号,为1时在CLK下降沿将Din数据写入W#寄存器
CLKI1时钟信号,上升沿生效
RD1O32R1#寄存器的值,0号寄存器值恒0
RD2O32R2#寄存器的值
功能定义

控制器设计

2. 请仿照下图给出MIPS-Lite1 指令集的单周期控制器真值表

image-20230417002142854

  • 结合真值表,请给出数据通路每个功能部件的每个控制信号的布尔表达式。

  • 表达式中只能使用“与、或、非”3 种基本逻辑运算。

  • 每个控制信号的表达式应该是指令opcode 域与funct 域的函数。
  • 对于多位的控制信号(如ALUCtr),应诸位给出其逻辑表达式。
在Logisim 中完成控制器设计

image-20230417002335201

测试要求

构造1 个至少20 条以上指令的测试程序,并加载至IFU 中运行通过。

  • MIPS-Lite1 定义的每条指令至少出现1 次以上。

3. 详细说明你的测试程序原理

  • 应明确说明测试程序的测试期望,即应该得到怎样的运行结果。
  • 每条汇编指令都应该有注释。

4. 问答

  • 请充分利用Figure4 中的X 可以将控制信号化简为最简单的表达式
  • image-20230417002459659

实验报告

打包文件:Logisim 工程文件、测试程序、测试程序二进制文件、项目报告。

  • 本实验要求文档中凡是出现了【WORD】字样,就意味着该条目需要在实验报告中清晰表达。

image-20230417002624900

-------------本文结束-------------