前言
正文
指派間延遲語句
指派内延遲語句
往期回顧
參考資料及推薦關注
verilog延遲語句可以在指派運算符的左側或右側指定延遲。
所謂的左側就是:
右側就是:
下面詳細講解。
指派間延遲語句在指派運算符的lhs上有延遲值。這表示語句本身在延遲到期後執行,是最常用的延遲控制形式。
請注意,q在時間10機關時變成了1,因為語句在10個時間機關時被計算,rhs是a、b和c的組合,計算為1。
這是其仿真結果:
注:看到代碼的注釋了嗎?
inter-assignment delay: wait for #5 time units and then assign a and c to 1. note that ‘a’ and ‘c’ gets updated at the end of current timestep
這是很基礎的一句話,這句話說明了verilog這門語言的基本特點,或者說verilog中非阻塞指派的基本特點,如下:
這條語句,在第5ns時候雖然給a與c均指派了1,但是此刻并不生效,而會在目前時間步長結束時生效,例如,我們在此刻加一個語句,使用a與c的值:
此時,q的值不會為1,而時為0,這就是因為此刻q的值沒有生效,如果在第6s在求q得值,我們在第6秒再看就可以看到生效了:
由于一般timescale預設為1ns/1ps,是以,步長應該為1ns。也就是在1ns末生效。
指派内延遲是指在指派運算符的rhs上有一個延遲。這表示語句被計算,rhs上的所有信号的值首先被捕獲。然後在延時過後才對結果信号進行指派。
仿真結果為:
很多人就感覺奇怪了,為什麼q沒有了為1的時候,不應該在10ns時候為1嗎?
如果出現這個疑問?很正常,但是需要再次了解了解,這個指派内延遲的含義與非阻塞指派的特點。
在第5ns時候,a,b,q同時被指派,a和c在第5s被非阻塞指派,也就是在第5ns末有效。
第5ns時,q也被指派,但是在第5ns時(起始),q經過計算為0,它經過5ns後被指派,是以,會一直為0,好像1被吞掉了似的,其實了解了二者的含義,很好了解。
為了對比,我們在第5ns時,對a和c都進行阻塞指派:
我們可以得到不一樣的結果:
這才是你想要的結果。
什麼原因呢?
還是在第5ns時候(初),a和c都已經為1了,此時,q經過計算也為1,然後延遲5ns,指派給q,是以,q在10ns時候為1。
verilog初級教程(21)verilog中的延遲控制語句
verilog初級教程(20)verilog中的`ifdef 條件編譯語句
verilog初級教程(19)verilog中的參數
verilog初級教程(18)verilog中的函數與任務
verilog初級教程(17)verilog中的case語句
verilog初級教程(16)verilog中的控制塊
verilog初級教程(15)verilog中的阻塞與非阻塞語句
verilog初級教程(14)verilog中的指派語句
verilog初級教程(13)verilog中的塊語句
verilog初級教程(12)verilog中的generate塊
verilog初級教程(11)verilog中的initial塊
verilog初級教程(10)verilog的always塊
verilog初級教程(9)verilog的運算符
verilog初級教程(8)verilog中的assign語句
verilog初級教程(7)verilog子產品例化以及懸空端口的處理
verilog初級教程(6)verilog子產品與端口
verilog初級教程(5)verilog中的多元數組和存儲器
verilog初級教程(4)verilog中的标量與向量
verilog初級教程(3)verilog 資料類型
verilog初級教程(2)verilog hdl的初級文法
verilog初級教程(1)認識 verilog hdl
晶片設計抽象層及其設計風格
verilog以及vhdl所倡導的的代碼準則
fpga/asic初學者應該學習verilog還是vhdl?
https://www.chipverify.com/verilog/verilog-inter-and-intra-assignment-delay
個人微信公衆号: fpga lab
交個朋友