首页 > 其他分享 >1-锁存器与触发器 & 阻塞赋值与非阻塞赋值

1-锁存器与触发器 & 阻塞赋值与非阻塞赋值

时间:2023-01-14 11:55:25浏览次数:37  
标签:触发器 clk always 存器 阻塞 赋值

1. 锁存器与触发器

锁存器latch:电平触发

 

寄存器flip-flop:边沿触发

 

寄存器:用来存放数据的一些小型存储区域,由多个触发器组成(时钟端连在一起)

触发器与锁存器优缺点:

  • latch由电平控制,非同步控制;ff是时钟边沿触发,可以同步控制;
  • latch 对输入电平敏感,受布线延迟影响较大,很难保证输出没有毛刺产生;DFF 则不易产生毛刺。
  • latch面积资源消耗少
  • latch 的静态时序分析会变得比较复杂

触发器verilog(非阻塞赋值)

always @ (posedge clk) begin
  q<=d;
end

触发器verilog(非阻塞赋值)

always @ (*)                      always@(en,d) 
  if(clk) out_q <= in_d;      or      if(en = = 1’b1) q<=d;
  else out_q <= out_q;

组合逻辑中,如果if没有else;case没有default,都会导致数据保留原值,形成Latch

那为什么锁存器要用非阻塞赋值?

module D_latch_behavior (input D, input Enable, output Q, output Qbar);
always @ (D or Enable)
    if(Enable) begin
    Q <= D;
    Qbar <= ~D;
end
endmodule
Note that the non-blokcing assignment operator (<=) is used instead of blocking (=) operator which had been used in dataflow modeling

2. 阻塞赋值与非阻塞赋值

阻塞(blocking)赋值方式(如 b=a)

“=”左右的逻辑是用线连接,一般用在组合逻辑

①赋值语句立即执行,执行完毕后才执行下一条语句(即为阻塞的含义,依次顺序执行);

②b的值在赋值语句执行完后立即改变。

Example:

always @(posedge clk) begin
    b = a;
    c = b;
end

clk信号的上升沿到来时,b马上取a的值,执行完毕后c取b的值(即等于a)

非阻塞(Non_blocking)赋值方式(如 b <= a)

“<=”左右使用触发器连接,一般用在时序逻辑和Latch建模

①语句执行到此时,先计算“<=”右侧a的值,但不立即赋值给b;

②always块结束后才完成此次赋值操作;

Example:

always @(posedge clk) begin
    b <= a;
    c <= b;
end

clk信号的上升沿到来时,“<=”号右侧的a、b值先计算,等always块结束后,b就等于a,而c等于刚才计算的b(即原来的b值) ,这里生成了2个寄存器。“b <= a”和“c <= b”在posedge_clk处类似于“并发执行”。

标签:触发器,clk,always,存器,阻塞,赋值
From: https://www.cnblogs.com/fukq/p/17051483.html

相关文章

  • 一些汇编指令寄存器杂谈
    一些汇编指令寄存器杂谈汇编指令之寄存器寄存器学习记录8086寄存器分类:1.通用寄存器(8个):AX、BX、CX、DX和SI、DI、SP、BP2.指令指针(1个):IP3.标志寄存器(1个)......
  • 【Pytorch】将矩阵中的元素按照区间重新赋值
    目录​​简介​​​​场景描述​​​​解决方法​​​​结语​​简介Hello!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序......
  • 栈和寄存器虚拟机比较(以python和lua为例)
    指令长度pythonpython的指令定长,长度为16bit,其中8bit操作码,8bit操作数。///@file:Python-3.6.0\Include\code.htypedefuint16_t_Py_CODEUNIT;#ifdefWORDS_BIGEND......
  • Oracle impdp使用content=data_only会阻塞其他会话DML操作
     Oracleimpdp使用content=data_only会阻塞其他会话DML操作 上篇提到了insert/*+append*/into会对表持有LOCKED_MODE=6的TM锁,导致其他对该表的DML都会被阻塞。实......
  • Oracle使用append对表insert会阻塞表的其他会话DML操作
     Oracle使用append对表insert会阻塞其他会话DML操作 快春节了,抽点时间把NNNNNNN久之前的东西整理记录。insert/*+append*/into会对表持有LOCKED_MODE=6的TM锁,导......
  • MySQL间隙锁、行锁的读写阻塞实验
    目录结论实验过程结论普通查询查询(加共享锁)查询(加排它锁)插入/更新间隙锁不阻塞不阻塞不阻塞阻塞行锁不阻塞阻塞阻塞阻塞MySQL版本:5.7.26实......
  • JavaScript:赋值运算符以及运算符优先级
    JavaScript前文回顾: ​​认识JavaScript到初体验​​​​JavaScript注释以及输入输出语句​​​​JavaScript变量的使用、语法扩展、命名规范​​​​JavaScript数据类型......
  • 03 图像对象的创建与赋值
    03图像对象的创建与赋值opencv知识点:Mat类图像复制的3种方法图像属性的获取Mat对象的创建Mat对象的赋值本课所解决的问题:Mat是什么?Mat对象克隆/拷贝与赋值的......
  • 在KEIL中如何查看寄存器的值与地址
    正确连接硬件,编译程序后,按下工具栏的调试按钮进入调试模式。然后在View->SystemViwer下,可以按照分类来查看某个寄存器的值。例如RCC相关的寄存器:GPIO相关的寄存器。寄存......
  • HAL库教程11:定时器的缓冲功能与影子寄存器
      在STM32的定时器中,TIMx_PSC、TIM_ARR两个寄存器加上捕捉比较模块中TIMX_CCR寄存器,它们都可以动态修改。不过他们的修改和生效可能不在同一个时刻,或者说,修改过后立即生......