最近为了验证一个ip,需要将ip的输出数据与c model的数据比对,之前采用的是将仿真结果输出,用perl读取结果,与c的输出结果比对,这样做也可以,但是在做遍历测试时,由于数据量较大,就显得不方便了。因此想要在testbench里调用c函数,直接对结果进行测试,如果两边结果不一致再报错。

操作系统是win10,modelsim是10.4版本,tb用system verilog写,调用c函数用DPI接口,非常方便。

如只需要写 import "DPI-C" function int my_function(input int fp);

my_function是我的c函数名,括号里是参数。这样就可以了,这比verilog的vpi的方便很多。

tb写好之后,将所有设计文档包括C,添加到modelsim工程中,在编译时,遇到了问题。

报错:# couldn't execute "D:\modeltech64_10.4\win64\sccom": no such file or directory

这里就是问题所在,google了大量资料也没有搞通,最后查看modelsim的user manual解决了问题。

首先,如果将c函数的设计文档添加到了工程中,在编译的时候肯定需要一个c编译器,猜想这个sccom应该就是相应的c编译器,可是modelsim安装的时候根本就没有这个东西,google了很多资料也没有说明这个东西怎么弄出来,在modelsim.ini文档里倒是找到了说明,后面也做了更改,还是没有解决问题,放弃。

既然modelsim自带的sccom没有,那我需要自己下一个编译器,就是modelsim-gcc-4.5.0-mingw64.zip,他可以帮忙编译c,在modelsim的用户手册里有提到这个,但是注意软件要相互搭配使用,gcc4.5.0的版本是可以搭配modelsim10.4的,亲测没问题,modelsim6.x的版本应该是搭配gcc4.2.x的,没有测试过。

下好该编译器,解压缩,将解压后的gcc-4.5.0-mingw64,放在modelsim安装目录下,我的是D:\modeltech64_10.4。其实个人感觉放在哪里都可以,只要后面把路径设置对就可以。弄好之后想着是否可以在modelsim.ini里面将相关的c compiler的默认路径改为gcc的bin的路径,但是改完之后仍然不work,放弃。个人感觉应该是哪里没改对,应该work的,希望有兴趣的同学继续试试。

最后,注意要将下好的gcc编译器写入环境变量path里,我的是D:\modeltech64_10.4\gcc-4.5.0-mingw64\bin。

之后不需要将c添加到mdelsim工程目录里,只要在modelsim工程中使用命令行输入vlog E:/xwork/design/test.c ,注意路径写对就可以编译成功,成功后是这样的:

# Model Technology ModelSim SE-64 vlog 10.4 Compiler 2014.12 Dec 3 2014
# Start time: 09:52:28 on Jan 15,2016
# vlog -reportprogress 300 E:/xwork/design/test.c  
# -- Compiling DPI/PLI C file E:/xwork/design/test.c 
# End time: 09:52:29 on Jan 15,2016, Elapsed time: 0:00:01
# Errors: 0, Warnings: 0

然后,就可以正常的仿真了。

总的来说,过程很简单,自己装一个相关的编译器,设好环境变量,然后用命令vlog编译对应的c,然后就可以仿真了。

ps:需要注意的是:

所调用的C函数文档是不需要添加到工程里面的,猜想import "DPI-C" function int my_function(input int fp)这条语句调用的是c编译成功后的.o,当用vlog命令编译C时,输入的是绝对路径,编译成功后会在work库中产生对应的compiler结果.o文件,这些是放在_dpi文件夹下。因此当仿真的时候,调用的都是work库中的这些东西。

modelsim+win环境下systemverilog调用c函数的更多相关文章

  1. Win环境下的文件读写

    在win环境下,有许多方法可以对文件进行读写操作,如MFC 中的CFile类,及一些开源的项目如QT中的QFile.开源的好得是可以多平台,而MFC只是微软自家的东西,对于想写跨平台的人,最好不用MF ...

  2. 在Win环境下配置java的环境进行开发步骤

    1.下载官方JDK,网址如下 http://www.oracle.com/technetwork/java/javase/downloads/index.html

  3. windows和linux环境下java调用C++代码-JNI技术

    最近部门做安卓移动开发的需要调C++的代码,困难重重,最后任务交给了我,查找相关资料,没有一个教程能把不同环境(windows,linux)下怎么调用说明白的,自己在实现的过程中踩了几个坑,在这里总结 ...

  4. Win环境下Oracle小数据量数据库的物理备份

    Win环境下Oracle小数据量数据库的物理备份 环境:Windows + Oracle 单实例 数据量:小于20G 重点:需要规划好备份的路径,建议备份文件和数据库文件分别存在不同的存储上. 1.开 ...

  5. win 环境下 node.js环境变量

     在win 环境下 node.js环境变量有两种情况:  (1)开发环境(development):开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告. ...

  6. win环境下安装配置openCV-4.3.0

    win环境下安装openCV-4.3.0 首先下载 推荐国内镜像 官网太太太慢了 附上 下载地址 下载之后打开exe解压到目录都是常规操作 环境变量的配置 依次打开到系统变量的path 新建一个路径为 ...

  7. win环境下使用sqlmap写shell + MYSQL提权(默认就是system权限)

    今天在来一个mysql提权 (也可以说是默认system权限提的) 在被黑站点找到一个站   先教拿shell是有注入漏洞的 有可能是root权限的注入点 可以确定是有注入漏洞的 也得到了 物理路径 ...

  8. win环境下jdk7与jdk8共存问题

    1.jdk安装包 安装步骤略 2.jdk等配置文件修改 在安装JDK1.8时(本机先安装jdk1.7再安装的jdk1.8),会将java.exe.javaw.exe.javaws.exe三个文件cop ...

  9. 以太坊-Win环境下remix环境搭建

    一.node.js环境搭建 有多个安装方法,但是注意npm与node版本相关性较强!以下方案较为简便 1.下载网址 http://nodejs.cn/download/ 2.下载window 64位 ...

随机推荐

  1. C++中#和##的特殊使用

    1.用#号将输入的内容转换为字符串. 用##号将两个参数合并. #include <iostream> using namespace std; //将输入的内容转换成字符串 #defin ...

  2. [APUE]进程控制(中)

    一.wait和waitpid函数 当一个进程正常或异常终止时会向父进程发送SIGCHLD信号.对于这种信号系统默认会忽略.调用wait/waidpid的进程可能会: 阻塞(如果其子进程都还在运行); ...

  3. 动态SQL语句:定义(一)

    文章系列 动态SQL语句:定义(一) 静态SQL与动态SQL 静态SQL:程序运行前,具有固定的形式和结构的SQL. 动态SQL:程序运行时,能够动态改变形式或结构的SQL. 一些思考和想法 在实际的 ...

  4. 2017 年不可错过的开发工具 Top 50

    想知道 2017 年有哪些值得关注的开发工具吗?StackShare 年度开发工具排行榜来啦! StackShare.io 是一个开发者工具及服务分享平台,致力于发现并分享开发者使用的开发工具.服务与 ...

  5. 【C#】Send data between applications

    This sample shows how to send data between different applications, including object data——transform ...

  6. 第一百三十节,JavaScript,封装库--连缀

    JavaScript,封装库--连缀 学习要点: 1.连缀介绍 2.改写库对象 本章我们重点来介绍,在调用库的时候,我们需要能够在前台调用的时候可以同时设置多个操作,比如设置CSS,设置innerHT ...

  7. linux 学习-用户&群组&权限

    Linux用户&群组&权限  ⦁ Linux安全性模型   1)Linux使用User和Group控制使用者对文件的存取权限   2)用户使用账号和口令登录Linux   3) ...

  8. TypeScript 学习四 面向对象的特性,泛型,接口,模块,类型定义文件*.d.ts

    1,面向对象的特性一:类,继承,见上一篇博客: 2,面向对象的特性二: 泛型(generic):参数化的类型,一般用来限制集合的内容:指定只能放某个类型的元素 如下图中的尖括号中的Person,就代表 ...

  9. 【转】判断URL是否能够访问

    import urllib2 def file_exists(url): request = urllib2.Request(url) request.get_method = lambda : 'H ...

  10. Qt 打开指定的文件

    最近项目用到使用本地的office打开指定的文件,记录一下代码: QString fileName = QFileDialog::getOpenFileName(this, tr("Open ...