学习文本值和基本数据类型的笔记。
1.常量(Literal Value)
1.1.整型常量
例如:8‘b0 32'd0 '0 '1 'x 'z
省略位宽则意味着全位宽都被赋值。
例如:
wire [:] sig1;
assign sig1 = '1; //sig1 = 8'b11111111
1.2.实型常量
支持小数或者科学型表示,例如:3.14 2.0e3
real a = 3.14;
1.3.字符串常量
前后用双引号引起来,和C语言有不同,字符串末尾不是"\n"。
string s = "System Verilog";
bit [:] d = "sv"; //也可以赋值给整型
1.4.数组常量
和C语言类似
int array[:] = {,};
1.5.结构体常量
typedef struct{
int a;
string b;
real c;
} name_1; name_1 var; var = {, "sv", 1.24};
1.6.时间文本值(Time Literal)
`timescale 1ns/100ps //时间单位是1ns,时间精度是100ps
module test;
initial begin
#; //相当于20ns
#20ns;
#.18ns; //相当于5.2ns,因为时间精度是100ps,即0.1ns,自动进位了
#1step; //相当于100ps
end
endmodule
`timescale必须定义在模块的外面,使用关键字timeunit和timeprecision只能定义在模块内部,只会影响单个模块。
`timescale 1ns/100ps //时间单位是1ns,时间精度是100ps
module test;
timeunit 1ns;
timeprecesion 10ps;
initial begin
#; //相当于20ns
#20ns;
#.18ns; //相当于5.18ns,因为时间精度是10ps,即0.01ns,不需要自动进位
#1step; //相当于10ps
end
endmodule
2.基本数据类型
2.1.整型
类型 | 描述 | 符号 |
bit | 2态,自定义位宽 | 默认无符号 |
shortint | 2态,16bit | 有符号signed |
int | 2态,32bit | 有符号signed |
longint | 2态,64bit | 有符号signed |
byte | 2态,8bit | 有符号signed |
logic | 4态,自定义位宽 | 有符号signed |
reg | 4态,自定义位宽 | 有符号signed |
integer | 4态,32bit | 有符号signed |
time | 4态,64bit | 无符号 unsigned |
2态只有1和0;4态是0,1,Z,X。2态数据类型不初始化,则默认是0;4态数据类型不初始化,则默认是X。不要用2态的数据类型去做ADC数据采集。在对4态数据类型做比较的时候,使用三个等号(a === b),而不两个等号(a == b)。2态和4态数据类型是可以相互转化的。从4态转化倒2态,那么4态中的Z和X会默认为2态的0。注意time类型是整数类型,64bit位宽。
2.1.1logic类型
在SV中增加了logic类型,是reg类型的增强。在verilog中,一般输入会定义成wire类型,但是在SV中,输出和输入都定义成logic就行。
module(
output reg a,
input wire b
);
endmodule SV:
module(
output logic a,
input logic b
);
endmodule
在verilog中,reg类型只能在always块中被赋值,不能用assign来赋值,但是logic类型可以在always块中和assign中被赋值。
2.2.实数类型
分为real data和shortreal data。real data相当于C语言中的double类型,64bit位宽,2态;shortreal data相当于C语言中的float类型,32bit位宽,2态。
real a=3.15;
shotreal b = 4.5;
2.3.字符串类型
初始值是空字符。字符串的比较按照ASIC码来比较。使用[]来索引,随意改变和取值。
string s0 = "hello"; //不用定义大小
string s1 = " world !!"; //注意有个空格
string s;
initial begin
s1[] = ","; // s1 = ",world !!",逗号替换了空格
if(s0!=s1)
s = {s0, s1}; //"hello,world !!"
s = {{s0}, s1}; //"hellohello,world !!"
end
其他的一些字符操作:atobin(), atioct(), atoi(), atoreal()......用到再做笔记。
s = "CQUPT";
s.putc(,"A"); //相当于s[0] = "A"; 最终s = "AQUPT";
//s.getc(0); 相当于获得字符
//s.len(); 计算字符串长度为5
//s.lower(); 把大写的变成小写的
//s.substr(2,4); 取出字符串中的2到4位
s = $psfrintf("%s %5d",s,); //不同于$display,输出为s = "AQUPT 100";
2.4.常量(constant data type)
在变量前面加const,如果用户把这个变量改变了,那么仿真器会报错。按照C语言中的const来理解。
2.5.空类型(void data type)
SV中定义function也是可以有返回值的,如果不想有返回值,那么在定义function后面添加void。调用有返回值的函数,但是不想用返回值,这个时候在调用函数的前面加void'(fun1());就可以了。不然会有warning,在验证中最好不要有警告。
2.6.用户自定义类型
System Verilog基础(一)的更多相关文章
-
System Verilog基础(二)
这一篇笔记主要记录Procedural,Process,Task and function,Interface和Communication中值得注意的点. 1.Procedural 写testbenc ...
-
【转】uvm 与 system verilog的理解
http://www.cnblogs.com/loves6036/p/5779691.html 数字芯片和FPGA的验证.主要是其中的功能仿真和时序仿真. 验证中通常要搭建一个完整的测试平台和写所需要 ...
-
(转)新手学习System Verilog &; UVM指南
从刚接触System Verilog以及后来的VMM,OVM,UVM已经有很多年了,随着电子工业的逐步发展,国内对验证人才的需求也会急剧增加,这从各大招聘网站贴出的职位上也可以看出来,不少朋友可能想尽 ...
-
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 ...
-
【第一季】CH06_FPGA设计Verilog基础(三)
[第一季]CH06_FPGA设计Verilog基础(三) 一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的.学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情. ...
-
【第一季】CH05_FPGA设计Verilog基础(二)Enter a post title
[第一季]CH05_FPGA设计Verilog基础(二) 5.1状态机设计 状态机是许多数字系统的核心部件,是一类重要的时序逻辑电路.通常包括三个部分:一是下一个状态的逻辑电路,二是存储状态机当前状态 ...
-
【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title
[第一季]CH04_FPGA设计Verilog基础(一) 4.1 Verilog HDL 代码规范 u 项目构架设计 项目的构架用于团队的沟通,以及项目设计的全局把控 u 接口时序设计规范 模块和模块 ...
随机推荐
-
JavaWeb表单数据的获取方式
表单页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&q ...
-
《UML大战需求分析》阅读笔记04
在学习了前面的几种UML图并不能满足所有情况的建模,如当流程图涉及到多种角色,并且通过对多种角色交互展开时,顺序图才是不二选择.顺序图就如同中文语法的说话语言相似,描述的是一种事件发生的顺序.顺序图分 ...
-
论文阅读(Weilin Huang——【TIP2016】Text-Attentional Convolutional Neural Network for Scene Text Detection)
Weilin Huang--[TIP2015]Text-Attentional Convolutional Neural Network for Scene Text Detection) 目录 作者 ...
-
json处理总结(前端js和后端java)
前端(js): json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键,下面将介绍两者之间的相互转换. json字符串:var st ...
-
WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)
以前学习Windows Form编程的时候,总感觉自己做的界面很丑,看到360安全卫士.迅雷等软件的UI设计都非常美观,心里总是憧憬着要是自己能实现这样的UI效果该多好!!!另一个困扰我的问题是,这个 ...
-
android之ViewPager的使用
XML代码 <android.support.v4.view.ViewPager ViewPager控件 android:layout_width="wrap_con ...
-
C语言细节——献给入门者(三)
C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...
-
HtDP读后感
我小时候很喜欢电脑. 不是听音乐,也不是玩游戏.纯粹是好奇:为什么一部冷冰冰的机器插上电源之后居然能如此强大.我每个月都期盼着订阅的电脑杂志快点到,到手以后总先上手试试里面的"奇淫巧技&qu ...
-
Git系列(1) Windows下Git服务器搭建
作为对前两天Git服务器搭建的一个整理,我想分别从服务端和客户端两个角度来记录下整个搭建过程,为了达到目标,我们需要哪些操作. (一)服务端软件和账号的安装配置 我们这里只需要两个软件git和ssh, ...
-
对angularjs时间过滤格式
在最近的项目中,我遇到这样的一个小问题,从后台传过来一个时间值,格式如下: "/Date(1484743002000)/" 至于为什么是这种格式,后台的开发说数据库中就是这个存的( ...