安装Icarus verilog

本人是老师提供软件源码,linux环境为windows subsystem linux,ubuntu版本为18.04。据说,win环境有较多bug。。。下面的操作请在linux环境进行
给个ftp链接

ftp://ftp.icarus.com/pub/eda/verilog/

并没有尝试ftp服务,ftp不行的话,如果需要,联系yuantaogen@csu.edu.cn or yuantaogen@qq.com

首先tar解压:

然后进入解压目录

然后偷懒的方式,依次输入下面指令

最后需要提升权限,加sudo。过程十分流程,可以使用下图指令,检查安装成功与否

LPI基本使用

使用流程需要提供一个描述接口函数的c文件和描述仿真激励模型的.v文件。这里假设hello.c和hello.v,对于不同的应用,函数名可发生变化。
编译和执行过程如下:

需要注意的是,第二条指令 -o 后加空格,第三条指令-M.中.表示当前目录,-m与hello紧紧相连,不用空格,否则报错。

已经解决的bug

1、头文件包含
gcc在文件包含时,需要路径信息,因此头文件需要根据当前目录和需要包含的文件进行灵活更改。
在我的设计中,linux工作路径为workOfVPI

而必备头文件和实现文件都在verilog-10.3中,故文件包含应该写为:#include “./verilog-10.3/vpi_user.h”
注意使用双引号,尖括号也报错。。

2、最后的函数定义大括号后需要添加分号

上图中,该部分代码在末尾,不添加分号会报错:[Error] expected ‘,’ or ‘;’ at end of input
。加上分号就行了,这也太细节了吧。。。

3、The Verilog PLI Handbook 2.pdf在show_all_net.c代码缺少一部分注册。
也就是加上bug2中的代码,不知道光盘有没有漏,但文档中应该没有该代码

代码分享

show_all_nets.c

#include<stdlib.h>
#include<stdio.h>
#include<stdarg.h>
#include "./verilog-10.3/vpi_user.h"PLI_INT32 PLIBOOK_ShowNets_compiletf(PLI_BYTE8 *user_data),PLIBOOK_ShowNets_calltf(PLI_BYTE8 *user_data);void PLIBOOK_ShowNets_regisger()
{s_vpi_systf_data tf_data;tf_data.type=vpiSysTask;
//  tf_data.sysfunctype=0;tf_data.tfname="$show_all_nets";tf_data.compiletf=PLIBOOK_ShowNets_compiletf;tf_data.calltf=PLIBOOK_ShowNets_calltf;tf_data.sizetf=NULL;tf_data.user_data=NULL;vpi_register_systf(&tf_data);return ;}PLI_INT32 PLIBOOK_ShowNets_compiletf(PLI_BYTE8 *user_data)
{vpiHandle systf_handle,arg_iterator,arg_handle;PLI_INT32 tfarg_type ;int err_flag=0;systf_handle=vpi_handle(vpiSysTfCall,NULL);arg_iterator=vpi_iterate(vpiArgument,systf_handle);if(arg_iterator==NULL) {vpi_printf("Error :$show_all_nets requires 1 argument\n");err_flag=1;}else {arg_handle =vpi_scan(arg_iterator);tfarg_type=vpi_get(vpiType,arg_handle);if (tfarg_type!=vpiModule) {vpi_printf("error :$show_all_nets arg must be module instance\n");vpi_free_object(arg_iterator);err_flag=1;}else {arg_handle=vpi_scan(arg_iterator);if(arg_handle!=NULL) {vpi_printf("error:$show_all_nets can only have 1 argument\n");vpi_free_object(arg_iterator);err_flag=1;}}}if(err_flag) vpi_control(vpiFinish,1);return 0;
}PLI_INT32 PLIBOOK_ShowNets_calltf(PLI_BYTE8 *user_data)
{vpiHandle systf_handle,arg_iterator,module_handle,net_iterator,net_handle;s_vpi_time current_time;s_vpi_value current_value;systf_handle=vpi_handle(vpiSysTfCall,NULL);arg_iterator=vpi_iterate(vpiArgument,systf_handle);module_handle =vpi_scan(arg_iterator);vpi_free_object(arg_iterator);current_time.type=vpiScaledRealTime;vpi_get_time(systf_handle,&current_time);vpi_printf("\nAt time %2.2f, ",current_time.real);vpi_printf("net in module %s ",vpi_get_str(vpiFullName,module_handle));vpi_printf("(%s):\n",vpi_get_str(vpiDefName,module_handle));net_iterator=vpi_iterate(vpiNet,module_handle);if(net_iterator==NULL)vpi_printf("    no nets found in this module\n");else {current_value.format=vpiBinStrVal;while (  (net_handle=vpi_scan(net_iterator))!=NULL) {vpi_get_value(net_handle,&current_value);vpi_printf("    net %-10s value is %s   (binary) \n",vpi_get_str(vpiName,net_handle),current_value.value.str);}}return 0;
}void (*vlog_startup_routines[]) () ={PLIBOOK_ShowNets_regisger,0
};

show_all_nets.v

`timescale 1ns /1ns
module top;
reg [2:0]test;
tri [1:0]results;
addbit i1 (test[0],test[1],test[2],results[0],results[1]);
initial begintest=3'b000;#10 test=3'b011;#10 $show_all_nets(top);#10 $show_all_nets(i1);#10 $stop;#10 $finish;end
endmodule`timescale 1ns / 1ns
module addbit(a,b,ci,sum,co);
input a,b,ci;
output sum,co;
wire a,b,ci,sum,co,n1,n2,n3;
xor (n1,a,b);
xor #2 (sum,n1,ci);
and (n2,a,b);
and (n3,n1,ci);
or #2 (co,n2,n3);
endmodule

运行效果


最后输入finish可以结束仿真,回到shell.

Icarus iverilog中PLI使用范例相关推荐

  1. verilog中数组的定义_开源仿真工具Icarus Verilog中的verilog parser

    前面提到用flex和bison开处理命令行参数,回顾一下:开源仿真工具Icarus Verilog中的命令行参数处理方法. 那么Verilog的parser又是怎么实现的呢?简单地说,与做命令行参数的 ...

  2. go 中使用socket范例

    2019独角兽企业重金招聘Python工程师标准>>> package main import ( "fmt" "net" ) func ma ...

  3. Visual Studio 2005中web.sitemap 中扩展自定义属性的一些应用范例

    Web.SiteMap 是 VS2005中一个非常重要的特性. 可以用于菜单等应用,但企业的应用中经常需要控制到 菜单的 target ,菜单的权限等. 通过扩展一些自定义属性可以实现(此方法已经在E ...

  4. 轻量版verilog仿真平台:icarus verilog使用简介

    作为一名系统软件工程师,需要对verilog语言有一定的了解,学习verilog过程中免不了要进行仿真.工程上常见的verilog仿真软件基本就是国外EDA三大厂的:Mentor公司的ModelSim ...

  5. iverilog Makefile 阅读

    读一波iverilog的makefile,理清项目结构 # # This source code is free software; you can redistribute it # and/or ...

  6. 财务 计算机网络,计算机网络技术在财务系统中的应用

    计算机网络技术在财务系统中的应用 网络会计是信息技术的发展而使财务会计系统变革的产物. (本文共3页) 阅读全文>> 计算机网络技术在财务管理信息系统中的应用李忠臣,温青山,崔晶,张锡磊大 ...

  7. [原创].怎样制作一个简单ip,以方便在Quartus II和Nios II中使用?

    概述:此处,我以Lcd12864(ST7920)作为范例,进行粗浅讲解,望各位网友踊跃拍砖.   0 软硬件环境 软件:Altera Quartus II 9.1 + Nios II  9.1 Sof ...

  8. PHP 4 中对象的比较

    在 PHP 4 中,对象比较的规则十分简单:如果两个对象的类相同,且它们有相同的属性和值,则这两个对象相等.类似的规则还适用与用全等符(===)对两个对象的比较. 如果我们执行以下范例中的代码: If ...

  9. VC++2010中的GetWindowText与GetWindowTextW的区别

    UpdateData(TRUE);//将控件上显示上的数据更新到关联变量 UpdateData(FALSE);将关联变量的值更新到控件显示. 当你改变控件对应的关联变量的值的时候,要使用UpdateD ...

  10. 在 C++ 中使用 PPL 进行异步编程

    莱坞星探通常要拒绝那些有抱负的演员时,都会轻蔑地说:"别联系我们,我们会联系你的."然而对于开发人员来说,那句话却道出了许多软件框架工作的秘密,与其让程序员驱动整个应用程序的控制流 ...

最新文章

  1. netty4.0.x源码分析—bootstrap
  2. ei eo eq什么意思_EI源刊是什么意思
  3. verilog异步复位jk触发器_以不变应万变的异步FIFO面试宝典(二)
  4. Linux编译Opencv3.4.7: relocation R_X86_64_PC32 against `ff_w_ff‘ can not be used when makin with -fPIC
  5. Have Fun with Numbers及循环链表(约瑟夫问题)
  6. 多目标跟踪算法 | DeepSort
  7. BUGS 小胡的学习日志
  8. 零基础入门,资深吃货带你搞懂大数据
  9. 形容计算机很烂的网络用语,坑爹什么意思 网络术语坑爹是什么意思?
  10. 信用风险计量模型简述
  11. 基于TSUNG对MQTT进行压力测试-测试结果
  12. RGB 和 CMYK 相互转换
  13. Android笔记:将布局转换成图片
  14. NIO、AIO概述总结
  15. 文盾信息非结构化数据安全解决方案,高效防护企业文档安全
  16. 大华摄像头录像视频,可以使用PotPlayer剪切
  17. AlphaGo挑战围棋九段高手李世石
  18. 桂电计算机网络老师,刘忆宁-桂电网络空间安全博士点获批,且行且珍惜
  19. 小米平板刷机shell怎么退_小米平板2如何一键解锁?刷机教程图解
  20. 基于51单片机HC-SR04超声波测距带温度补偿

热门文章

  1. vue3使用keep-alive页面切换时报错:TypeError: parentComponent.ctx.deactivate is not a function
  2. matlab 获取文件毫秒时间,在Matlab中经过的时间,以毫秒为单位,具有不同的日期...
  3. word无法显示下划线
  4. 安卓投屏助手(B1358)之辅助调试
  5. 是非人生 — 一个菜鸟程序员的5年职场路 第30节
  6. 管理远程团队的4种方法
  7. 变频器在电机驱动中的作用
  8. 树莓派安装第三方操作系统
  9. 系统架构设计方法论——TOGAF
  10. vue 兼容IE解决方案, Babel .babelrc