System Verilog随笔(1)
测试文件该怎么写?
首先看一个简单代码案例:
`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)的更多相关文章
- system verilog中的跳转操作
在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...
- system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)
类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...
- 一段比较有意思的代码——介绍system verilog中的新增幅值语句
system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...
- 【转】uvm 与 system verilog的理解
http://www.cnblogs.com/loves6036/p/5779691.html 数字芯片和FPGA的验证.主要是其中的功能仿真和时序仿真. 验证中通常要搭建一个完整的测试平台和写所需要 ...
- System Verilog基础(一)
学习文本值和基本数据类型的笔记. 1.常量(Literal Value) 1.1.整型常量 例如:8‘b0 32'd0 '0 '1 'x 'z 省略位宽则意味着全位宽都被赋值. 例如: :] sig1 ...
- (转)新手学习System Verilog & UVM指南
从刚接触System Verilog以及后来的VMM,OVM,UVM已经有很多年了,随着电子工业的逐步发展,国内对验证人才的需求也会急剧增加,这从各大招聘网站贴出的职位上也可以看出来,不少朋友可能想尽 ...
- system verilog的一些总结(从其他博客复制来的)
转载自 http://blog.sina.com.cn/s/blog_e7fec2630101f5t9.html SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 136 ...
- SVA(system verilog assertions)基础
1什么是断言: 断言就是在模拟过程中依据我们事先安排好的逻辑是不是发生了,假设发生断言成功.否则断言失败. 2断言的运行分为:预备(preponed)观察(observed)响应(reactive). ...
- System Verilog基础(二)
这一篇笔记主要记录Procedural,Process,Task and function,Interface和Communication中值得注意的点. 1.Procedural 写testbenc ...
随机推荐
- 第三篇Scrum冲刺博客--Interesting-Corps
第三篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 主页页面跳转社区功能及社区设计及布局实现 搜索页面跳转.设计及布局实现 叶学涛 编写个人页面 ...
- Ubuntu18.04 解决umount: /mnt: device is busy
通过该命令查看那个进程占用该device fuser -m /mnt 然后 kill -9 PID 最后就可以umount /mnt 了
- 简明python教程--读后感--推荐给python新手
原书名: A Byte of Python作者: Swaroop, C. H.译者: 沈洁元出版社: 未知 优点 1. 讲解很详细,很基础,适合入门,对编译器也做了简单的介绍 2. ...
- 这可能是最详细的解析HTTP走私攻击的文章
前言 HTTP Desync Attacks也就是HTTP走私攻击,是我见到的比较有趣的一种攻击方式,这里来对这种漏洞进行介绍. TL;DR HTTP走私攻击利用了HTTP协议本身的问题:HTTP中存 ...
- Java面试题(RabbitMQ篇)
RabbitMQ 135. rabbitmq 的使用场景有哪些? ①. 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列.就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通 ...
- Java高级特性——反射机制(完结)——反射与注解
按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html. 在学习反射和注解前, ...
- Pandas | Dataframe的merge操作,像数据库一样尽情join
今天是pandas数据处理第8篇文章,我们一起来聊聊dataframe的合并. 常见的数据合并操作主要有两种,第一种是我们新生成了新的特征,想要把它和旧的特征合并在一起.第二种是我们新获取了一份数据集 ...
- OpenJ_Bailian - 2995-登山(两遍最长上升子序列+枚举顶点)
五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号.同时队员们还有另一个登山习惯,就是不连续 ...
- vue 页面首次加载缓慢原因及解决方案
第一次打包vue的项目部署到服务器,发现首次加载特别的缓慢要几十秒才加载出来,完全没有在本地开发环境上那么流畅. 主要原因是页面在打包后没有进行相关的配置导致资源文件特别大,一次想要全部加载完成回特别 ...
- 关于ES6的let、const那些事儿
Babel 转码器 Babel是广泛使用的一个ES6转换器,将ES6代码转换成ES5代码,从而实现在老版本的浏览器执行. let和const命令 let所声明的变量只在let命令所在的代码块内是有效的 ...