TLM是transaction Level Modeling(事務(wù)級(jí)建模)的縮寫(xiě)。簡(jiǎn)單來(lái)說(shuō),一個(gè)transaction就是把具有某一特定功能的一組信息封裝在一起而成為的一個(gè)類。
如何要在兩個(gè)uvm_component之間通信,例如實(shí)現(xiàn)monitor和scoreboard通信,最簡(jiǎn)單的方法就是使用全局變量,在monitor里對(duì)此全局變量進(jìn)行賦值,在scoreboard里監(jiān)測(cè)此全局變量值的改變。
這種方法簡(jiǎn)單、直接,不過(guò)要避免使用全局變量,濫用全局變量只會(huì)造成災(zāi)難性的后果。

由config機(jī)制的特性可以想出另一種方法來(lái),即從uvm_object派生出一個(gè)參數(shù)類config_object,在此類中有monitor要傳給scoreboard的變量。在base_test中,實(shí)例化這個(gè)config_object,并將其指針通過(guò)config_db#(config_object)::set傳遞給scoreboard和monitor。
當(dāng)monitor要和scoreboard通信時(shí),只要把此config_object中相應(yīng)變量的值改變即可。scoreboard中則監(jiān)測(cè)變量值的改變,監(jiān)測(cè)到之后做相應(yīng)動(dòng)作。但是一是要引入一個(gè)專門(mén)的config_object類,二是一定要有base_test這個(gè)第三方的參與。永遠(yuǎn)不能保證某一個(gè)從base_test派生而來(lái)的類會(huì)不會(huì)改變這個(gè)config_object類中某些變量的值。
-
TLM通信中有如下幾個(gè)常用的術(shù)語(yǔ):
1)put操作,通信的發(fā)起者A把一個(gè)transaction發(fā)送給B。。A具有的端口(用方框表示)稱為PORT,而B(niǎo)的端口(用圓圈表示)稱為EXPORT。這個(gè)過(guò)程中,數(shù)據(jù)流是從A流向B的。

2)get操作,A向B索取一個(gè)transaction。A上的端口依然是PORT,而B(niǎo)上的端口依然是EXPORT。這個(gè)過(guò)程中,數(shù)據(jù)流是從B流向A的。到這里,讀者應(yīng)該意識(shí)到,PORT和EXPORT體現(xiàn)的是控制流而不是數(shù)據(jù)流。
3)transport操作,A上的端口依然是PORT,而B(niǎo)上的端口依然是EXPORT。A依然是“發(fā)起者”,B依然是“目標(biāo)”。在這個(gè)過(guò)程中,數(shù)據(jù)流先從A流向B,再?gòu)腂流向A。在現(xiàn)實(shí)世界中,相當(dāng)于是A向B提交了一個(gè)請(qǐng)求(request),而B(niǎo)返回給A一個(gè)應(yīng)答(response)。所以這種transport操作也常常被稱做request-response操作。
put、get和transport操作都有阻塞和非阻塞之分。

-
PORT與EXPORT
PORT具有高優(yōu)先級(jí),而EXPORT具有低優(yōu)先級(jí)。只有高優(yōu)先級(jí)的端口才能向低優(yōu)先級(jí)的端口發(fā)起三種操作
UVM提供對(duì)TLM操作的支持,在其中實(shí)現(xiàn)了PORT與EXPORT。對(duì)應(yīng)于不同的操作,有不同的PORT,UVM中常用的PORT有
uvm_blocking_put_port#(T);uvm_nonblocking_put_port#(T);uvm_put_port#(T);uvm_blocking_get_port#(T);uvm_nonblocking_get_port#(T);uvm_get_port#(T);uvm_blocking_peek_port#(T);uvm_nonblocking_peek_port#(T);uvm_peek_port#(T);//peek系列端口,它們與get系列端口類似,用于主動(dòng)獲取數(shù)據(jù)uvm_blocking_get_peek_port#(T);uvm_nonblocking_get_peek_port#(T);uvm_get_peek_port#(T);//集合了get操作和peek操作兩者的功能uvm_blocking_transport_port#(REQ, RSP);uvm_nonblocking_transport_port#(REQ, RSP);uvm_transport_port#(REQ, RSP);
這15個(gè)端口中前12個(gè)定義中的參數(shù)就是這個(gè)PORT中的數(shù)據(jù)流類型,而最后3個(gè)定義中的參數(shù)則表示transport操作中發(fā)起請(qǐng)求時(shí)傳輸?shù)臄?shù)據(jù)類型和返回的數(shù)據(jù)類型
TLM中的操作,同時(shí)以blocking和nonblocking關(guān)鍵字區(qū)分。對(duì)于名稱中不含這兩者的,則表示這個(gè)端口既可以用作是阻塞的,也可以用作是非阻塞的,否則只能用于阻塞的或者只能用于非阻塞的。
-
下面的15種EXPORT定義與前面的15種PORT一一對(duì)應(yīng)
來(lái)源:UVM源代碼uvm_blocking_put_export#(T);uvm_nonblocking_put_export#(T);uvm_put_export#(T);uvm_blocking_get_export#(T);uvm_nonblocking_get_export#(T);uvm_get_export#(T);uvm_blocking_peek_export#(T);uvm_nonblocking_peek_export#(T);uvm_peek_export#(T);uvm_blocking_get_peek_export#(T);uvm_nonblocking_get_peek_export#(T);uvm_get_peek_export#(T);uvm_blocking_transport_export#(REQ, RSP);uvm_nonblocking_transport_export#(REQ, RSP);uvm_transport_export#(REQ, RSP);
-
PORT與EXPORT的連接
為了實(shí)現(xiàn)端口間的通信,UVM 中使用connect 函數(shù)來(lái)建立連接關(guān)系。如A要和B通信(A 是發(fā)起者),那么可以這么寫(xiě):A.port.connect(B.export),但是不能寫(xiě)成B.export.connect(A.port),只有發(fā)起者才能調(diào)用connect 函數(shù)。
舉例,A的代碼為
文件:src/ch4/section4.2/4.2.1/A.sv3classAextendsuvm_component;`uvm_component_utils(A)uvm_blocking_put_port#(my_transaction)A_port;endclass14functionvoidA::build_phase(uvm_phasephase);super.build_phase(phase);A_port=new("A_port",this);endfunction19taskA::main_phase(uvm_phasephase);endtask
接一個(gè)EXPORT。B的代碼為
文件:src/ch4/section4.2/4.2.1/B.sv3classBextendsuvm_component;`uvm_component_utils(B)uvm_blocking_put_export#(my_transaction)B_export;…endclassfunctionvoidB::build_phase(uvm_phasephase);super.build_phase(phase);B_export=new("B_export",this);endfunction19taskB::main_phase(uvm_phasephase);endtask
在env中建立兩者之間的連接:
文件:src/ch4/section4.2/4.2.1/my_env.sv4class my_env extends uvm_env;A A_inst;B B_inst;…virtual function void build_phase(uvm_phase phase);…A_inst = A::type_id::create("A_inst", this);B_inst = B::type_id::create("B_inst", this);endfunction…endclassfunction void my_env::connect_phase(uvm_phase phase);super.connect_phase(phase);A_inst.A_port.connect(B_inst.B_export);endfunction
-
FPGA
+關(guān)注
關(guān)注
1652文章
22230瀏覽量
628537 -
通信
+關(guān)注
關(guān)注
18文章
6273瀏覽量
139340 -
TLM
+關(guān)注
關(guān)注
1文章
45瀏覽量
25139
原文標(biāo)題:UVM里的TLM通信機(jī)制
文章出處:【微信號(hào):FPGA學(xué)姐,微信公眾號(hào):FPGA學(xué)姐】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄

TLM通信中常用的術(shù)語(yǔ)
評(píng)論