zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【SystemVerilog 之 过程块和方法】~ 域、always过程块、initial过程块、函数 function、任务 task、生命周期

方法 函数 过程 任务 Function 生命周期 Task SystemVerilog
2023-09-14 09:10:01 时间

1. 过程块

1.1 什么是 域?

在SV中,为了区分硬件设计和软件的世界,我们将定义的软件变量或者例化的硬件所在的空间称之为 “域”。
在这里插入图片描述

1.2 always过程块

always是为了描述硬件的行为,需要注意的是,它有两种使用方式===>

  1. 用于时序逻辑电路描述:敏感信号列表应该出现的是 时钟信号。
  2. 用于组合逻辑电路描述:敏感信号列表没有时钟信号。

always中的@(event)敏感列表是为了描述硬件信号的触发行为。
在这里插入图片描述
以下四项哪些是正确使用always的方式?
在这里插入图片描述
正确答案:ABC
解释:A,时序逻辑;B,组合逻辑或锁存器;C,并行执行;D,不可以初始化,初始化发生在initial或者定义变量的时候。

1.3 initial过程块

initial是软件执行的方式,只执行一次。
在这里插入图片描述
在这里插入图片描述

2. 方法

2.1 函数 function

在这里插入图片描述

在这里插入图片描述

2.2 任务 task

在这里插入图片描述

2.2.1 练习

在这里插入图片描述
上边是自定义一个结构体,之后使用函数实现了一个拷贝的功能。
在这里插入图片描述
上边是进行初始化,首先声明结构体变量s,t;之后对内的变量赋值;调用函数实现s向t的拷贝;最后修改t中cmd参数的值。

问题:变量t中三个成员的最后值为多少?

到这里,我相信对于小白来说,肯定这么认为:s赋初值,复制给t,t就改变了cmd参数,最后肯定为{‘h2,’h10,‘h100},完事,简简单单!!!

仔细想想对吗?这里遗漏了一个重要的知识点,那就是对于函数function中参数定义是输出呢?还是输入呢?这里没有写,默认都是输入,所以,函数拷贝完之后根本没有返回值,所以最后失去了拷贝的功能,则t就是{0,0,0},有效操作就是t.cmd = 'h2,所以,最后答案是{'h2,'h0,'h0}。

2.3 对于function和task使用建议

在这里插入图片描述

3. 生命周期

在这里插入图片描述

3.1 例证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 面试高频题

在这里插入图片描述
答案:ABCD

学习 设计例化和连接 等相关的知识。

希望我可以坚持下去,不断学习!如果觉得有用,希望关注点赞评论,不迷路!!!

声明:仅供学习参考,侵删!!!

参考文献

网络资源ppt