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

    文章

    2050

    浏览量

    63042
  • 同步复位
    +关注

    关注

    0

    文章

    27

    浏览量

    10956
  • 异步复位
    +关注

    关注

    0

    文章

    47

    浏览量

    13643
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机如何选择复位方式?

    时钟,使系统进入正常工作状态。 这种复位方式简单直接,适用于大多数单片机系统。其特点是复位过程与电源上电过程同步,无需额外的复位电路。 然而
    发表于 11-26 08:09

    GraniStudio:轴复位例程

    1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入轴复位例程,点击导入按钮。 打开轴复位运动例程所在路径,选中轴复位运动.gsp文件,点击打开,完成导入。 2.
    的头像 发表于 08-22 16:05 478次阅读
    GraniStudio:轴<b class='flag-5'>复位</b>例程

    GraniStudio零代码平台轴复位算子支持多少个轴同时复位,有哪些回零模式?

    GraniStudio平台在轴复位的功能上未对同时复位的轴数进行硬性限制,理论上支持任意数量轴同步复位,需要考虑的是在做多轴同步
    的头像 发表于 07-07 18:02 484次阅读
    GraniStudio零代码平台轴<b class='flag-5'>复位</b>算子支持多少个轴同时<b class='flag-5'>复位</b>,有哪些回零模式?

    复位电路的核心功能和主要类型

    复位电路(Reset Circuit) 是数字系统中的关键功能模块,用于确保设备在上电、电压波动或异常状态下可靠复位至初始状态。其设计直接影响系统的稳定性和抗干扰能力。
    的头像 发表于 06-30 14:24 904次阅读
    <b class='flag-5'>复位</b><b class='flag-5'>电路</b>的核心功能和主要类型

    单片机各种复位电路原理

    使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功
    发表于 05-30 16:53

    正激变换器的两种复位方式

    (a)所示的是RCD复位正激变换器,即在变压器上并联了一个由二极管D,电容C,电阻R组成的环节,在开关S关断时由激磁电感和漏感的感应电势使二极管D导通,由电容C上的电压对变压器复位
    的头像 发表于 05-19 10:59 2.2w次阅读
    正激变换器的两种<b class='flag-5'>复位</b>方式

    《电子懒人的基础硬件电路图讲解

    包含了简单的,基础的单元电路图。积累这些基础的电路图,对分析一个复杂的电路很有帮助。因为一个复杂的电路图可以按照功能来划分成不同的模块,再对模块进行分解成不同的单元
    发表于 04-24 16:40

    LM3724系列 低功率电压监控和复位IC,带手动复位功能数据手册

    LM3722/LM3723/LM3724 微处理器监控电路可监控电源 在微处理器和数字系统中。它们在上电期间为微处理器提供复位, 掉电、掉电条件和手动复位。 LM3722/LM3723
    的头像 发表于 04-12 11:11 785次阅读
    LM3724系列 低功率电压监控和<b class='flag-5'>复位</b>IC,带手动<b class='flag-5'>复位</b>功能数据手册

    MCP809系列 /3 引脚复位 IC数据手册

    MCP809/810 微处理器监控电路可用于监控微处理器和数字系统中的电源。它们在上电、掉电和掉电情况下为微处理器提供复位。 MCP809/810 的功能是监控 V~抄送~supply
    的头像 发表于 04-12 10:55 958次阅读
    MCP809系列  /3 引脚<b class='flag-5'>复位</b> IC数据手册

    TPS3840-Q1 具有手动复位和可编程复位时间延迟的汽车高输入电压监控器数据手册

    当 VDD 上的电压降至负电压阈值 (V 以下) 时,复位输出信号被置位 ~它-~ ) 或当手动复位被拉至低逻辑 (V ~MR_L~ ).当 V 时 reset 信号被清除~DD 系列~上升到 V
    的头像 发表于 04-10 11:20 648次阅读
    TPS3840-Q1 具有手动<b class='flag-5'>复位</b>和可编程<b class='flag-5'>复位</b>时间延迟的汽车高输入电压监控器数据手册

    TLV840系列 具有可调复位时间延迟和手动复位功能的低压监控器数据手册

    TLV840 系列电压监控器或复位 IC 可在高电压水平下工作,同时在整个 VDD 和温度范围内保持极低的静态电流。TLV840 提供低功耗、高精度和低传播延迟 (t p_HL = 30 μs
    的头像 发表于 04-10 10:17 682次阅读
    TLV840系列 具有可调<b class='flag-5'>复位</b>时间延迟和手动<b class='flag-5'>复位</b>功能的低压监控器数据手册

    复位电路的作用、控制方式和类型

    复位电路也是数字逻辑设计中常用的电路,不管是 FPGA 还是 ASIC 设计,都会涉及到复位,一般 FPGA或者 ASIC 的复位需要我们自
    的头像 发表于 03-12 13:54 3534次阅读
    <b class='flag-5'>复位</b><b class='flag-5'>电路</b>的作用、控制方式和类型

    电源电路图深度讲解

      用电路元件符号表示电路连接的,叫电路图电路图是人们为研究、工程规划的需要,用物理电学标准化的符号绘制的一种表示各元器件组成及器件关系
    的头像 发表于 02-18 10:46 4526次阅读
    电源<b class='flag-5'>电路图</b>深度<b class='flag-5'>讲解</b>

    AN-686: 实现I²C复位

    电子发烧友网站提供《AN-686: 实现I²C复位.pdf》资料免费下载
    发表于 01-15 16:26 0次下载
    AN-686: 实现I²C<b class='flag-5'>复位</b>

    EE-64:设置复位时的模式引脚

    电子发烧友网站提供《EE-64:设置复位时的模式引脚.pdf》资料免费下载
    发表于 01-14 15:14 0次下载
    EE-64:设置<b class='flag-5'>复位</b>时的模式引脚