FPGA基础之锁存器与触发器的设计
转载:https://blog.csdn.net/lg2lh/article/details/39081061
一、锁存器
首先设计锁存器的时候应该清楚什么是锁存器,锁存器其实是对电平信号敏感的,一定信号是电平敏感的,和时钟边沿clk无关。
所以用verilog描述的时候,应该是:
always @(a,b,e)
begin
if(e)
dout<=a;
end
产生锁存器的原因是因为各条件分支对dout的赋值不全,在else分支内没有对dout操作,这样就会造成锁存器。
实际综合后的RTL视图,可以看到综合后出现了锁存器latch

而从Technology Map View可以看出该锁存器的结构:

实际从FPGA逻辑资源实现上采用了逻辑门实现的,可见FPGA内部一般是没有锁存器这样的单元的。
二、触发器
首先明白触发器敏感信号时时钟边沿, 在Verilog中表述是这样的
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)
dout1<=1'b0;
else if(e)
dout1<=a;
else
dout1<=b;
end
其RTL视图为一个触发器:

而从Technology Map View可以看出FPGA内部实际是有触发器资源的。

三、避免锁存器
在(一)中可以看到对于dout分支不全造成了锁存器。下面再分析一例程序
reg dout,dout1,dout2 ;
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)
dout1<=1'b0;
else if(e)
dout1<=a;
else
dout1<=b;
end
always@(a,b,e)
begin
if(e)
begin
dout2<=a;
end
else
begin
dout<=b; end
end
RTL视图为:包含两个锁存器和一个触发器。
分析:虽然下面的alway里分支都有(if else都有)但是每个分支只对其中一个寄存器赋值,再另一分支中没有再对相应寄存器赋值。
所以对于dout2和dout都形成了锁存器。

再看Technology Map View视图:
分析:图中下面两个位锁存器的结构,可以看出,锁存器是有反馈回路的逻辑电路,如图中标红的线为反馈信号。

为了尽量避免锁存器,改为触发器,修改语句:
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)
dout1<=1'b0;
else if(e)
dout1<=a;
else
dout1<=b;
end
always@(posedge clk )
begin
if(e)
begin
dout2<=a;
end
else
begin
dout<=b; end
end
图示为修改后的RTL视图,把分支赋值全了,可以看到锁存器没有了,变成了触发器

再看Technology Map View视图:
分析:锁存器消失

缺点:时序分析较困难。
不要锁存器的原因有二:
1、锁存器容易产生毛刺,
2、锁存器在ASIC(专用集成电路)设计中应该说比ff(触发器)要简单,但是在FPGA的资源中,大部分器件没有锁存器这个东西,所以需要用一个逻辑门和ff
来组成锁存器,这样就浪费了资源。(用CPLD(复杂可编程逻辑器件)和FPGA(现场可编程逻辑阵列)来进行ASIC设计是最为流行的方式之一)
优点:面积小。锁存器比FF快,所以用在地址锁存是很合适的,不过一定要保证所有的latch信号源的质量,锁存器在CPU设计中很常见,正是由于它的应用使得
CPU的速度比外部IO部件逻辑快许多。latch完成同一个功能所需要的门较触发器要少,所以在asic中用的较多。
FPGA基础之锁存器与触发器的设计的更多相关文章
- FPGA基础设计(四):IIC协议
很多数字传感器.数字控制的芯片(DDS.串行ADC.串行DAC)都是通过IIC总线来和控制器通信的.不过IIC协议仍然是一种慢速的通信方式,标准IIC速率为100kbit/s,快速模式速率为400kb ...
- FPGA基础知识了解
FPGA学习的一些误区 FPGA入门必看资源 FPGA百度百科 FPGA基础知识及其工作原理 高端设计工具为少有甚是没有硬件设计技术的工程师和科学家提供现场可编程门阵列(FPGA).无论你使用图形化设 ...
- 优化基于FPGA的深度卷积神经网络的加速器设计
英文论文链接:http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf 翻译:卜居 转载请注明出处:http://blog.csdn.net/k ...
- FPGA基础入门篇(四) 边沿检测电路
FPGA基础入门篇(四)--边沿检测电路 一.边沿检测 边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测.在检测到所需要的边沿后产生一个高电平的脉冲.这在FPGA电 ...
- FPGA基础知识关键点摘要
FPGA基础知识关键点摘要 一.组合逻辑和时序逻辑的区别:组合逻辑与输入直接实时相关,时序逻辑还必须在时钟上升沿出发后输出新值,有没有时钟输入是他们最大的区别!组合时序容易出现竞争冒险现象出现亚稳态, ...
- 我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装
高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大 ...
- 使用verilog编写锁存器与触发器
需要注意的地方有四点: 1.关于锁存器与触发器在原理上的不同点,以及代码的不同点 2.关于高电平有效与低电平有效之前的区别 3.理解实现复位与实现D触发器之间的区别 4.理解同步与异步之间的区别 锁存 ...
- 在可插拔settings的基础上加入类似中间件的设计
在可插拔settings的基础上加入类似中间件的设计 settings可插拔设计可以看之前的文章 https://www.cnblogs.com/zx125/p/11735505.html 设计思路 ...
- MySQL基础(7) | 触发器
MySQL基础(7) | 触发器 基本语法 创建 CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EA ...
随机推荐
- Vue个人博客关于标题自动打字机效果Typewriter
最近在写个人Blog 中间看过很多个人博客的开发 一大部分用的是Hexo框架或者vuePress框架 导入各种主题样式插件等等 但是看多了就会发现 很多博主的个人博客基本都很相似 并没有什么新东西呈现 ...
- python中reduce filter map lambda函数
lambda函数 python 使用 lambda 来创建匿名函数,lambda返回值是一个函数的地址,也就是函数对象. 语法:lambda [arg1 [,arg2,.....argn]]:expr ...
- 论文解读(DGI)《DEEP GRAPH INFOMAX》
论文标题:DEEP GRAPH INFOMAX 论文方向:图像领域 论文来源:2019 ICLR 论文链接:https://arxiv.org/abs/1809.10341 论文代码:https:// ...
- php获取纳秒方法
PHP不提供精度高于微秒的函数. 可以使用system功能,直接从机器中获得的价值,如果你运行的是Linux: $nanotime = system('date +%s%N');
- dede调用数据时,字符串替换函数使用
{dede:sql sql="SELECT typename,typedir,typeimg FROM #@__arctype where topid=30 limit 0,6"} ...
- javascript 求最大前5个数; 对象 深拷贝 deep copy
* 用数组 function getTopN(a, n) { function _cloneArray(aa) { var n = aa.length, a = new Array(n); for ( ...
- P3288-[SCOI2014]方伯伯运椰子【0/1分数规划,负环】
正题 题目链接:https://www.luogu.com.cn/problem/P3288 题目大意 给出\(n\)个点\(m\)条边的一张图,没条边\(i\)流量为\(c_i\),费用是\(d_i ...
- WPF进阶技巧和实战05-样式与行为
样式(style)是组织和重用格式化选项的重要工具.创建一系列封装某些细节的样式,然后通过属性来应用样式. 行为(behavior)是一款重用用户界面代码更有挑战性的工具.基本思想是:使用行为封装一些 ...
- oracle dg failover灾难切换
oracle dg failover灾难切换SQL> alter database recover managed standby database finish force;SQL> a ...
- 🚴♂️全套MySQL数据库教程_Mysql基础入门教程,零基础小白自学MySQL数据库必备教程☔ #002 # 第二单元 MySQL数据类型、操作表#
二.本单元知识点概述 (Ⅰ)知识点概述 二.本单元教学目标 (Ⅰ)重点知识目标 1.Mysql的数据类型2.如何选择数据类型3.创建表4.修改表5.删除表 (Ⅱ)能力目标 1.熟练创建数据库及删除数据 ...