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学习笔记(三)—— 数字逻辑设计基础(抽象的艺术)的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

  3. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

  4. muduo网络库学习笔记(三)TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

  5. Liunx学习笔记(三) 文件权限

    一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...

  6. ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心

    作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...

  7. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  8. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  9. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

随机推荐

  1. Linux - 主机的细部权限规划:ACL 的使用

    ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限配置.ACL 可 ...

  2. butternife Zelezny自动注入插件

    插件地址:http://plugins.jetbrains.com/plugin/7369 Products: IntelliJ IDEA, RubyMine, WebStorm, PhpStorm, ...

  3. Linux内核中断和异常分析(下)

    这节,我们继续上,中(以前的日志有)篇目进行分析,结合一个真实的驱动案例来描述linux内核中驱动的中断机制,首先我们先了解一下linux内核中提供的中断接口. 这个接口我们需要包含一个头文件:#in ...

  4. Windows平台安装及配置Hadoop(不借助cygwin)

    由于项目需要,我在VMware上装了几个虚拟机Windows server 2012 R2,并要搭建Hadoop集群.刚刚入门hadoop,一头雾水,然后开始搜各种教程,首先是选用cygwin进行安装 ...

  5. Oracle 报错ORA-00904:标示符无效

    写select查询,报错:ORA-00904 标示符无效 这个错误通常是因为 字段名写错了,或者是在创建表的时候,创建最后一个字段的时候也加了逗号 . 我遇到的情况时,之前的同事创建表的时候,将小写的 ...

  6. 管理xcode插件

    1.打开终端 2.输入     open ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins 3.出现 4.想删除那个就随意吧 ...

  7. htmlDOM操作1

    DOM 是 Document Object Model(文档对象模型)的缩写. HTML 的标准对象模型 HTML 的标准编程接口 HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它 ...

  8. ORACLE中主键约束跟唯一索引的区别

    分类: DB 2011-12-03 21:34 611人阅读 评论(0) 收藏 举报 oracleconstraintsimmutableusertabledomain 1.  分别用两种方法创建主键 ...

  9. 在 javascript 中,为什么 [1,2] + [3,4] 不等于 [1,2,3,4]?

    在 stackoverflow 上有人提问:arrays - Why does [1,2] + [3,4] = "1,23,4" in JavaScript? 问题 我想将一个数组 ...

  10. java并发包分析之———Deque和LinkedBlockingDeque

    一.双向队列Deque   Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque.这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂.下图描述的是Deq ...