SystemVerilog语言简介(二)
6. 用户定义的类型
Verilog不允许用户定义新的数据类型。SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似。用户定义的类型可以与其它数据类型一样地使用在声明当中。例如:
typedef unsigned int uint;
uint a, b;
一个用户定义的数据类型可以在它的定义之前使用,只要它首先在空的typedef中说明,例如
typedef int48; // 空的typedef,在其他地方进行完整定义
int48 c;
7. 枚举类型
在Verilog语言中不存在枚举类型。标识符必须被显式地声明成一个线网、变量或参数并被赋值。SystemVerilog允许使用类似于C的语法产生枚举类型。一个枚举类型具有一组被命名的值。缺省情况下,值从初始值0开始递增,但是我们可以显式地指定初始值。枚举类型的例子如下:
enum {red, yellow, green} RGB;
enum {WAIT=2'b01, LOAD, DONE} states;
我们还可以使用typedef为枚举类型指定一个名字,从而允许这个枚举类型可以在许多地方使用。例如:
typedef enum {FALSE=1'b0, TRUE} boolean;
boolean ready;
boolean test_complete;
8. 结构体和联合体
在Verilog语言中不存在结构体或联合体,而结构体或联合体在将几个声明组合在一起的时候非常有用。SystemVerilog增加了结构体和联合体,它们的声明语法类似于C。
struct {
reg [15:0] opcode;
reg [23:0] addr;
} IR;
union {
int I;
shortreal f;
} N;
结构体或联合体中的域可以通过在变量名和域名字之间插入句点(.)来引用:
IR.opcode = 1; // 设置IR变量中的opcode域
N.f = 0.0; // 将N设置成浮点数的值
我们可以使用typedef为结构体或联合体的定义指定一个名字。
typedef struct {
reg [7:0] opcode;
reg [23:0] addr;
} instruction; // 命名的结构体
instruction IR; // 结构体实例
一个结构体可以使用值的级联来完整地赋值,例如:
instruction = {5, 200};
结构体可以作为一个整体传递到函数或任务,也可以从函数或任务传递过来,也可以作为模块端口进行传递。
9. 数组
在Verilog中可以声明一个数组类型,reg和线网类型还可以具有一个向量宽度。在一个对象名前面声明的尺寸表示向量的宽度,在一个对象名后面声明的尺寸表示数组的深度。例如:
:] r1 [:];
位的变量在SystemVerilog中我们使用不同的术语表示数组:使用“压缩数组(packed array)”这一术语表示在对象名前声明尺寸的数组;使用“非压缩数组(unpacked array)”这一术语表示在对象名后面声明尺寸的数组。压缩数组可以由下面的数据类型组成:bit、logic、reg、wire以及其它的线网类型。无论是压缩数组还是非压缩数组都可以声明成多维的尺寸。
:] a;
// 一个一维的压缩数组:];
//一个一维的非压缩数组:] [:] c;
//一个二维的压缩数组:] [:] d [:];
位字节的压缩数组的非压缩数组非压缩尺寸在压缩尺寸之前引用,这就允许将整个压缩数组作为一个单一的元素进行引用。在上面的例子中,d[1]引用非压缩数组的一个单一元素,这个元素是一个包含4个字节的数组。
10. 在为命名的块中声明
Verilog允许变量在一个命名的begin-end或fork-join语句组中声明。相对于语句组来说,这些变量是本地的,但它们可以被层次化地引用。在SystemVerilog中,既可以在命名的块中也可以在未命名的块中声明。在未命名的块中,不能够使用层次名来访问变量。所有的变量类型,包括用户定义的类型、枚举类型、结构体和联合体都可以在begin-end或fork-join语句组中声明。
11. 常量
在Verilog中有三种特性类型的常量:parameter、specparam和localparam。而在SystemVerilog中,允许使用const关键字声明常量。例如:
const char
colon = “:”;12. 可重定义的数据类型
SystemVerilog扩展了Verilog的parameter,使其可以包含类型。这个强大的功能使得一个模块中的数据类型在模块的每一个实例中重新定义。例如:
module
foo;# (parameter type VAR_TYPE =
shortint;)(:] i,
:] o);VAR_TYPE j = 0; // 如果不重新定义,j的数据类型为shortint
…
endmodule
module bar;
logic [:] i, o;
foo #(.VAR_TYPE(int)) u1 (i, o); // 重新将VAR_TYPE定义成int类型
endmodule
13. 模块端口连接
在Verilog中,可以连接到模块端口的数据类型被限制为线网类型以及变量类型中的reg、integer和time。而在SystemVerilog中则去除了这种限制,任何数据类型都可以通过端口传递,包括实数、数组和结构体。
14. 字母值
在Verilog中,当指定或赋值字母值的时候存在一些限制。而SystemVerilog则为字母值如何指定作了下面的增强:
l 一个字母值的所有位均可以使用`0、`1、`z或`x作相同的填充。这就允许填充一个任意宽度的向量,而无需显式地指定向量的宽度,例如:
bit
[:] data;data =
`1;l 一个字符串可以赋值成一个字符数组,象C语言一样加入一个空结束符。如果尺寸不同,它象C阅读全文(112)
SystemVerilog语言简介(二)的更多相关文章
- SystemVerilog语言简介(三)
15. 强制类型转换 Verilog不能将一个值强制转换成不同的数据类型.SystemVerilog通过使用'操作符提供了数据类型的强制转换功能.这种强制转换可以转换成任意类型,包括用户定义的类型.例 ...
- SystemVerilog语言简介(一)
1. 接口(Interface) Verilog模块之间的连接是通过模块端口进行的.为了给组成设计的各个模块定义端口,我们必须对期望的硬件设计有一个详细的认识.不幸的是,在设计的早期,我们很难把握设计 ...
- 第一章.C语言简介
C语言第一章 C语言简介 目录 一.C语言介绍 二.C语言特点 三.Hello World 四.转义符 五.占位符 六.俄罗斯方块游戏 七.文件下载 一.C语言介绍 C是一种通用的编程语言,广泛用 ...
- C/C++学习----C语言简介
[开发环境] 物理机版本:Win 7 旗舰版(64位) IDE版本:Visual Studio 2013简体中文旗舰版(cn_visual_studio_ultimate_2013_with_upda ...
- 00-Java 语言简介
一.开发环境搭建: (一).JAVA语言简介: 1.JAVA语言简介: (1)什么是JAVA:Java是一种计算机编程语言.它是一种计算机编程语言.它是一种软件开发平台.它是一种软件运行平台.它是一种 ...
- python笔记一(语言简介、解释器、输入输出)
一.python语言简介 一顿狂吹python目前有多火.多NB,哈哈哈,不过用起来心情确实很舒畅. 解释性语言:缺点,运行速度慢. 二.python解释器 与C.C++.java不同,以上都需要先将 ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...
- lua脚本之lua语言简介以及lua的安装
本博主不擅于进行文字创作,所以,相当一部分文字皆复制于其他博文.还希望能够得到谅解. 一.Lua语言简介 Lua是一个免费的开源软件,可以免费用于科研及商业.Lua具有一个专家团队在维护和升级,其设 ...
- Windbg 脚本命令简介 二, Windbg command
Windbg 脚本命令简介 二, Windbg script command $<, $><, $$<, $$><, $$>a< (Run Scri ...
随机推荐
- 123 A. Prime Permutation
链接 http://codeforces.com/contest/123/problem/A 题目 You are given a string s, consisting of small Lati ...
- [SF] Symfony 组件 BrowserKit 原理
直接看下面的注释中针对每一个文件的作用说明. <?php /** * BrowserKit - Make internal requests to your application. * * I ...
- asp.net 发布程序到iis后无法连接到oralce数据库问题
在应用程序池里面,选中你的站点所使用的应用程序池->高级设置->启用32位应用程序->true
- Chrome浏览器调试Android的Webview
chrome://inspect Android:4.4+ Chrome 30+ 首次使用需要FQ
- linux上的用户管理
作为一个专业的服务器发行版,CentOS上存在着n多个用户,作为一个专业的运维工程师,linux的用户管理和用户组的管理是做为一个SA必不可少的工作. 下面我们就先来谈谈linux中的用户管理: us ...
- IO模型浅析
IO模型 同步.异步.阻塞.非阻塞 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步): ...
- C#实现航班查询及预订
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- PHP中的错误处理机制
常见的三种错误: 1.Notice :通知性错误,最小的错误,当发生通知性错误时,会弹出一个提示信息.不会中断代码的执行. 错误代码: #例如Notice: 2.Warning:警告性错误,当发生警告 ...
- MySQL中的内置系统函数
一.字符串函数 1. CONCAT(S1,S2....SN): 把传入的参数连接成一个字符串 2. INSERT(str, x, y, insert): 将字符串 X位置开始,y个字符串长度替换为 ...
- Navi.Soft31.任务管理器(定时同步+数据采集)
1系统简介 1.1功能简述 在众多的软件分类中,有几类的软件不是很重要,但也很重要.它们有的是每隔一段时间需要执行一些任务的软件,我们叫它定时类软件:还有一种软件是采集网页中的数据,我们叫它采集类软件 ...