寧波seo網(wǎng)站建設費用企業(yè)推廣平臺
15、 TLM通信
15.1 實現(xiàn)兩個組件之間的通信有哪幾種方法?分別什么特點?
最簡單的方法就是使用全局變量,在monitor里對此全局變量進行賦值,在scoreboard里監(jiān)測此全局變量值的改變。這種方法簡單、直接,不過要避免使用全局變量,濫用全局變量只會造成災難性的后果。
稍微復雜一點的方法,在scoreboard中有一個變量,這個變量設置為外部可以直接訪問的,即public類型的,在monitor中對此變量賦值。要完成這個任務,那么要在monitor中有一個指向scoreboard的指針,否則雖然scoreboard把這個變量設置為非local類型的,但是monitor依然無法改變。這種方法的問題就在于,整個scoreboard里面的所有非local類型的變量都對monitor是可見的,而假如monitor的開發(fā)人員不小心改變了scoreboard中的一些變量,那么后果將可能會是致命的。
由config機制的特性可以想出第三種方法來,即從uvm_object派生出一個參數(shù)類config_object,在此類中有monitor要傳給scoreboard的變量。在base_test中,實例化這個config_object,并將其指針通過config_db#(config_object)::set傳遞給scoreboard和monitor。。這種方法比上面的兩種方法都要好,但是仍然顯得有些笨拙。一是要引入一個專門的config_object類,二是一定要有base_test這個第三方的參與。在大多數(shù)情況下,這個第三方是不會惹麻煩的。但是永遠不能保證某一個從base_test派生而來的類會不會改變這個config_object類中某些變量的值。也就是說,依然存在一定的風險。
a. TLM通信的優(yōu)點是是什么?SV中用的是什么通信方式?TLM通信與mailbaox的對比?
-
通信函數(shù)可以定制化,例如你可以定制put()/get()/peek()的內(nèi)容和參數(shù),這其實比mailbox 的通信更加靈活。
-
將組件實現(xiàn)了完全的隔離,可以參考紅寶書圖12.4,因為只有通過層次化的TLM端口連接,我們就可以很好地避免直接將不同層次的數(shù)據(jù)緩存對象的句柄進行“空中傳遞”。而TLM 端口按照層次的連接,雖然看起來有點繁復,但也正因為這一點,可以使得組件之間保持很好的獨立性。</