第二章重读笔记

  1. 合并数组;
  2. 队列比动态数组更高级,具有更小的性能损失;

a)         队列的使用需要注意,不要在其内容为空的时候pop;

                         i.              需要增加安全提示:

  1. wait(queue.size()>0); a = queue.pop_front() ;
  2. 在队列中,使用insert操作的执行效率要低于使用pop和push;
  3. 字下标:$放在最左边表示最小值;$放在最右边表示最大值;
  4. 可以通过对队列进行位宽运算来快速操作:

a)         J = array[$]; // j= array[max size]

b)         q=q[0,$-1];// 删掉q的最后一个数据;

c)         q={};删除队列;

  1. 删除队列的方法

a)         q={};

b)         q.delte();

c)         重新声明q;

  1. 支持把动态数组和定宽数组的数值赋值给队列;

a)         在位宽妥当的情况下他们会拓展自身;

b)         也可能会截断;

  1. 关联数组如果使用string作为索引,foreach的时候会根据转换后的ascii数值作为顺序打印;
  2. 数组缩减方法

Sum函数的返回值结果是根据原始数组数据类型的位宽决定的;

a)         数组求和位宽处理技巧:

                         i.              $display(“on.sum”,on.sum()); 这种方法会打印1;

                       ii.              $display(“on.sum”,om.sum()+32’d0);

                      iii.              通过增加额外位宽数据的方式,可以打印完整的数值;(相当于拓宽了)

                      iv.              也可以使用这种方法

  1. int t; t = on.sum();
  2. 由于左侧是一个32位宽的数据,其可以得到完整的sum结果;

 

  1. 数组的使用

a)         如果数组的索引是非负整数,应该使用定宽或动态数组;

b)         当数组的索引不规则时,可选择关联数组;

c)         当数组的长度会在仿真时频频变化时,可以选择队列;

  1. 存储器的优化:

a)         使用二值变量可以减少仿真时存储器的用量;

b)         为了避免浪费空间,应该尽量选择32bit的整数倍作为数据位宽;

  1. 用户自定义数据结构:

a)         类与结构体:(2.10)

  1. verilog没有数据结构,SV中结构体的功能太少,不如直接使用类来存储数据;
  2. struct仅是将数据组织到一起,没有操作数据的方法;
  3. struct是可综合的,静态的,而类是动态的,而且类可以使用随机化生成带约束的随机数据;
  4. struct变量的后缀应该使用_s;

a)         类与结构体:(2.10)typedef还能将不同的数据类型创建联合:

typedef union {int i;real f;} num_u;

real:浮点数;

num_u un;

un.f=0.0;

 

posted @ 2025-07-16 09:35  NoNounknow  阅读(5)  评论(0)    收藏  举报