查看: 170|回复: 1

[原创] 图解阻塞赋值与非阻塞赋值

[复制链接]

2

主题

0

好友

56

积分

童生

Rank: 2

  • TA的每日心情
    开心
    2016-9-14 16:29
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2016-8-26 12:10:28 |显示全部楼层
    本帖最后由 §,遇&见。§ 于 2016-8-26 12:09 编辑

    图解阻塞赋值与非阻塞赋值

          本文抛弃冗杂的文字论述,改以简单的图表形式,更加详细的文字论述,可自行百度。


    简要表格总结如下:

    阻塞赋值
    非阻塞赋值
    表示符号
    =
    <=
    应用场景
    组合逻辑电路
    时序逻辑电路
    执行方式
    顺序执行
    并行执行
    原始状态
    无关
    有关


    图形分析如下:
    (注:block代表阻塞,no_block代表非阻塞)

    阻塞与非阻塞

    阻塞与非阻塞


                                  
    1

    分析:
    在阻塞状态下,c在a得到b之后,10个步长得到d值,因此c在时间步长15时得到d值;
    非阻塞转态下,c在时间步长10时得到d值,与a值在时间步长5时得到b值无关。
    图片2.png


                                           图2

    分析:
    在阻塞状态下,y直接得到x值,只需一个D触发器;
    非阻塞转态下,y需要在下一个上升沿来临时得到x值,需要两个D触发器。


    图片3.png

                                图3

    分析:
    在RTL Viewer中我们可以清楚的看到,使用阻塞赋值我们生成的电路是两个并联的D触发器,使用非阻塞赋值我们生成的是两个串联的D触发器。

    图片4.png


                                        图4

    分析:
    从仿真波形图可以看出,block_out1、block_out2、no_block_out1三个的波形是一致的,但no_block_out2波形出现差异,其原因如下:
    (1)阻塞赋值(=)是顺序执行的,写在前面的语句先执行,写在后面的语句后执行,一般用于组合逻辑电路。
    (2)非阻塞赋值(<=)是并行执行的写在前面的语句与后面的语句同时执行,与书写顺序没有关系,一般用于时序逻辑电路。


    附图1
    #5的概念是延迟的意思。但是是行为级描述 综合时将被过滤。一般#  +  数字的组合在仿真器中产生一定的延迟。
    延迟结构如下:
    首先`timescale 1ns/100ps 这个是整个延迟的定义。
    `timescale是关键字,然后后面的两位时间 第一位是用来表示你的延迟因子的,第二位用来表示步进时间。


    附图3、图4代码
    阻塞赋值
    非阻塞赋值
    Always @(posedge clk)
    Begin
    Block_out1 = block_in;
    Block_out2 = Block_out1;
    end

    Always @(posedge clk)
    Begin
    Block_out1 = block_in;
    Block_out2 = Block_out1;
    end




    回复

    使用道具 举报

    8

    主题

    1

    好友

    488

    积分

    秀才

    Rank: 3Rank: 3

    该用户从未签到

    发表于 2016-8-26 13:06:29 |显示全部楼层
    图文并茂,楼主辛苦
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-5 10:30 , Processed in 0.090411 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部