System Verilog随笔(1)

时间:2022-09-24 11:39:51

测试文件该怎么写?

首先看一个简单代码案例:

`timescale 1ns/10ps          //1

module test;               //2

  intput wire[15:0] a;

  output reg[15:0] b;

  reg clock;

chip chip(.clock(.clock));         //3

always #5 clock=~clock;         //4

initial begin              //5

  clock=0;

  repeat(5) @(nagedge clock);

  $display("chip.i = %0d",chip.i);     

  end

endmodule

1、`timescale 1ns/1ns行

编译指令`timescale包括:时间单位(1ns)和时间精度(10ps),单位表示仿真时间的最小值,精度表示保留到小数点后几位(10ps是后两位)。`timescale的作用范围并不限于指定得模块或文件,再遇到`timescale后,指定的时间单位和精度一直保持到遇到下一条`timescale语句。

System Verilog还可以给时间指定时间单位,可以用下方语句实现:

forever #5ns clock=~clock;

//其中时间值和时间单位之间不能有空格,# 5ns正确,# 5 ns则错误。

在System Verilog中,也允许使用关键字timeunit和timeprecision进一步增强时间单位说明,在使用时要注意必须在其他任何声明或语句之前,紧随模块、接口或程序的声明之后,例子如下:

module adder_tb;

input wire[63:0] a,b;

output reg[63:0] sum;

output reg carry;

timeunit 1ns;     //单位1ns

timeprecision 10ps;  //精度10ps

...

endmodule

当然,timeunit和timeprecision也可以在编译单元域中使用,使用时要先于其他任何声明,这里就不举例了。

2、module行

module就是一个模块,由描述端口和描述逻辑功能两部分组成。其中描述端口有输出口output,输入口input,输入/输出口inout三种。测试文件中的module作用是相当于顶层文件或对顶层文件添加激励,在module的端口声明中还要包括clock。写法可以如上方2处所示。其中,test是模块的名称,intput为输入端口,output为输出端口,clock为时钟。这里我再对数据的类型简单做一个总结吧。

2.1值的类型

包括:0,1,x,z

2.2线网(net)

包括:wire,wor,wand,tri,triand,trior,trireg等。其中wire最常用,wire和tri在语法和功能上相同,但wire只有一个驱动源,tri可以有多个。trireg用来为能够储存值的电容线性网建立模型,tri0和tri1用来为电源建立模型。

2.3寄存器(var)

包括:reg,integer,time,real等。其中reg最常用,为通用型,默认值x,无符号。integer为整型,用来储存整数,默认位宽为宿主机字的位数。real为实型,存储实数。time为时间寄存器,用来存放仿真时间。

2.4参数

包括:parameter,localparam,defparam。parameter在模块内定义为常数,不能像变量那样赋值,但可在编译阶段被重载。defparam可以改变parameter的参数值。localparam为局部参数,不能被重载也不能通过defparam改变参数值。

其他的如字符串、数组等这里就不介绍了。

3、函数调用和连线

将需要测试的模块导入测试文件,然后进行连线。

4、always语句

always块中,从0时刻开始顺序执行其中的行为语句,当最后一条执行完毕后再次执行第一条语句。通常用来产生时间脉冲。

5、initial块

initial语句内的语句构成了一个initial块,initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次。若测试文件中包括多个initial块,则这些initial块从仿真0时刻开始并发执行,且每个快都各自独立。

clock需要在initial块中初始化。

System Verilog随笔(1)的更多相关文章

  1. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  2. system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)

    类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...

  3. 一段比较有意思的代码——介绍system verilog中的新增幅值语句

    system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...

  4. 【转】uvm 与 system verilog的理解

    http://www.cnblogs.com/loves6036/p/5779691.html 数字芯片和FPGA的验证.主要是其中的功能仿真和时序仿真. 验证中通常要搭建一个完整的测试平台和写所需要 ...

  5. System Verilog基础(一)

    学习文本值和基本数据类型的笔记. 1.常量(Literal Value) 1.1.整型常量 例如:8‘b0 32'd0 '0 '1 'x 'z 省略位宽则意味着全位宽都被赋值. 例如: :] sig1 ...

  6. (转)新手学习System Verilog & UVM指南

    从刚接触System Verilog以及后来的VMM,OVM,UVM已经有很多年了,随着电子工业的逐步发展,国内对验证人才的需求也会急剧增加,这从各大招聘网站贴出的职位上也可以看出来,不少朋友可能想尽 ...

  7. system verilog的一些总结(从其他博客复制来的)

    转载自 http://blog.sina.com.cn/s/blog_e7fec2630101f5t9.html SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 136 ...

  8. SVA(system verilog assertions)基础

    1什么是断言: 断言就是在模拟过程中依据我们事先安排好的逻辑是不是发生了,假设发生断言成功.否则断言失败. 2断言的运行分为:预备(preponed)观察(observed)响应(reactive). ...

  9. System Verilog基础(二)

    这一篇笔记主要记录Procedural,Process,Task and function,Interface和Communication中值得注意的点. 1.Procedural 写testbenc ...

随机推荐

  1. IIS删除http header信息如Server, X-Powered-By, 和X-AspNet-Version

    响应头信息原始头信息 Cache-Control private Content-Length 78457 Content-Type text/html; charset=utf-8 Date Fri ...

  2. DOM学习笔记(思维导图)

    导图

  3. linux sed 命令

    转载:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行 ...

  4. ASP根据IP来判断跳转页面

    真正IP的取得应该这样: 程序代码 ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") if ip = "&quot ...

  5. jquery and event

    jquery阻止事件冒泡 event.stopPropagation(); event.cancelBubble = true; jquery阻止默认操作 event.preventDefault() ...

  6. 安装Ubuntu服务器

    安装edX首先需要一台linux或Mac系统的电脑/服务器. 这里以常见的Ubuntu作为服务器系统. Ubuntu的官方网站为http://www.ubuntu.com,中文网站为http://ht ...

  7. OC学习笔记[注意事项]

    alloc  new  retain之后都必须要调用release方法 计数器要变只有这几种方法 retain release alloc new copy方法才会使计数器改变,谁想用人家对象,就对他 ...

  8. mysql jdbc 查询连接问题

    做了一个测试,mysql jdbc 链接A调用setAutoCommit,设置false,查询指定数据,可以查询出来,另个一链接把指定的数据给删除了,第一个链接在此查询的时候,仍然可以查询出来,使用的 ...

  9. Spark菜鸟记录

    1.RDD[(k,v)] join()优化,join之前会对两个RDD的key做hash,通过网络把相同hash值的数据传到同一个节点,因此对多次join的RDD 做预分区与持久化可提高效率. map ...

  10. tf多线程读取数据

    多线程读取数据的机制 tf中多线程读取数据跟常规的python多线程思路一致,是基于Queue的多线程编程. 主线程读取数据,然后计算,在读数据这部分有两个线程,一个线程读取文件名,生成文件名队列,另 ...