阻塞和非阻賦值
本節(jié)的文檔編號:001100000062
需要看對應的視頻,請點擊視頻編號:001100000072
1、本節(jié)主要介紹,時序邏輯的代碼,一般有兩種:同步復位時序邏輯和異步復位時序邏輯(本教學統(tǒng)一采用異步時鐘邏輯);D型觸發(fā)器的介紹,包括:D觸發(fā)器的結(jié)構(gòu)、波形、代碼以及如何看FPGA波形;時鐘的介紹,時鐘的意義,時鐘頻率和時鐘周期的換算;時序邏輯代碼和硬件的關(guān)系,即評估verilog代碼好壞的最基本標準,不是看代碼行數(shù)而是看硬件;阻塞賦值和非阻塞賦值,前者位順序賦值,后者位同時賦值。
2、這是ALTERA和VIVADO文檔
6.5?阻塞賦值和非阻塞賦值
在always語句塊中,Verilog語言支持兩種類型的賦值:阻塞賦值和非阻塞賦值。阻塞賦值使用“=”語句;非阻塞賦值使用“<=”語句。
阻塞賦值:在一個“begin…end”的多行賦值語句,先執(zhí)行當前行的賦值語句,再執(zhí)行下一行的賦值語句。
非阻塞賦值:在一個“begin…end”的多行賦值語句,在同一時間內(nèi)同時賦值。

上面兩個例子中,1到4行部分是阻塞賦值,程序會先執(zhí)行第2行,得到結(jié)果后再執(zhí)行第3行。6至9行這一段是非阻塞賦值,第7行和第8行的賦值語句是同時執(zhí)行的。
具體分析一下這兩段代碼這件的區(qū)別:假設(shè)當前c的值為0,d的值為0,a的新值為1。
阻塞賦值的執(zhí)行過程和結(jié)果為:程序先執(zhí)行第2行,此時c的值將更新為1,然后再執(zhí)行3行,此時c+a也就是相當于1+1=2,即d的值為2。
非阻塞賦值的執(zhí)行過程和結(jié)果為:程序同時執(zhí)行第7行和8行。需要特別注意是,在執(zhí)行第8行的時候,第7行還并未執(zhí)行,這也就意味著c的值還沒有發(fā)生變化,即此時c的值為0。同時執(zhí)行的結(jié)果是,c的值為1,d的值為1。
根據(jù)筆者的規(guī)范要求,組合邏輯中應使用阻塞賦值“=”,時序邏輯中應使用非阻塞賦值“<=”。讀者可以將這個規(guī)則牢牢記住,按照這一規(guī)則進行設(shè)計絕對不會發(fā)生錯誤。制定這個規(guī)范的原因并不是考慮語法需要,而是為了正確的進行硬件描述。