相关文章推荐
唠叨的猴子  ·  Starpronto Prosperity ...·  7 月前    · 
坏坏的拐杖  ·  How to Install ...·  10 月前    · 
大鼻子的消防车  ·  iOS导航BarButtonItem文字或者 ...·  1 年前    · 
茫然的钥匙  ·  贾玲暴瘦“40斤”,“整容式”近照曝光后,让 ...·  1 年前    · 
粗眉毛的树叶  ·  藏族导演万玛才旦去世,他就像误入电影圈的远方来客·  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]);
 
推荐文章
唠叨的猴子  ·  Starpronto Prosperity Group B1 Reviews - Ethan Allen Search Results
7 月前
坏坏的拐杖  ·  How to Install Auto-GPT in 2025
10 月前
大鼻子的消防车  ·  iOS导航BarButtonItem文字或者图片与屏幕边界的间隔调整方法_rightbarbuttonitem 去掉系统距离屏幕右边的间距-CSDN博客
1 年前
茫然的钥匙  ·  贾玲暴瘦“40斤”,“整容式”近照曝光后,让人恶心的事发生了_手机新浪网
1 年前
粗眉毛的树叶  ·  藏族导演万玛才旦去世,他就像误入电影圈的远方来客
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号