0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

异步复位与同步复位的综合后电路图讲解

454398 来源:博客园 作者: IC_learner 2020-11-14 11:32 次阅读

这里来记录一下相似代码之间的不同差异,比如同步复位与异步复位触发器的对比,上升沿复位和下降沿复位的对比等等。这里主要使用ISE的综合引擎。直接附上代码和综合后电路图,有些会有部分讲解。

一、异步复位与同步复位

我在复位电路里面讲解了同步复位和异步复位的区别,这里就不详细介绍了,链接如下:http://www.cnblogs.com/IClearner/p/6683100.html

(1)异步复位

异步复位的代码如下所示:

module DFF1(
  input clk,
  input rst_n,
  input d,
  output reg q
);

always@(posedge clk or negedge rst_n)
  if(!rst_n)
    q <= 0; //异步清 0,低电平有效
  else
    q <= d;

endmodule

综合得到的电路图如下所示:

可以看到使用了一个反相器单元和一个触发器单元;从代码中我们可以推断出,这是一个高电平有效的、异步复位触发器。

(2)同步复位

同步复位触发器代码如下所示,注意黑体部分

module DFF2(
  input clk,
  input rst_n,
  input d,
  output reg q
);

always@(posedge clk )//注意这里有所不同
  if(!rst_n)
    q <= 0; //同步清 0,低电平有效
  else
    q <= d;

endmodule

综合得到的电路如下所示:

我们可以看到,也是由一个反向器单元和一个触发器单元构成,注意,这里的触发器跟上面的触发器显然不是同一个类型的触发器,管脚名称改变了;结合代码我们可以知道,这个触发器是高电平触发、同步复位的触发器(由于是输入信号是低电平有效,所以加了个反相器)。

二、不同电平之间的复位差异

(1)高电平触发的异步复位VS低电平触发的异步复位

①高电平触发的异步复位(异步置位)

综合得到的电路如下所示:

根据代码,容易推断得出这是一个高电平触发、异步复位的触发器(或者叫异步置位),这也与前面的内容相符合(高电平触发复位,所以不用加反相器)。

②低电平触发的异步复位

代码和电路跟 一(1)的代码和电路相同,这里不进行重述。

(2)高电平触发的同步复位VS低电平触发的同步复位

①高电平触发的同步复位

代码如下所示:

 1 module DFF4(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 
 8 always@(posedge clk )
 9   if(rst_r)
10     q <= 0; 
11   else
12     q <= d;
13 
14 endmodule

综合得到的电路如下所示:

可以知道,这是一个高电平有效、同步复位的触发器单元。

②低电平触发的同步复位

代码和电路同一(2),这里不进行重述

三、阻塞赋值和非阻塞赋值

(1)阻塞赋值综合的触发器

代码如下所示,这里为了使用高电平触发的触发器单元,写出高电平复位:

 1 module DFF_chain(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 reg reg_m ;
 8 always @(posedge clk )//high level reset,synchronization
 9   if(rst_r)begin
10         reg_m = 0;//block
11        q = 0; 
12   end   else begin
13         reg_m = d;
14         q = reg_m ;
15   end
16 endmodule

综合得到的电路如下所示:

可以看到,综合得到只有一个触发器,中间的触发器变量reg_m被优化掉了,只剩下q这个触发器。

(2)换个顺序的非阻塞赋值的触发器

把后面的这两个语句对调一下,同时把中间的变量改个名字,改成reg_block(这里改名字只是为了区分后面的非阻塞赋值的情况)

即要综合的代码如下所示:

 1 module DFF_chain(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 reg reg_block ;
 8 always @(posedge clk )//high level reset,synchronization
 9   if(rst_r)begin//block
10         reg_block = 0;
11        q = 0; 
12   end   else begin //here has changed
13         q = reg_block ;
14         reg_block = d;        
15   end
16 endmodule

综合得到的电路如下所示:

可以看到,调换顺序之后,得到了我们我们想要的触发器链。

结论:描述时序逻辑使用阻塞赋值可能得到正确的结果,也可以得到不正确的结果,因此时序逻辑不建议使用阻塞赋值

(3)非阻塞赋值综合的触发器

代码如下所示:

 1 module DFF_chain(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 reg reg_m ;
 8 always @(posedge clk )//high level reset,synchronization
 9   if(rst_r)begin
10         reg_m <= 0;//non block 
11        q <= 0; 
12   end   else begin
13         reg_m <= d;
14         q <= reg_m ;
15   end
16 endmodule

综合得到的电路如下所示:

从电路图中可以看到,综合得到了两个触发器,中间的触发器reg_m被保留下来了,达到了我们预想中的触发器链。

(4)换个顺序后的非阻塞赋值

跟前面的阻塞赋值一样,我们换一下顺序,代码如下所示:

 1 module DFF_chain(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 reg reg_nonblock ;
 8 always @(posedge clk )//high level reset,synchronization
 9   if(rst_r)begin//non block
10         reg_nonblock <= 0;
11        q <= 0; 
12   end   else begin
13         q <= reg_nonblock ;
14         reg_nonblock <= d;        
15   end
16 endmodule

综合得到的电路如下所示:

从电路中可以看到,即使调换了顺序,电路还是我们需要的触发器链。

结论:描述时序逻辑,使用非阻塞赋值可以得到正确的结果,因此时序逻辑推荐使用非阻塞赋值

(5)描述组合逻辑电路时的阻塞赋值和非阻塞赋值

阻塞赋值描述组合逻辑(加法器),代码如下所示:

 1 module Adder(
 2   input a,
 3   input b,
 4   input c,
 5   output reg q
 6 );
 7 reg sum_block ;
 8 always @(* )
 9    begin
10         sum_block = a + b  ;
11         q = sum_block + c;        
12    end
13 endmodule

综合得到电路如下所示:

综合得到的电路是一个加法器。

我们改成非阻塞赋值看看,代码如下所示:

 1 module Adder(
 2   input a,
 3   input b,
 4   input c,
 5   output reg q
 6 );
 7 reg sum_block ;
 8 always @(* )
 9    begin
10         sum_block <= a + b  ;
11         q <= sum_block + c;        
12    end
13 endmodule

综合得到的电路:

综合得到的电路也是一个加法器。

因此可以冒险地得到一个结论,无论是阻塞赋值还是非阻塞赋值,都可以描述组合逻辑,但是一般情况下,我们推荐使用阻塞赋值,一方面是对仿真有用,另一方面是区别于描述时序逻辑的非阻塞赋值。

最后我尝试着在同一个块中使用阻塞赋值和非阻塞赋值,ISE的综合器报错。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 触发器
    +关注

    关注

    14

    文章

    1995

    浏览量

    61003
  • 同步复位
    +关注

    关注

    0

    文章

    26

    浏览量

    10694
  • 异步复位
    +关注

    关注

    0

    文章

    46

    浏览量

    13295
收藏 人收藏

    评论

    相关推荐

    复位电路的三种方式 复位电路的原理和作用

    ) 原理: 上电复位电路通常包含一个RC(电阻-电容)网络。当电源首次接通时,电容充电需要一定的时间,这段时间内电容上的电压较低,导致复位电路输出低电平,触发微控制器的
    的头像 发表于 10-21 10:28 229次阅读

    复位电路的电容多大的 复位电路设计类型有哪几种

    复位电路是电子系统中的一个关键部分,它确保系统在启动或发生故障时能够正确地初始化。复位电路的设计取决于多种因素,包括系统的复杂性、所需的复位
    的头像 发表于 10-21 10:24 128次阅读

    复位电路静电整改案例分享(一)——交换机复位电路

    复位信号,确保单片机在上电能够立即进入初始化状态。其中上拉电阻可以确保在未按下按钮时输入引脚上具有高电平状态,避免输入信号的浮动和噪音干扰。在选择上拉电阻时,根据具体需求和电路设计合理参数可以提高
    的头像 发表于 10-19 14:56 221次阅读
    <b class='flag-5'>复位</b><b class='flag-5'>电路</b>静电整改案例分享(一)——交换机<b class='flag-5'>复位</b><b class='flag-5'>电路</b>

    复位电路介绍 复位电路的原理及作用

    复位电路(Reset Circuit)是现代电子设备中常见的一种关键电路,它用于确保在正确的时间和条件下将系统恢复到初始状态。复位电路的设计
    的头像 发表于 10-18 16:44 479次阅读

    STM32复位电路复位芯片和阻容复位电路区别

    STM32是一款广泛使用的微控制器,其复位电路设计对于系统的稳定性和可靠性至关重要。本文将详细介绍STM32复位电路中使用复位芯片和阻容
    的头像 发表于 08-06 10:26 904次阅读

    FPGA同步复位异步复位

    FPGA(Field-Programmable Gate Array,现场可编程门阵列)中的复位操作是设计过程中不可或缺的一环,它负责将电路恢复到初始状态,以确保系统的正确启动和稳定运行。在FPGA设计中,复位方式主要分为
    的头像 发表于 07-17 11:12 1192次阅读

    L431采用PLL异步时钟,复位ADC采样值发生偏差的原因?

    前提:可以确认的是外部条件没有变化。 问题:开机复位的情况下,ADC_DMA读取值几乎相同,而每次重新复位,ADC_DMA读出来的值差别较大。在采用ADC
    发表于 03-08 07:32

    什么是复位同步电路 reset synchronizer?

    复位同步电路 reset synchronizer 其实只在复位信号 release 的时候派上用场。复位结束
    的头像 发表于 02-19 09:21 1265次阅读
    什么是<b class='flag-5'>复位</b><b class='flag-5'>同步</b><b class='flag-5'>电路</b> reset synchronizer?

    如何排查GD32 MCU复位是由哪个复位源导致的?

    上期为大家讲解了GD32 MCU复位包括电源复位和系统复位,其中系统复位还包括独立看门狗复位、内
    的头像 发表于 02-03 09:46 1616次阅读
    如何排查GD32 MCU<b class='flag-5'>复位</b>是由哪个<b class='flag-5'>复位</b>源导致的?

    异步复位异步释放会有什么问题?FPGA异步复位为什么要同步释放呢?

    一般来说,复位信号有效后会保持比较长一段时间,确保 register 被复位完成。但是复位信号释放时,因为其和时钟是异步的关系,我们不知道它会在什么时刻被释放。
    的头像 发表于 01-24 09:32 1637次阅读
    <b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>异步</b>释放会有什么问题?FPGA<b class='flag-5'>异步</b><b class='flag-5'>复位</b>为什么要<b class='flag-5'>同步</b>释放呢?

    为什么需要复位电路?漫谈复位reset

    在IC设计中,把复位和时钟电路称为最重要的两个电路一点也不为过。前者复位电路把IC设计的电路引导
    的头像 发表于 01-19 16:41 2012次阅读
    为什么需要<b class='flag-5'>复位</b><b class='flag-5'>电路</b>?漫谈<b class='flag-5'>复位</b>reset

    同步复位异步复位到底孰优孰劣呢?

    同步复位异步复位到底孰优孰劣呢? 同步复位异步
    的头像 发表于 01-16 16:25 1549次阅读

    复位电路复位条件和复位过程

    电源监测芯片复位电路:这是最常见的复位电路类型,使用专用的电源监测芯片来监测电源电压,并在电压低于或高于预设阈值时触发复位信号。
    的头像 发表于 01-16 16:04 1145次阅读

    异步复位同步撤离是什么意思?如何做到异步复位同步撤离呢?

    复位消抖之后的下一件事,[异步复位]()同步撤离。这句话什么意思呢?
    的头像 发表于 12-04 13:57 4494次阅读
    <b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b>撤离是什么意思?如何做到<b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b>撤离呢?

    复位保护电路如何进行复位保护?

    复位保护电路,是在系统进行复位的过程中对接口进行硬性逻辑保护,避免毛刺和错误对周围系统产生影响的模块。
    的头像 发表于 12-04 13:48 753次阅读
    <b class='flag-5'>复位</b>保护<b class='flag-5'>电路</b>如何进行<b class='flag-5'>复位</b>保护?