可以连续赋值吗_【技巧分享】阻塞赋值与非阻塞赋值

本文介绍了阻塞赋值和非阻塞赋值在FPGA设计中的区别和应用场景。阻塞赋值与电平变化有关,非阻塞赋值常用于边沿触发。在同一个always块中,阻塞赋值可能导致竞争现象,而非阻塞赋值允许同时进行其他操作。明德扬的建议是时序逻辑使用非阻塞赋值,组合逻辑使用阻塞赋值。
摘要由CSDN通过智能技术生成

小黑同学 明德扬FPGA科教

关于阻塞赋值和非阻塞赋值的问题,明德扬的学员提得比较多,今天小黑老师专门给大家普及一下阻塞赋值和非阻塞赋值的相关知识。

一、概述

1、阻塞赋值对应的电路往往与触发沿没有关系,只与电平的变化有关系。

阻塞赋值符号“=”。

2、非阻塞赋值对应的电路结构往往与边沿触发有关系,只有在触发沿时才有可能发生赋值的情况。

非阻塞赋值符号“<=”。

二、赋值方式

1、阻塞赋值

阻塞赋值操作符用等号(即 = )表示。阻塞赋值时先计算等号右手方向(RHS)部分的值,这时赋值语句不允许任何别的语句的干扰,直到现行的赋值完成时刻,即把RHS赋值给 LHS的时刻,它才允许别的赋值语句的执行。一般可综合的阻塞赋值操作在RHS不能设定有延迟,(即使是零延迟也不允许)。若在RHS 加上延迟,则在延迟期间会阻止赋值语句的执行, 延迟后才执行赋值,这种赋值语句是不可综合的,在需要综合的模块设计中不可使用这种风格的代码。

阻塞赋值的执行可以认为是只有一个步骤的操作:

所谓阻塞的概念是指在同一个always块中,其后面的赋值语句从概念上(即使不设定延迟)是在前一句赋值语句结束后再开始赋值的。

如果在一个过程块中阻塞赋值的RHS变量正好是另一个过程块中阻塞赋值的LHS变量,这两个过程块又用同一个时钟沿触发,这时阻塞赋值操作会出现问题,即如果阻塞赋值的次序安排不好,就会出现竞争。若这两个阻塞赋值操作用同一个时钟沿触发,则执行的次序是无法确定的。

2、非阻塞赋值

非阻塞赋值操作符用小于等于号 (即 <= )表示。在赋值操作时刻开始时计算非阻塞赋值符的RHS表达式,赋值操作时刻结束时更新LHS。在计算非阻塞赋值的RHS表达式和更新LHS期间,其他的Verilog语句,包括其他的Verilog非阻塞赋值语句都能同时计算RHS表达式和更新LHS。非阻塞赋值允许其他的Verilog语句同时进行操作。

非阻塞赋值的操作可以看作为两个步骤的过程:

1)在赋值时刻开始时,计算非阻塞赋值RHS表达式。

2)在赋值时刻结束时,更新非阻塞赋值LHS表达式。

非阻塞赋值操作只能用于对寄存器类型变量进行赋值,因此只能用在“initial”块和“always”块等过程块中。非阻塞赋值不允许用于连续赋值。

三、举例

1、阻塞赋值

e218ee44d2db8d772ff17ef390086686.png

2、非阻塞赋值

d186fc2d471feaf2386012bbe50da0be.png

四、总结

综上所述,明德扬至简设计法提出这样的规则:

时序逻辑用非阻塞赋值

组合逻辑用阻塞赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值