纯技术笔记,如需讨论,请留言。 如果您对我的笔记有什么建议,请留言。 由于博客图床大小的限制,所以有些博客只能link到http://blog.csdn.net/fanyongwinner

UVM TLM详解

上一篇 / 下一篇  2016-09-08 11:47:30 / 个人分类:UVM notebook

TLM中的三种端口

PORT

uvm_*_port #(T)

n#~;I,{e$R%v6o#Q0  *可以由下面任意一个代替:

;i`-`{ls|e9u A0
  • blocking_put
  • nonblocking_put
  •  put
  • blocking_get
  • nonblocking_get
  •  get
  • blocking_peek
  • nonblocking_peek
  • peek
  •  blocking_get_peek
  • nonblocking_get_peek
  • get_peek

^!cNheH,v+xG0    T:The type of transaction to be communicated by the exportET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台_8gqw4j}/@9]Z z

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台1w3R3d5jr{+k

    Ports are connected to interface implementations directly via uvm_*_imp #(T,IMP) ports or indirectly via hierarchical connections to uvm_*_port #(T) and uvm_*_export #(T) ports.
W!K{9_weeA/?.N0

DiS7N$Nmu$V"l0

uvm_*_port #(REQ,RSP)

;fa*q7mO)g3e5Hk;u0    *可以由下面任意一个代替:ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台K1p9YVmk0s"U

  • blocking_transport
  • nonblocking_transport
  • transport
  • blocking_master
  • nonblocking_master
  • master
  • blocking_slave
  • nonblocking_slave
  • slave
ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台Q@7?+@MC3u:o

    REQ:  The type of request transaction to be communicated by the export

J'Z-?'gA%]X'p)UW0

W4o`z(@ t?dv0    RSP: The type of response transaction to be communicated by the exportET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台L'A/C+FH'},mW

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台3h/eeU/~z1`

   Ports are connected to interface implementations directly via uvm_*_imp#(REQ,RSP,IMP,REQ_IMP,RSP_IMP) ports or indirectly via hierarchical connections toET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台!@"fV8g9La/Xp
   uvm_*_port #(REQ,RSP) and uvm_*_export #(REQ,RSP) portsET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台b}H] R

EXPORT

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台r5h j5B+Hbsdq

与PORT类型相似,同样有与port对应的uvm_*_export #(T)和uvm_*_eport #(REQ,RSP)ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台 j%X,mO^O

IMP

)J"A'wX5c8^_0与PORT类型相似,同样有与port对应的uvm_*_imp #(T, IMP)和uvm_*_imp #(REQ,RSP,IMP,REQ_IMP,RSP_IMP)

LN3Y#yx#F0

(GlHH}4R1V0T: The type of transaction to be communicated by the imp

Q @gs/u?o+}{$? u0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台JnG%\_z

IMP:The type of the component implementing the interface. That is, the class to which this imp will delegate

C~;aO3o&ZA(~,Cs0

H-a8IX#n7`%Y)t0REQ:Request transaction typeET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台"i5~ Ky]u]?

+AN ]`;W+W%V0RSP Response transaction type

@-idM+z%z0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台,s*J-Z2a C)@ X:c

REQ_IMP Component type that implements the request side of the interface.Defaults to IMP. For master and slave imps only.

mLF%?m2w Z2h.e0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台z p?9D'T6p'~-q9Yg

RSP_IMP Component type that implements the response side of theinterface. Defaults to IMP. For master and slave imps only.

k0]EYPZ0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台gN7^(Q&E9P&E7s


RR#l*` d(S `e M0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台I\qPj gYR

TLM的通信

'a"_^+XH0uWm0首先是connect,只能有下面几种connection type:

-w6^2o)`\ Z0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台!z0t1aL'^6Q(_.lA

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台r ~u/{8{
ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台)V[K-\6n6n ?g L

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台$zs"i0y$ZT]b

其次要理解控制流和数据流的方向。

4v+w3u5I'f1\0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台%`v3UE4D3I2Q X0x

控制流: 控制流永远是port到export或imp port的。也就是说,永远去是port作为数据通信的发起者去call put/get等function

@/VIA8|0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台M:pfvZ5wW

数据流:数据流有可能是从port到export/imp port,也有可能从export/imp port到port.

eWDg!?3e$~0

u"}"WVY0怎么理解呢,如下对比:

m7q4ucG:lZ&t0

v)KVTkp6o0component A有uvm_put_port,component B有uvm_put_export,当A call put  task时,数据从A传递到BET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台,D QY!])P_

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台V!].x_Q1b@~

component A有uvm_get_port,component B有uvm_get_export,当A call get task时,数据从B传递到AET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台-` d&tz4{6I$A

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台7G#qS#XO

而不管是put还是get task,都会在component B中进行定义。有点像是A去调了B的task。所以总结起来就是port的task/function都要落到B的task/function上去实现

z4A ? pZ2\0

Ii"K'|b` ig R0最后一定注意两件事情:ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台z.[,nAxC4?Mv"u

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台B^9oyOF WH1B0r

connect两边的tlm port的type以及transaction type一定要一致,比如blocking_put_port要连接 blocking_put_export或put_exportET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台MS Rz&rFV

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台1}Xvh'X;n

更需要注意,一定要使用IMP 来终结连接关系, PORT和EXPORT都不能做为连接关系 的终点。

ZL\'qnI/@f!Zu0

analysis port,analysis export, analysis imp
N2w-HmMB*e0

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台BB|;nN:gS#W

其实实际运用上,还是最常用analysis  port/imp/export(它们有点像是port/export/imp的增强版,就个人经验来讲完全已经足够了)。主要有以下区别:

aZ"[ F y7CrN.j }0
  • 一个analysis port可以连接多个analysis export/imp, 也就是说analysis port更像一个广播。
  • analysis port只有一个write function。
  • analysis port没有阻塞非阻塞的区分,它本身只是广播,不必等待其它相连的port的响应。
ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台 L$SIN8d%I

既然是广播,那么就有可能一个analysis port连接到两个以上的imp,但是write function只有一个,我们怎么办呢?ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台'lb!awVA

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台z)\gw Fxj

处理方案:

wPApWd9G5hM;S s0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台)`4Jl'}gY{ SHud

1.通过宏uvm_analysis_imp_decl声明两个后缀不一样的imp,UVM会根据两个后缀内建两个新的imp
V#[2Nyl8A2\0

Q_*~&YBL+Wu0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台 z C Q&o&uEV;l j4l

`uvm_analysis_imp_decl(_export1)

2hc w.hav0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台#g+bw KX0de

`uvm_analysis_imp_decl(_export2)

\ E.mh)DN0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台0q'B2hP(t7u^

2.声明 portET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台]4m0~C4n:j

MaK Q&bR$X&cR0uvm_analysis_imp_export1 #(transaction, scoreboard)     scb_imp1;

4Z fn2Nt { ^*f0

ZO,B0Z!_+MAM0uvm_analysis_imp_export2#(transaction, scoreboard)      scb_imp2;

.c#a@^4}|0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台3`2]%l)tTW

3.分别定义两个port的write functionET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台Qq`T%c Y4p

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台O,F6s6c1|-n9@

function void write_export1(transaction txn);

j L3@W;@Y.KL$}$Z(M0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台*f K3~(ake9\p[

function void write_export1(transaction txn);ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台 v fy L0{ xKM

ygP]JB0U~w v0特别要注意的一点:ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台 Bb+aSP3w

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台K;Q5jwb k1Vw!s~_

analysis port广播出去的是handle,并没有为每一个export/imp的transaction分配alloction,如果如果 export1如果对transaction进行了修改, 那么export2会看到修改后的transaction.所以好的习惯是在write function里面首先 new一个 transaction,并对传输过来的transaction进行copy后,再进行后面的操作。
C*i}@h#JO0

I(~P_XHI0k0

uvm_tlm_fifo,uvm_tlm_analysis_fifo

(A-Ed7]1uvGCY'M0顾名思义,uvm_tlm_fifo其实就是能够在tlm肚子里面buffer很多transaction,就像FIFO一样。

1Vi x3O T|;joTH0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台;D"v(U-_$A.@

有人可能会这样做,我自己在scoreboard里面申明queue,也一样做到fifo的效果。确实,很多情况下,直接把analysis port传过来的transaction放queueu里面,是一个不错的方法。但fifo还有以下几个好处:ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台s%V,z3`p
ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台,rD}E?

2g'\;MvZWn01. uvm_tlm_fifo是被动接收数据和被动发送数据,因此可以把发起端和接收端完全分隔开,发数据和收数据的行为完全独立。ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台hX%o'rgK

4ZD(U b,b&Yj:A02.如果design的transaction有 outstanding,那么uvm_tlm_fifo就直接可以model design的fifo行为了(当然用queue做也不错,甚至碰到out of order的时候比fifo还好用)。ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台8vr[3iZl-]

X+p2u)F'z L-x03.通过imp加后缀可以解决多对port,export的情况,但如果port数据多了呢。比如一个有16进16出的AXI interconnect,在scoreboard的port上去申明16个不同名字的imp显然不方便。那么这时候只需要申明一个 uvm_tlm_fifo数组就可以了。(IMP没办法申明数组)

.sP5BjQ0

\kC Dg+T.a0example:

#sP;fs4x;Hk-wh0

+ns&H'VoPj0scoreboard:

2cf)w:o2~#gA/x0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台&r8]7pI+?y

 uvm_tlm_analysis_export (#sb_item)     in_expor[10];

P;X L2`wcx,J"C0

4Y1W jF5d c$U(?0 uvm_tlm_analysis_fifo(#sb_item)            scb_fifo[10];

L S^ZFd1Y s0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台-Gnp*ig;t oG3u

 uvm_blocking_get_port #(sb_item)          fecth_port[10];ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台/[)Q%{ f P&?%r8}

,`r [P c0

ph.D W+~?0  ...ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台 t!r&F.R9B^y^

!r,q]+D z+q1rE0  function void connect_phaseET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台v0rKW3C [R_u

ETAs @N9i0    foreach(in_export[i]) beginET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台f,E1xg;]*}

t5CEZ%N q0

3t$To9^G+Y z#Y&e0      ip_export[i].connect(sb_fifo[i].analysis_export);   ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台eqD-uhO
ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台[#}@-^ P:R8P

8?0a4t R"n w ~-U,s.e0      fetch_port[i].connect(sb_fifo[i].blocking_get_export);
l-s:[4\7B0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台Q6V z t S

he"m \0R)P0    end
)Ace4l'q3~/^3b5ew0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台j&ReI#e8]5T}

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台k1EI@ fi0r*dh

  endfunction

5XC.bg/e4i1f0

x%B,z6s b,`v(BX[}0
_ D1h0`!jj0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台5P_%t4np#d

ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台6n6NL#an6|1?&m

env:

6WfS0}.]~0{.R0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台!Lq+MThp9Rp"n A5G

  function void connect_phase

]x EIRS0 ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台q4OTjZE&fL

   foreach(mon[i])ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台+V] R.g/z!v

1q iTg6`:C0    mon[i].op.connect(scb.in_expor[i]);// 为什么要有一个in_export作桥梁,而不直接用mon.op连到scb的fifo呢。可以参考uvm_users_guide 2.3.2,这里不作详细说明ET创芯网(EETOP)-电子设计威尼斯人网址、博客、超人气的电子工程师资料分享平台Y!y+[MwQh`

Go$h [6M0

(|\ u x K&w!v g%y3h0  endfunction
'kU8{ BM!?Q(w0

lw-CU?w4rJ0  在soreboard中,不必再去写一个write function和get task了,因为fifo里面已经做了。mon.ap.write直接把数据放到fifo里面,而fetch_port.get直接出fifo头 拿数据。

TAG: TLM

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar
博聚网