systemverilog学习 --- DPI和结构体(语法完结)

2023-05-16

DPI

systemverilog提供DPI(Direct Programming Interface),这是一个直接编程接口,可以使得SV和其它的外部语言进行交互,外部的语言包括C,C++,systemC。
其它语言的实现方法,可以在SV中调用,称为import method。而其它语言执行SV实现的方法,成为export method。故导入导出都是针对SV而言。SV可以和其他的语言通过参数的传递和返回来传输数据。
import declaration的用法如下:

import “DPI-C” function int calc_parity(input int a);

export declaration的用法如下:

export “DPI” my_function= function myfunction
// SystemVerilog File
module  dpi_tb;

    import "DPI-C" function void c_method();
    
    initial begin
        $display("Before calling C Method");
        c_method();
        $display("After calling C Method");
    end

endmodule
#include <stdio.h>
#include <stdlib.h>

extern  void c_method()
{
    printf("    Hello Wordld....!\n");
}

执行结果如下,
在这里插入图片描述
如果想在C中运行SV,代码修改如下:
在这里插入图片描述
执行结果如下:
在这里插入图片描述

结构体

sv提供的结构体可以把多种类型的数据组合在一起,这样就可以把他们看成一个整体。其语法如下,使用typedef可以更好的声明结构体变量,其中packed是可以选择的。

typedef struct packed{
	type_1 var_1;
	type_2 var_2;
	type_3 var_3;
}	struct_name;
module struct_tb;

    typedef struct packed{
        bit [7:0]   addr    ;
        bit         valid   ;
        bit [31:0]  data    ;
    } mem_pkt;

    mem_pkt pkt;
    initial begin
        //initializing struct
        pkt = '{8'h6, 1'b1, 32'hC001_0FAB};
        $display("pkt = %p", pkt);

        //Change the struct field value
        pkt.addr = 8'h8;
        $display("pkt = %p", pkt);

        //Change the struct field value
        pkt.data = 32'hFFF0_0FFF;
        $display("pkt = %p", pkt);
    end

endmodule

在上面的例子中,结构体的初始化采用单引号加大括号实现的,访问结构体的变量可以通过.操作符,若想打印整个结构体,可以通过%p。执行结果如下:
在这里插入图片描述
同时是组织数据,数组是相同类型的数据集合,而struct可以包含不同的类型。

enum

将变量赋值给枚举类型是非法的,需要进行类型转换。
在这里插入图片描述
其执行结果如下:(报错了)
在这里插入图片描述
解决办法是我们可以通过$cast函数把常数4转化位枚举变量。
在这里插入图片描述
执行结果如下:
在这里插入图片描述
需要指出的是枚举类型还可以指定logic,bit和int类型,我们只需在enum后增加修饰就可以。

在这里插入图片描述

语法完结

systemverilog的语法学习到这里结束了,后期会多多阅读学习别人写的SV代码。加油,星夜赶路人!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

systemverilog学习 --- DPI和结构体(语法完结) 的相关文章

  • 如何改变变量赋值的较低索引?

    我想对具有较低索引的变量进行赋值 这就是我想做的 int i logic 63 0 data i someCalculatedNumber data 63 i 8 h0 我知道这不会编译 完成这项任务的最佳方法是什么 如果您希望将 LSB
  • System.Drawing.Graphics.DpiX 始终返回 96

    我有 vb net winform 应用程序 自动缩放模式 dpi 自动缩放 假 自动调整大小 true 更改 DPI 设置后我已退出 我也尝试过重新启动机器 Using g As Graphics form CreateGraphics
  • 过渡盖箱未撞击

    我正在从数据总线采样值 因为预期值是不连续的 因此容器没有达到转换覆盖范围 虽然垃圾箱在没有过渡的情况下独立运行 示例 我们想要涵盖地址 W 的值的转换 A W X W Z D 7 0 8 0 covergroup cg with func
  • 如何获取高DPI系统下的真实屏幕分辨率?

    因此 Delphi 程序不支持 DPI 直到最近我需要真实的屏幕分辨率时 这才让我感到困扰 当 更容易阅读屏幕上的内容 为 150 时 Screen Width 报告错误的分辨率 在具有高 DPI 的计算机中 一些建议是使应用程序具有高 D
  • Visual Studio 和 DPI 问题

    我正在 Windows Vista 上使用 VS2008 开发 Windows 窗体应用程序 前几天我尝试在 Windows XP 上运行我的应用程序 GUI 上的所有内容都一团糟 我意识到我在 Windows Vista 上使用 120
  • 带有always_comb结构的Systemverilog问题

    我对这个 SystemVerilog 代码有疑问 这是代码 module mult multiplicand multiplier Product clk clear Startm endm input 31 0 multiplicand
  • Python/PyQt4:如何找到显示器的尺寸(以英寸为单位)?

    我试图找到显示器的水平宽度 以英寸或厘米为单位 不是像素 来制作一个小型 标尺 程序 DPI 也可以工作 我正在使用 PyQt4 尝试使用 QDesktopWidget 的 width 和 height 分别获取宽度和高度 类参考位于QDe
  • SetProcessDpiAwareness 没有效果

    我一直在尝试禁用 ClickOnce 应用程序上的 DPI 感知 我很快发现 不可能在清单中指定它 因为 ClickOnce 不支持清单文件中的 asm v3 我发现的下一个选项是调用新的 Windows 函数设置进程Dpi感知 https
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 高 DPI 显示器上 div 背景和边框之间的间隙变化为 0-1 像素

    这是我在 CSS 中创建的按钮的一个单独示例 它具有带渐变的 1px 边框和背景渐变 背景渐变被实现为伪元素 以允许其不透明度在悬停时褪色 https codepen io anon pen wbYoeo editors 1100 http
  • minSdkVersion 1.5 的问题

    我们遇到与清单文件和属性 android minSdkVersion 相关的问题 问题是 如果我们的平台是 2 0 并且我们使用属性 android minSdkVersion 3 3 sdk 1 5 则图形会损坏 具体来说 应用程序的分辨
  • C 中对“main”的未定义引用

    您好 我在使用 gcc 编译 c 代码时遇到以下错误 usr lib gcc x86 64 redhat linux 4 4 6 lib64 crt1 o In function start text 0x20 undefined refe
  • Verilog:添加寄存器的各个位(组合逻辑,寄存器宽度可参数化)

    我正在尝试想出一种方法来添加寄存器的各个位 例如 if regA 111000 then regB 3 位的总和regA 1 Verilog或SystemVerilog中是否有可以直接使用的可综合函数 运算符来执行此操作 如果不是 那么问题
  • WPF Web 浏览器控制和 DPI 缩放

    我正在使用使用 Web 浏览器控件的 WPF 应用程序 并且在高 DPI 缩放方面遇到问题 看起来 Web 浏览器控件没有正确遵守系统的 DPI 设置 而 WPF 应用程序的其余部分则正确缩放 UI 这意味着在更高的比例级别上 WPF 界面
  • 时间:2019-03-07 标签:c#PinvokeforGetWindowDpiAwarenessContext

    我试图在 C 应用程序中实现 GetWindowDpiAwarenessContext 但没有成功 相关头文件是 windef h DECLARE HANDLE DPI AWARENESS CONTEXT typedef enum DPI
  • WPF DPI 问题

    我开发了一个应用程序 在我的计算机上看起来很棒 但当我将其安装到具有不同分辨率和 DPI 设置的其他计算机上时 它看起来很糟糕 控件相互重叠 这真是太痛苦了 有人对如何避免这种情况有什么建议吗 Windows 无法知道屏幕的本机 DPI 每
  • 自动任务和静态任务有什么区别,为什么我们不能通过引用传递静态任务

    静态任务和自动任务有什么区别 program class ref int index value class holding values int ass array task assign value int value int inde
  • 如何绘制独立于 DPI 的 GDI + 文本

    我正在使用 GDI 绘制文本 我最近注意到 当 DPI 更改时 该文本会自动缩放 有没有办法让GDI 文本绘制独立于DPI 例如 我想绘制最大 20 像素的文本 无论 DPI 是多少 是否可以 这个怎么做 下面是示例代码 我想以恒定的大小绘
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • reg 声明中的位顺序

    如果我需要使用 4 个 8 位数字 我会声明以下 reg reg 7 0 numbers 3 0 我对第一个和第二个声明 7 0 和 3 0 之间的区别感到很困惑 他们应该按什么顺序来 第一个是保留数字的大小 而第二个是保留数字的数量 还是

随机推荐

  • WSL2 Linux搭建xfce4桌面和使用xrdp远程连接

    基于Ubuntu20 04测试 1 安装 span class token function sudo span apt span class token function install span xfce4 xrdp y 如果遇到下面页
  • 修改 WSL2 可用内存大小和交换分区大小

    WSL2默认可以使用的内存大小为主机的80 对于Linux而言即使装了桌面 一般的开发也没必要给这么多内存 分多了 反而有可能卡主机的Windows 操作 1 打开Windows资源管理器 地址栏输入 UserProfile 回车 在该目录
  • C++代码: Linux下获取基本设备信息

    测试环境 基于C 43 43 20构建测试 g 43 43 10 2 1 CMakeLists txt 设置用于构建该项目的最低cmake版本 cmake minimum required VERSION 3 1 设置项目名称和编程语言 p
  • VMware虚拟机Ubuntu无法使用摄像头的问题

    注 之前我在使用Ubuntu的虚拟机中 搞OpenCV开发 需要使用摄像头 遇到了摄像头无法使用的问题 后面折腾了很久才发现 USB3 1 兼容设置的问题 刚才又用新的虚拟机配置环境 又遇到了之前的问题 因此做个记录 1 摄像头未连接到虚拟
  • 一文搞懂光纤的方方面面

    光纤 一直以为光纤模块会非常贵 xff0c 呃 xff0c 只能说没有想象中的贵 xff0c 相比网线还是贵上不少 一个常见的光纤系统通常会包括收发器 xff0c 光电转换器还有光纤收发器 通常简单的入门级一套下来可能也在200 300左右
  • msys2配置cmake构建环境

    注 本人主要在Linux下搞开发 使用msys2是为了方便移植部分程序到Windows下 做以下纪录方便环境配置 1 换源 span class token comment 更新本地软件数据库 span pacman Sy 2 安装开发工具
  • Windows 10安装 WSL2 (Ubuntu 20.04)

    条件 对于 x64 系统 xff1a 版本 1903 或更高版本 xff0c 采用 内部版本 18362 或更高版本 对于 ARM64 系统 xff1a 版本 2004 或更高版本 xff0c 采用 内部版本 19041 或更高版本 低于
  • Ubuntu 20.04 server 切换中文语言

    1 安装区域设置 locales Ubuntu 一般是预装了的 Kali Linux 和 Debian可能没有 就需要安装 更新索引 sudo apt update span class token comment 安装locales sp
  • 全新安装的Termux配置Ubuntu环境

    基于 Termux 0 101 测试 换国内源 默认官方源在国外速度慢 有梯子的话也可以不换 这里换清华源为例 更多 执行命令 span class token function sed span i span class token st
  • 1g 路由器使用

    前言 xff08 1 xff09 首次使用以及断网后配置都可参看本文 xff08 2 xff09 简谈 xff0c 创翼实际登录拨号的账号其实并不是 电话 64 cqit xff0c 而是在这个账号前面根据拨号时间生成一个随机字符串 xff
  • 基于随机森林的手写数字识别 (OpenCV)

    OpenCV 4 5 1 C 43 43 20 Ubuntu 20 04 素材 来源 基于 K近邻博文 中原5000个手写数字得到的按行排列的手写数字数据以及对应行的标签 保存为图片后直接放到这里使用 避免重复数据处理 右键图片另存为 行数
  • 使用支持向量机分类 (OpenCV)

    OpenCV 4 5 1 C 43 43 20 Ubuntu 20 04 素材 像素点和分类标签 组态档 设置用于构建该项目的最低cmake版本 cmake minimum required VERSION 3 1 设置项目名称和编程语言
  • 退出该博客平台声明

    试用c s d n快三个月了 xff0c 最不满的就是审核的问题 1 我自己写的东西因为有误修改了一下再提交就说我的博文已有相似的 xff0c 审核不通过 xff0c 不止一次 2 反而好奇有人抄了我的却发出去了 这应该是最后一次在这里发文
  • CMake Error at CMakeLists.txt:11 (find_package): Found package configuration file: /home/luw

    参考资料 xff1a https www cnblogs com newneul p 8364924 html CMake Error at CMakeLists txt 11 find package Found package conf
  • LPC1768学习笔记

    LPC1768学习笔记 xff1a IAP升级 1 需求 xff1a 通过串口给主机升级 xff0c 主机的通信串口与升级串口相同 2 方法 xff1a 要完成APP与IAP程序的切换判断 xff0c 我们需要一个flag update单独
  • 手把手教你如何实现一个简单的数据加密算法

    0 前言 之前写过一篇关于MD5摘要算法的文章 xff0c 很多老铁说能否出一篇关于加密的文章吗 xff1f C语言实现MD5 xff0c 竟如此简单 xff01 一口君的字典里没有 34 不行 34 这两个字 xff01 必须安排 xff
  • python压缩包安装方式

    下载压缩包 从python官网下载embed package xff08 嵌入式包 xff09 解压并进入到解压目录 xff0c 看到python exe为止 下载pip依赖 下载https bootstrap pypa io get pi
  • setup写在script标签中

    快捷键 vb3s 父组件 xff1a span class token tag span class token tag span class token punctuation lt span template span span cla
  • Ubuntu20.04开启SSH连接filezilla的教程【仅供参考】

    前提 xff1a 本人初学者 xff0c 想用filezilla xff08 去官网下载即可 xff09 实现Ubuntu与windows之间的文件传输 xff0c 没想到在开启SSH时遇到了好多坑 xff0c 最后虽解决了问题 xff0c
  • systemverilog学习 --- DPI和结构体(语法完结)

    DPI systemverilog提供DPI xff08 Direct Programming Interface xff09 xff0c 这是一个直接编程接口 xff0c 可以使得SV和其它的外部语言进行交互 xff0c 外部的语言包括C