首页 > 其他分享 >SystemVerilog -- 2.5 Data Types ~ SystemVerilog Packed Arrays

SystemVerilog -- 2.5 Data Types ~ SystemVerilog Packed Arrays

时间:2024-05-02 18:00:11浏览次数:27  
标签:begin end -- value Arrays SystemVerilog array data packed

SystemVerilog Packed Arrays

SystemVerilog 中有两种类型的数组- packed array 和 unpacked array。

packed array用于引用在变量名称之前声明的维度。

bit [3:0] data;        // Packed array or vector
logic     queue [9:0]; // unpacked array

packed array保证表示为一组连续的位。它们只能用于单位数据类型(如、和其他递归packed array)组成。bit logic

Single Dimensional Packed Arrays

一维压缩数组也成为向量

module tb;
  bit [7:0]  m_data;    // A vector or 1D packed array
  initial begin
    // 1. Assign a value to the vector
    m_data = 8'hA2;
    // 2. Iterate through each bit of the vector and print value
    for (int i = 0; i < $size(m_data), i++) begin
      $display ("m_data[%0d] = %b", i, m_data[i]);
    end
  end
endmodule

Muultidimensional Packed Arrays

多维打包数组仍然是一组连续的位,但也被分割成更小的组。

Example #1

下面显示的代码声明一个占用32位或4个字节的2D打包数组,并循环访问段并打印其值。

module tb;
  bit [3:0][7:0]    m_data;    // A MDA, 4 bytes

  initial begin
    // 1. Assign a value to the MDA
    m_data = 32'hface_cafe;
    $display ("m_data = 0x%0h", m_data);
    // 2. Iterate through each segment of the MDA and print value
    for (int i = 0; i < $size(m_data); i++) begin
      $display("m_data[%0d] = %b (0x%0h)", i, m_data[i], m_data[i]);
    end
  end
endmodule

模拟日志

ncsim> run
m_data = 0xfacecafe
m_data[0] = 11111110 (0xfe)
m_data[1] = 11001010 (0xca)
m_data[2] = 11001110 (0xce)
m_data[3] = 11111010 (0xfa)
ncsim: *W,RNQUIE: Simulation is complete.

Example #2

现在让我们看一个3D packed array

module tb;
  bit [2:0][3:0][7:0]   m_data;  // An MDA, 12 bytes
  
  initial begin
    // 1. Assign a value to the MDA
    m_data[0] = 32'hface_cafe;
    m_data[1] = 32'h1234_5678;
    m_data[2] = 32'hc0de_fade;
    // m_data gets a packed value
    $display ("m_data = 0x%0h", m_data);

    // 2. Iterate through each segment of the MDA and print value
    foreach (m_data[i]) begin
      $display ("m_data[%0d] = 0x%0h", i, m_data[i]);
      foreach (m_data[i][j]) begin
        $display ("m_data[%0d][%0d] = 0x%0h", i, j, m_data[i][j]);
      end
    end
  end
endmodule

模拟日志

ncsim> run
m_data = 0xc0defade12345678facecafe
m_data[2]    = 0xc0defade
m_data[2][3] = 0xc0
m_data[2][2] = 0xc0
m_data[2][1] = 0xc0
m_data[2][0] = 0xc0
m_data[1] = 0x12345678
m_data[1][3] = 0x12
m_data[1][2] = 0x34
m_data[1][1] = 0x56
m_data[1][0] = 0x78
m_data[1] = 0x12345678
m_data[0][3] = 0xfa
m_data[0][2] = 0xce
m_data[0][1] = 0xca
m_data[0][0] = 0xfe
ncsim: *W,RNQUIE: Simulation is complete.

标签:begin,end,--,value,Arrays,SystemVerilog,array,data,packed
From: https://www.cnblogs.com/sys-123456/p/18170397

相关文章

  • 学习笔记-JVM OOM实验
    堆内存溢出packagecom.dameng.lxm;importjava.util.ArrayList;importjava.util.List;publicclassHeapOOM{ staticclassOOMObject{ } publicstaticvoidmain(String[]args){ List<OOMObject>objlist=newArrayList<OOMObject>(); while......
  • Fritzing电路仿真
    开启仿真功能Fritzing最为人熟知的是画面包板接线的功能。不过现在也支持仿真了(可以烧录Arduino程序),用下来感觉一般般。注意:必须版本V0.9.10以上才支持仿真打开LED仿真例子:默认没有仿真功能:编辑菜单->参数设置开启仿真:有仿真功能了:运行仿真:15欧及以下电阻显示烧毁:(......
  • 张量计算框架的学习 pytorch和tensorflow
    要实现一些模型或者算法,可以直接用pytorch库或者tensorflow库,但是也可以再深入一些也就是对库本身进行一些扩展。找到两篇文章觉得不错:知乎上分享的万字综述,核心开发者全面解读PyTorch内部机制https://zhuanlan.zhihu.com/p/67834038探索TensorFlow的运行原理:TensorFlow是如......
  • WPF CollectionViewSource GroupDescriptions PropertyGroupDescription GroupStyle
    <Windowx:Class="WpfApp83.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • 阅读过的博客
    在MySQL中,要取每组前几条记录,可以使用子查询结合LIMIT子句来实现。但是,由于LIMIT是对结果集进行截取,不能直接在GROUPBY之后直接使用。因此,需要先对数据进行排序,然后再对每个分组的排序结果取前几条。以下是一个示例代码,假设我们有一个表scores,包含group_id和score两个字段,我们想......
  • 001量化项目总结 --01获取实时价格
    一、获取实时价格deftdxgetprice(self,scode):#取实时价格price=0.0pmarkcode=0sip=''sport=0time_now=datetime.now().minuteif(scode[0]=='0'andscode[1]=='0')orscode[0]=='3&......
  • 001量化项目总结 --02获取五档买盘价格
    一、获取五档买盘price=0.0pmarkcode=0sip=''sport=0l1=[]time_now=datetime.now().minuteif(scode[0]=='0'andscode[1]=='0')orscode[0]=='3':pmarkcode=0else:pmarkcode=1api=TdxHq_API()iftime_no......
  • WPF CollectionViewSource ICollectionViewLiveShaping IsLiveSorting
    <Windowx:Class="WpfApp82.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • 树链剖分
    树链剖分我们一般使用重链剖分,就是子树大的先剖分,应为这样可以保证时间在\(log_n\)如图,先按照\(dfs\)序遍历出有一棵树,那么\(dfs\)序就是\([1,2,3,4,5,6,7,8,9]\),如果碰到一条边上\(dfn[f]-dfn[u]!=1\)则断一次,就可以剖出链了,如图,链为\([1,2,3][4,5]......
  • SpringBoot中分页插件PageHelper的使用
    SpringBoot如何使用PageHelper实现分页查询在原始的分页查询方法中,需要编写复杂的SQL语句来限制查询结果的范围,通常需要使用LIMIT或者ROWNUM等数据库特定的语法来实现分页。在每个需要分页的查询方法中,都需要手动计算分页的起始位置和偏移量,通常需要根据页码和每页数量来计算,这部......