资源下载地址:https://download.csdn.net/download/sheziqiong/85797587
资源下载地址:https://download.csdn.net/download/sheziqiong/85797587
本次实验基于 Proteus 平台,结合了计算机组成原理所学的相关知识,实现了 TEC-5 模型计算机的所有功能,并在此基础上修改了部分数据通路和微地址和二进制代码格式,加入了立即数寻址、移位等原先不具有的功能。
TEC-5H 是一个八位的模型计算机,支持八条 TEC-5 原生指令和五条额外添加的指令。由运算器模块、存储器模块、时钟信号产生模块和微程序控制器等模块组成,具体在第三部分 TEC-5H 模型计算机和第四部分微程序控制器描述。
遗憾的是,由于 Proteus 平台提供的关键器件 74LS181 存在一定的 BUG,在测试过程中,181 有概率在低三位产生异常的高电平,影响测试结果。除此之外,本系统所有功能都可以仿真实现。
Tec-5H 系统共有 13 条指令,具体指令格式如下图所示。
包含加法(ADD)、减法(SUB)、逻辑与(AND)、循环右移(ROR)、循环左移(ROL)、逻辑右移(SHR)、逻辑左移(SHL)七条指令。其中移位指令长度为两字节,其余为一字节。
包含存数(STA)、取数(LDA)、立即寻址(MOV)三条指令。其中立即寻址指令长度为两字节,其余为一字节。
包含条件转移(JC)、停机(STP)两条指令。
包含输出(OUT)一条指令。
TEC-5H 的总体设计参照了 TEC-5,并在其基础上修改了双端口存储器的构造,增加了有关立即寻址和移位有关的控制器。总体上,TEC-5H 的数据通路设计电路可以划分成运算模块、通用寄存器模块、控制台模块、存储器模块、指令寄存器模块、时钟信号产生模块、手动控制模块和微程序控制器模块等。每个模块都执行相应的功能、通过线路和时钟信号传递信息。TEC-5H 的大致数据通路见下图。
运算模块主要由运算器和移位器组成。
TEC-5H 为八位模型计算机,因此运算器的 ALU 由两片 74LS181 连接。其中 ALU 的数据输入端连接两片 74LS273,构成数据缓冲寄存器(DR),其功能是选择通用寄存器,在 LDDR 时钟信号的引导下适时进入 ALU 参与运算。ALU 的输出端连接一个 74LS373,构成八位的缓冲器,由 ALU-BUS 控制其是否将运算结果输出到数据总线上。
相较于运算器,移位器注重于实现移位功能,且没有现成的器件,因此实现电路较为复杂。TEC-5H 的移位器借鉴了桶型移位器的思路,但又有所不同,由大量的选择器和一片 74LS245,一片 74LS273 组成。为了实现左移和右移,TEC-5H 采用了两层的移位方式,并用两套类似的结构分别实现左移和右移。下以左移控制器为例介绍二层移位法左移控制器中第一层由 4 片 74LS153 组成,74LS153 为四选一选择器。每个输出端对应四个输入端,分别为其本身、其低 1 位、低 2 位和低 3 位。具体输出哪一个输入端由 IR5,IR4(B,A)控制,以此实现左移 0 到 3 位。第二层由 2 个 74LS157 组成,75LS157 集成了 4 个二选一选择器。第一层输出端的结果可以直接连接第二层的输入端,与此同时,另一个输入端连接输出端的低 4 位,实现左移 0 或 4 位。两层结合起来,就可以实现 0 到 7 位的移位。
为了区别循环和非循环移位,TE-5H 额外采用了 4 片 74LS157 来控制是否循环。原始的输入端与低电平进行一个二选一,由 IR7 控制。非循环模式下输出端输出低电平,循环模式下输出端输出原信号。输出端有选择地接在左移和右移控制器的涉及移位后会循环的输入端,比如左移控制器第一层输入端最低位所对应的三个需要移位的输入端。在循环模式下,这三个输入端分别对应 D7,D6,D5,而在非循环模式下,对应三个低电平,即补零。同理,第二层的部分输入端也需要作类似的处理,具体参照左移控制器和循环控制器的电路图。
移位控制器的输出部分由 2 片 74LS157 和 74LS273、74LS245 组成。其中 74LS157 负责选择要输出的是左移控制器还是右移控制器。74LS273 在 clkro 的控制下锁存移位的结果,并在下一个时钟周期打开 RO-BUS,通过 74LS245 输出到数据总线。
通用寄存器模块主要由 4 片 74LS273 和 8 片 74LS153 组成。其中 74LS273 在 LDRI 的控制下,根据 IR0 和 IR1 将 DBUS 上的数据锁存起来,放到 R0 至 R3 寄存器。
74LS153 为四选一选择器,负责根据 IR0 至 IR3 的信号从 R0 至 R3 选择数据。其中 Rd 由 IR0 和 IR1 控制,选择出来的数据直通运算器的 DR1。Rs 连接 IR2 和 IR3,选择出来的数据既可以通往运算器的 DR2 参与运算。
此外,在一片 74LS245 的控制下,寄存器的数据也可以在 RS-BUS 的控制下进入数据总线。
控制的设计比较简单。DIPSW_8 可以通过点击的方式产生一个 8 位数据,再通过一个 74LS245,在 SW-BUS 信号控制下将数据输入到数据总线。
TEC-5 的存储器为双端口存储器,但是 Proteus 平台并未提供双端口存储器,因此 TEC-5H 使用 6116 来实现 RAM 的功能,2732 实现 ROM 的功能。除此之外,存储器模块还包括地址寄存器 AR 和 PC 以及为了实现立即寻址和写寄存器附加的部分通路。
在地址寄存器上,AR 和 PC 设计一致。以 AR 为例,其由两片 14LS163 组成。74LS163 是同步计数器,在开启状态下,每个 clkar 都会对 AR 寄存器产生影响。在 clkar 来临时如果 Load 是低电平,那么 DBUS 上的数据就会被读取,反之 AR 会在原数的基础上加 1。
AR 的输入端直接连接 6116 的低 8 位,如果 RAM 的总开关 CEL 打开,在默认的读状态下,读取使能端被打开,会将 RAM 中 AR 对应的地址上的数据读出,传入 74LS245。如果 RAM-BUS 有效,数据将被送往数据总线。在特定开启的写状态下,RAM-BUS 必须是关闭的,此时数据会从总线传入 74LS245,RAM 的写允许也会被打开,数据会写入 RAM 中 AR 对应的地址。
ROM 上的内容在 Proteus 运行时不可修改,需要提前烧写,烧写方式会在微程序控制器部分详细说明。PC 的输入端直连 2732 的低 8 位,如果 ROM 的总开关 CER 打开,
那么 ROM 的数据会被直接传入 IBUS。ROM 内部数据如图所示为了满足 SWC,SWB,SWA 为 011 状态下写寄存器的要求,TEC-5H 添加了 RAM 输出至 IBUS 的命令。为了节省一个微命令,所控制的 74LS245 仅在 CER 无效且 CEL 有效的情况下将 RAM 上的输出端输出到 IBUS 上。
同时为了满足立即寻址的需要,添加了 IBUS 信号传输到 DBUS 的缓冲器。在 IRDBUS 和 CER 同时有效时,会将 IBUS 上的内容输出到 DBUS。
指令寄存器由一个 74LS273 组成,在 clkir 的控制下,将 IBUS 上的指令锁存到 IR 寄存器。
时钟信号序列模块主要由两部分组成。一部分为 CLR,按下按钮使得 CLR 生效,产生一个脉冲将微存地址设为 0,即重启程序。另一部分发挥了重要的作用,控制整个电路中所有需要时钟信号的部件,按照固定的顺序使他们依次工作。
起到关键作用的是 74LS164。74LS164 是边沿触发的移位寄存器。当按下 QD 时,信号通过 74LS74(D 触发器)送到 74LS164 的 A 端口,使得输出端在每个 clk(频率为 3HZ)下都产生依次移位,起到了依次触发 T1,T2,T3T4,NEXT 的效果。NEXT 信号连接在 164 的 MR 端,使得 164 的输出清零。在 TJ 指令无效且设置为连续情况下,会再触发 D 触发器,使得 164 进行新一循环的工作,其他情况下停止工作。
在 T1,T2,T3,T4 依次触发时,它们会与微命令通过与或非等逻辑门一起产生相关的时钟脉冲,控制指定部件的运行,具体信号见 3.1 总体设计。
手动控制部分主要由 74LS245 和 LOGICSTATE 组成。LOGICSTATE 可以选择状态为 0 或者 1。当 SWC,SWB,SWA 为 111 时,MANUAL 信号生效,所有的微命令都会进入手动控制状态。此时所有的 74LS245 开始工作,微程序产生的微命令会被屏蔽,所有微命令和 IR 指令都来自于 LOGICSTATE。
在非纯手动控制下,微命令由微程序控制器发出,与时钟控制序列一起控制其他器件的微操作。在 TEC-5H 中,所有微指令在无效时都为 0,在生效时都为 1,产生的控制信号均进过其他逻辑部件处理后作用到高电平有效或是低电平有效的器件上。
微指令是实现特定功能的微命令的组合,由操作控制和顺序控制两大部分组成。TEC-5H 的微指令为 32 位,其中操作控制 24 位,顺序控制 8 位。操作控制部分主要负责发出微命令控制其他器件的工作,顺序控制部分包含转移指令和后继微地址,负责确定下一条要运行的微指令的地址。微指令的编码采取了混合表示法,对于一些互斥的微命令,如涉及到输出至 DBUS 的微命令,借助 3-8 译码器或者 2-4 译码器进行编码,减少了所需空间。TEC-5H 一共有 36 条微命令,其格式见下二图。
微地址存储器由 74LS174 负责暂存正在执行指令的地址,并根据微指令的顺序控制字段和输入端部分的逻辑电路,给出下一条要执行微指令的地址。在每个 T1 来临时,将下一条的地址从输入端置入到输出端。同时手动产生的 CLR 信号会将微地址存储器的输出清零。
微指令存储器主要由 4 个 2732ROM 组成,输入端为微地址存储器的输出端。在非纯手动控制地情况下工作,将输出端输出到对应的 74LS245 缓冲器保存。微指令存储器保存了所有的需要的微地址上的微指令,需要提前烧写。
指令烧写我采用 python 编程的方式。在 asm 文件上写好微指令内容后,我采用正则表达式提取地址信息和数据信息,建立一个地址和数据一一对应的字典。之后从字典中提取信息,将数据根据 hex 的规则,计算出每一行的校验码,按格式烧写成.hex 文件。这样的好处在于修改微指令内容后只需要运行程序就可以直接烧写并覆盖 4 个.hex 文件,极大地提升了我增添和修改微指令的速度。以下为部分程序代码截图。
微程序流程图包含控制台流程图和机器指令微程序流程图。TEC-5H 在 TEC-5 的基础上改变了 STP 的指令格式和所有指令的第二个微地址,具体详见下图。
资源下载地址:https://download.csdn.net/download/sheziqiong/85797587
资源下载地址:https://download.csdn.net/download/sheziqiong/85797587