学习文本值和基本数据类型的笔记。

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基础(一)的更多相关文章

  1. System Verilog基础(二)

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

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

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

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

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

  4. system verilog中的跳转操作

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

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

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

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

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

  7. 【第一季】CH06_FPGA设计Verilog基础(三)

    [第一季]CH06_FPGA设计Verilog基础(三) 一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的.学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情. ...

  8. 【第一季】CH05_FPGA设计Verilog基础(二)Enter a post title

    [第一季]CH05_FPGA设计Verilog基础(二) 5.1状态机设计 状态机是许多数字系统的核心部件,是一类重要的时序逻辑电路.通常包括三个部分:一是下一个状态的逻辑电路,二是存储状态机当前状态 ...

  9. 【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title

    [第一季]CH04_FPGA设计Verilog基础(一) 4.1 Verilog HDL 代码规范 u 项目构架设计 项目的构架用于团队的沟通,以及项目设计的全局把控 u 接口时序设计规范 模块和模块 ...

随机推荐

  1. 使用OpenSSL进行转换

    使用OpenSSL进行转换 摘自:https://cloud.tencent.com/developer/ask/29886 这些命令允许您将证书和密钥转换为不同的格式,以使它们与特定类型的服务器或软 ...

  2. linux openjdk环境变量配置

    下载openjdk : https://jdk.java.net/ tar -xvf ... nano ~/.bashrc export JAVA_HOME=... export PATH=$JAVA ...

  3. 在IIS和Nginx上通过代理部署基于ant-design-pro前端框架开发的应用

    一.本文解决的主要问题 通过对前端静态资源站点进行代理服务设置,实现对后端API接口的代理,从而实现前端的独立部署,即通过代理的设置实现对http://IP0:Port0/api/xxx的请求转发至h ...

  4. cenots7单机安装Kubernetes

    关于什么是Kubernetes请看另一篇内容:http://www.cnblogs.com/boshen-hzb/p/6482734.html 一.环境搭建 master安装的组件有: docker ...

  5. CodeForces 540C Ice Cave (BFS)

    题意:给定 n * m的矩阵,让你并给定初始坐标和末坐标,你只能走'.',并且走过的'.'都会变成'X',然后问你能不能在末坐标是'X'的时候走进去. 析:这个题,在比赛时就是没做出来,其实是一个水题 ...

  6. 设计模式22:Strategy 策略模式(行为型模式)

    Strategy 策略模式(行为型模式) 动机(Motivation) 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂:而且有时候支持 ...

  7. 编写高质量代码改善C#程序的157个建议——建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间

    建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间 在我们身边的世界中,对象是什么?对象就是事物,俗称“东西”.那么,什么东西算得上是一个对象呢?对象有属性.有行为.以动物为例,比 ...

  8. APUE(5)---标准I/O库 (1)

    一.引言 标准I/O库不仅是UNIX,许多i其他操作系统都实现了标准I/O库,所以这个库由ISO C标准说明.标准I/O库处理很多细节,如缓冲区分配,以及优化的块长度执行I/O等.这使得它便于用户使用 ...

  9. 【微服务架构】SpringCloud之Ribbon(四)

    一:Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接 ...

  10. ResorceGovernor--基础和Demo

    资源调控器分为三部分:1:资源池,将资源CPU/MEMORY划分到不同的载体上2:负载组,承载负载并将负载映射到不同的资源池3: 分类函数,将不同回话映射到不同的负载组08提供两种预定义的系统资源池1 ...