Systemverilog Open Arrays

2023-10-27

原文链接:http://www.testbench.in/DP_08_ARRAYS.html

The size of the packed dimension, the unpacked dimension, or both dimensions can remain unspecified,such cases are referred to as open arrays (or unsized arrays). Open arrays allow the use of generic code to handle different sizes. Formal arguments in SystemVerilog can be specified as open arrays solely in import declarations, exported. SystemVerilog functions cannot have formal arguments specified as open arrays.

OpenArrays are good for generic programming, since C language doesn’t have concept of parameterizable arguments. Standared query and library functions are provided to determine array information to acess array elements.

EXAMPLE: open arrays

CODE:SV_file.sv

program main;

int fxd_arr_1[8:3];
int fxd_arr_2[12:1];

import "DPI-C" context function void pass_array(input int dyn_arr[] );

initial
begin
for (int i = 3; i<=8 ; i++)
begin
fxd_arr_1[i] = $random() ;
$display("SV:fxd_arr_1 %0d %d ",i, fxd_arr_1[i] );
end

$display("\n Passing fxd_arr_1 to C \n");
pass_array( fxd_arr_1 );

for (int i = 1; i<=12 ; i++)
begin
fxd_arr_2[i] = $random() ;
$display("SV: fxd_arr_2 %0d %d ",i, fxd_arr_2[i] );
end

$display("\n Passing fxd_arr_2 to C \n");
pass_array( fxd_arr_2 );
end
endprogram

CODE: C_file.c

#include <stdio.h>
#include <svdpi.h>

void pass_array(const svOpenArrayHandle dyn_arr ) {
int i;

printf("Array Left %d, Array Right %d \n\n", svLeft(dyn_arr,1), svRight(dyn_arr, 1) );
for (i= svRight(dyn_arr,1); i <= svLeft(dyn_arr,1); i++) {
printf("C: %d %d \n", i, *(int*)svGetArrElemPtr1(dyn_arr, i) );
}
printf("\n\n");

}

RESULTS:

SV:fxd_arr_1 3 303379748
SV:fxd_arr_1 4 -1064739199
SV:fxd_arr_1 5 -2071669239
SV:fxd_arr_1 6 -1309649309
SV:fxd_arr_1 7 112818957
SV:fxd_arr_1 8 1189058957

Passing fxd_arr_1 to C

Array Left 8, Array Right 3

C: 3 303379748
C: 4 -1064739199
C: 5 -2071669239
C: 6 -1309649309
C: 7 112818957
C: 8 1189058957

SV: fxd_arr_2 1 -1295874971
SV: fxd_arr_2 2 -1992863214
SV: fxd_arr_2 3 15983361
SV: fxd_arr_2 4 114806029
SV: fxd_arr_2 5 992211318
SV: fxd_arr_2 6 512609597
SV: fxd_arr_2 7 1993627629
SV: fxd_arr_2 8 1177417612
SV: fxd_arr_2 9 2097015289
SV: fxd_arr_2 10 -482925370
SV: fxd_arr_2 11 -487095099
SV: fxd_arr_2 12 -720121174

Passing fxd_arr_2 to C

Array Left 12, Array Right 1

C: 1 -1295874971
C: 2 -1992863214
C: 3 15983361
C: 4 114806029
C: 5 992211318
C: 6 512609597
C: 7 1993627629
C: 8 1177417612
C: 9 2097015289
C: 10 -482925370
C: 11 -487095099
C: 12 -720121174

Packed Arrays

A packed array is represented as an array of one or more elements (of type svBitVecVal for 2-state values and svLogicVecVal for 4-state values), each element representing a group of 32 bits.

CODE:SV_file.sv

program main;

import "DPI-C" function void get_nums(output logic [15:0] nums[10]);

logic [15:0] nums[10];

initial begin
get_nums(nums);
foreach (nums[i]) $display(i,nums[i]);
end
endprogram

CODE:C_file.c


```css
#include "svdpi.h"

void fib(svLogicVecVal nums[10]) {
int i;
for (i=0; i<10; i++) {
nums[i] = i ;
}
}

### RESULTS:

```c
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9

Linearized And Normalized

Arrays use normalized ranges for the packed [n-1:0] and the unpacked part [0:n-1]

For example, if SV code defines an array as follows:

logic [2:3][1:3][2:0] b [1:10][31:0];

Then C code would see it as defined like this:

logic [17:0] b [0:9][0:31];

Array Querying Functions

svLeft() shall return the left bound (MSB) of the dimension.

svRight() shall return the right bound (LSB) of the dimension.

svLow() shall return the minimum of left index and right index of the dimension.

svHigh() shall return the maximum of left index and right index of the dimension.

svIncrement() shall return 1 if left index is greater than or equal to right index and -1 if left index is less than right index.

svLength() shall return the number of elements in the dimension, which is equivalent to high index - low index + 1.

svDimensions() shell return total number of dimensions in the array

CODE: SV_file.sv

program main;

int fxd_arr_1[8:3];
int fxd_arr_2[1:13];

import "DPI-C" context function void pass_array(input int dyn_arr[] );

initial
begin
$display("\n Passing fxd_arr_1 to C \n");
pass_array( fxd_arr_1 );
$display("\n Passing fxd_arr_2 to C \n");
pass_array( fxd_arr_2 );
end

endprogram

CODE: C_file.c

#include <stdio.h>
#include <svdpi.h>

void pass_array(const svOpenArrayHandle dyn_arr ) {
printf("Array Pointer is %x \n", svGetArrayPtr(dyn_arr) );
printf(" Lower index %d \n", svLow(dyn_arr,1));
printf(" Higher index %d \n", svHigh(dyn_arr, 1) );
printf(" Left index %d \n", svLeft(dyn_arr,1), svRight(dyn_arr, 1) );
printf(" Right index %d \n", svRight(dyn_arr, 1) );
printf(" Length of array %d \n", svLength(dyn_arr,1) );
printf(" Incremental %d \n",svIncrement(dyn_arr,1));
printf("Dimentions of Array %d \n", svDimensions(dyn_arr ));
printf("Size of Array in bytes %d \n", svSizeOfArray(dyn_arr) );
}

RESULTS:

Passing fxd_arr_1 to C

Array Pointer is 80fdc58
Lower index 3
Higher index 8
Left index 8
Right index 3
Length of array 6
Incremental 1
Dimentions of Array 1
Size of Array in bytes 24

Passing fxd_arr_2 to C

Array Pointer is 80fdc70
Lower index 1
Higher index 13
Left index 1
Right index 13
Length of array 13
Incremental -1
Dimentions of Array 1
Size of Array in bytes 52
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Systemverilog Open Arrays 的相关文章

  • React中高阶组件、Render props、hooks

    这三者都是react中解决代码复用的主要方式 1 HOC 在官方解释中 高阶组件 HOC 是 React 中复用组件逻辑的一种高级技巧 HOC自身不是 React API 的一部分 它是一种基于 React 的组合特性而形成的一种设计模式
  • CloudCompare二次开发(1)——获取指定高程的所有点

    目录 一 源码编译 二 制作流程 三 结果展示 本文由CSDN点云侠原创 原文链接 爬虫网站自重 一 源码编译 1 WIN10系统下VS2019编译CloudCompare2 12 4 二 制作流程 1 找到源码中的插件例子 主要支持三种插
  • 【python总结】python学习框架梳理

    目录 基础 注释与变量名等基本规则 关键字 操作符 数字 流程控制 序列 文本序列 字符串 二进制序列 字节 列表 元组 映射 字典 集合 函数 面向对象编程 错误和异常 模块 数据结构与算法 数组 字符串 链表 二分查找 排序 栈 队列
  • 线段树Segment tree(1):单点修改,区间查询

    问题描述 给定数列a 1 a 2 a N 依次进行Q次操作 操作有两类 1 i x 给定i x 将a i 加上x 2 l r 给定i x 求 i l r
  • 树莓派安装卸载软件命令apt-get

    apt get命令用法 1 安装软件 apt get install 软件名 2 卸载软件但不删除配置 apt get remove 软件名 3 卸载软件并且删除相关配置 apt get purge 软件名 4 更新数据库 apt get
  • Ubuntu操作遇到的报错解决方法汇总(持续更新)

    1 在anaconda中创建了虚拟环境并安装了pytorch 但是编译过程中仍然报没有torch的错误 CMake Error at crawler crane crane tutorials CMakeLists txt 23 find
  • 微信小程序退出重新进入时跳转特定页面

    微信小程序退出时会记录当前页面的状态 短时间内再次进入会显示退出前的状态 解决方案 在app js文件中添加onHide方法 onHide方法监听小程序切后台 在app js文件中使用会在每次程序退出时调用 onLaunch functio
  • springboot常用注解详解

    在springboot中 经常会用到一些注解 它们各自代表着什么呢 在这个属于我们的节日里 快来了解一下吧 1 SpringBootApplication 一般不会主动去使用它 但是要知道它是一个组合注解 Configuration Ena
  • 61.(前端)权限管理实现——从数据库中获取数据展示在前端,使用插槽和Tag标签美化数据展示

    1 概述 本次内容 主要是对用户权限列表进行展示 2 基本流程 在component文件夹下创建power文件夹 并在power文件夹下创建Menu vue 在Menu vue任意编写显示内容 用于测试 去router index js挂载
  • Uniapp零基础开发学习笔记(9) -媒体组件音视频摄像头等的练习使用

    Uniapp零基础开发学习笔记 9 媒体组件音视频摄像头等的练习使用 基础组件部分 最后就只剩余媒体组件以及地图 和画布Canvas 以及浏览器组件web view 此次先看看媒体组件 重点学习前面几个 链接如下 https uniapp
  • r语言写九九乘法表并保存为txt文件

    r语言写九九乘法表并保存为txt文件 代码 for i in 1 9 for j in 1 i cat j x i i j t file 九九乘法表 txt append TRUE cat n file 九九乘法表 txt append T
  • YOLOv4 tensorrt推理 python版【附代码】

    学了几天的tensorRT 又经过了几天的努力终于实现了YOLOv4 tensorRT推理 这篇文章将把这些成果开源出来 供大家免费使用 YOLOv4代码我采用的是b站up主Bubbliiiing 相信大家应该都比较熟悉这位大佬 关于trt
  • Java实验三 基于GUI的网络通信程序设计【代码构建逻辑】【双向通信】【超多细节优化!!】

    写在前面 这次实验代码的构建主要是更加熟练的运用socket网络编程 文件输入输出流 GUI设计 容器的使用 多线程的运用等等多方面的知识 是综合类题型 做完受益身心的类型 题目如下 编写程序完成以下功能 1 设计一个基于GUI的客户 服务
  • 各种源码下载地址(目前只有ffmpeg和nginx,libcurl,RapidJSON 文档)

    各种源码下载地址 目前只有ffmpeg和nginx libcurl RapidJSON 文档 ffmpeg源码下载地址 http ffmpeg org download html releases nginx源码下载地址 http hg n
  • 【C++】_5.模板

    目录 1 泛型编程 2 函数模板 2 1 概念 2 2 函数模板格式 2 3 函数模板原理 2 4 函数模板的实例化 2 5 函数模板的匹配原则 3 类模板 4 非类型模板参数 5 模板的特化 5 1 概念 5 2 函数模板特化 5 3 类
  • C规范编辑笔记(四)

    往期文章 C规范编辑笔记 一 C规范编辑笔记 二 C规范编辑笔记 三 正文 大家好 今天来给大家分享一下C规范编辑笔记第四篇 距离我们C规范编辑笔记第三篇也快过去了一个月 这次继续分享一波 1 以大写形式声明常量 为避免误解 常量值必须根据
  • lyapunov直接法

    文章目录 定义6 6 Lyapunov第一定理 Lyapunov第二定理 用于刻画渐进稳定 内积分析 定义6 6 Lyapunov第一定理 假设 A C A subset C A C是闭的 如果存在A的邻域D和满足下面两条件的连续函数
  • Queue队列简介说明

    转自 Queue队列简介说明 下文笔者讲述Queue队列的简介说明 如下所示 Queue队列简介 Queue也是Java集合框架中定义的一种接口 直接继承自 Collection 接口 除了基本的Collection接口规定测操作外 Que
  • 精品Nodejs实现的“音乐盒”小程序的设计与实现-音乐播放器歌曲

    含文档 PPT 源码等 精品Nodejs实现的 音乐盒 小程序的设计与实现 包运行成功 该项目含有源码 文档 PPT 配套开发软件 软件安装教程 项目发布教程 包运行成功 软件开发环境及开发工具 操作系统 Windows 10 Window
  • 计算机提示vcruntime140.dll丢失的解决方法,多种修复教程分享

    vcruntime140 dll是一个非常重要的动态链接库文件 它包含了许多运行时的函数和类 然而 有时候我们可能会遇到vcruntime140 dll无法继续执行代码的问题 这会给我们带来很大的困扰 那么 这个问题是什么原因导致的呢 又应

随机推荐

  • 超详细图文保姆级教程:App开发新手入门(一)

    重要 想学习APP开发的新手同学 建议访问我发布的最新版本的文章教程 2023最新 超详细图文保姆级教程 App开发新手入门 1 关于APICloud PS 本段内容主要目的是去除官方语音描述 用通俗的语言来简单介绍一下APICloud 方
  • SpringBoot在配置拦截器后,拦截器不起作用

    按照网上诸多博客配置了SpringBoot拦截器 最终却惊奇的发现 拦截器不起作用 百般查找原因 sackoverflower google baidu 均不能解决问题 后来经过 ComponentScan basePackages com
  • 给html form添加formdata,JavaScript FormData的详细介绍及使用

    FormData的详细介绍及使用请点击此处 那里对FormData的方法和事件已经表述的非常清楚 这里就不再浪费时间在介绍一遍了 本文主要针对FormData对象的使用以及异步文件上传进行详细的说明 FormData对象可以让我们组织一个使
  • elementUI自定义查看详情组件

    elementUI没有查看详情组件 每次都要自己写详情比较不方便 详情组件效果图 可以放弹出框 放页面当中 声明seeData 要展示的顺序及类型 类型type的为selectList 将自动渲染成对应的数据 对于复杂的内容可以使用slot
  • 【OpenAI 多模态预训练】VideoGPT?微软透露GPT-4或将在下周发布

    多模态预训练 VideoGPT 微软透露GPT 4或将在下周发布 先让我猜个名字 VideoGPT 太绝了 看完ChatGPT之后就感觉OpenAI正在做多模态的预训练语言模型 万万没想到来的这么快 据介绍 GPT 4或将为多模态大模型 将
  • 服务器做安全检查的要点

    1 有没有将sql 2000 mysql运行在普通用户权限下 这是最重要的一点 大部分的入侵都是利用数据库的权限进行的 2 关闭所有没用的端口 3 所有盘的根目录都不能有everyone users 的读与运行权限 4 加强PHP的安全 5
  • linux文件系统出错:Read-only file system

    问题 root xx opt gopath src github com hyperledger fabric mkdir p testtt mkdir cannot create directory testtt Read only fi
  • python——换披萨

    描述 披萨的尺寸一般分6 15英寸几种 一英寸约等于2 54厘米 将英寸直径乘以2 54即可得出以厘米为单位的直径 例如6寸披萨 即为6乘以2 54 得出结果为15 24厘米 然而披萨加工时并不是严格到毫米不差的 考虑到加工过程及无效的披萨
  • 6G内生AI架构及AI大模型

    6G作为下一代移动通信技术 正在成为全球范围内通信行业的重要研究热点 6G内生AI架构 将人工智能与无线网络紧密结合 有望为未来的通信带来革命性的改变 关注公众号 互联互通社区 回复 AI139 获取全部报告内容 内生AI架构是一种自我学习
  • 删除计算机的用户凭据,windows凭据怎么填写? 电脑添加删除Windows凭据的技巧

    windows凭证的作用 系统的凭据管理器其实是一个系统组件 能够帮助完成本地访问时的认证工作 日常工作学习中 我们会经常使用电脑 有时候我们会频繁登录某个服务器 每次都要输入用户们和密码 显得很麻烦 一劳永逸的办法就是添加windows凭
  • TypeScript学习(3:项目中的使用以及配置)

    环境搭建 初始化项目 npm init y 安装你所需的依赖 如 npm i D webpack webpack cli typescript ts loader cnpm i D babel core babel core babel p
  • Vuforia SDK+unity开发遇见的问题

    一 unity无法加载图片 加载图片的基本步骤可自行上网百度 当你使用版本比较高的unity时 你发现进行到下面这个步骤时 ImageTarget依然无法加载出图片 还是一片空白 这时点击Assets gt Editor gt QCAR g
  • 一起学习以太坊

    1 原 理 以太坊数字签名和比特币的关系 以太坊数字签名 几乎完全沿用了比特币的数字签名算法ECDSA secp256k1 只有哈希的生成方式不一样 这个之后会说 ECDSA secp256k1是一种非对称加密算法 什么是ECDSA 以太坊
  • vue登录界面,注册界面,信息展示界面

    登录
  • 自制 Creator 地图编辑器,让地图设计变得更灵活

    游戏地图是游戏设计中重要且难的一个环节 如果说制作一款游戏是在创造一个新世界的话 那么地图就是这个世界最基础的构成单元 ID 为 隐形人 的开发者 在 Cocos 论坛中分享了一款他自己钻研制作的游戏地图设计软件 名为闪影 从闪影的软件介绍
  • GNSS原理及技术(二)——卫星定位原理

    本篇以GPS为例介绍卫星定位原理 GPS技术原理 卫星信号 一 GPS的信号结构 每个GPS卫星播发一组信号 每组信号包括两个不同频率的载波信号 L1和L2 两个不同的测距码信号 C A码调制在L1载波上 P码或Y码同时调制在L1及L2载波
  • ngModel和formControlName处理表单控件

    ngModel 和 formControlName 不能同时在同一个表单控件上使用 二者都用于在 Angular 中处理表单控件的值 但是它们的底层实现方式不同 ngModel 是 Angular 提供的双向数据绑定指令 它可以将表单控件的
  • Latex算法撰写

    20210414 1 初步使用 本篇文章中记录一些在latex中使用algoritm2e出现的问题 平时需要的东西也不多 仅仅关注与自己写作过程中相关的内容 对于基础的使用可以参考文章 1 2 2 进一步使用 在能够利用 1 2 中的方法创
  • 安卓登录界面项目展示

    1 判断账号密码是否为空 错误 登陆成功 if else语句 2 跳转界面 新建一个Intent 当前Activity SecondActivity 显示Intent Intent intent new Intent intent setC
  • Systemverilog Open Arrays

    原文链接 http www testbench in DP 08 ARRAYS html The size of the packed dimension the unpacked dimension or both dimensions