FPGA Tutorial
文章平均质量分 93
本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
timerring
知行合一
展开
-
状态机设计举例
文章目录汽车尾灯控制电路设计应用算法状态机设计十字路口交通灯控制电路1.ASM图的状态框、判断框和输出框。2.ASM图中各种逻辑框之间的时间关系3.十字路口交通灯控制电路设计举例状态机设计准则FSM输出方法有限状态机HDL描述规则可靠性与容错性汽车尾灯控制电路设计重点介绍构造状态图的两种方法:一是试探法,二是基于算法状态机构造状态图的方法。例 (试探法)汽车尾灯发出的信号主要是给后面行驶汽车的司机看的,通常汽车驾驶室有刹车开关(HAZ)、左转弯开关(LEFT)和右转弯开关(RIGH原创 2023-02-12 08:15:15 · 2597 阅读 · 2 评论 -
状态机设计中的关键技术
状态编码在使用Verilog HDL描述状态机时,通常用参数定义语句parameter指定状态编码。状态编码方案一般有三种:自然二进制编码、格雷(Gray)编码和独热码(one-hot编码)。对应于图所示的状态图的各种编码方案如表所示。有限状态机的编码方案状态机编码对状态机速度和面积关系重大常用编码二进制码(binary)格雷码(Gray)独热码(one-hot)二进制码与格雷码是压缩状态编码,使用最少的状态位进行编码。二进制编码的优点是使用的状态向量最少,但从一个状态转换到原创 2023-02-11 09:38:13 · 1561 阅读 · 2 评论 -
基于Verilog HDL的状态机描述方法
状态图的建立过程状态图描述方法单个always块描述状态机的方法(尽量避免)两个always块描述状态机的方法(推荐写法)使用三个always块分别描述三种描述方法比较状态图的建立过程设计一个序列检测器电路。功能是检测出串行输入数据Sin中的4位二进制序列0101(自左至右输入),当检测到该序列时,输出Out=1;没有检测到该序列时,输出Out=0。(注意考虑序列重叠的可能性,如010101,相当于出现两个0101序列)。解:首先,确定采用米利型状态机设计该电路。因为该电路在连续收到信号0原创 2023-02-10 09:48:06 · 3775 阅读 · 7 评论 -
状态机的概念与设计
状态机的基本结构及类型状态机的状态图表示法Mealy型Moore型状态机的设计步骤状态机的基本结构及类型有限状态机的标准模型如图所示,它主要由三部分组成:下一状态的逻辑电路(组合电路);存储状态机当前状态的时序逻辑电路(时序电路);输出组合逻辑电路(组合电路)。原创 2023-02-09 10:31:51 · 1318 阅读 · 1 评论 -
m序列码产生电路设计与仿真
分析该电路得到如图所示的仿真波形图,其中任何一级触发器(通常为末级)的输出都是一个周期序列(或者称为m序列),但各个输出端的m序列的初始相位不同。例如,想要产生一个码长为31的m序列,寄存器的级数r = 5,从表中查到反馈系数有三个,分别为45、67、75,可以从中选择反馈系数45来构成m序列产生器,因为使用45时,反馈线最少,构成的电路最简单。、Cr是反馈系数,也是特征多项式的系数。m 序列是对最长线性反馈移位寄存器序列的简称,它是一种由带线性反馈的移位寄存器所产生的序列,并且具有最长周期。原创 2023-02-08 10:06:40 · 2919 阅读 · 3 评论 -
Verilog HDL函数与任务的使用
function ;行为语句;`timescale 1ns/1ns //定义时间单位output F;//调用函数//定义函数//注意此行不需要端口名列表//函数的输入参量声明//函数的输入参量声明case(SEL1)endcaseendmodule(2)激励块(Test Bench)`timescale 1ns/1ns //定义时间单位wire OUT;原创 2023-02-07 09:50:08 · 780 阅读 · 2 评论 -
同步计数器设计与建模
概 述(1) 计数器的逻辑功能计数器的基本功能是对输入时钟脉冲进行计数。它也可用于分频、定时、产生节拍脉冲和脉冲序列及进行数字运算等。(2) 计数器的分类按脉冲输入方式,分为同步和异步计数器按进位体制,分为二进制、十进制和任意进制计数器按逻辑功能,分为加法、减法和可逆计数器原创 2023-02-06 10:25:44 · 4667 阅读 · 8 评论 -
寄存器和移位寄存器分析与建模
移位寄存器及Verilog HDL建模(1) 移位寄存器将若干个D触发器串接级联在一起构成的具有移位功能的寄存器,叫做移位寄存器。移位寄存器的逻辑功能分类与普通移位寄存器的连接不同,输入端D连接两个不同的数据源,一个数据源为前级的输出,用于移位寄存器的操作;另一个数据来自于外部输入,作为并行操作的一部分。控制信号Mode用来选择操作的模式,当Mode = 0时,电路实现移位操作;当Mode = 1时,则并行数据In3~In0便送到各自的输出端寄存。这两种操作都发生在时钟信号的上升沿时刻原创 2023-02-05 10:23:08 · 1444 阅读 · 5 评论 -
D触发器 (D-FF)详解
版本2的特点:采用功能描述风格,使用always和if-else对输出变量赋值。negedge Sd_是一个异步事件,它与if(~Sd_)必须匹配,negedge Rd_是另一个异步事件,它与if(~Rd_)必须匹配,这是语法规定。当Sd_为0时,将输出Q置1;当Sd_=1且Rd_=0时,将输出Q置0;当Sd_和Rd_均不为0,且时钟CP的上升沿到来时,将输入D传给输出Q。注意,如果置1事件、置0事件和时钟事件同时发生,则置1事件的优先级别最高、置0事件的次之,时钟事件的优先级最低。例原创 2023-02-04 11:07:53 · 24630 阅读 · 5 评论 -
时序电路建模基础
Verilog行为级描述用关键词initial或always,但initial是面向仿真,不能用于逻辑综合。always是无限循环语句,其用法为:阻塞型赋值语句与非阻塞型赋值语句在always语句内部的过程赋值语句有两种类型:赋值运算符(=) :阻塞型过程赋值算符赋值运算符(原创 2023-02-03 09:57:07 · 1145 阅读 · 2 评论 -
SR锁存器与D锁存器设计与建模
锁存器和触发器的基本特性锁存器和触发器是构成时序逻辑电路的基本逻辑单元,它们具有存储数据的功能。每个锁存器或触发器都能存储1位二值信息,所以又称为存储单元或记忆单元。若输入信号不发生变化,锁存器和触发器必然处于其中一种状态,且一旦状态被确定,就能自行保持不变,即长期存储1位二进制数。电路在输入信号的作用下,会从一种稳定状态转换成为另一种稳定状态。锁存器(Latch)与触发器(Flip Flop)的区别锁存器(Latch)—— 没有时钟输入端,对脉冲电平敏感的存储电路,在特定输入脉冲电平作用下改原创 2023-02-02 17:03:30 · 1756 阅读 · 4 评论 -
分层次的电路设计方法
使用自下而上的方法(bottom-up) :实例引用基本门级元件xor、and定义底层的半加器模块halfadder;实例引用两个半加器模块halfadder和一个基本或门元件or组合成为1位全加器模块fulladder;实例引用4个1位的全加器模块fulladder构成4位全加器的顶层模块。全加器电路设计举例一位半加器的描述//************ 一位半加器的描述 ************module halfadder (S,C,A,B); //IEEE 1364—1995 Sy原创 2023-02-01 10:16:11 · 743 阅读 · 6 评论 -
Verilog HDL行为级建模
行为级建模就是描述数字逻辑电路的功能和算法。在Verilog中,行为级描述主要使用由关键词initial或always定义的两种结构类型的语句。一个模块的内部可以包含多个initial或always语句。initial语句是一条初始化语句,仅执行一次,经常用于测试模块中,对激励信号进行描述,在硬件电路的行为描述中,有时为了仿真的需要,也用initial语句给寄存器变量赋初值。initial语句主要是一条面向仿真的过程语句,不能用于逻辑综合 。这里不介绍它的用法。在always结构型语句内部有原创 2023-01-31 10:18:41 · 1075 阅读 · 5 评论 -
Verilog HDL数据流建模与运算符
对于基本单元逻辑电路,使用Verilog语言提供的门级元件模型描述电路非常方便。但随着电路复杂性的增加,使用的逻辑门较多时,使用HDL门级描述的工作效率就很低。数据流建模能够在较高的抽象级别描述电路的逻辑功能,并且通过逻辑综合软件,能够自动地将数据流描述转换成为门级电路。数据流建模主要使用逻辑表达式,所以要了解各种运算符和表达式。数据流建模数据流建模使用的连续赋值语句,由关键词assign开始,后面跟着由操作数和运算符等组成的逻辑表达式。一般用法如下:wire [位宽说明] 变量名原创 2023-01-30 12:14:22 · 953 阅读 · 3 评论 -
Verilog HDL门级建模
基本概念结构级建模: 就是根据逻辑电路的结构(逻辑图),实例引用Verilog HDL中内置的基本门级元件或者用户定义的元件或其他模块,来描述结构图中的元件以及元件之间的连接关系。门级建模: Verilog HDL中内置了12个基本门级元件(Primitive,有的翻译为“原语”)模型,引用这些基本门级元件对逻辑图进行描述,也称为门级建模。基本门级元件(Primitive : 原语)多输入门:and、nand、or、nor、xor、xnor只有单个输出, 1个或多个输入原创 2023-01-29 22:28:08 · 1436 阅读 · 5 评论 -
Verilog HDL基本语法规则
词法规定为对数字电路进行描述,Verilog语言规定了一套完整的语法结构。1.间隔符Verilog 的间隔符主要起分隔文本的作用,可以使文本错落有致,便于阅读与修改。间隔符包括空格符(\b)、TAB 键(\t)、换行符(\n)及换页符。2.注释符注释只是为了改善程序可读性,编译时不起作用。多行注释符(用于写多行注释): /* — */;单行注释符 :以//开始到行尾结束为注释文字。3.标识符和关键词标识符: 给对象(如模块名、电路的输入与输出端口、变量等)取名所用的字符串。以英文字母原创 2023-01-28 10:21:34 · 1401 阅读 · 4 评论 -
Verilog HDL仿真常用命令
在设计中,为了提高程序可读性和简化程序描述,可以使用指定的标识符来代替一个长的字符串,或者使用一个简单的名字来代替没有含义的数字或者符号,此时需使用到宏定义命令`define。`define signal(宏名) string(宏内容)在设计中进行了以上声明后,在预编译处理时,在此命令后程序中所有的signal都替换成string,此过程称为“宏展开”。//例1 ://即定义reg[15:0] writedata;原创 2023-01-27 10:41:12 · 1273 阅读 · 4 评论 -
FPGA:逻辑功能的仿真与验证
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。🔥文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或者关注公众号【AIShareLab】,回复 FPGA 也可获取。原创 2023-01-26 12:29:38 · 1711 阅读 · 3 评论 -
FPGA:Verilog HDL程序的基本结构
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。欢迎订阅,持续更新。🔥文章和代码已归档至【】,需要的朋友们自取。或者关注公众号【AIShareLab】,回复也可获取。原创 2023-01-26 00:19:23 · 1482 阅读 · 4 评论 -
FPGA:硬件描述语言简介
⭐本专栏针对FPGA进行入门学习,从逻辑代数等基础知识讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。欢迎订阅,持续更新。🔥文章和代码已归档至【】,需要的朋友们自取。或者关注公众号【AIShareLab】,回复也可获取。原创 2023-01-24 16:38:14 · 2718 阅读 · 4 评论 -
FPGA:组合逻辑电路的设计
试用与非门设计一个热水器水位状态显示电路,要求当水面在A、B之间的正常状态时,绿灯G亮;某雷达站有A、B、C三部雷达,其中A和B消耗功率相等,C的消耗功率是A的两倍。这些雷达由两台发电机X和Y供电,发电机X的最大输出功率等于雷达A的功率消耗,发电机Y的最大输出功率是X的3倍。要求用与、或、非门设计一个逻辑电路,利用各雷达的起动和关闭信号,以最节约电能的方式起、停发电机。为0,表示发电机停止。在具体分析时,发现当逻辑变量被赋予特定含义后,有一些变量的取值组合根本就不会出现,这些最小项应被确定为无关项。原创 2023-01-15 09:17:06 · 2990 阅读 · 3 评论 -
FPGA:逻辑函数的卡诺图化简法
最小项与最小项表达式最小项的定义最小项的性质逻辑函数的最小项表达式卡诺图化简法用卡诺图表示逻辑函数卡诺图的引出两变量卡诺图三变量卡诺图四变量卡诺图已知逻辑函数真值表,画卡诺图已知逻辑函数画卡诺图用卡诺图化简逻辑函数化简的依据化简的步骤用卡诺图化简含无关项的逻辑函数什么叫无关项最小项与最小项表达式最小项的定义n 个变量 �1最小项是 n 个因子的乘积,每个变量 都以它的原变量或非变量的形式在乘积项中出现,且仅出 现一次。一般 n 个变量的最小项应有原创 2023-01-14 09:20:10 · 2160 阅读 · 5 评论 -
FPGA:逻辑函数的代数法化简
化简的意义:根据化简后的表达式构成的逻辑电路简单,可节省器件,降低成本,提高工作的可靠性。“与-或”表达式:也称为 “积之和 (Sum of Products,SOP)”表达式;“或-与”表达式:也称为 “和之积(Products of Sum, POS)”表达式。要求:(1)最简的与-或逻辑函数表达式,并画出逻辑图;每个乘积项中包含的变量数最少(与门的输入端个数少)。运用逻辑代数的基本定律和恒等式进行化简的方法。(2)仅用与非门画出最简表达式的逻辑图。乘积项的个数最少(与门的个数少);原创 2023-01-13 10:16:33 · 1472 阅读 · 22 评论 -
FPGA:逻辑代数的基本公式和规则
文章目录逻辑代数的基本公式基本公式常用公式示例逻辑代数的基本规则代入规则反演规则对偶规则逻辑代数的基本公式基本公式逻辑代数的基本公式 $0、1律: $A+0=A \quad A+1=1 \quad A \cdot 1=A \quad A \cdot 0=0 $分配律: $A(B+C)=A B+A C \quad A+B C=(A+B)(A+C) $交换律: $A+B=B+A \quad A \cdot B=B \cdot A $原创 2023-01-12 10:15:17 · 1234 阅读 · 1 评论 -
FPGA:逻辑运算及逻辑门
逻辑变量与逻辑函数逻辑运算基本逻辑运算及对应的逻辑门1.与运算与逻辑举例状态表与真值表与逻辑符号与逻辑表达式与门电路2. 或运算或逻辑举例电路状态表状态表与真值表或逻辑符号或逻辑表达式或门电路3. 非运算非逻辑举例电路状态表状态表与真值表非逻辑符号非逻辑表达式三极管实现的非门电路常用复合逻辑运算及对应的逻辑门1. 与非运算逻辑真值表与非逻辑符号与非逻辑表达式2. 或非运算逻辑真值表或非逻辑符号或非逻辑表达式3. 异或逻辑异或逻辑真值表异或逻原创 2023-01-11 10:27:56 · 2711 阅读 · 4 评论 -
FPGA:数字电路简介
文章目录数字电路的历史电子管时代晶体管时代半导体集成电路IC 时代IC的发展阶段EDA (Electronics Design Automation) 技术数字集成电路的分类数字集成电路的集成度分类从器件导电类型不同从器件类型不同数字电路的历史数字电路是数字计算机和自动控制系统的基础,它的发展是以电子器件的发展为基础的,器件的发展可以大致上分为3个阶段:电子管(1906年)晶体管(1947年)集成电路(Integrated Circuit,简称IC,1958年)器件发展的几原创 2023-01-10 13:24:21 · 2634 阅读 · 39 评论 -
FPGA设计编程(四) 有限状态机设计
目录【实验要求】 【实验软件工具】【实验一】设计一个交通红绿灯控制器模块,实现主干道和支路之间红绿黄灯的信号转换1. 实验内容与原理说明 2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3. 波形仿真图4.门级电路图【实验二】设计一个小轿车尾灯控制器模块(以书中的例子)1. 实验内容与原理说明 2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3. 波形仿真图4.门级电路图【实验三】设计一个10层楼的电梯控制器模块1. 实验内容与原理说明 2. 实验模块程序代码和激励原创 2022-07-04 21:34:49 · 39390 阅读 · 0 评论 -
FPGA设计编程(三) 时序逻辑电路-计数器设计
目录 【实验要求】 【实验软件工具】【实验一】设计一个8位异步二进制计数器模块1. 实验内容与原理说明2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3. 波形仿真图4.门级电路图【实验二】设计一个8位同步二进制计数器模块1. 实验内容与原理说明2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3. 波形仿真图4.门级电路图【实验三】设计一个8位十进制计数器(异步/同步)模块1. 实验内容与原理说明2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3.原创 2022-07-04 21:23:00 · 35360 阅读 · 0 评论 -
FPGA设计编程(二) 8-3线优先编码器与3-8线译码器
目录【实验要求】 【实验软件工具】【实验一】设计一个8-3线优先编码器(74LS148)1. 实验内容与原理说明 2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3. 波形仿真图4.门级电路图【实验二】设计一个3-8线译码器(74LS138)1. 实验内容与原理说明 2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3. 波形仿真图4.门级电路图【实验结果分析及思考】实验一为设计一个8-3线优先编码器,即可以将八个输入的编码,通过对于输入信号的分析,输出第几个信号是低电原创 2022-07-04 21:11:13 · 57571 阅读 · 1 评论 -
FPGA设计编程(一) 组合逻辑
目录【实验一】设计一个16位二进制全加器模块1. 实验内容与原理说明2. 实验模块程序代码和激励代码3.仿真波形图4.门级电路图【实验二】用层次化设计方法,设计一个16位二进制全加器模块1. 实验内容与原理说明2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3.仿真波形图4.门级电路图【实验三】设计一个16位二进制超前进位全加器模块1. 实验内容与原理说明2. 实验模块程序代码和激励代码(1) 设计模块代码(2)激励模块代码3.波形图4.门级电路图【实验四】设计一个16-bit 8原创 2022-07-04 20:37:29 · 25358 阅读 · 0 评论