本文首发于极术社区,授权转载知乎

Modelsim 重度使用者的故事:验证设计,软件与硬件的故事​aijishu.com

在开发 Verilog IP 的过程中,比如图像处理或者密码学的 IP 。验证功能总是很重要的一步,也很是伤脑筋的。

这些 IP 最靠谱的验证方法往往是和软件结果进行对比。比如图像处理 IP 和 OpenCV 或者 Matlab 结果对比。密码学 IP 和事实上的标准软件 Openssl 对比。问题出在怎么对比上,下面欢迎我朋友的现身说法。

I

记得那是一次面试 ...
面试官:那你是怎么在 Modelsim 上验证你的 SM3 算法 IP 的呢?
朋友:和软件结果对比。具体怎么对比?还能怎么对比,一个一个眼睛看呗。
面试官:。。。你视力真好(我看你是吃饱了撑的 ^_^)

II

后来我的朋友机智了一些,他使用 $display 将仿真中的结果打印出来,比如这样

integer 

然后把软件结果也打印出来,打开 BeyondCompare 一比,成了。

III

再后来,他觉得这样太麻烦了,我们为什么不能在 Modelsim 里直接调用 C 语言呢?
好,搜索引擎走起,他发现了一个叫做 DPI 的东西,好像比 VPI ,PLI 都看起来比较方便的样子。他找到了一些文章:

modelsim+win环境下systemverilog调用c函数 - zhwh - 博客园​www.cnblogs.comSystemVerilog 利用DPI调用其他语言​blog.csdn.net

怎样在systemverilog DPI中调用SV,C与C++(一)​blog.csdn.net

但它们好像都语焉不详,后来他发现 Modelsim 安装时自带的手册其实写的很清楚:
1.在开始菜单找到手册↓

2.打开手册,选择 User Manul,我们就可以找到 Verilog Interface to C 的章节

我 Verilog 共有 3 种访问 C 函数的接口,我们来看第三种 System Verilog DPI,因为从作者前期调研来看,DPI 似乎使用最为简单。
而且 SV 也兼容 Verilog,Modelsim 也支持 SV,所以直接用 SV 好了(但是 ISE 不支持 SV)
我们打开左栏中的 DPI Example,手册提供了一个简单的例子
hello_c.c:

#include 

hello.v:

module 

分别是一个 C 语言文件和 v 文件(所以啊,Verilog 也可以用咯)以及操作过程。在安装目录下还有其他例子。

但我发现例子其实是在 *(D:modeltech64_10.2 你的安装目录)examplessystemverilogdpi* 路径下。

分析一下

这里例子里演示了,Verilog 和 C 语言 export 和 import 的交互接口,我们从 Verilog 的角度来看:

import C 语言函数

使用 import ,以 context task 的形式导入了 C 语言的函数 c_task ,并定义了这个 task (实际上的 C 语言函数),定义了 input 以及 output 端口

import "DPI-C" context task c_task(input int i, output int o);

在调用时,自然使用 verilog task 的形式:

initialbeginc_task(1, ret);  // Call the c task named 'c_task()'end

在 C 语言中 c_task 函数的定义,打印字符串到控制台

int c_task(int i, int *o)
{printf("Hello from c_task()n");//....return(0); /* Return success (required by tasks) */
}

除了导入为 task 外,C 语言函数还可以 import 为 Verilog 函数

import "DPI-C" function void c_print(int a);

Tiny Lab

由于时间关系,我没有跑官方的例子,我准备了一个只有 import ,并将参数从 Verilog 传至 C 的小实验。

  • 首先,准备 C 语言和 SV 源文件,简单地实现传参打印功能

    • C语言
//hellow.c

  • SV
//dvi_test_demo.sv

新建一个目录,把两个文件置于该目录下,比如:D:pro_sv_dvi_test

  • 直接打开 Modelsim,而无需从 FPGA 的工具中打开(建议直接打开)

切换至工作目录,注意使用 /

cd D:/pro_sv_dvi_test

编译 c 和 sv 代码

vlib work
vlog ./dvi_test_demo.sv
vlog ./hellow.c

启动仿真,这里的 dvi_demo 是 SV 中的顶层模块名

vsim dvi_demo
restart -f;run 1us

注意这里要 run 一下,就可以看到打印了,成功的调用了 c 语言函数,我们传入的参数正是 1

hw 1!

好了,收工之前说几句

  • 如果修改了 SV,那么重新 vlog ./dvi_test_demo.sv 文件,然后 restart -f;run 1us 即可
  • 但如果修改了 C 文件,那么建议除了 vlog ./hellow.c之外,再 vsim dvi_demo;restart -f;run 1us 会比较好,如果出现无打印的情况,建议多试几次,我也有遇到这个问题,大家可以留言交流。
  • 关于环境:win10
  • 关于版本:10.2 和 10.5 都试没什么问题

另外,说下我知道可能的问题,trouble shooting 一下

  • 未安装 gcc,如果在 Modelsim 控制台上 gcc -v 没有正确的输出,则需要安装 gcc。
  • vsim 后出现一些错误,指向一个曾经的路径。建议删除原有的 work 库后重试

modelsim安装_Modelsim 重度使用者的故事:验证设计,软件与硬件的故事相关推荐

  1. 一个谷粉和3年的Google Reader重度使用者的碎碎念

    2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...

  2. 入门数字集成电路设计系列(一)——Modelsim安装及破解过程记录

    入门数字集成电路设计系列(一) #Modelsim破解教程(记录) Modelsim是由 Mentor Graphics 公司开发的软件,它是世界最优秀的Verilog HDL语言仿真工具,是FPGA ...

  3. Modelsim安装以及和Quartus2联合仿真

    首先感谢一下这篇文章的主人:是超超啊! https://blog.csdn.net/weixin_43862765/article/details/99305902 注意:本文仅供学习参考,不做商业用 ...

  4. 安装server2008后,提示“Windows无法验证此文件的数字签名”

    安装server2008后,提示"Windows无法验证此文件的数字签名" 重启服务器,按F8,禁用签名验证,进入系统后安装KB 3033929的补丁 下载链接:https://w ...

  5. ROS ubuntu18.04 工控机安装(轮趣科技 )验证通过

    ROS ubuntu18.04 工控机安装(轮趣科技 )验证通过 #先安装 ubuntu18.04 #参考一下文档安装 ROS Melodic http://wiki.ros.org/cn/melod ...

  6. Linux安装及管理程序——RPM和yum学会装软件超简单

    Linux安装及管理程序--RPM和yum学会装软件超简单 一.linux应用程序基础 应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包封装类型 二.RPM包管理工具 RPM软件包管理器 ...

  7. ADI官方源码快速搭建demo工程验证设计的正确性

    目录 1 ADI官方demo工程设计简介 2  ADI官方HDL源码介绍 2.1  HDL源码用户指导书:ADI Reference Designs HDL User Guide 2.2  C源代码下 ...

  8. 火绒规则 禁止所有软件的安装_十大机械设计软件对比,附所有软件安装资料...

    "UG.Pro/E与CATIA三分天下" "SW才是最方便易用的软件" --    机械设计,最离不开的就是各种软件,设计决定了实际产品的性能,因此需要采用软件 ...

  9. Ubuntu 11.10 图形(图解)安装教程、基本设置、网络设置、软件源、硬件驱动

    Ubuntu 11.10 (Oneiric Ocelot )图形(图解)安装教程.基本设置.网络设置.软件源.语言与输入法.硬件驱动.Unity 3D.Gnome3.Ubuntu文档.制作USB Li ...

最新文章

  1. 深入理解Java:SimpleDateFormat安全的时间格式化
  2. 将整个ASCII文件读入C ++ std :: string [重复]
  3. C++中指针*与指针引用*的区别说明
  4. STP文件服务器,综合监控stp服务器
  5. Python学习---Django的request扩展[获取用户设备信息]
  6. curl post https_Linux命令cURL详解,并实现文件定时上传到ftp服务器的程序
  7. maven项目在打war包时出现非法字符: '\ufeff' 解决方案
  8. SVO: Fast Semi-Direct Monocular Visual Odometry
  9. 回发后动态设置的标题丢失
  10. 【转】如何理解NPV与IRR的区别??
  11. 全国各地网吧网管技术QQ群
  12. 有人把李白杜甫一生的旅行足迹做了地图,发现了大事!
  13. CD Linux启动盘,CDlinux硬盘启动制作方法。CDlinux硬盘怎样启动制作?
  14. 面试官没想到我对redis数据结构这么了解,直接给offer
  15. 重庆计算机财经学院,重庆财经学院
  16. 将Twitter4j与Scala结合使用以执行用户操作
  17. 光明区支持现代服务业高质量发展若干措施(征求意见稿)
  18. 如何使用UCI数据集
  19. aliyun mysql 端口_阿里云怎么查看数据库端口怎么设置
  20. Windows操作系统发展简史【图】

热门文章

  1. 【C/C++】scanf,printf 函数
  2. 百度飞桨的乌镇时刻:拿下的至高荣誉和背后的绝对实力
  3. csol怎么设置屏蔽服务器信息,谁知道反恐精英OL的控制台怎么调? -反恐精英锤子宏设置...
  4. C# Excel导出超出65536行报错
  5. 艺术签名微信小程序源码/支持微信流量主
  6. c语言输入一批正整数 求其中的偶数和,编程,输入一批整数,先求出其中的偶数和及奇数和,然后输出偶数和与奇数和的差...
  7. 苹果手机桌面找不到计算机,苹果笔记本桌面图标不见了怎么办
  8. 美国电子计算机大学排名,美国大学电子计算机专业排名院校有哪些?
  9. 折线多边形的原位放大
  10. linux刻录光驱是哪个好,Linux中使用mkisofs或genisoimage刻录光盘