FPGA同步复位异步复位
今天看了篇博客,
是拿altera的芯片和软件作例子的,讲同步异步复位的:
http://blog.sina.com.cn/s/blog_bff0927b0101aaii.html
还有一个博客,
http://bbs.ednchina.com/BLOG_ARTICLE_201656_2.HTM
想起<设计与验证>这本书也讲过,
顺便说一下,这是一本非常好的书!
拿 ISE实验了一下,器件选了ZC702,发现看到的RTL级电路,都不一样,
个人觉得现在的FPGA与综合工具都很智能了,
很多小问题都不用太在意,比如下面这几个例子中,ISE会自动选择不同的D触发器去适应...
then why bother...
同事也常说,好的时序是设计出来的,不是约束出来的...好像和这个没多大关系,
嗯...比如常用的"打一拍",时钟相位修改,合理的乒乓,缓存RAM,FIFO的使用...
在大多数情况下都可以解决问题;
同步异步复位的优缺点,书中有讲,大概在80页左右;
如下:
[同步复位]
优点,有效去毛刺,因为只有在时钟沿到来时,复位才能生效;
缺点,多消耗了组合逻辑资源,复位时间不能太短,否则复位不完全;
如代码段,
module reset(
input clk,
input reset,
input in,
output out
); reg test;
always @( posedge clk )
if(reset)
test <= 'b0;
else
test <= in; assign out = test; endmodule
博客和书中说,大多数FPGA中的触发器没有同步复位端,所以会多出一些组合逻辑,如
盗个图,
这就是多出来的资源,另外FPGA中DFF资源多一些,组合逻辑少一些;
而我用ISE出来的是,并没有额外多出组合逻辑,
查了fdr的源语,
// FDRE: Single Data Rate D Flip-Flop with Synchronous Reset and
// Clock Enable (posedge clk).
// Artix-7
// Xilinx HDL Language Template, version 14.4 FDRE #(
.INIT('b0) // Initial value of register (1'b0 or 'b1)
) FDRE_inst (
.Q(Q), // 1-bit Data output
.C(C), // 1-bit Clock input
.CE(CE), // 1-bit Clock enable input
.R(R), // 1-bit Synchronous reset input
.D(D) // 1-bit Data input
); // End of FDRE_inst instantiation
既然是源语,所以我觉得这个片子里是有,带同步复位的D-FF的,
也许现在大多数FPGA都有了...
如果有同学说,再底层是不是还是普通的D-FF+组合逻辑,那就不清楚了...
所以个人觉得使用类似FPGA用同步复位时也不必再担心浪费资源了;
[异步复位]
优点,快速复位,消耗资源少;
缺点,不利于时序约束,复位也容易受到毛刺影响,从而造成不稳定;
如代码段,
module reset(
input clk,
input reset,
input in,
output out
); reg test;
always @( posedge clk or posedge reset )
if(reset)
test <= 'b0;
else
test <= in; assign out = test; endmodule
书中说,大多数FPGA,CPLD都有异步复位端,所以RTL级图如下,
异步清零的DFF
// FDCE: Single Data Rate D Flip-Flop with Asynchronous Clear and
// Clock Enable (posedge clk).
// Artix-7
// Xilinx HDL Language Template, version 14.4 FDCE #(
.INIT('b0) // Initial value of register (1'b0 or 'b1)
) FDCE_inst (
.Q(Q), // 1-bit Data output
.C(C), // 1-bit Clock input
.CE(CE), // 1-bit Clock enable input
.CLR(CLR), // 1-bit Asynchronous clear input
.D(D) // 1-bit Data input
); // End of FDCE_inst instantiation
[另外]
书中和博客中给出了解决方法,就是把异步复位信号,"打一拍"再使用,
叫同步释放,异步复位,代码段
module reset(
input clk,
input reset,
input in,
output out
); reg test;
reg reset_r;
always @( posedge clk )
begin
reset_r <= reset;
end always @( posedge clk or posedge reset_r)
if(reset_r)
test <= 'b0;
else
test <= in; assign out = test; endmodule
ISE下RTL图,如下,
即书中的图,
这样做肯定更好,更容易去掉毛刺;
但如果时序没那么差,而且FPGA内部有了同步复位的DFF,能省则省了;
另外复位的重要性与同步复位的复位时间要求,书中有介绍;
FPGA同步复位异步复位的更多相关文章
- FPGA设计中的复位
(1)异步复位与同步复位的写法 1.异步复位与同步复位的区别? 同步复位:若复位信号在时钟有效边沿到来时刻为有效,则执行一次复位操作. 优点: 1)同步复位是离散的,所以非常有利于仿真器的仿真: 2) ...
- 7.FPGA中的同步复位与异步复位
1.异步复位 always @ ( posedge sclk or negedge s_rst_n ) if ( !s_rst_n ) d_out <= 1'b0; else d_out < ...
- FPGA设计中的异步复位、同步释放思想
1.一个简单的异步复位例子: module test( input clk, input rst_n, input data_in, output reg out ); always@(posedge ...
- 用4bit的counter看同步复位与异步复位
先看看这个同步复位 //date: 2013/8/20 //designer :pengxiaoen module counter_4 ( clock,reset, out ); input rese ...
- FPGA基础学习(9) -- 复位设计
目录 1. 常见问题 2. 常见的复位方式 3. 合理的复位设计 3.1 复位电平 3.2 异步复位同步化 3.3 恰到好处的复位 4. 补充 4.1 所谓的上电初始化 参考文献 一开始接触到FPGA ...
- ALTERA器件中复位电路实现之-异步复位同步化
所谓异步复位同步化,就是我们通常说的异步复位同步撤除. 为了避免纯粹的同步复位和纯粹异步复位的问题,可以使用一种叫做同步化的异步复位,我们称其为第三类复位.这种复位完全结合了异步复位和同步复位的优势, ...
- 关于FIFO异步复位的问题
关于FIFO异步复位的问题 FIFO异步复位的宽度,需要保证至少3个较慢时钟的时钟周期长度. 怎样对一个脉冲加宽呢? `timescale 1ns / 1ps //////////////////// ...
- Verilog笔记.5.同步、异步
在数字电路中经常有同步synchronism.异步asynchronism的概念.异步指输入信号和时钟无关:同步指输入信号和时钟信号有关,实际上就是输入信号和时钟信号进行了与运算或者与非运算.实际开发 ...
- .NET同步与异步之相关背景知识(六)
在之前的五篇随笔中,已经介绍了.NET 类库中实现并行的常见方式及其基本用法,当然.这些基本用法远远不能覆盖所有,也只能作为一个引子出现在这里.以下是前五篇随笔的目录: .NET 同步与异步之封装成T ...
随机推荐
- Solr和IK分词器的整合
IK分词器相对于mmseg4J来说词典内容更加丰富,但是没有mmseg4J灵活,后者可以自定义自己的词语库.IK分词器的配置过程和mmseg4J一样简单,其过程如下: 1.引入IKAnalyzer.j ...
- 移动端解决fixed和input获取焦点软键盘弹出影响定位的问题
场景描述, 当document的高度不够window的高度时候,如在ip6中文档的高度比窗体的高度小,到底设计在最下方的区域没有在窗体最下方,就留有空白地方如下图的灰色部分 1. 解决初始化文档高度, ...
- Java学习的随笔(一)对象概念、this指针、权限修饰符
最近在看<Java编程思想>,下面按照最近看书的顺序梳理一下心得,由于是初次学习,大部分心得是摘抄自书中: 1. Java中,每个变量都是一个对象. 在创建时首先在内存的堆栈中创建一个该对 ...
- css分割线 文字居中的7种实现方式
最近开始研究前端,会不定期更新一些小块代码,写下自己的学习笔记,也希望能和大家一起进步! 1.单个标签实现分隔线: <html> <head lang="en"& ...
- 再回首,Java温故知新(八):Java基础之字符串
字符串是Java中使用频率最高的类,但是它却不属于基本类型,而是预定义了String类来表示.从String类的源码可以看到,String是基于char[]实现的,而且Java中的String是不可变 ...
- Nginx报错:Sorry, the page you are looking for is currently unavailable. Please try again later.
查看了进程, nginx, php-fpm都在运行, 排除程序错误, 那么就是配置的问题了. 一个可能的错误, 是由于配置中的 fastcgi_pass 配置错了 错误的配置如下 server { l ...
- Shell 脚本模拟 milter 实现黑白名单及关键词过滤
程序执行流程:1. 开始接受邮件.2. 检查发件人是否在黑名单内,如果是拒绝接受;否则继续3. 检查发件人是否在白名单内,如果是接收邮件;否则继续4. 对邮件进行关键字过滤,如果邮件中包含被过滤的关键 ...
- python之 sys.exit() os._exit() exit() quit()的简单使用
python之sys.exit() os._exit() exit() quit()的简单使用 1>sys.exit() >>> import sys>>> ...
- codevs4203山区建小学
/* 状态:f[i][j] 前i个村庄已经建了j个学校 转移:f[i][j]=min(f[i][j],f[ii][j-1]+s[ii+1][i]) 1<=ii<=i-1 */ #inclu ...
- 使用ef code first模式,在部署后服务器端把数据库同步到最新版本的方法
共有两种方法: 1.使用migrate.exe 具体使用方法请参考 msdn migrate使用方法,这里只做介绍 复制migrate.exe 在使用 NuGet 安装实体框架时,migrate.ex ...