UVM基础知识3:Systemverilog 验证 12.2.2实例

2023-11-14

来源:systemverilog验证 测试平台编写指南(书籍)

1 新建counter7.c文件

    vi counter7.c

#include<svdpi.h>
#include<malloc.h>
#include<veriuser.h>


typedef struct {
  unsigned char cnt;
} c7;


void* counter7_new() {
  c7* c = (c7*) malloc(sizeof(c7));
  c-> cnt = 0;
  return c;
}


void counter7(
            c7            *inst,
            svBitVecVal   *count,
    const   svBitVecVal   *i,
    const   svBit         reset,
    const   svBit         load){

  if (reset)      inst -> cnt = 0;
  else if (load)  inst -> cnt = *i;
  else            inst -> cnt++;
  inst -> cnt = inst -> cnt & 0x7f;
  *count = inst -> cnt;

  io_printf("C: count = %d, i= %d, reset = %d, load = %d\n",*count, *i, reset, load);
}


2 新建test.sv

vi test.sv

`timescale 1ns/1ps


import "DPI-C" function chandle counter7_new(); 
import "DPI-C" function void counter7 ( 
    input   chandle   inst,
    output  bit[6:0]  out,
    input   bit[6:0]  in,
    input   bit       reset,load);

import "DPI-C" function real sin(input real r); 

program automatic test;
  
initial begin 
  
  bit [6:0]   o1, o2, i1, i2;
  bit         reset,  load, clk1;
  chandle     inst1,  inst2;

  inst1 = counter7_new();
  inst2 = counter7_new();

  fork
      forever #10 clk1 = ~clk1;
      forever @(posedge clk1) begin 
          counter7(inst1, o1, i1, reset,  load);
          counter7(inst2, o2, i2, reset,  load);
      end 
  join_none

  reset = 0;
  load  = 0;
  i1    = 120;
  i2    = 10;

  @ (negedge clk1);
  load  = 1;

  @ (negedge clk1);
  load  = 0;

  #100 $finish;

end

endprogram

3 新建makefile

vi makefile 

run: vcs sim 

vcs:
	vcs -full64 -sverilog test.sv counter7.c

sim:
	./simv

clean:
	rm -f simv novas.conf *.log *.dump *.rc *.key test.fsdb
	rm -rf csrc/ simv.daidir/ verdiLog/


4 仿真

make run





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UVM基础知识3:Systemverilog 验证 12.2.2实例 的相关文章

  • Linux中分配特定地址

    我想在Linux进程中的特定地址分配一块内存 实际上我想做一些类似的事情 我会有进程号 每个进程都会调用库 由我编写 中的初始化函数 该函数将在进程的地址空间中分配一些内存 它将存储进程相关信息 这将由每个进程完成 一旦分配了该内存 程序就
  • malloc + size_t * 3 的地址对于任何类型都是对齐的吗?

    我正在构建一种动态数组 向量 但不是嵌入数据 通常是void 变成struct vector 我正在预留空间struct vector 一大块字节 使用数组的示例size t s include
  • 函数插入仅适用于 malloc 而不是 free

    我在通过使用函数插入来监视 malloc 和 free 时遇到了一个小问题 当仅对 malloc 执行函数插入时 它按预期工作 然而 当尝试插入 free 时 它 最终会陷入循环 我似乎 free 被递归调用 但我只是不知道为什么 这是 m
  • 在结构体中动态分配结构体

    我正在动态分配一个具有不同结构作为成员的结构 struct a other members struct b struct b基本上持有一个指向另一个的指针struct b 所以想到struct b作为链接列表 如果我动态分配struct
  • 自动缩放但仍处理 WM_DPICHANGED

    我在使用 C 编写的非常复杂的 WinForms 应用程序时遇到了一些问题 我希望应用程序在 DPI 更改时让 Windows 自动缩放 但我仍然需要挂钩 WM DPICHANGED 事件才能缩放一些自定义绘制的文本 困境是 如果我让应用程
  • 保存 PDF 时的 matplotlib 线宽

    我有一个具有一些对线宽敏感的相当微妙的特征的图形 我想将此图保存为可以轻松打印的 PDF 即接收器端无需缩放 只需 Command P 即可 不幸的是 当我设置 Figsize 8 5 11 以便正确调整 PDF 的打印大小时 matplo
  • 堆内存和Slab分配

    我很困惑heap and free list 我有几个问题 我对C中malloc的工作原理有自己的理解 如果我错了 请纠正我 堆内存是否被组织为数据的链表 空闲列表 块 堆内存和空闲列表有区别吗 我对存储分配的理解 有待改进 当我们调用ma
  • 64 位大型 malloc

    malloc 失败的原因是什么 尤其是在 64 位中 我的具体问题是尝试在 64 位系统上分配一大块 10GB RAM 该机器有 12GB RAM 和 32GB 交换空间 是的 malloc 是极端的 但是为什么它会成为一个问题呢 这是在带
  • C 中的指针、数组、字符串和 Malloc

    我目前正在学习 C 语言中的字符串 指针和数组 我尝试编写一个程序 其中数组保存三个指向字符串地址的指针 这一切似乎都有效 但程序的行为很奇怪 这是代码 char getUserDetails char host localhost cha
  • memcpy 到动态存储结构安全吗?

    Context 我正在审查一些代码 这些代码从 IO 描述符接收数据到字符缓冲区 对其进行一些控制 然后使用接收到的缓冲区的一部分来填充结构 突然想知道是否可能涉及严格的别名规则违规 这是一个简化版本 define BFSZ 1024 st
  • Realloc 和 sscanf 到一个函数中

    我有一个文件 里面有num行 每一行包含一个数字 我想将每个数字保存到一个向量中 vet 为什么这段代码不起作用 Segmentation fault core dumped 我认为错误是sscanf in save numbers功能 但
  • new 运算符(以及 malloc)无法分配约 450 MB 的内存 [重复]

    这个问题在这里已经有答案了 我正在开发一个程序 该程序在内存中存储大约 2 2 亿个短值的数组 该数据块的分配方式如下 short arrayName new short SIZE OF ARRAY 然后将文件的内容读入内存 在团队中的另一
  • 修改verilog模式缩进

    我试图让 verilog 模式使用 2 个空格缩进除 decls 和always 之外的所有内容 这是我添加到 emacs 中的内容 define are not indented setq veril
  • 为什么调试器只显示数组指针中的一个元素?

    首先 我知道new是执行此操作的 C 方法 我只是表明有不止一种方法可以重现此错误 而且两种方法都令人难以置信的令人沮丧 我有两种形式的源文件 我正在尝试调试另一个编程作业 但我并没有寻求帮助 基本上 我正在尝试重新实施set作为一个类 具
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 大小 8 2 的读/写无效

    在处理我的学校项目时 在 Unix 学校服务器上编译我的项目后 我不断收到来自 Valgrind 的以下错误 并且无法运行该程序 因为我收到 分段错误 11 95183 Memcheck a memory error detector 95
  • 在 System Verilog 中检测时间刻度

    如何从源代码中检测模拟中使用的时间刻度精度 考虑我有一个配置参数 cfg delay i 其中用户以时间单位给出了一些延迟值 如下所示fs 如果用户给出1000 我的代码必须等待1000fs 或 1ps在进一步执行之前 cfg delay
  • 在 AS3 Mobile 应用程序中设置 ApplicationDPI

    我仅使用 AS3 在 Flash Builder 中开发应用程序 没有 Flex 的东西 在 Flex 中 可以通过以下代码设置应用程序的 dpi
  • 通过浏览器以编程方式确定 DPI?

    我想以编程方式确定用户显示器的 DPI 以便以精确的单位数 厘米 英寸 显示网页 我知道这是一个奇怪的请求 这是一个可视化研究项目 它是一种控制 目前 我们通过让用户将信用卡放置在屏幕上并将可调整大小的 div 通过 Mootools 与真
  • 端口尺寸与连接尺寸不匹配

    我有这个代码 Alu v module ALU src1 i src2 i src3 i src4 i ctrl i result o zero o I O ports input 32 1 0 src1 i input 32 1 0 sr

随机推荐