基于FPGA数字门电路的实现

学习电子工程的过程中离不开大量的实验和动手练习,就如同开车一样,学习理论数载,如果从来没有打几把方向盘,踩几脚油门然后再被教练紧急刹车几次,仍然不会开车。正所谓,看别人做一百次,不如自己练一次。
1
门电路原理
在数字电路中,门电路是最基本的构成单位,可以说,任何复杂的数字电路系统都可以通过我们耳熟能详的与门,非门,或门,与非门,异或门等等组合实现。
对于各种门电路的逻辑特征,想必大家都掌握得炉火纯青,脑海里可以毫无压力地随时浮现着各种0和1的组合。
然而,搭建一个门电路实验却并不容易!我们以下面的与非门电路为例。
图1 与非门电路
表1 与非门真值表
传说中,如果想做一个与非门的数字电路实验,可以通过以下两种方法:
热爱模电的朋友们可以通过mos管+面包板+电源+跳线以及若干小时的反复调试。
土豪朋友们对此不屑一顾,直接拍几千块买一台数字电路实验仪。
当然,既没有那么热爱模电,也没有那么多软妹纸的朋友门仍然有更合适的办法,那就是通过逻辑芯片。比如大家熟悉的7400系列的逻辑芯片,只需要接上电源,再配上开关,led等器件,就可以通过实验方式对与非门的逻辑和电气特性进行直观地学习,比如采用7400 quad2的与非门逻辑芯片。
图2 与非门逻辑芯片
因为我们要观察实验现象,因此需要配上开关和led灯,使得实验可以可视化。当然,作为习惯了课上学习1+1=2,考试见到
的后浪,肯定不能满足于这个简单的实验。现在,在上一个练习的基础上,我们来尝试构建以下门电路组合。
图3 组合门电路
嵌入式专栏
2
门电路实现
以下是某位同学独特的实现方式:
图4
虽然我们还通过软件仿真的方式构建上述电路并观察波形,然而和电路上进行实打实的操作相比终究是有质的差别。毕竟靠着模拟飞车驾龄20年资历上路还是要被警察叔叔带走的。
不难看出,画门电路容易,对门电路进行实验很难,对各式各样奇葩组合的门电路进行实验更是难上加难。然而这一切在fpga面前都只是谈笑风生。
fpga,英文全称field programmable gate array,是一种可以通过某百科或搜索引擎查找到并且看了之后不明觉厉的东西。在此,我们主要介绍一下fpga的部分特点,以及如何使其与数字电路实验进行结合。
首先问大家一个问题:我们在计算3x7=21或者5x8=40的时候,有谁是通过最原始的乘法原理推导并计算出来的,如果有,请在底部留言并获得所有人的膜拜。相信大部分人都可以在半秒内给出准确答案,为什么?因为我们都背过九九乘法表,只要是在这个范围内的任意乘法我们的大脑都可以瞬间对应出计算结果。相信大家对当年的11²=121,12²=144,13²=169…等等还历历在目。
之所以我们可以在一定范围内进行准确和快速的计算,是因为我们的大脑里储存了一个拥有大量数据的查找表,在一定范围内的输入数据我们都可以迅速在表中找到对应答案。其实,fpga的运算处理方式就类似于我们的大脑。它拥有一个可以储存大量数据的查找表,只要我们通过程序定义出输入与输出之间的逻辑关系,fpga就可以按照该逻辑关系自行对其内部结构进行重新定义,直白地说,就是我们可以随时给fpga进行洗脑,而后者可以永远不计回报,心甘情愿地被洗脑。
接下来我们就快速展示一下如何通过fpga展示图3所示的门电路。既然要对fpga进行洗脑,肯定需要语言。在这里我们采用简单通俗的verilog语言,通过描述门电路的方式,以16行代码轻松在fpga上搭建上述门电路。
module custblock ( input wire a, //定义输入a input wire b, //定义输入b input wire c, //定义输入c input wire d, //定义输入d output wire y1, //定义输出y1 output wire y2 //定义输出y2 ); wire s1,s2,s3; //定义中间变量 nand (s1,a,b); //(输出,输入,输入) or (s2,c,d); // 调用基本门电路 xnor (y1,s1,c); and (s3,c,s2); xor (y2,c,s3); endmodule
将上述代码导入fpga之后,就等于在fpga上构建出了一个模块,输入端分别是a,b,c,d,输出端分别是y2,y1,且内部结构和图3中所示的功能完全一样。
图5
不过,对于实验来说,仅仅在fpga上搭建出该门电路模块还是不够的,我们还需要允许实验者对该电路进行调试并观察现象,因此还需要有相应的可操作/观察元件与fpga配合使用。接下来就是我们备受欢迎的小脚丫fpga登场的时候了。
图6 小脚丫fpga核心板
从示意图中可以看出,小脚丫fpga带有多个板载外设,如开关,led和数码管等,可以对绝大部分数字电路进行生动的实验操作。小脚丫配有usb下载器,可以通过一根usb线实现供电和程序下载。板上的36个多功能i/o接口可以进行项目扩展,且封装采用dip40尺寸,因此可以与面包板完美结合。
以下是通过我们小脚丫fpga对该电路进行的实验。我们采用板载的4个拨码开关和2个led(低电平亮)分别作为模块的4路输入和2路输出,并且通过调节输入来观察输出结果。上下两图分别所对应的输入分别为:0001和0101,我们也观察到了在两种情况下的led状态。


力旺电子推全新反熔丝架构嵌入式非挥发性内存技术
UDE 2020展多个厂商展示柔性屏,折叠屏将取代OLED成主流?
专业工程师告诉你电动车是否需要天天充电
昆山完整半导体产业链已初步形成 力争到2021年全市产业销售收入达到500亿元
基于CDMA模块的车载监控终端的设计方案
基于FPGA数字门电路的实现
作物冠层分析仪如何选择
芯片行业缺的不仅仅是人才,更缺的是人力
变频器与电机是怎样的一种关系
水产病害Pcr检测仪是什么,有什么作用
无风扇工控机散热片有什么设计方面的特点
电动汽车电池变得更加复杂
三星为何爆不停?祸起这两大法则
dfrobot机器人轮子电机套件简介
晶闸管的静态特性
长沙的智慧交通怎样利用5G来发展
虚拟现实风投联盟第四次联盟成员投资大会 多家VR公司展示最新产品
PCB如何进行拼版?详细步骤分解
降低感染风险 多台搭载思岚科技定位导航的机器人站上抗疫前线
磁力矩的计算公式_磁力矩方向如何判定