[SV学习笔记]#4 typedef/enum/struct的用法

前言

这一篇来介绍几个SV新增的语法typedef/enum/struct,这几个语法相信有学过C语言的人都不陌生,用法上基本上也都差不多,不过这几个语法不单可以用在验证当中,也可以用在设计上,在描述硬体上可以更简洁,下面我会给几个使用上的例子来说明。

typedef

typedef用来自定义资料型态,透过下面语法去宣告一个新的资料型态

typedef <data_type> <type_name>

Example1

typedef logic[15:0] example;module test;  example a = 16'h3456;    initial begin    $display("a = %x", a);    $display("size of a = %d",$bits(a));  endendmodule

a = 3456, size of a = 16

enum

enum用来描述一个变数的合法值範围,并且要给每一个值一个自定义的名字。

enum {Mon,Tue,Wed,Thur,Fri,Sat,Sun} days

举例来说,可以直接用自定义的名字给它赋值,会看到最终会映射到0,1,2
Example2

module test;  enum {Wait,Ready,Start} state;    initial begin  state = Wait;    $display("state = %d",state);    state = Ready;    $display("state = %d",state);    state = Start;    $display("state = %d",state);      endendmodule

state = 1, state = 2, state = 3

也可以用来实现Finite State Machine,可以取代以前Verilog使用Parameters的写法

struct

struct可以把相关联的变数给包在一起,举例来说
Example3

module test;  struct{  int a,b;    logic [15:0] c;    bit d;  } exp1;    initial begin    exp1 = '{256,128,16'b0000000000000100,1'b1};    $display("a = %d, b = %d, c = %16b , d = %b", exp1.a,exp1.b,exp1.c,exp1.d);  endendmodule

a = 256, b = 128, c = 0000000000000100, d = 1

后记

SV加入了许多C语言的特性,好处是学过C之后再来学SV会更容易上手,而且也更容易和C语言的介面作对接。除此之外于设计方面也可以更加简洁,像是Finite State Machine原本需要很多个Parameters去声明,但有了enum之后可以大幅度的简化


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章