8位CPU设计(1) 门电路和锁存器、触发器

转载请注明出处:https://blog.csdn.net/Leytton/article/details/90761305

一、导言

在这篇文章里,我将给大家介绍一些门电路基础知识,并利用门电路,搭建一个能保存一位数据的锁存器和D触发器

这是一个系列文章,也是作者的一个分阶段计划。

  1. 已完成 从最简单的门电路介绍,从基础的锁存器、触发器、编码器、译码器等一系列数字逻辑电路(对应大学课程《数字逻辑电路》);
  2. 已完成 用这些逻辑电路构造寄存器、存储器、运算器等计算机结构(对应大学课程《计算机组成原理》);
  3. 进行中 将上述结构设计组成一个简易版的8位CPU;
  4. 未开始 如果顺利的话,作者将选用一些实际的门电路电子元器件,绘制PCB电路板并造出简易版CPU实物;
  5. 进行中 开发配套的编译软件把汇编语言转换成这个CPU能够运行的二进制数据(对应大学课程《汇编语言》)
  6. 未开始 我们的CPU应该具备USB烧写程序功能,把二进制数据烧写到里面运行;
  7. 开发CPU对应的高级语言暂无打算(对应大学课程《编译原理》);
  8. 进行中 把这个过程写下来分享给大家。

二、名词约定

1、缩写约定

复位输入:R (Reset)
数据输入:D (Data)
时钟输入:C CLK(Clock)
数据输出:Q (至于为什么不用"O",Out,下面给出了一段有意思的解释)

为什么要用Q呢?这是因为输出的英语是用OUT表示的,简单表示是用O表示的,如果用O表示很容易看错为0。为了不容易看错,德国人就想出了用Q来表示输出的含义了

2、术语约定

(1)高电平和低电平

CPU或MCU芯片有不同的正常工作电压,有5V、3.3V等。一般而言接近工作电压的称为高电平,接近0V(接地)的是低电平;

当然实际情况并不是完全等于工作电压或者完全是0V,会划分一个范围的电压是高电平、另一个范围的是低电平
我的另一篇篇文章有Arduino和STM32芯片的电压划分图:
《Arduino与STM32等单片机读取高电压信号输入》https://leytton.blog.csdn.net/article/details/78398143

在这里演示,我们用1表示高电平,用0表示低电平。

三、基础门电路

与、或、非是三种最基础的门电路,不是很懂的同学可以阅读这篇文章,有形象的介绍:
《继电器是如何成为CPU的(1)》https://blog.csdn.net/Leytton/article/details/90522635

在这里再简单地描述下:

1、与门

全部输入都是高电平,输出才是高电平。

真值表如下:

输入D1输入D2输出Q
000
010
100
111

2、或门

只要其中一个输入是高电平,输出就是高电平。

真值表如下:

输入D1输入D2输出Q
000
011
101
111

2、非门

输入高电平,输出低电平;输入低电平,输出高电平。

真值表如下:

输入D输出Q
01
10

四、D锁存器

锁存器是靠时钟信号电平触发。下图是D锁存器

  • 复位R=1时,数据输出Q=0;复位R=0时,数据输出Q由数据输入D和时钟输入C决定
  • R=0时,若C=0,则Q=0;若C=1,则Q=D
    总而言之就是不是复位的情况下,时钟输入为高电平,则数据输入才能有效输出
    在这里插入图片描述
    真值表如下:
复位R时钟输入C数据输入D数据输出Q
1XX0
00X0
0100
0111

我们把锁存器封装一下,只留输入输出,方便后面复用
在这里插入图片描述

五、D触发器

触发器是靠时钟信号的边沿触发。下图为上升沿触发有效的D触发器:
当时钟信号由低电平变成高电平的瞬间,把数据输入保存起来。
在这里插入图片描述
下图有个网上找的静态图(出处):
在这里插入图片描述

CLK=0时,主锁存器工作,接收输入信号Qm = D;从锁存器不工作,输出 Q 保持不变。
CLK=1时,主锁存器不工作,Qm保持不变;从锁存器工作,将Qm传送到输出端。

在设计时我用的是下降沿触发的D寄存器:
当时钟信号由高电平变成低电平的瞬间,把数据输入保存起来。
在这里插入图片描述

六、相关软件

感谢下列作者提供优秀的软件帮助我们方便研究以及更好地展示作品 ?

1、电路仿真:Logisim
逻辑电路仿真软件,能帮助你对数字逻辑电路和计算机组成原理有更深刻的理解。万丈高楼平地起,你可以使用它出神入化地设计出简易的CPU来。
下载地址:https://download.csdn.net/download/leytton/11225068

2、GIF动图录制:LICEcap
1M不到的GIF动画录制软件,亲测不掉色不失真,生成动图体积小,现在博客文章里可以配上动图啦
下载地址:https://download.csdn.net/download/leytton/11225078

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 深入掌握CPU的工作原理,包括ALU、控制器、寄存器、存储器等部件的工作原理; 2. 熟悉和掌握指令系统的设计方法,并设计简单的指令系统; 3. 理解和掌握小型计算机的工作原理,以系统的方法建立起整机概念; 4. 理解和掌握基于VHDL语言和TEC-CA硬件平台设计模型机的方法。 二、设计要求   参考所给的16位实验CPU设计与实现,体会其整体设计思路,并理解该CPU的工作原理。在此基础上,对该16位的实验CPU(称为参考CPU)进行改造,以设计得到一个8位CPU。总的要求是将原来16位的数据通路,改成8位的数据通路,总的要求如下: 将原来8位的OP码,改成4位的OP码; 将原来8位的地址码(包含2个操作数),改成4位的地址码(包含2个操作数)。   在上述总要求的基础上,对实验CPU的指令系统、ALU、控制器、寄存器、存储器进行相应的改造。具体要求如下: 修改指令格式,将原来指令长为16位的指令格式改成8位的指令长格式; 设计总共16条指令的指令系统。此指令系统可以是参考CPU指令系统的子集,但参考CPU指令系统中A组和B组中的指令至少都要选用2条。此外,常见的算术逻辑运算、跳转等指令要纳入所设计的指令系统; 设计8位的寄存器,每个寄存器有1个输入端口和2个输出端口。寄存器的数量受控于每一个操作数的位数,具体要看指令格式如何设计设计8位的ALU,具体要实现哪些功能与指令系统有关。设计时,不直接修改参考CPU的VHDL代码,而是改用类似之前基础实验时设计ALU的方式设计设计8位的控制逻辑部件,具体结合指令功能、硬布线逻辑进行修改; 设计8位的地址寄存器IR、程序计数器PC、地址寄存器AR; 设计8位的存储器读写部件。由于改用了8位的数据通路,不能直接采用DEC-CA平台上的2片16位的存储芯片,需要按照基础实验3的方法设计存储器。此种方法不能通过DebugController下载测试指令,因此测试指令如何置入到存储器中是一个难点。设计时,可以考虑简单点地把指令写死在存储器中(可用于验证指令的执行),然后用只读方式读出来;或者考虑在reset的那一节拍里,实现存储器中待测试指令的置入; (可选项)设计8位的数据寄存器DR; (可选项)不直接设计存储器RAM,而是采用DEC-CA平台上的2片16位的存储芯片.在实现了第9个要求的基础上,实现由Debugcontroller置入待测试指令; (可选项)顶层实体,不是由BDF方式画图实现,而是用类似基础实验4(通用寄存器组)中设计顶层实体的方式,用VHDL语言来实现。 (可选项)自己设想   利用设计好的指令系统,编写汇编代码,以便测试所有设计的指令及指令涉及的相关功能。设计好测试用的汇编代码后,然后利用Quartus II软件附带的DebugController编写汇编编译规则。接着,利用DebugController软件把汇编编译之后的二进制代码置入到所采用的存储器中,并对设计好的8位CPU进行测试。
### 回答1: 锁存器触发器是数字电路中常用的元件,用于存储和控制信号的传输。在Logisim中,可以通过组合逻辑电路和时序逻辑电路来设计锁存器触发器锁存器可以通过D触发器和时钟信号来实现。当时钟信号为高电平时,D触发器会将输入信号存储在内部,当时钟信号为低电平时,D触发器会保持原来的状态。通过将多个D触发器串联,可以实现更复杂的锁存器电路。 触发器可以通过JK触发器、RS触发器或D触发器来实现。这些触发器都有一个时钟信号和一个或多个输入信号,当时钟信号为高电平时,触发器会根据输入信号的状态改变输出信号的状态。通过将多个触发器组合,可以实现更复杂的逻辑电路。 在Logisim中,可以使用内置的元件库来设计锁存器触发器电路。也可以自定义元件来实现更复杂的功能。设计电路时,需要注意时序逻辑电路的时序关系和时钟信号的稳定性,以确保电路的正确性和可靠性。 ### 回答2: 锁存器触发器是数字电路中非常重要的元件,它们可以用来存储和控制数据。本文将介绍在Logisim中如何设计锁存器触发器。 首先,让我们了解一下锁存器触发器的概念。 锁存器是一种可以将输入数据存储下来的电路,能够在其输入的时钟脉冲作用下保存数据。在下一个脉冲到来之前,锁存器会一直保持输入的状态。锁存器常用于计数器和寄存器等电路。 触发器是一种类型的锁存器,它只有一位输入和一位输出。触发器也可以用来存储数据,有时也被称为单稳态多触发器。其通过输入时钟脉冲使得输出状态改变,输出状态上升或下降;当输入脉冲结束时,它将保留输出状态,直到下一个脉冲到来才会改变状态。触发器有很多种类型,如D触发器(数据输入触发器)、JK触发器和T触发器等。 在Logisim中,我们可以很容易地设计锁存器触发器。首先,我们需要在模块列表中找到“记忆元件”选项。在“记忆元件”下拉菜单中,我们可以选择锁存器触发器。 使用Logisim设计锁存器时,我们需要添加以下元件:时钟、输入和输出端口、以及一个锁存器。我们可以使用“输入”元件添加输入端口,并使用“输出”元件添加输出端口。将时钟和输入连接到锁存器的时钟和数据输入线上,将锁存器的输出连接到输出线上,建立电路连接关系。我们还可以在锁存器的属性中设置初始值和存储方式。 设计触发器遵循与锁存器相同的基本步骤。我们需要选择正确的触发器类型,然后将时钟、输入和输出端口添加到电路图中。最后,我们将输出端口连接到触发器的输出线上,建立电路连接关系。 通过使用Logisim,我们可以轻松地设计锁存器触发器。我们可以根据电路的需要,选择适合的锁存器触发器类型,然后将它们添加到电路图中以实现所需的功能。 ### 回答3: 锁存器触发器设计是数字电路设计中非常常见的设计,它们都在电路中起到了存储数据的作用。这里以Logisim软件为例,简单介绍锁存器触发器设计的实现方法。 首先,我们先讲一下锁存器设计锁存器通常是用来暂时存储一些数据或状态,它可以用来存储寄存器、计数器等。Logisim中的锁存器一般由两个D触发器构成,D触发器带有时钟信号,作用是存储输入数据,并在时钟下降沿时输出数据。 对于一个双D触发器锁存器的实现方法,可以使用Logisim的内置元件D触发器和三路选择器来实现。首先,我们将两个D触发器连接在一起,并把其中一个D触发器的输出引入到另一个D触发器的输入,就构成了一个双D触发器锁存器。接着,我们再使用三路选择器来控制数据的输入和输出,将一路连接到输入数据,一路连接到上一个锁存器的输出,还有一路连接到一个常数输入,通过选择器的输入选择开关来决定数据存储或读取。 而对于触发器设计,则可以使用Logisim的内置元件JK触发器,在此不做过多赘述。当然,除了JK触发器以外,还有很多其他的触发器可以使用,例如SR触发器,D触发器等。 熟练掌握锁存器触发器设计是数字电路设计的基础,它们可以用来实现存储、计数、寄存、跳转等各种功能。无论是在课程学习还是实际应用中,都有着重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值