在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 22152|回复: 17

System Verilog 中队列的使用问题

[复制链接]
发表于 2009-9-25 15:41:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
刚学SV,做个模型但在使用队列时碰到了问题:定义了一个队列,然后在一个initial块中初始化了并填满了数据,然后在另一个always块中,让他每次弹出一个元素并赋给
一个寄存器,大体结构如下:
bit[31:0] buffer [$];
...
initial
begin
for(int j = 0 ;j<50;j++)
  buffer[j] = {$ramdom}%500;

end
...

always @(posedge clk or negedge rst_n)
begin
  ...
  data <= buffer.pop_front();
  ...
end

但是仿真时总是提示,“Cannot pop from an empty queue”!不知道队列怎么就空了呢?而且将其声明成static类型也是如此。
望各位高手指点迷津!
令:队列在SV中到底是什么类型?
发表于 2009-9-25 16:03:35 | 显示全部楼层
试一下buffer.push_front();的方式写入
发表于 2009-9-25 16:13:26 | 显示全部楼层
对啊,pop的时候至少判断下队列的size
 楼主| 发表于 2009-9-25 17:47:55 | 显示全部楼层
恩,楼上两位说的有理,先size()一下,在看是否pop
发表于 2009-9-30 16:30:24 | 显示全部楼层
1.队列兼具array和linked list的双重特点,所以用array的index方式给队列赋值是OK的。即
for(int j = 0 ;j<50;j++)
  buffer[j] = {$ramdom}%500;
是正确的。
2.仿真时队列为空,确实应该是因为LZ没有对队列buffer.size做判断导致。
发表于 2009-10-15 18:48:54 | 显示全部楼层
本帖最后由 qinghuabing2008 于 2009-10-15 18:53 编辑

奥  原来如此  受益匪浅啊  
我在用SV时  也碰到了一个问题  希望大家不吝赐教啊
这样声明一个mem有错吗?  bit [WIDTH-1:0] mem [$EPTH];
为什么编译时说:"systemverilog feature not yet implemented . Bounded queue not supported yet "
是不是由于我漏设了什么编译参数啊???
发表于 2009-10-15 21:00:56 | 显示全部楼层
DEPTH是const吗?用什么啊
发表于 2009-10-16 18:12:13 | 显示全部楼层
是     
WIDTH = 8   DEPTH= 31
发表于 2009-10-17 14:21:39 | 显示全部楼层
楼主:
    队列一般用pop_front()、push_front()、pop_back()、push_back()进行赋值和取值。
    当然,队列也是一种数组,用普通数据的index调用的方式也是可以用的。但无法体现队列的优势,如果只是采用Index方式调用,不如用固定数组和动态数组。
    你可以把一个队列看成一个移位寄存器,一般的使用是push_front()和pop_back()一起使用,push_back()和pop_front()一起使用。初学者在使用pop_front()和pop_back()之前可以用size()先判断队列的元素的个数。
    你的代码在非复位条件下每个clk的上升沿都会去队列取数,在50个clk后,队列就空了。pop_front()方法调用一次,队列的size就减1.

6#:
    你在声明时用到的"$DEPTH"是什么意思?是想声明为队列,且最大边界为DEPTH的意思吗?
   你试试:bit [7:0] mem [$]; 或 bit [7:0] mem [31]; 或  bit [7:0] mem [];
发表于 2009-10-17 14:28:40 | 显示全部楼层
请看看手册 队列不是这样定义的 8# qinghuabing2008
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-28 23:47 , Processed in 0.027956 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表