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

UVM TLM详解

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

TLM中的三种端口

PORT

uvm_*_port #(T)

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台W*^@Z_!\

  *可以由下面任意一个代替:

lm|rE`V0
  • blocking_put
  • nonblocking_put
  •  put
  • blocking_get
  • nonblocking_get
  •  get
  • blocking_peek
  • nonblocking_peek
  • peek
  •  blocking_get_peek
  • nonblocking_get_peek
  • get_peek

;`MH8qSI7o/H-\0    T:The type of transaction to be communicated by the exportET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台n3A6r'`5Xv^)D1rW!V

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 QC)G7YZ6H2hB

    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.
3\ a2` La!_)W0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 [ M G }!y ? P'o };@

uvm_*_port #(REQ,RSP)

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 z-Hb"{8op!pv

    *可以由下面任意一个代替:ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台1Q!IsU)a!`5r

  • blocking_transport
  • nonblocking_transport
  • transport
  • blocking_master
  • nonblocking_master
  • master
  • blocking_slave
  • nonblocking_slave
  • slave

p;e#p4I/G(A(ZW b0    REQ:  The type of request transaction to be communicated by the exportET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台MVlJ$~%Y1DdK

Q4e%_-A@S0    RSP: The type of response transaction to be communicated by the exportET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台D-A4\Pu/@+L!y/Ov

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 bzly A!\*C

   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)-电子设计论坛、博客、超人气的电子工程师资料分享平台Z A0H'aU%v
   uvm_*_port #(REQ,RSP) and uvm_*_export #(REQ,RSP) portsET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台U3Q1trK7o

EXPORT

/a` e ~$c;f$`^'U~,t[0与PORT类型相似,同样有与port对应的uvm_*_export #(T)和uvm_*_eport #(REQ,RSP)ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 JG2{"b'{~

IMP

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台_uYn op

与PORT类型相似,同样有与port对应的uvm_*_imp #(T, IMP)和uvm_*_imp #(REQ,RSP,IMP,REQ_IMP,RSP_IMP)ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台|$r2j]#NAn%s_!o

9Oec JM!P4a:D+w0T: The type of transaction to be communicated by the imp

:])eC)ZA\:_"V}X6F8m0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台g"oTl#p eN

IMP:The type of the component implementing the interface. That is, the class to which this imp will delegateET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台W4w&Q!L y

"joNPGc0REQ:Request transaction typeET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台-{-K!]+sx$T+G%t

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 _6D{j X(F-?6@

RSP Response transaction typeET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台~'T!BBgf

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台.cj N)}~

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

yS/qfni0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台grv7g%U2lT2bA

RSP_IMP Component type that implements the response side of theinterface. Defaults to IMP. For master and slave imps only.ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台6a8a3LHWJ&s

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台PT&[A:G(Y.p


iW\7o^#T8_ yN`0

H}7r;x8`0K0

TLM的通信

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台`1rD]o(NN WL

首先是connect,只能有下面几种connection type:ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台CLr!}.Ut H/{Z

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台+LG#T~4r*B9q%}


!{2[@4C:?0m'lN|M0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台qqGk]

I5r[m+qZ/Q0其次要理解控制流和数据流的方向。ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台4U+z.v y}ER0v

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台7BUJ2PrU

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

}'m!qIYO@1UC0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台#z(F6h-L#["q ?*[%U8aI\

数据流:数据流有可能是从port到export/imp port,也有可能从export/imp port到port.ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Pxy?2x0_!Q p

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台V'~A+XGY

怎么理解呢,如下对比:

Ms-|"X~"v%O!b.^0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 ?P X$dII

component A有uvm_put_port,component B有uvm_put_export,当A call put  task时,数据从A传递到B

?z-Px2nnv0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台+I$C-n[%O6G!F

component A有uvm_get_port,component B有uvm_get_export,当A call get task时,数据从B传递到A

Ipeo+Et0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台G0cS0Z!G0i(h1r

而不管是put还是get task,都会在component B中进行定义。有点像是A去调了B的task。所以总结起来就是port的task/function都要落到B的task/function上去实现ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台q%R B:^Bpl

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台s H(D N%qDQ

最后一定注意两件事情:ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台"IR+PJ4R U%R]l

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台\"o0tp5|c EV

connect两边的tlm port的type以及transaction type一定要一致,比如blocking_put_port要连接 blocking_put_export或put_export

j+mO Vg^WZ:o0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 fXA!n0g)GOD+g|

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

U4|r(_ C/w0

analysis port,analysis export, analysis impET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Pc WR,pM"g0_8iv

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台E~ b;q&g qkB(|

其实实际运用上,还是最常用analysis  port/imp/export(它们有点像是port/export/imp的增强版,就个人经验来讲完全已经足够了)。主要有以下区别:ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台RN6S+j4H3uhK

  • 一个analysis port可以连接多个analysis export/imp, 也就是说analysis port更像一个广播。
  • analysis port只有一个write function。
  • analysis port没有阻塞非阻塞的区分,它本身只是广播,不必等待其它相连的port的响应。
ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台;@ZW A?3Ik

既然是广播,那么就有可能一个analysis port连接到两个以上的imp,但是write function只有一个,我们怎么办呢?

7R#x-w5}L#CDI+]0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台8tJ"qg)A8o]

处理方案:ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台9bAaCF9{;E(ip$P

WK"ou;~u N+M01.通过宏uvm_analysis_imp_decl声明两个后缀不一样的imp,UVM会根据两个后缀内建两个新的imp
8KU1}2z,w@ B h0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台k!K"X1d0xX^

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台7Z R u NTP4|

`uvm_analysis_imp_decl(_export1)ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台k1d@i0au]

a2dU8l2kS8\*D S0`uvm_analysis_imp_decl(_export2)

8uGJy|@gS0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台ik~s_7x(E

2.声明 portET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台^[6}d#Y9u nK

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台?1ZZ9U9x*nV

uvm_analysis_imp_export1 #(transaction, scoreboard)     scb_imp1;ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台&u7n k |ic

Mxe%Eo0uvm_analysis_imp_export2#(transaction, scoreboard)      scb_imp2;ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台zQm`_ k.^

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台R f`V7] BR

3.分别定义两个port的write functionET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台mTw&lP nf1?!^4lh/E-H

OT1_2B9z&X0function void write_export1(transaction txn);

3iJ/H|2Y;xV0p0X0

ZnDL[i)j0function void write_export1(transaction txn);

!b\.w;}r6p-R3z0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台;Z%J0ejJ |o u

特别要注意的一点:

&Hcq.w4X Lu-U0

V4c9uX"j5|C*K0analysis port广播出去的是handle,并没有为每一个export/imp的transaction分配alloction,如果如果 export1如果对transaction进行了修改, 那么export2会看到修改后的transaction.所以好的习惯是在write function里面首先 new一个 transaction,并对传输过来的transaction进行copy后,再进行后面的操作。
bs2[iE"?+\ [0
ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台3~b W5A V}i

uvm_tlm_fifo,uvm_tlm_analysis_fifo

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台9K.jdB8Ya{)XtY

顾名思义,uvm_tlm_fifo其实就是能够在tlm肚子里面buffer很多transaction,就像FIFO一样。ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 JH%N d%c,s'O

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台fu!X;D[8r.N

有人可能会这样做,我自己在scoreboard里面申明queue,也一样做到fifo的效果。确实,很多情况下,直接把analysis port传过来的transaction放queueu里面,是一个不错的方法。但fifo还有以下几个好处:
:a"gws)r2G0

br jm&lTI;Z1w"W/}t ]0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台7S'I'AH ?)p

1. uvm_tlm_fifo是被动接收数据和被动发送数据,因此可以把发起端和接收端完全分隔开,发数据和收数据的行为完全独立。ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台0T;KY1^c n

:x7o2ie"g5t+X%\l+L02.如果design的transaction有 outstanding,那么uvm_tlm_fifo就直接可以model design的fifo行为了(当然用queue做也不错,甚至碰到out of order的时候比fifo还好用)。ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台h@4L$@Y;Qnp lN

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台^/Y;K3K[ k j^

3.通过imp加后缀可以解决多对port,export的情况,但如果port数据多了呢。比如一个有16进16出的AXI interconnect,在scoreboard的port上去申明16个不同名字的imp显然不方便。那么这时候只需要申明一个 uvm_tlm_fifo数组就可以了。(IMP没办法申明数组)ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台8x;W2ri X4@[

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台y|-q$H _r!Ds

example:

R ksw*~}+Uc$RQ-c0

s9F{,Z]w0scoreboard:

hZ'I.D4qd.G0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台x%{m eJ-H

 uvm_tlm_analysis_export (#sb_item)     in_expor[10];

V,D2gK4{.R]2EH3[2pt0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台yS8d$G%Fqw \ak3G

 uvm_tlm_analysis_fifo(#sb_item)            scb_fifo[10];

k.omV.}L"l Y$y0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台*~6mzN]1[5m

 uvm_blocking_get_port #(sb_item)          fecth_port[10];
~-i:V&E4GyL]Q-j0

Ouk.T'k;b0

(i!hz_ x0i%a-Z0  ...ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台W1G]trk.^ y)U

'p~8V/E9x%p0  function void connect_phaseET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台ve:Dk1zy;}!Md

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台_5yn/tcR

    foreach(in_export[i]) begin
0J6q$O$m$C3V0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台(t#Ezu9P7\ORa

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台FW1O(NV?J

      ip_export[i].connect(sb_fifo[i].analysis_export);  
3C.B1jC a'}._0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台0`1K,FN,L

0Nt uOV I0      fetch_port[i].connect(sb_fifo[i].blocking_get_export);ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台b-I%wIz1Ur
ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台,G U?9R ]

Q$]XIbk&]r6m2JA b0    end
9vbj~#M g D0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台(hn8s6l+^#i&rI

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台&Fqx#`\V

  endfunction

P"Q6K,~ bOI? CK0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台0V:`8AJ$w X4`{p


@,C9_kbid0

4G nQz eol"x8c0 ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台A0YqY|)YJ&SC

env:ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台7i x8NB!YB6L_@6a

E2Z1G9a^/q2cs0  function void connect_phaseET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台w7d!Y|8q

3gZ?b"f&q*V0   foreach(mon[i])ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台T}[7m;H]-Q

ET创芯网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台_3{ s(fn2a;jM%h yg[

    mon[i].op.connect(scb.in_expor[i]);// 为什么要有一个in_export作桥梁,而不直接用mon.op连到scb的fifo呢。可以参考uvm_users_guide 2.3.2,这里不作详细说明
{,k*nU-y,?z0N+b0

XKm5LAK$u%F0

6s1NSU5p0w]0  endfunction
S+\)D'@VA0

W \pd'}Z\/N2mN s0  在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