求助:要写一个axi master的话,是将读写分两个driver好呢,还是一个driver好?
时间:10-02
整理:3721RD
点击:
各位:
目前想用UVM写一个axi master 模型,正在考虑它driver的问题。本来是打算将write与read分开由2个driver分别发,这样两个driver的进程就完全并行了。不过如果我需要将随机产生的write的控制信号再传递给read,实现“写完读”的功能的话,又不知道该怎么传输这些东西了。
如果把read和write放到同一个driver中,将read与write作为两个单独的task的话,那么sequence如何并行的使用这两个task呢?
另外,按照我目前分两个driver的想法,transfer中的定义是不分写和读的(即把araddr与awaddr统称为addr),那么如果是使用同一个driver的话,那就得加上transfer的方向,那么每次产生一个新的transfer就是非读即写,就是说不能达到同时读写的功能。可是如果不加上transfer的方向的话,难道读写都用相同的地址,相同的控制信号?我好像有点被绕进去了,谁能来帮我抽抽线头呀?
谢谢了!
目前想用UVM写一个axi master 模型,正在考虑它driver的问题。本来是打算将write与read分开由2个driver分别发,这样两个driver的进程就完全并行了。不过如果我需要将随机产生的write的控制信号再传递给read,实现“写完读”的功能的话,又不知道该怎么传输这些东西了。
如果把read和write放到同一个driver中,将read与write作为两个单独的task的话,那么sequence如何并行的使用这两个task呢?
另外,按照我目前分两个driver的想法,transfer中的定义是不分写和读的(即把araddr与awaddr统称为addr),那么如果是使用同一个driver的话,那就得加上transfer的方向,那么每次产生一个新的transfer就是非读即写,就是说不能达到同时读写的功能。可是如果不加上transfer的方向的话,难道读写都用相同的地址,相同的控制信号?我好像有点被绕进去了,谁能来帮我抽抽线头呀?
谢谢了!
还是分成2个driver比较好,write的控制信号做个事件传过去,write的内容你也可以用fifo传过去啊,这样read的时候会比较方便,你造case也好办一些
那read要怎么处理write传归来的和自己随机产生的数据啊。我想了半天都觉得一个driver只能处理一种情况。这样的话就需要两个不同的read driver了。或者可以让它先处理完自己的数据,然后再上fifo中取write的数据来处理么?
另外,问一下,这里的fifo指的是fifo_port吧?
你那个transaction好好构思一下。传过来之后,你还是可以assert。randomize一把的。要么你另外定义个read的transaction。继承一下。
来看看不是很懂
可以将你的write channel的信息传到read channel相对应的sequence里就行了,并行的处理可以通过queue就可以实现了吧。再说本来无论read还是write,他们的channel都是并行的,还是做成并行的driver处理更好。