03-SV过程语句和子程序
1、过程语句
for语句、do-while语句、while语句
initial begin
string cmd;
int file,c;
$display("=========== continue break ==========");
//bit [127:0] cmd;
file=$fopen("command.txt","r");
while(!$feof(file)) begin
c = $fscanf(file,"%s",cmd);
case(cmd)
"continue":
begin
continue;
end "done":
begin
$display("done row");
break;
end default:
begin
$display(cmd);
end
endcase
end
$fclose(file);
end
2、任务、函数以及void函数
Verilog:任务可以耗时,函数不能;任务可以调用函数,函数不能调用任务;函数必须有返回值,且返回值必须被使用
SystemVerilog:允许函数调用任务,不消耗时间的SV任务应该定义成void函数
(1)使用ref和const传递数组
好处:ref声明在进行参数传递时无需复制到堆栈区,const声明则使得子程序不能修改数组的值,避免误修改。ref的第2个好处是在任务里可以修改变量而且修改结果对调用它的函数随时可见。
这为并发执行线程之间的信息传递提供了机会。
// ref const
function automatic void print_checksum(const ref bit [:] a[]);
bit [:] checksum;
for(int i=;i<a.size();i++) begin
checksum^=a[i];
end
$display("The array checksum is %b",checksum); endfunction bit [:] a[];
initial begin
a = new[];
a[] = 'd0;
a[] = 'd1;
a[] = 'd3;
//bit [31:0] a[2] = '{'{32'd0},'{32'd1}};
$display("========== automatic ref const ==========="); // # The array checksum is 00000000000000000000000000000010
print_checksum(a);
end
(2)从函数中返回一个数组
// 从函数中返回一个数组
function automatic void init(ref int f[], input int start);
foreach(f[i])
f[i] = i + start;
endfunction int fa[];
initial begin
init(fa,);
foreach(fa[i])
$display("fa[%0d]=%0d",i,fa[i]);
end
03-SV过程语句和子程序的更多相关文章
- 《SystemVerilog验证-测试平台编写指南》学习 - 第3章 过程语句和子程序
<SystemVerilog验证-测试平台编写指南>学习 - 第3章 过程语句和子程序 3.1 过程语句 3.2 任务.函数以及void函数 3.3 任务和函数概述 3.4 子程序参数 3 ...
- OBD Problem Vehicles
This page contains a list of vehicles that are known to be non-compliant with OBD-II in one way or a ...
- 我的Python笔记03
摘要: 声明:本文整理借鉴金角大王的Python之路,Day3 - Python基础3,仅供本人学习使用!!! 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4 ...
- Xilinx 常用模块汇总(verilog)【03】
作者:桂. 时间:2018-05-10 2018-05-10 21:03:44 链接:http://www.cnblogs.com/xingshansi/p/9021919.html 前言 主要记 ...
- SV通过DPI调用C
Verilog与C之间进行程序交互,PLI(Programming Language Interface)经过了TF,ACC,VPI等模式. 使用PLI可以生成延时计算器,来连接和同步多个仿真器,并可 ...
- SV中的task和function
SV中class的properties和methods默认都是public的,但是可以声明为local和protected. 一个properties声明为local类型的,则只在该class中的me ...
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- iOS系列 基础篇 03 探究应用生命周期
iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...
随机推荐
- HessianSharp如何部署到IIS7上?
第一:添加映射 第二:选择经典
- nginx设置域名转发到指定端口
1.修改nginx.conf文件,将worker_processes 1 修改为 worker_processes auto 2.创建端口代理配置文件(域名地址如:xx.baidu.com , ...
- ASP.NET Core使用环境变量
前言 通常在应用程序开发到正式上线,在这个过程中我们会分为多个阶段,通常会有 开发.测试.以及正式环境等.每个环境的参数配置我们会使用不同的参数,因此呢,在ASP.NET Core中就提供了相关的环境 ...
- 手把手带你阅读Mybatis源码(一)构造篇
前言 今天会给大家分享我们常用的持久层框架——MyBatis的工作原理和源码解析,后续会围绕Mybatis框架做一些比较深入的讲解,之后这部分内容会归置到公众号菜单栏:连载中…-框架分析中,欢迎探讨! ...
- 杭电-------2032杨辉三角(C语言写)
#include<stdio.h> ][] = { }; void init() { int i, j; ; i < ; i++) { a[i][] = ; a[i][i] = ; ...
- Navicat 导入数据时报Incorrect datetime value: '0000-00-00 00:00:00.000000' 错误
今天重装了个系统,装好MySQL和Navicat之后导入SQL时报了Incorrect datetime value: '0000-00-00 00:00:00.000000' 错误, 查了资料说是m ...
- javascript30--day01--Drum kit
相关视频链接:https://www.bilibili.com/video/av8481988/?p=3 Drum kit 做题思路(1)监听键盘事件 addEventListener(‘事件名’,执 ...
- vue 使用v-for进行循环
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 来简单说说var,let,const,function,import,class
一.var和let var已经在JavaScript中存在很长一段时间了,但是它存在了一些不足的地方,接下来我们就来看看吧 首先var存在变量提升,这是怎么一回事呢,我们看下面代码 为什么是它呢,是因 ...
- Android 有关在ListView RecycleView 中使用EditText Checkbox的坑
这是一篇文字超多的博客,哈哈哈,废话自行过滤··· 遇到问题 在开发中我们常会在ListView , RecycleView 列表中添加EditText输入框,或者checkbox复选框. 复选框 ...