System Verilog基础(一)

时间:2022-09-24 11:40:03

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

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. JavaWeb表单数据的获取方式

    表单页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&q ...

  2. 《UML大战需求分析》阅读笔记04

    在学习了前面的几种UML图并不能满足所有情况的建模,如当流程图涉及到多种角色,并且通过对多种角色交互展开时,顺序图才是不二选择.顺序图就如同中文语法的说话语言相似,描述的是一种事件发生的顺序.顺序图分 ...

  3. 论文阅读(Weilin Huang——【TIP2016】Text-Attentional Convolutional Neural Network for Scene Text Detection)

    Weilin Huang--[TIP2015]Text-Attentional Convolutional Neural Network for Scene Text Detection) 目录 作者 ...

  4. json处理总结&lpar;前端js和后端java&rpar;

    前端(js): json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键,下面将介绍两者之间的相互转换. json字符串:var st ...

  5. WPF如何实现一款类似360安全卫士界面的程序?&lpar;共享源码&excl;&rpar;

    以前学习Windows Form编程的时候,总感觉自己做的界面很丑,看到360安全卫士.迅雷等软件的UI设计都非常美观,心里总是憧憬着要是自己能实现这样的UI效果该多好!!!另一个困扰我的问题是,这个 ...

  6. android之ViewPager的使用

    XML代码 <android.support.v4.view.ViewPager   ViewPager控件        android:layout_width="wrap_con ...

  7. C语言细节——献给入门者(三)

    C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...

  8. HtDP读后感

    我小时候很喜欢电脑. 不是听音乐,也不是玩游戏.纯粹是好奇:为什么一部冷冰冰的机器插上电源之后居然能如此强大.我每个月都期盼着订阅的电脑杂志快点到,到手以后总先上手试试里面的"奇淫巧技&qu ...

  9. Git系列&lpar;1&rpar; Windows下Git服务器搭建

    作为对前两天Git服务器搭建的一个整理,我想分别从服务端和客户端两个角度来记录下整个搭建过程,为了达到目标,我们需要哪些操作. (一)服务端软件和账号的安装配置 我们这里只需要两个软件git和ssh, ...

  10. 对angularjs时间过滤格式

    在最近的项目中,我遇到这样的一个小问题,从后台传过来一个时间值,格式如下: "/Date(1484743002000)/" 至于为什么是这种格式,后台的开发说数据库中就是这个存的( ...