阻塞赋值和非阻塞赋值的用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

阻塞赋值和非阻塞赋值的用法说到Verilog编程里的阻塞赋值和非阻塞赋值,哎呀,简直就是两个“冤家”。

你可
能听说过它们,但是可能还没有搞清楚到底哪个是“王者”,哪个又是“二把手”。

阻塞赋
值和非阻塞赋值就像是两种性格截然不同的人,碰到的情况不同,做的事也不一样,它们互不干涉,但又相互影响。

来聊聊阻塞赋值吧。

阻塞赋值就像你在厨房做饭时,先把锅里的菜炒熟,等菜完全做好了,你才能开始准备下一道菜。

明白了吧?它的特点就是按顺序执行,你要做完当前的事,下一件事才会开始,完全不会“跳过”什么。

比如在Verilog代码里,如果你写
了一个“=`赋值语句”,那这个赋值语句就会“阻塞”当前进程,必须等这个赋值完成后,
才会继续执行后面的操作。

所以,如果你把多个赋值语句写在一起,执行的顺序是很重要的!有时候你会发现,哎,这个赋值好像搞得我有点儿“慢慢吞吞”了。

对,没错,它就是这么不急不躁。

比方说你要计算一个信号值时,必须等上一个信号的值被计算出来,再处理下一个,这种“循序渐进”的方式就是阻塞赋值的代表作。

但是,说到非阻塞赋值,它就完全不一样了。

非阻塞赋值好像一个特别会multitasking(多任务处理)的家伙,啥事都不急,做得也不慢,反正一心二用,顾得
了这边又能管得了那边。

在Verilog中,非阻塞赋值就是用“<=”来表示的。

它和阻塞赋值最大的区别就是:它不会等前一个赋值操作完成后才去做下一个,而是直接“放手一搏”,按自己的节奏走。

就好像你炒菜的时候,一边看着锅里的菜,另一边手里已经开
始切别的蔬菜了。

这种“同步进行”的方式让你的代码看起来很高效,也能避免在一些需要并行执行的场景下,出现拖沓的情况。

你会发现非阻塞赋值让代码看起来好像更“灵活”一些。

因为它可以在同一时刻进行多个赋值操作,减少了等待的时间,所以特别适合那些需要并行处理的复杂设计。

想象一下,当你在做一台计算机模拟的设计时,非阻塞赋值就好比是一个多线程的系统,不停地切换工作,任何时候都能看似同时处理多个任务,而不会因为一个赋值的完成而停顿下来。

所以,如果你对时序要求比较高的电路设计,非阻塞赋值就显得特别重要了。

但并不是说非阻塞赋值就完美无缺,事情永远不会一帆风顺嘛。

由于它是“并行”执行的,所以有时候会出现一个问题,那就是你不能保证赋值的顺序执行。

你想,假如你在一个过程中给两个信号赋值,但你又没有明确指示哪个先来哪个后到,那就有可能发生你预计不到的混乱。

就像你和朋友约好一起去吃火锅,结果他偏偏在你还在点餐的时候就已经抢先下单了,那结果就是你们俩可能吃到完全不同的火锅,风味各异,搞得有点儿不对劲。

所以说,非阻塞赋值虽然很强大,但有时需要小心“先后关系”的问题。

但最妙的地方就在于,如果你不清楚什么时候该用阻塞,什么时候该用非阻塞,这就像你拿着两把刀,完全不清楚是应该切菜还是切水果。

用得不对,你的代码就会出问题。

假如你在时序逻辑中不小心用了阻塞赋值,可能就会出现逻辑错误,给你带来一些麻烦。

你想着,前一个信号值已经赋完了,再赋下一个信号可是慢了一拍。

反过来,如果你用了非阻塞赋值,可能就会得心应手,但也得小心自己控制不住那种“自由流动”的感觉,可能会不小心让时序变得乱七八糟。

对,就是这个“度”你得掌握好,知道什么时候该“堵”一下,什么时候该“放开”一下。

说到底,阻塞赋值和非阻塞赋值并没有“谁强谁弱”的问题,它们各有千秋,看你用在什么地方了。

就像你手里有两把不同的刀,知道什么时候用哪一把,做出来的菜肴才会鲜美可口。

实际编程的时候,你会发现,这两种赋值方式就像是一对“黄金搭档”,各
司其职,才是最靠谱的搭配。

所以,记住它们的“性格特点”,用对了场景,你的Verilog 代码就能跑得又稳又快。

相关文档
最新文档