我是靠谱客的博主 冷傲发箍,最近开发中收集的这篇文章主要介绍Systemverilog 第七课 Structure,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第七课

Structure

structure是一组变量或者常数的集合,能够更方便地同时访问其中的元素。
语法:

struct{
	int a,b;
	logic[7:0] opcode;
	logic[23:0] address;
	bit error;
} Instruction_Word

最后一行是这个structure的名字,引用变量时的格式为:

Instruction_Word.address = 24'hF0000;
  • Packed structure
    structure默认状态下在内存当中是unpacked状态,可以使用packed关键字使变量存储在连续的空间当中。
    在这里插入图片描述
    可以看到图中valid,tag,data的bit地址是连续的,越先声明的变量bit数越大。
    经过packed以后可以作为一个数组访问或改写其中的元素:
    在这里插入图片描述
    实际操作当中推荐使用data_word.tag这种形式调用,可读性高,不容易出错。

Enumerated Type(枚举)

可以用于声明拥有固定值的变量,如状态机或者计算常量,增加代码的可读性。
语法:

enum{red,green,blue} RGB

默认状态给第一个元素赋值0,后面元素的值依次递增。
也可以赋特定值:

enum{ONE=1, FIVE=5, TEN=10} RGB

若同时存在赋值和未赋值的元素,未赋值的元素会在前一个元素的基础上加1.
在这里插入图片描述
赋值产生冲突则会报错(error)。

  • 数据类型
    枚举语法可以指定元素的数据类型,但是要注意位宽和元素个数要匹配
    在这里插入图片描述
    四态的情况下,某一元素赋值x或者z是合法的,但是不能在此元素后面添加未赋值的元素,因为x+1和z+1不能产生合法的结果。

Operators

在这里插入图片描述
与C语言较为相似,++和–属于blocking assignment,可能会引起竞争冒险现象。
==在比较x和z时会返回1’bx,===和!==则可以实现完全一致的比较

Procedural Statements

  • inside
    inside用于判断变量是不是在某个值域范围内
logic [2:0] a;
if(a inside {3'b001,3'b010,3'b100})
  • Type Casting(类型转换)
    sv可以进行变量的类型转换/长度转换/有无符号转换,详情可见语法手册。

  • 循环语句
    1.for
    2.do…while

  • case语句
    sv中提供了unique和priority关键字,unique用于唯一确定每个分支语句,priority用于确定某个分支的优先级。

Tasks and Functions

sv的task和function都可以省去begin和end,并增加了关键字return
sv有void函数,可以不返回值

  • Tasks
    可以有多个输入和输出,能够包含时间控制语句和function/task。
  • Functions
    函数不包含任何延时和时间控制语句,不能包含task
    verilog的函数必须返回一个值
  • ref
    在这里插入图片描述

最后

以上就是冷傲发箍为你收集整理的Systemverilog 第七课 Structure的全部内容,希望文章能够帮你解决Systemverilog 第七课 Structure所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部