相关文章推荐
谦逊的猴子  ·  Newtonsoft动态解析Json数据_n ...·  1 年前    · 
个性的韭菜  ·  高性能服务器之路 | 浅谈 ...·  2 年前    · 
温暖的机器人  ·  okhttp3/internal/concu ...·  2 年前    · 
大气的电影票  ·  SourceTree超前一个版本,落后N个版 ...·  2 年前    · 
Code  ›  SV数组维度定义迷思开发者社区
data 数组 维度
https://cloud.tencent.com/developer/article/1754075
沉稳的生菜
2 年前
空白的贝塔
0 篇文章

SV数组维度定义迷思

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
空白的贝塔
社区首页 > 专栏 > 摸鱼范式 > SV数组维度定义迷思

SV数组维度定义迷思

作者头像
空白的贝塔
发布 于 2020-11-27 15:03:17
615 0
发布 于 2020-11-27 15:03:17
举报

今日迷惑

我定义了一个类

class sdata;
  bit [255:0] data [2048];
  rand int     data_t [2048][32];
  rand bit       mask [2048][32];
  bit flag;
  constraint c {
      foreach (data_t[i,j]) data_t[i][j]< 5;
      foreach (data_t[i,j]) data_t[i][j]>-5;
  function void post_randomize();
    if (flag) begin
      for (int i = 0; i < 2048; i++) begin
        for (int j = 0; j < 32; j++) begin
          data[i][8*j+:8]=data_t[i][j]*mask[i][j];
  endfunction
endclass : sdata

我想用它来初始化一个ram和一个数组,他们的定义分别是

bit [255:0] mem_fmap_in [2048];
reg [`FMAP_MEM_WD-1:0] ram [`FMAP_MEM_DEP-1:0];

初始化代码

sdata temp;
void'(temp.randomize());
mem_fmap_in=temp.data;
i_fmap_mem_in.ram=temp.data;
$writememh("fmap_in.txt",i_fmap_mem_in.ram);
$writememh("fmap_in_s.txt",mem_fmap_in);

结果导致,两者数据虽然都一样,但是数据顺序完全对不上

输出数据

当我把初始化代码改成for循环以后,两者就一致了

for (int i = 0; i < 2048; i++) begin
    mem_fmap_in[i]=temp.data[i];
    i_fmap_mem_in.ram[i]=temp.data[i];

经过大佬指点,错误的原因在于,两者定义维度的时候不一致, bit [255:0] mem_fmap_in [2048]; 和 bit [255:0] mem_fmap_in [2047:0]; 的索引顺序是不一致的,如果将我定义时的代码改成下面的一种,都能避免错误。

bit [255:0] mem_fmap_in [2047:0];
reg [`FMAP_MEM_WD-1:0] ram [`FMAP_MEM_DEP-1:0];
bit [255:0] mem_fmap_in [2048];
reg [`FMAP_MEM_WD-1:0] ram [`FMAP_MEM_DEP];
bit [255:0] mem_fmap_in [2048];
reg [`FMAP_MEM_WD-1:0] ram [0:`FMAP_MEM_DEP-1];

来自绿皮书的参考

定宽数组

做个实验

module tb ();
int a [3];
int b [2:0];
int c [0:2];
int d [3];
  initial begin
    for (int i = 0;i<3 ;i++ ) begin
      a[i]=i;
    for (int i = 0;i<3 ;i++ ) begin
      $display("a[%0d]:%0d b[%0d]:%0d c[%0d]:%0d d[%0d]:%0d",i,a[i],i,b[i],i,c[i],i,d[i]);
 
推荐文章
谦逊的猴子  ·  Newtonsoft动态解析Json数据_newtonsoft deserializeobject 具体类-CSDN博客
1 年前
个性的韭菜  ·  高性能服务器之路 | 浅谈 Valgrind 内存错误检查神器 Memcheck-阿里云开发者社区
2 年前
温暖的机器人  ·  okhttp3/internal/concurrent/TaskRunner$RealBackend : okhhtp3模拟服务器java.lang.NoClassDefFoundError-腾讯云开发者社区-腾讯云
2 年前
大气的电影票  ·  SourceTree超前一个版本,落后N个版本 - 进军的蜗牛 - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号