数字电路的基础知识(结合Verilog)
1.数制与编码
1.1格雷码
1.2二进制码和格雷码的相互转换
1.2.1二进制码转换为格雷码
1.2.2格雷码转换为二进制码
2.逻辑代数
3.硬件描述语言(Verilog)
关于reg和wire的使用以及alway @(A,B):
本文结合了原锆石科技文档资料(截取其中部分图表),并参考了康华光《 电子技术基础 数字部分》(第六版)。
1.数制与编码
在verilog中想要表示一个二进制,首先要给出二进制的长度,其次要给出二位数的标识(例如:8'b1000,表示8位的二进制数1000;8'd8,表示十进制10;8'h8,表示十六进制8)
注意:位数与标识可以省略,默认的位数是32位,默认的进制是十进制。
表1.1 常见编码
1.1格雷码
格雷码又叫循环二进制码或反射二进制码,它的基本特点是任意两个相邻的代码只有一位二进制数不同。这里着重强调格雷码的原因是,当数字变化的位数越多,每个位变化的频率也比较高,在某些特定情况下是十分不利的,可能会导致电路状态错误或输出错误的结果。而使用格雷码可以有效避免这种错误,由于格雷码具有循环特性和单步特性,当用它表示一个连续变化的数值时,仅有一个位会翻转,大大降低了位变化的频率,因此可以保证传输的稳定性和较低的传输误码率。
下图是十进制0-15对应的格雷码:
1.2二进制码和格雷码的相互转换
1.2.1二进制码转换为格雷码
最左边一位保持不变,从右边倒数第一位起,依次与左边一位进行异或操作,作为该位对应格雷码的值。
1.2.2格雷码转换为二进制码
最左边一位保持不变,从左边第二位起,依次与左边一位进行异或操作,作为该位对应二进制码的值。
2.逻辑代数
Verilog HDL内置26个基本元件,其中14个是门级元件,12个为开关级元件,其中7个基本门分别为:and(与)、nand(与非)、or(或)、nor(或非)、not(非)、xor(异或)、nxor(同或)。
表2.1 常见的门电路的几种表示方法
3.硬件描述语言(Verilog)
模块是Verilog HDL的基本描述单位,用于描述每个设计的功能或结构,以及与其他模块通信的外部接口。一个模块可以包括整个设计模块或者设计模型的一部分,模块的定义总是从关键词module开始,以关键词endmodule结尾。
图3.1 一般的Verilog语法结构
这里简要对描述接口说明部分进行详细阐述(引用低层次模块和基本门级元件、连续赋值语句(assign)、过程赋值语句(initial和always)以实例给出)。
(1)"模块名"是模块唯一的标示符,括号中以逗号分隔列出的端口名是该模块的输入、输出端口;
(2)"端口类型说明"为input(输入)、output(输出)、inout(双向端口)三种类型,凡是在模块后面圆括号中出现的端口必须明确定义其端口类型;
(3)"参数定义"是将常量用符号常量替代,以增加程序的可读性和可修改性,是一个可选择的语句,用不到可以省略;
(4)"数据类型定义"部分用来指定模块内所用的数据对象是寄存器类型(reg等)还是连线类型(wire等)。
下面以与门的Verilog代码为例。
图3.2 使用连续赋值语句描述方法实现与门电路
注意:
(1)这里未对数据类型进行定义,是因为input或output默认的数据类型是wire型,因此在此省略(也可以对其进行定义,wire A,wire B,wire Y);
(2)连续赋值语句assign是针对wire型变量的一种赋值语句,wire型变量一般对应到FPGA中的一根线,由于wire型的值是会随着驱动源的变化而变化的,因此也将assign成为"连续"赋值语句;
(3)Verilog中没有与非、或非、异或和同或这些组合逻辑运算符号,但是可以通过组合与、或和非运算得到。
图3.3 引用低层次模块的描述方法实现与门电路
图3.4 利用过程赋值语句来描述与门电路
关于reg和wire的使用以及alway @(A,B):
(1)在Verilog中,任何过程赋值的左侧变量必须声明为reg,除此之外使用的变量必须声明为wire;
(2)Verilog区分reg和wire的原因与数据类型检查有关,这样能保证设计者无法对同一变量使用两种不同类型赋值。如果尝试对同一个变量既做连续赋值,又做过程赋值,连续赋值要求用net声明,过程赋值要求用reg赋值,而把同一个变量同时声明为两种类型属于语法错误(net并不是一个关键字,它代表了一组数据类型,包括wire、wand、wor、tri、triand、trior以及trireg等。线网(net)表示硬件单元之间的连接,就像在真实的电路中一样,线网由其连接器件的输出端连续驱动。线网一般使用关键字wire进行声明,如果没有显式地说明为向量,则默认线网的位宽为1);
(3)always @(A,B),@是事件等待语句,意思是always不断循环等待A和B两个敏感变量变化,不管A和B是从高到低,还是从低到高,将会执行always下面的 Y=A&&B语句。如果A和B都没有变化,那么always将不往下执行,将一直循环等待。新标准可以书写为always @ (*),是个组合逻辑电脑的描述方式,能够防止在设计时因考虑不周全导致的一些操作失误,敏感表用*(表示全部的敏感变量),只要有任何输入信号变化,其输出立即发生变化。
References:
锆石科技《HELLO FPGA数字部分》
数字电路的基础知识(结合Verilog)相关推荐
- 数字电路基础知识——格雷码和二进制码的转换的算法和Verilog实现
数字电路基础知识--格雷码和二进制码的转换的算法和Verilog实现 关于数字电路中的码制问题在这篇博客中已经做了详细分析, 数字电路基础知识--数字IC中的进制问题(原码,反码,补码以及各进制的转换 ...
- 数字电路基础知识——组合逻辑电路实现一些简单逻辑电路 (一)(用Verilog实现:绝对值函数运算(补码问题),取对数函数(移位寄存器),取整函数)
数字电路基础知识--组合逻辑电路实现一些简单逻辑电路 (一)(用Verilog实现:绝对值函数运算(补码问题),取对数函数(移位寄存器),取整函数) 在数字逻辑设计中,本节介绍绝对值运算函数如何用Ve ...
- Verilog HDL基础知识
Verilog HDL基础知识 Verilog HDL的语言要素 空白符 注释符 标识符和转义标识符 关键字 数值 1. 整数及其表示 2. 实数及其表示 3. 字符串及其表示 数据类型 Verilo ...
- 数字电路基础知识——乘法器的设计(二)( 串行、流水线、有符号数八位乘法器)
数字电路基础知识--乘法器的设计(二)( 串行.流水线.有符号数八位乘法器) 前面一节关于乘法器的具体实现方式有很多种方法,均有各自的优缺点. 本节将再介绍一下两种乘法器的设计,分别用Verilog语 ...
- 数字电路基础知识——组合逻辑电路(奇偶校验电路、数据比较器的设计)
数字电路基础知识--组合逻辑电路(奇偶校验器.比较器的Verilog设计) 本次主要介绍组合逻辑电路中的奇偶校验电路以及比较器的设计,以及相干的实例来熟悉这两种电路. 一.奇偶校验电路 奇偶校验码 奇 ...
- Verilog基础知识总结02
Verilog基础知识总结02 1.简述Verilog如何建模 数字电路有两种基本要素:线(器件管脚之间的物理连线:wire)和器件(模块:module). Verilog建模就是用HDL语言把数字电 ...
- 数字电路基础知识——组合逻辑电路之乘法器的设计(一)—— 并行、移位相加、加法树、查找表乘法器
数字电路基础知识--乘法器的设计(一)-- 并行.移位相加.加法树.查找表 乘法器的设计主要应用在数字信号处理和数字通信,本节主要介绍乘法器的四种实现方法.使用并行乘法器.移位相加乘法器.查找表乘法器 ...
- Verilog HDL基础知识---之数据类型
Verilog HDL基础知识之数据类型 数据类型 物理数据类型 连线型 寄存器型 连线型和寄存器型数据类型的声明 存储器型 抽象数据类型 整型 时间型 实型 参数型 kkkk我来啦 , 接上回写 数 ...
- <Verilog实现加法器>加法器相关基础知识——持续更新版
一,内容介绍 加法器是数字电路中的最基础电路之一,也是CPU的核心功能之一.(计算单元) 在这个专栏,我会把所有我知道的数字电路的加法器相关模型都实现一遍并解释其原理. 编程使用的语言为Verilog ...
- FPGA基础知识极简教程(9)七段数码管显示的Verilog简单设计
博文目录 写在前面 正文 七段数码管原理 七段数码管译码表 单个七段数码管显示verilog设计 多个数码管动态扫描显示 参考资料 交个朋友 写在前面 作为FPGA的基础知识教程怎么能少得了这个简单的 ...
最新文章
- linux进程间通信:命名管道FIFO
- 大数据集合求交集_通达信北上资金+盘面分析sp版面,智能大数据集合,筹码占比指标...
- C# 8的Ranges和递归模式
- ASP.NET Core 2.1 源码学习之 Options[1]:Configure
- Request爬取网站(seo.chinaz.com)百度权重的查询结果
- shell中的函数、shell中的数组、 告警系统需求分析
- 《架构之美》学习随笔:好的架构
- 100. 相同的树 golang
- jeeCMS首页加载流程
- java enumeration接口_20180824-Java Enumeration 接口
- Could not open ServletContext resource [/WEB-INF/applicationContext.xml]”解决方案
- 安卓动态调试七种武器之离别钩 – Hooking(下)
- oracle的sql优化
- fat32硬盘格式能在苹果系统里读写操作吗?
- 使用sp_executesql存储过程执行动态SQL查询
- AWS 推出长期支持的 OpenJDK 免费分发版本 —— Amazon Corretto
- ROS Kinetic 安装指南
- HDOJ水题集合5:杂题
- VMware虚拟机启动后出现黑屏,挂起关机无响应解决方案
- 计算一条3d空间直线和一个3d空间平面的交点