首页 > 其他分享 >10-阻塞赋值和非阻塞赋值

10-阻塞赋值和非阻塞赋值

时间:2023-05-24 23:23:18浏览次数:37  
标签:语句 10 begin 阻塞 sys reg 赋值

1.阻塞赋值和非阻塞赋值

阻塞赋值的赋值号用"="表示,对应的电路结构往往与触发边沿没有关系,只与输入电平的变化有关系,它的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句,此时不允许有来自任何其他verilog语句的干扰,直到现行的赋值完成,才允许下一条的赋值语句执行
串行块(begin end)中,各条赋值语将以它们在顺序块中的排列次序依次执行

a = 1;
b = 2;
c = 3;
begin 
  a = b + 1; // a = 3
  b = a + 2; // b = 5
  c = a - 1; // c = 4
end

非阻塞赋值的赋值号用"<="表示,对应的电路结构往往与触发沿有关系,只有在触发沿的时刻才能进行非阻塞赋值;
非阻塞赋值操作可以看作是两个步骤的过程:在赋值开始时刻,计算赋值号右边的语句(所有赋值号右边的结果),在赋值结束时刻(end),更新赋值号左边的语句
在计算非阻塞赋值号右边的语句和更新赋值号左边语句期间,允许其他的verilog语句同时进行操作
非阻塞赋值只能用于寄存器类型变量进行赋值,因此只能用于initial语句和always语句,不允许用于连续赋值语句assign

a = 1;
b = 2;
c = 3;
begin                         // 开始   结束
  a <= b + 1;  // 三条语句并行执行  3     3
  b <= a + 2;  //                 3     3
  c <= a - 1;  //                 0     0
end   

2.实践

2.1 阻塞赋值

module blocking(
  input wire sys_clk,
  input wire sys_rst_n,
  input wire [1:0] in,
  output reg [1:0] out
);
  // 定义中间变量
  reg [1:0] in_reg;

  always@(posedge sys_clk or negedge sys_rst_n)
  begin
    if(sys_rst_n == 1'b0)
      begin
        in_reg = 2'b0;
        out = 1'b0;
      end
    else 
      begin
        in_reg = in;
        out = in_reg;
      end
  end
endmodule
  • 创建quartus工程,进行编译
`timescale 1ns/1ns
module tb_blocking();
  reg sys_clk;
  reg sys_rst_n;
  reg [1:0] in;
  wire [1:0] out;

  // 初始化时钟和复位信号,输入信号
  intial begin
    sys_clk = 1'b1;
    sys_rst_n <= 1'b0;
    in <=2'b0;
    #20;
    sys_rst_in = 1'b1;
  end
  
  // 模拟时钟
  initial begin
    #10;
    sys_clk = ~sys_clk;
  end  
  
  always #10 in <= {$random} % 4; // 生成非负数0,1,2,3

  blocking block_inst(
     .sys_clk (sys_clk),
     .sys_rst_n (sys_rst_n),
     .in      (in),
     .out     (out)
  );
    
endmodule

2.2 非阻塞赋值

module nonblocking(
  input wire sys_clk,
  input wire sys_rst_n,
  input wire [1:0] in,
  output reg [1:0] out
);
  // 定义中间变量
  reg [1:0] in_reg;

  always@(posedge sys_clk or negedge sys_rst_n)
  begin
    if(sys_rst_n == 1'b0)
      begin
        in_reg <= 2'b0;
        out <= 1'b0;
      end
    else 
      begin
        in_reg <= in;
        out <= in_reg;
      end
  end
endmodule


  • 当想要对想要的信号打两拍的时候,使用非阻塞赋值
  • 时序逻辑电路使用非阻塞赋值,组合逻辑电路使用阻塞赋值
  • always语句块实现组合逻辑,使用阻塞赋值,不能即使用阻塞赋值又使用非阻塞赋值
  • 避免锁存器latch,使用锁存器的时候使用非阻塞赋值的方式
  • 一个always语句块只对一个变量进行赋值

标签:语句,10,begin,阻塞,sys,reg,赋值
From: https://www.cnblogs.com/Icer-newer/p/17429482.html

相关文章

  • 分析| Flutter 3.10版本有哪些变化?
    Flutter是Google推出的一款用于构建高性能、高保真度移动应用程序、Web和桌面应用程序的开源UI工具包。Flutter使用自己的渲染引擎绘制UI,为用户提供更快的性能和更好的体验。Flutter还提供了丰富的构建工具、库和插件,使开发人员能够更快地构建应用程序。今天就为大家带来Flutter3.......
  • 花式赋值(两种快捷赋值方法)
    博客随笔皆为学习笔记,有诸多不足,如有错误,请帮我指出,不胜感激,我后续会补全校正一、链式赋值a=10b=10c=10d=10print(f'a:{a},b:{b},c:{c},d:{d}')a=b=c=d=10print(f'a:{a},b:{b},c:{c},d:{d}')二、交叉赋值x=100y=200temp=xx=yy=t......
  • 转:win10系统管理员设置了系统策略禁止进行此安装
    点击开始按钮-->输入cmd-->右键点击搜索结果中的"命令提示符"-->以管理员身份运行在打开的命令提示符窗口中运行:输入:RD/S/Q"%WinDir%\System32\GroupPolicyUsers",回车接着输入:RD/S/Q"%WinDir%\System32\GroupPolicy",回车3.重启一下电脑,然后重复1操作......
  • window 10 安装node.js时遇到2502 2503错误解决方法
    最近想安装一下node.js,可是在安装过程中出现了2503和2502的问题,如下图:不过除了这些代码外,微软并没有提供解决办法。这一问题出现在Win7/Win8.1/Win10中,原因就是C:\Windows\Temp文件夹NTFS权限错误。为了能够让WindowsInstaller操作正确,当前账户需要有Temp文件夹完全管理员权......
  • 国产麒麟(Kylin-Server-10)系统无外网环境安装docker
    由于某些原因服务器环境不给开放外网,只能提前在有外网环境准备好相关资源后再部署。先在有外网环境制作yum安装包,再将压缩包拷贝到无外网环境通过ansible安装docker。制作ansible、docker离线安装包ansible离线安装包#查看依赖包yumdeplistansible#拉取ansible所有关联包......
  • [Error 10048] error while attempting to bind on address (‘127.0.0.1‘, 8000):
    今天运行程序的时候碰到了这么个问题,因为之前也遇到过这种情况,那时找不到原因重启电脑这方法偶尔能解决,今天就不行了,电脑又没有看到明显的占用这个端口的程序。所以查找资料从根源出发解决。解决方法是:1.进入命令行(以管理员身份)2.输入netstat-aon|findstr"8000"查找8000端......
  • python基础10
    文件基本操作三步骤1.打开文件2.操作文件3.关闭文件关键字:open1f=open(r'a.txt','r',encoding='utf8')2print(f)#操作系统打开文件34#操作文件:读、写5res=f.read()67#关闭文件:释放资源8f.close91011#方式二:12#with上下管理......
  • macbook苹果m1芯片训练机器学习、深度学习模型,resnet101在mnist手写数字识别上做加速
    apple的m1芯片比以往cpu芯片在机器学习加速上听说有15倍的提升,也就是可以使用applemac训练深度学习pytorch模型!!!惊呆了 安装applem1芯片版本的pytorch 然后使用chatGPT生成一个resnet101的训练代码,这里注意,如果网络特别轻的话是没有加速效果的,还没有cpu的计算来的快这里......
  • SQL_lab总结1-10关
    第三关字符型注入测试判断字段数?id=1')and1=1orderby1--+?id=1')and1=1orderby4--+回显库名?id=-1')unionselect1,version(),database()--+or爆破数据库?id=-1%27)%20union%20select%201,version(),group_concat(schema_name)frominformation_schema......
  • ASEMI代理长电可控硅MCR100-8特征,MCR100-8应用
    编辑-Z长电可控硅MCR100-8参数:型号:MCR100-8VDRM/VRRM:600VIT(RMS):0.8A结点温度Tj:-40~125℃储存温度Tstg:-55~150℃通态电压VTM:1.7V栅极触发电压VGT:0.8V正向或反向阻断电流峰值:10µA保持电流IH:5mA栅极触发电流IGT:15µA  MCR100-8封装规格:封装:TO-92总长度:19.2mm......