同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)

这篇具有很好参考价值的文章主要介绍了同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.同步和异步

  • 数字电路根据逻辑功能的不同特点,可以分成两大类:一类叫做组合逻辑电路,简称组合电路或组合逻辑;另一类叫做时序逻辑电路,简称时序电路或时序逻辑。

    • 如果数字电路满足任意时刻的输出仅仅取决于该时刻的输入,那么该数字电路为组合逻辑电路。
    • 相反,如果数字电路任意时刻的输出不仅取决于当前时刻的输入,而且还取决于数字电路原来的状态,那么该数字电路为时序逻辑电路
  • 这里和状态机分类有点像,Moore型的输出只与当前状态有关,而Mealy型的输出还与输入相关


在Verilog中根据是否受同一个时钟控制把电路分为两类:同步时序电路和异步时序电路

  • 同步电路:

    • 电路中所有信号都受同一个时钟控制的
    • 电路中有多个时钟,但是其相位差是恒定的,也认为是同步电路
    • 所有触发器都在同一个时钟控制下完成、所有触发器的触发方式(沿触发/电平触发)和种类完全一致
  • 异步电路

    • 电路中有不受时钟控制的信号
    • 电路中有多个时钟,但是其相位差不是恒定的,是异步电路
  • 同步动作:所有的信号都在一个时钟下控制

  • 异步动作:敏感信号列表中有不受时钟控制的其他信号,要遍历clock信号和(reset)异步信号,并且(reset)异步信号级别比clock信号高


2. 同步复位、异步复位、同步释放

2.1 同步复位

  • 复位信号只在时钟上升沿到来时才有效;
  • 能够有效滤除高于时钟频率的毛刺;
  • 同步复位的优点在于它只在时钟信号clk的上升沿触发进行系统是否复位的判断,这降低了亚稳态出现的概率
  • 复位信号的有效时间必须大于时钟周期才可以检测到复位
  • 与异步复位相比,电路多使用一个选择器,需要消耗更多的器件资源

2.1.1 Verilog code

module sync_reset(
  input      i_clk,
  input      i_rst_n,
  input      i_data,
  output reg o_data
);

always @(posedge i_clk)
  if(!i_rst_n)
    o_data <= 1'b0;
  else
    o_data <= i_data;
endmodule

2.1.2 Verdi waveform

同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)


2.1.3 DC Synthesis

同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)


2.2 异步复位

  • 无论时钟有效沿是否有效,只要复位信号到来,立即执行复位操作
  • 复位信号释放时,如果不满足时序要求,可能由复位引入亚稳态
  • 采用异步复位的端口无需额外增加器件资源的消耗,直接利用触发器的异步复位端,节省资源

2.2.1 Verilog code

module async_reset(
  input      i_clk,
  input      i_rst_n,
  input      i_data,
  output reg o_data
);

always @(posedge i_clk or negedge i_rst_n)
  if(!i_rst_n)
    o_data <= 1'b0;
  else
    o_data <= i_data;
endmodule

2.3 同步释放(异步信号和CLK信号存在时序检查、Recover time&Removel time)

  • 如果复位信号正好在时钟信号的有效沿撤销,这时候的输出就是亚稳态
  • 使用两级触发器同步释放(留一个周期的裕量),大大减小亚稳态出现的概率,万一出现亚稳态只要在(周期T-Tsetup)这个时间恢复稳定即可
  • 两级触发器同步后,第二级触发器的输出基本上是稳定值。后续逻辑根据稳定值,会有稳定的行为。这就是追求的系统稳定性。
  • 异步复位、同步释放其最显著特征是既保留了异步复位的功能,又避免了异步复位释放时所面临的recovery或者removal违例问题

2.4 异步复位、同步释放

2.4.1 Verilog code

module reset_gen (
   output rst_sync_n,
   input  clk, rst_async_n);

reg rst_s1, rst_s2;

always @(posedge clk, negedge rst_async_n)
   if (!rst_async_n) begin
      rst_s1 <= 1'b0;
      rst_s2 <= 1'b0;
      end
   else begin
      rst_s1 <= 1'b1;
      rst_s2 <= rst_s1;
      end
assign rst_sync_n = rst_s2;
endmodule

同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)

2.4.2 Verdi waveform

  • 如上图所示,低电平有效的异步复位信号 rst_async_n 变为低电平时,将导致触发器清零,使得连接至 rst_sync_n 的系统触发器清零
    同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)
    同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)

  • 然后,当rst_async_n解除复位(变为高电平)时,第一个触发器对输入的 VCC 信号进行同步输出rst_s1为VCC,再经过第二个触发器同步后移除复位信号rst_sync_n
    同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)

  • 我们在Gvim中更改了代码,VCS编译后,Verdi中还是旧的代码,这时候在Verdi中进行刷新(shift+L),新的代码以及波形图都会在Veridi中更新

  • 假设rst_async_nclk的上升沿时撤除,那么第一级触发器处于亚稳态,但是由于两级触发器的缓冲作用,第二级触发器的输入为clk到来前第一级触发器的输出,即为低电平。因此,此时第二级触发器的输出一定是稳定的低电平,方框左中触发器仍然处于复位状态。在下一个clk到来时,第一级触发器的输出已经是稳定的高电平了,故rst_sync_n已经是稳定的高电平,此时复位释放,也就是同步释放。

同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)


2.4.3 DC Synthesis

# DC tcl cmd
start_gui
set top_module_name "async_rst_syns_clr"
read_file -format verilog "./rtl/$top_module_name.v"
link
write -hier -f ddc -out "unmapped/$top_module_name.ddc"
#Constraints are not considered
compile_ultra
write -hier -f ddc -out "mapped/$top_module_name.ddc"
write_file -hier -f verilog -out "mapped/$top_module_name.gv"
#Makefile
dc:
	dc_shell-t -64bit -topo -f test.tcl

clean:
	rm -rf MY_DESIGN_LIB *.log *.svf *.swp ./mapped/* ./unmapped/*

同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)


2.5 典型的异步复位同步释放的verilog电路设计

同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)文章来源地址https://www.toymoban.com/news/detail-513509.html

  • 保证输出s_rst_d1时稳定的
module async_reset_sync_done(
  input      i_clk,
  input      i_rst_n,
  input      i_data,
  output reg o_data
);

reg s_rst_d0;
reg s_rst_d1;

always @(posedge i_clk or negedge i_rst_n)
  if(!i_rst_n)
    begin
      s_rst_d0 <= 1'b0;
      s_rst_d1 <= 1'b0;
    end
  else
    begin
      s_rst_d0 <= 1'b1;
      s_rst_d1 <= s_rst_d0;
    end

always @(posedge i_clk or negedge s_rst_d1)
  if(!s_rst_d1)
    o_data <= 1'b0;
  else
    o_data <= i_data;
endmodule

到了这里,关于同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用Verilog设计一个8位二进制加法计数器,带异步复位端口,进行综合和仿真。

    点此处编译 这里还需将rst置1才有效 可以在clk=0;后加rst=1; 或者在clk=0;后加rst=0; 并且在#DELY clk=~clk;后加#(DELY*20) rst=~rst; 仿真即可

    2024年02月04日
    浏览(34)
  • 复位策略:同步复位与异步复位

    在IC设计种,复位策略分为同步复位和异步复位两种设计,根据不同的设计,会采用不同的复位方式。 复位的文章已有很多文章讲解了,这里只讨论实现策略。  一、异步复位 1、优点: 1)无需额外的逻辑资源,实现简单,可以保证复位引脚到各个寄存器的时钟偏移最小;

    2024年02月14日
    浏览(29)
  • Quartus实现寄存器:同步复位+异步复位

    图1 寄存器输入输出引脚 图2 输入为高电平-例1 同步复位和异步复位都存在于时序逻辑中,与组合逻辑相比对毛刺有屏蔽作用。 图3 组合逻辑和时序逻辑的区别 当复位为高电平时,组合逻辑的结果是其输入,时序逻辑的输出需参考上升沿,此时红色虚线处的key_in为高电平,故

    2024年02月03日
    浏览(34)
  • Verilog数字系统设计——10进制计数器,具有异步复位功能

    编程实现10进制计数器,具有异步复位功能,十位和个位用8421BCD码表示,各端口定义如下图所示: 仔细考虑端口定义中每个端口的含义; 要求完成程序编辑、编译、时序仿真; 实验提交Verilog设计文件(.v文件)、仿真波形截图以及对于第3个步骤所提出问题的回答,文件打包

    2024年02月11日
    浏览(27)
  • 《综合与Design_Compiler》学习笔记——第一章综合综述 第二章verilog语言结构到门级的映射 第三章 使用DC进行综合

    2023.6.25 2023.6.27 和之前学的芯动力mooc中很多内容相似,这篇整理的逻辑更好些 将RTL代码转换到基于工艺库的门级网表。一般分为如下三个步骤。 (1)逻辑级综合 设计被描述成 布尔等式 的形式,触发器、锁存器这样的基本单元采用元件例化(instantiate)的方式表达出来,下面是

    2024年02月12日
    浏览(36)
  • 北邮22级信通院数电:Verilog-FPGA(9)第九周实验(2)实现下降沿触发的JK触发器(带异步复位和置位功能)

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客   目录 ​编辑 一.代码部分 1.1 JK.v 1.2 JK_tb.v 二.仿真结果

    2024年02月05日
    浏览(37)
  • 【verilog】含异步清零和同步使能的加/减法计数器

    实验目的 掌握二进制计数器的工作原理。 能使用verilog设计计数器。 3、进一步熟悉QUARTUSII软件的使用方法和verilog输入方式 实验原理与内容 实验原理 二进制计数器中应用最多、功能最全的计数器之一,是含异步清零和同步使能的具有并行载入功能的加/减法计数器。其具体工

    2024年02月02日
    浏览(42)
  • FIFO设计笔记(双口RAM、同步FIFO、异步FIFO)Verilog及仿真

    0.1、FIFO FIFO (First-In-First-Out) 是一种先进先出的数据缓存器,在数字ASIC设计中常常被使用。在实际开发中,多数都是直接使用公司经过top-out验证的FIFO IP或者是ISE/Vivado工具自带的FIFO IP,并不需要自己造轮子。但是,作为设计者,必须要掌握FIFO的设计方法,这样可以适配于各种

    2023年04月09日
    浏览(35)
  • 【FPGA】Verilog:时序电路 | 触发器电路 | 上升沿触发 | 同步置位 | 异步置位

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:触发器电路    ​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Sw

    2024年02月11日
    浏览(27)
  • Ajax_4(进阶)同步异步+ 宏任务微任务 + Promise链 + async终极解决方案 +事件循环原理 + 综合案例

    01-同步代码和异步代码 什么是同步代码? 同步代码:逐行执行,需要原地等待结果后,才继续向下执行。 什么是异步代码? 调用后耗时,不阻塞代码继续执行,(不必原地等待),在将来完成后 触发一个 回调函数 。 代码阅读 目标:阅读并回答代码执行和打印的顺序 打印

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包