1、UDP的使用場景
User-defined primitives (UDPs) 翻譯過來就是用戶自定義原語,常常用于構建組合邏輯模型和時序邏輯模型。
我們編寫Verilo代碼時,定義寄存器使用的是reg 和always@(*clk*),運行VCS RTL仿真時,VCS能夠識別此類信號是寄存器,能夠模擬其行為模型。
然而在使用VCS進行網表仿真時,此時網表中寄存器名稱是這樣的SDFF*_XXXX,其中SDFF_XXXX是每個寄存器類型對應的標準Cell的名稱。
SDFF_XXXX是每個Fab廠家獨有的名稱,且在Verilog規范中并沒有相關術語,那么VCS等EDA仿真工具是如何識別并且模擬其器件行為的呢?
實際上進行網表仿真時,EDA工具會讀取對應SDFF_XXXX的UDPs模型,從而進行SDFF_XXXX的行為模擬。
2、UDPs的語法說明
2.1. 2種類型
UDPs的分為combinational UDP(組合邏輯)和 sequential UDP(時序邏輯)。
combinational UDP用于構建組合邏輯模型,常見有mux模塊.
sequential UDP用于構建寄存器和Latch模型,sequential UDP可以是邊沿觸發,也可以是電平觸發。
2.2.基本語法規范
UDP建模使用primitive表示建模開始,類似module,endprimitive表示建模結束,類似endmodule。
UDP模型在描述層級上與module/endmodule屬于同一等級,因此primitive/endprimitive不能出現在module/endmodule內部,就像不能在一個模塊里出現module~module~endmodule~endmodule.
//語法錯誤 modulexxx(); primitive endprimitive endmodule
每個UDP有且只有一個輸出,并且輸出只有三種狀態,0, 1, or x,不支持Z狀態。
每個UDP可以由多個輸入信號,如果輸入信號為z,則當做X對待。時序UDP至少允許9個輸入信號,組合UDP至少允許10個輸入信號。
每個UDP不支持定義inout類型的信號
時序UDP的輸出信號應該使用reg申明。
組合UDP的輸出信號不能使用reg申明。
時序UDP可以使用initial語句定制仿真開始前output信號的初始值
2.3.UDP state table(狀態表)
UDP模型使用狀態表來描述模型的行為,
狀態表中使用的各類變量見表40。例如r表示上升沿,f表示下降沿。*表示數值改變。
狀態表中的每行以分號結束。
狀態表本質上就是一個輸入信號/輸出信號組合的列表。
組合UDP狀態表中有一個冒號“:”,用于隔離輸入和輸出信號。
時序UDP狀態表中有當前狀態,還有下一個狀態,因此有2個冒號“:”,用于隔離輸入、輸出(當前狀態)和下一個狀態。
組合UDP模型中,如果輸入信號狀態組合在狀態表中沒有指定,則輸出會是X。
2.4.UDP結構
本節可忽略,直接看案例
3、組合UDP案例
如下案例為2選1的mux,sel為1時,out為in1;sel為0時,out為in0。
請注意:信號列表中,輸出信號out在第一個。狀態表中,out處于最后一列。
4、電平觸發時序UDPs
如下案例為一個低電平觸發的latch。
使用reg申明了一個內部變量,表示當前狀態q,即當前udp的輸出狀態。
table中的q+代表的是下一個有效周期的輸出狀態。
5、邊沿觸發時序UDP
如下所示為一個上升沿觸發寄存器的模型。
其中NOTIFIER信號用于建立時間和保持時間檢查,通過建立時間和保持時間檢查,則NOTIFIER不變,時序檢測不通過則NOTIFIER翻轉,udp_dff輸出為x態。
6、小技巧
將primitive類比成module,將endprimitive類比成endmodule,將table 類比成case,將endtable類比成endcase,你就知道該怎么寫UDP模型了。
7、總結
雖然使用UDP能夠構建網表時序邏輯和組合的邏輯的行為模型,但是仿真終究是仿真,無法做到與實際芯片行為完全一致,特別是在部分信號為X態時。因此網表仿真中如果X態的出現導致仿真出現問題,此時不代表電路真的存在問題,需要仔細分析原因,其中需要重點分析UDP模型是怎么寫的。
-
寄存器
+關注
關注
31文章
5427瀏覽量
123695 -
仿真
+關注
關注
51文章
4250瀏覽量
135438 -
Verilog
+關注
關注
29文章
1366瀏覽量
111987 -
RTL
+關注
關注
1文章
388瀏覽量
60786
原文標題:Verilog語法: 必須掌握的User-defined primitives (UDPs)
文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Verilog_HDL的基本語法詳解(夏宇聞版)

Verilog HDL的基礎知識詳細說明

評論