weiqi7777

cadence indago征程(五)最强cpu debug工具-eswd

我们在编写c程序,在调试的时候,希望能够使用visualstudio工具,或者eclipse工具,实现单步调试,让我们能够查看c程序的执行状态,从而帮助我们去调试我们写的c程序。那在soc验证或cpucore验证(以下简称core验证)的时候。我们也是写了c程序(或者汇编程序,以下不区

cadence indago征程(四)仿真加速indago database

indago工具很强大,对于debug环境,非常好用。但是因为仿真过程中,会产生indagodatabase,而database,会记录仿真的所有状态,因此必然就会造成仿真速度慢。如果环境非常复杂,那么仿真速度会奇慢无比。因此,就需要一些手段,来限制indagodatabase的生成,不能记录仿

cadence indago征程(三)indago工具的使用

启动indago工具之后,indago的界面,如下图所示:下面,就介绍一些,indago的炫酷技能。一、smartlogsmartlog,显示log,并且可以将打印的一行log,和仿真状态进行关联。在每行log的开头,有一个向前或者向后的按钮,点击,表示,将仿真状态,定义到这一时刻,此时,代

cadence indago征程(二)如何产生indago database

首先介绍下indago工具,也就是debuganalyzerapp。在debuguvm验证环境时,我们一般是通过增加打印,然后仿真,根据仿真打印的log,来确定问题。如果打印加得不够,还得修改源代码,增加代码代码。有了indago工具之后,就再也不需要在环境中,增加额外的打印代码。因为ind

cadence indago征程(一)indago系列工具介绍

indago工具,是cadence工具,推出的一系列debug工具。在启动simvision工具时,就会弹出一个窗口,里面就提到了indago工具。这套工具,非常的强大,但是就是网上介绍的资料不多。因为,有很多人,都不知道这个工具。主要包括3个工具:debuganalyzerappprotocoldebugappem

UVM使用双顶层的用法

在UVM中,我们一般都是使用单顶层的模式。也就是只有一个uvm_test_top顶层,然后下面有env,env下面有agent等。如下图所示:通过uvm_top.print_topology()函数,可以打印uvm的拓扑结构。比如如下我的一个uvm环境,打印的拓扑结构如下:如果我有另外一个uvm环境,那么怎

riscv各种版本gcc工具链编译与安装

要学习riscv架构,首先第一步,要搞定riscv的gcc交叉编译器。下面就对riscv的gcc交叉编译器,进行详细的介绍。一、riscvgcc工具下载Riscv的gcc交叉编译器,以开源的方式托管在github上。链接如下:https://github.com/riscv/riscv-gnu-toolchain该仓库,里面包含了一些

newlib库介绍以及底层调用研究

这段时间在研newlib,因为这个涉及到裸机编程时,如何使用c运行库。newlib是一个面向嵌入式系统的c运行库。在裸机如果想要实现c运行库,那么newlib是最好的一个选择。而且newlib可以集成到gcc交叉编译器中,在使用gcc的时候,直接链接newlib库,生成可执行文件。对于如

静态程序编译链接与加载(五)链接脚本大作战

在程序编译的过程中,链接脚本起了非常大的作用,对各个.o文件,如何组合,VMA与LMA如何定义,都由这个文件来决定。下面,针对链接脚本,进行一系列的实验。一、最简单链接脚本,代码段和数据段,合成一个segment链接脚本如下图所示:数据段,紧跟代码段代码段和数据,

静态程序编译链接与装载(四)ELF程序如何执行

ELF有执行视图,那么ELF是怎么执行的起来的呢?这里,分为2个进行说明:一、CPU在EDA上,仿真执行ELF在验证环境中,会有一块memory,专门用来放置CPU要执行的指令,以及访问的数据。而verilog提供了$memreadh系统函数,可以将hex文件,直接载入到memory中。因此只要将EL

静态程序编译链接与装载(三)segment分析以及链接视图与执行视图

程序通过编译,链接生成ELF可执行之后,如果要被执行,是需要装载到内存当中,然后去执行的。那么装载的过程,应该是如何装载的?是按照链接时候的section为单位进行装载吗?下面,就要基于这个问题,进行分析。链接的时候,是通过section进行组合,得到最终的ELF,但是

静态程序编译链接与装载(二)编译链接以及ELF中section详细分析

在编译之后,也就是makecompile,将a.c文件,转换成a.s。a.c和a.s如下图所示:程序被切分成了如下的一些段:1个代码段,.text函数main2个数据段,.data全局变量global_init_a静态局部变量static_a2个COM段,.comm变量global_noinit_b变量static_b得到.s之后,就可以使用a

静态程序编译链接与装载(一)问题的引入以及工具介绍

关于程序的编译链接与装载,有一些问题一直没有弄得很清楚。这次花了不少精力,把这些问题,好好研究了一番。在学习的过程中,熟读了<<程序员的自我修养-链接、装载与库>>这本书,收获良多。强烈推荐这本书。此次系列文章,是针对静态编译,动态编译太多复

ARMv8之exclusive操作(三) exclusive monitor

为了支持exclusive操作,硬件会增加exclusivemonitor来支持。一、exclusivemonitorexclusivemonitor分为2类:localmonitor:实现在cpu内部,针对cacheable属性地址进行监测globalmonitor:实现在cpu外部,针对non-cacheabal属性和device属性地址进行监测从上图,能够看出

ARMv8之exclusive操作(二)exclusive操作例子

之前,提到了为什么要引入exclusive操作。ARM对于exclusive操作,新增了exclusive指令。下面以一个例子,来说明下,这个是如何工作的。以以下代码进行说明,标准的抢锁代码:;voidlock(lock_t*ptr)lock:;isitlocked?LDXRW1,[X0];LoadcurrentvalueoflockCMPW1,#LOCKED;Co