首页 > 其他分享 >12.阻塞赋值与非阻塞赋值语句的区别和规范

12.阻塞赋值与非阻塞赋值语句的区别和规范

时间:2024-07-02 11:58:12浏览次数:3  
标签:reset 12 clk always 阻塞 mid out 赋值

(1)阻塞赋值“=”    直到现行的赋值语句完成,才允许下一条赋值语句的执行,在串行块(begin-end)中,各赋值语句将以它们在顺序块中的排列次序依次执行。

(2)非阻塞赋值“<=”        在赋值开始时,计算赋值号右边的语句,赋值结束时,更新赋值号左边的语句,因此其他在同一时间的语句都会并行执行。

(3)非阻塞赋值操作只能对寄存器类型的变量进行赋值,因此只能使用于"initial"和"always"块中,不允许使用在连续赋值语句"assign"中。

(4)一个always语句块只对一个变量进行赋值。

(5)使用 always 块来编写组合逻辑的代码时要用阻塞赋值的方式,使用 always 块建立组合逻辑电路模型时不要忘记 always 块中的敏感列表一定要使用电平触发的方式,然后在 always 块中使用阻塞赋值语句就可以实现组合逻辑。

(6)阻塞赋值代码:

//在always语句中,使用阻塞赋值语句
module block_nonblock(clk,reset_n,in,out);

    input clk;
    input reset_n;
    input [2:0]in;
    
    output reg [2:0]out;
    
    reg [2:0]mid;

    always@(posedge clk or negedge reset_n)
        if(!reset_n)begin
            mid = 3'd0;
            out = 3'd0;
        end
        else begin
            mid = in;
            out = mid;
        end
            
endmodule

(7)综合出来的RTL视图:

(8)仿真代码:

`timescale 1ns / 1ps
module block_nonblock_tb;

    reg clk;
    reg reset_n;
    reg [2:0]in;
    
    wire [2:0]out;
    
    block_nonblock block_nonblock_inst(
        .clk(clk),
        .reset_n(reset_n),
        .in(in),
        .out(out)
    );
    
    initial clk = 1'd1;
    always #10 clk = ~clk;
    
    initial begin
        reset_n <= 1'd0;
        in <= 3'd0;
        #20
        reset_n <= 1'd1;
        #200;
        $stop;
    end
    
    always #20 in <= {$random} % 8;


endmodule

(9)仿真波形:

mid与in之间存在一个时钟周期的延迟,而out与mid之间没有。

(10)非阻塞赋值Verilog代码:

//在always语句中,使用非阻塞赋值语句
module block_nonblock(clk,reset_n,in,out);

    input clk;
    input reset_n;
    input [2:0]in;
    
    output reg [2:0]out;
    
    reg [2:0]mid;

    always@(posedge clk or negedge reset_n)
        if(!reset_n)begin
            mid <= 3'd0;
            out <= 3'd0;
        end
        else begin
            mid <= in;
            out <= mid;
        end
            
endmodule

(11)综合出来的RTL视图:

(12)仿真代码同之前的一致,波形如下:

mid与in之间有一个时钟周期的延迟,out与mid之间也有一个时钟周期的延迟。

标签:reset,12,clk,always,阻塞,mid,out,赋值
From: https://blog.csdn.net/2301_80417284/article/details/140082417

相关文章

  • C/C++ 赋值表达式注意事项
    在C/C++中,赋值表达式是基础且关键的一部分,它用于给变量赋值。理解和正确使用赋值表达式对于编写有效、可维护的代码至关重要。以下是一些关于C/C++赋值表达式的注意事项:赋值操作符:在C/C++中,赋值是通过赋值操作符=完成的。这意味着将右侧的值或表达式的结果赋给左侧的变......
  • 昇思25天学习打卡营第12天|网络构建
    IT专业入门,高考假期预习指南七月来临,各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束,而是新旅程的开始。对于有志于踏入IT领域的高考少年们,这个假期是开启探索IT世界的绝佳时机。作为该领域的前行者和经验前辈,你是否愿意为准新生们提供一份全面的学习路线图呢?快来......
  • 12、 Django-模型models的基本操作-增删改查
    一般的数据库操作流程:1、创建数据库,设计表结构和字段2、连接Mysq1数据库,并编写数据访问层代码3.业务逻辑层去调用数据访问层执行数据库操作Diango通过Mode1操作数据库,不管你数据库的类型是MySql或者Sqlite,Django自动帮你生成相应数据库类型的SQL语句,所以不需要关注SQL语句......
  • Leetcode秋招冲刺(专题10--12)
    专题10:动态规划题目509:斐波那契数(NO)解题思路:动态五部曲动态五部曲:这里我们用一个一维数组来保存递归的结果确定dp数组以及下标的含义dp[i]的定义为:第i个数的斐波那契数值是dp[i]确定递推公式这道题已经把递推公式直接给了:状体转移方程dp[i]=dp[i-1]+dp[i-2];dp数......
  • (参数)AFE58JD32LPZAV超声波 AFE、模数转换器ADC09SJ800AAV 800MSPS ADC、ADS52J65IRGC
    1、AFE58JD32LPZAV是一款具有18.5mW/通道功率、数字解调器以及JESD204B和LVDS接口的32通道超声波AFE。AFE58JD32LP是高度集成的模拟前端(AFE)解决方案,专用于需要高性能、低功耗和小尺寸特性的便携式超声波系统。规格位数:10,12通道数:32功率(W):18.5mW电压-供电,模拟......
  • [刷题笔记] Luogu P1612 [yLOI2018] 树上的链
    ProblemDescriptionDescription给定一棵有\(n\)个节点的树。每个节点有一个点权和一个参数。节点\(i\)的权值为\(w_i\),参数为\(c_i\)。\(1\)是这棵树的根。现在,对每个节点\(u\)(\(1\lequ\leqn\)),请在树上你找到最长的一条链\(v_1,v_2,\dotsv_m\),满足如下条件:......
  • 百分浏览器Cent Browser v5.1.1130.129 正式版
    软件简介百分浏览器是基于Chrome内核开发的,因此在界面设计上与Chrome非常相似。它不仅继承了Chrome的稳定性和流畅性,还增加了一些Chrome没有的功能。例如,百分浏览器提供了更好的内存管理方法,可以减少内存占用,这对于经常使用大量标签页的用户来说是一个重要的优势。此外,它还......
  • 征途私服-发布万千好服,玩不停!-www.sf1223.cn
    征途私服有着许多独特的品质,使其与正版游戏区别开来。首先,私服通常会提供大量的游戏元素和功能,比如新增的职业、装备、地图等,让玩家能够体验到更丰富的游戏内容。其次,私服还通常会调整游戏的一些平衡性,使得游戏更加公平。此外,私服的开放性也使得玩家们可以参与到游戏的运营中,例......
  • 征途私服- 发布万千好服,玩不停!-www.sf1223.cn
    征途私服有着许多独特的品质,使其与正版游戏区别开来。首先,私服通常会提供大量的游戏元素和功能,比如新增的职业、装备、地图等,让玩家能够体验到更丰富的游戏内容。其次,私服还通常会调整游戏的一些平衡性,使得游戏更加公平。此外,私服的开放性也使得玩家们可以参与到游戏的运营中,例......
  • 传奇私服:(www.sf1223.cn)新开传奇sf发布网震撼来袭,海量优质好服发布平台-5
    传奇私服发布网(sf1223.cn)是广大游戏爱好者追求游戏乐趣的首选平台。作为一款经典的网络游戏,传奇私服发布网(sf1223.cn)汇聚了无数热衷于游戏的玩家,提供了绚丽多彩的游戏世界和刺激无比的游戏体验。本平台作为传奇SF的发布平台,致力于为广大玩家提供海量优质好服,满足不同游戏需求。......