vcs中一个simv的诞生过程
叨叨
1、本来有打算写一篇长文来介绍的,但是无奈自身水平不足,再加上实在懒得写那么多字,所以本文相当于是一个缩减版,意思到了就行。
2、发现做验证如果想继续深入,可以去补充下编译原理的相关知识。
正文
先抛开vcs、systemverilog不谈。我们所编写的程序代码,需要经过编译和链接后才能得到可执行文件。
有关编译、链接的知识可以参考C语言中相关内容:
编译和链接的过程
当我们在用vcs进行仿真时,一般都会使用Makefile来控制编译仿真流程。
当我们敲下make compile后(target名字当然是你自己定的),Makefile会去调用vcs这个可执行文件,并把一堆参数丢给它:
当然,作为一个demo,上面这个参数算是少的了,正常的怎么说也有几十行。
而vcs这个可执行文件实际上是一个脚本,作为一个能处理上百个参数的脚本,自然也是庞大无比:
在打开这个文件之前我是有读一遍的打算的,打开后我果断理智地放弃了这个想法。。。
这个vcs会去调用真正的编译器来编译我们的verilog/systemverilog代码:
当我们的代码编译完成后,此时得到的是一些目标文件、动态库,存在放csrc文件夹里面(注意里面有一个文件还是叫Makefile,又是一个套娃- -!):
紧接着,敲重点!!!vcs会调用g++来完成目标文件、动态库的链接,而指导g++工作的,正是上面提到的套娃Makefile:
有关g++的参数解释,可以参考:
GCC参数详解
至此,我们得到了一个完整的simv。
打开套娃Makefile,我们能找到和编译log对应的信息:
这里还可以看到,当使用g++完成链接后,会使用touch来对一个空白文件"product_timestamp"打上时间戳,记录生成simv的时间。
vcs中一个simv的诞生过程相关推荐
- 一个产品的诞生过程全程记录(二)
一个产品的诞生过程全程记录(二) 今天开始做电气部分,目前电气部分的架构为 1.三路无刷直流驱动 2.做姿态PID算法用的MCU 3.保护与电源管理电路 4.FPGA驱动电路 三路无刷驱动部分打算选用 ...
- c语言中一个程序的运行过程
今天面试海康威视嵌入式开发的时候,面试官问了我一个问题,一个程序是如何变成可执行程序的,记得学过,但是没回答出来,今天回来翻了csapp的课本,找到了答案记录一下 基本过程(以hello.c举例): ...
- java设计app_一个APP的诞生——从零开始设计你的手机应用
相关截图: 资料简介: 在移动互联网高度发达的今天,一个个APP,成为我们通向网络世界的窗口.它的诞生流程,令不少对互联网世界产生幻想甚至试图投身其中的年轻人充满了好奇.<一个APP 的诞生&g ...
- 大麦哲伦星系中的一个新恒星诞生区 制造出强烈喷流冲击波
天文学家利用欧南天文台(ESO)超大望远镜(Very Large Telescope,VLT)的多单元探索光谱仪(Multi Unit Spectroscopic Explorer instrumen ...
- 一个进程在执行过程中可以被中断事件打断_Linux操作系统:中断类型和中断的作用...
1.中断的概念 中断对于操作系统非常重要,它就好像机器中的齿轮,驱动各部件的动作.所以,许多人称操作系统是由"中断驱动"的. 所谓中断是指CPU对系统发生的某个事件做出的一种反应, ...
- SQLServer中一个多用户自动生成编号的过程
SQLServer中一个多用户自动生成编号的过程 if not exists (select * from dbo.sysobjects where id = object_id(N'[IndexTa ...
- 《HTML5+CSS3网页设计入门必读》——第1章 标记简史1.1 从IETF到W3C:HTML 4的诞生过程...
本节书摘来自异步社区<HTML5+CSS3网页设计入门必读>一书中的第1章,第1.1节,作者: [英]Jeremy Keith , [美]Dan Cederholm 更多章节内容可以访问云 ...
- 天时地利人和—一个传奇操作系统的诞生记
"无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程." 在科学 ...
- Java中一个令人惊讶的bug
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 今天分享一个JDK中令人惊讶的BUG,这个BUG的神奇之处在于,复 ...
最新文章
- 不同的source control下配置DiffMerge
- 在循环中删除list中的元素
- Flink JAR包上传和运行逻辑
- 必须懂的 MySQL 的事务与隔离级别
- Linux C :线程操作和线程同步的多线程并发编程
- CVPR 2020 | 以局部焦点进行渐进式面部表情编辑
- 一篇能加深理解linux 虚拟文件系统的博文
- 2.3、getRunListeners().starting()
- 团队作业4——第一次项目冲刺(Alpha版本)
- 实现Mybatis接口模式下的数据库调用分离
- Axure添加官方元件库
- linux异步io缺陷,具有libaio性能问题的Linux异步IO
- USB转串口那些事儿—串口驱动类型
- linux输入中文老是有字母,Fcitx 中文输入法中世界语字母的输入方法
- 阅读开源引擎源代码的方式学习游戏引擎好吗?
- 为什么全网通手机联通显示无服务器,手机卡无服务怎么回事
- 网页内引用外部字体方法
- CSS 实现色彩渐变
- 如何解决Error running ‘Tomcat 8.5.45‘: port out of range:-1
- mysql占用内存过高_mysql数据库占用内存过高解决办法
热门文章
- Red Gate - SQL Source Control实现对SQL SERVER 的源代码控制
- 74160ENT引脚设计法+同步置数法接成60进制加法计数电路(设计方案2)
- 【光学】基于matlab涡旋光产生【含Matlab源码 1927期】
- 计算机基础优质课教案,计算机基础公开课教案
- C语言界杠把子的书籍,你读过几本?
- 如何用机械键盘计算机,拔键器怎么用 机械键盘拔键器图解使用教程 (全文)
- 敏捷个人俱乐部(北京)线下活动 开始报名了!
- led驱动电源初学者必看_初学者:如何在Windows 8中查看Metro应用程序的已用驱动器空间...
- 【位运算 异或】51nod区间xor
- 用python写一个下载器