FPGA学习笔记(三)—— 数字逻辑设计基础(抽象的艺术)
FPGA设计的是数字逻辑,在开始用HDL设计之前,需要先了解一下基本的数字逻辑设计—— 一门抽象的艺术。
现实世界是一个模拟的世界,有很多模拟量,比如温度,声音······都是模拟信号,通过对模拟信号进行约束,我们就会抽象出来高电平和低电平,也就是0和1,用来构建整个数字逻辑世界,这个约束就是电平规则约束,比如常见的有以下几种:
| 电平约束 | VDD/VCC | 0 | 1 |
| CMOS | 3~8V | 0~0.3VDD | 0.7~1VDD |
| TTL | 5V±5% | 0~0.7 | 2.4~5 |
| LVCMOS | 3.3 | 0~0.9 | 2.7~3.3 |
| LVTTL | 3.3 | 0~0.8 | 2.4~3.3 |
晶体管(三极管和MOS管)主要有两种作用,一是工作在放大状态,用于信号放大,二是工作在截止区(断)和饱和区(通),所以我们可以用晶体管实现数字世界的0和1:

接下来我们用0和1进行最基本的组合,构成一个只有两个晶体管的最简单的门电路 —— 非门:

再稍微复杂一下,我们可以用4个晶体管构成与非门、或非门、三态门:




这个时候可以进一步抽象,不再利用晶体管构建电路,而是用非门、与非门、或非门构建更复杂的门电路,比如非门、或门、异或、同或等等······


有了这些基本的门电路,我们可以用这些门电路搭建各种各样的功能电路,比如用一个异或门和一个非门构成半加器(HalfAdder):

这个时候再次进行抽象,将功能模块用一个带有输入输出表示的小方块表示,然后用这些小方块去搭建更复杂的电路,比如将半加器抽象成一个功能模块,然后用两个半加器搭建一个全加器(Adder):

全加器设计出来之后,也被抽象成了如上图所示的功能模块,我们依然可以用这个功能模块去搭建更复杂的功能,比如将四个全加器级联起来构成四位加法器:

用基本的逻辑门电路构建半加器,再用半加器构建全加器,再将1bit全加器级联构成4bit加法器,这种设计体现了数字逻辑设计中最基本的思想 —— 层次化和模块化;
利用这种设计思想,除了用门电路搭建多位加法器之外,还可以实现各种各样的功能电路,比如最常见的组合逻辑电路多路选择器、译码器(地址译码器、显示译码器、2-4译码器等等),这些电路有一个最大的特点就是输出只取决于当前输入:


上述功能电路都是组合逻辑电路,输出只取决于当前输入,那么,如何将0和1锁存起来不要变化呢?我们可以用门电路搭建一个D锁存器,当控制端C为1时,输出 = 输入,当控制端C为0时,输出保持上一状态的值不变,这样就成功的将0和1锁存起来;
当控制端C不再人为控制,而是接入时钟信号CLK,这样它就会不断的进行锁存、刷新,构成一个最基本的时序逻辑电路,时序逻辑电路的特点是输出不仅与输入有关,还与上一状态也有关,同样的,这个用门电路搭建的电路也可以抽象成一个带有输入和输出的方块,如图所示:

对于D锁存器而言,当控制端C为高电平时,输出一直保持与输入同步,这样的功能还不能够满足应用,我们希望它可以只在某个特定时刻发生变化,上升沿或者下降沿触发,也叫边沿触发,所以,我们用两个D锁存器构成D触发器来实现这个功能:在时钟CLK上升沿将输入刷新到输出,其它时刻均保持不变:

同样的,我们可以将D触发器抽象成一个带有输入输出的小方块(注意:CLK信号带有三角形表示边沿触发),当4个小方块共享一个CLK信号时,就构成了一个4bit寄存器;当4个小方块一级一级进行级联时,就构成了一个4bit移位寄存器,在数字逻辑世界中,左移1bit和右移1bit就表示了乘法和除法;


抽象出来D锁存器和D触发器的小方块后,我们构建了寄存器,然后我们可以用寄存器来构建一些简单的时序逻辑电路,比如计数器;也可以用来构建同步时序逻辑电路,主要为状态机和流水线;设计这些越来越复杂的系统时,用原理图的方式会变得越来越繁琐,实现起来用74系列数字逻辑元件会更加复杂,幸好我们有硬件描述语言,有FPGA,可以帮我们更加方便的设计复杂数字逻辑系统,接下来的几篇会讲解用硬件描述语言verilog去描述逻辑门,描述组合逻辑功能模块,描述时序逻辑电路功能模块,然后进一步描述最重要的数字逻辑设计 —— FSM有限状态机的设计,最后,用两张图了解一下数字逻辑系统设计的巅峰之作 —— CPU(Center Peocess Uint),燃烧对数字逻辑设计的激情!


FPGA学习笔记(三)—— 数字逻辑设计基础(抽象的艺术)的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- muduo网络库学习笔记(三)TimerQueue定时器队列
目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...
- Liunx学习笔记(三) 文件权限
一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...
- ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心
作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
随机推荐
- 手把手教你从头开始搭建友善之臂ARM-tiny4412开发环境(史上最详细!!)
创建一个ARM目录 mkdir /disk/A9 -p 接下来你需要准备以下的东西 1.arm-linux-gcc-4.5.1 交叉编译器 2.linux-3.5-tiny4412 ...
- Redis服务信息
想要获得下面的redis服务器信息,只需要在命令行中输入:info server 部分记录了 Redis 服务器的信息,它包含以下域: redis_version : Redis 服务器版本 redi ...
- OpenCV——PS滤镜, 碎片特效
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- ajax-------封装
function ajax(url, fnSucc, fnFaild){ //1.创建Ajax对象 var oAjax=null; if(window.XMLHttpRequest) { oAjax= ...
- SPRING事务的属性有哪些?其中,事务隔离级别有哪几种?什么情况需要使用这几种事务隔离级别?
Spring 声明式事务,propagation属性列表 PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. PROPAGATION_SU ...
- 解决记录:win10 无法安装VS2017,visual studio installer下载进度始终为0
问题描述:win10 下无法安装VS2017,visual studio installer下载进度始终为0,点击取消按钮后,也没有反应,visual studio installer也关闭不掉: 具 ...
- php namespace与use
实验代码 ~/aa.php ~/bb.php 1.命名空间与文件加载的关系 本人在命名空间与文件加载上一直有一个误区,用了命名空间文件不用加载了? 实验1:去掉requre语句 可以看到就算使用命名空 ...
- C#WebService 出现No 'Access-Control-Allow-Origin' header is present on the requested resource
C#WebService 出现No 'Access-Control-Allow-Origin' header is present on the requested resource 解决办法: 在c ...
- 8人/天,小记一次 JAVA(APP后台) 项目改造 .NET 过程(后台代码已完整开源于 Github)
Github: https://github.com/iccb1013/Jade.Net 我们只消耗了8人/天的时间,完成了全部工作,基于我们 Jade.Net 的开源后台代码,任何小规模的后台管理系 ...
- 爬虫之urllib包
urllib简介 简介 Python3中将python2.7的urllib和urllib2两个包合并成了一个urllib库 Python3中,urllib库包含有四个模块: urllib.reques ...