首页 > 其他分享 >SystemVerilog -- 3.3 SystemVerilog for loop

SystemVerilog -- 3.3 SystemVerilog for loop

时间:2024-05-05 19:22:33浏览次数:8  
标签:index begin end -- replaced 3.3 array ncsim SystemVerilog

SystemVerilog for loop

SystemVerilog中的循环多次重复一组给定的语句,直到不满足给定的表达式。与所有其他过程块一样,循环中需要多个语句被forfor begin end关键字括起来。

Syntax

For循环使用三步方法控制其语句的执行:

  1. 初始化影响循环运行次数的变量
  2. 在执行循环之前,请检查条件是否为真
  3. 修改器在每次迭代结束时执行,并跳转到步骤2
for ([initialization]; <condition>; [modifier])
  // Single statement

for ([initialization]; <condition>; [modifier]) begin
  // Multiple statements
end

Example #1 - Array Iteration

在此示例中,我们将遍历字符串数组并打印出其内容。数组array使用5个不同的水果名称进行初始化。

循环初始化声明一个名为i的局部变量,该变量表示数组中任何元素的索引。条件表达式检查i是否小于数组的大小。修饰符递增i的值,以便循环的每次迭代都对不同的索引进行操作。for

module tb;
  string array[5] = '{"apple", "orange", "pear", "blueberry", "lemon"};

  initial begin
    for (int i = 0; i < $size(array); i++)
      $display ("array[%0d] = %s", i, array[i]);
  end
endmodule

模拟日志

ncsim> run
array[0] = apple
array[1] = orange
array[2] = pear
array[3] = blueberry
array[4] = lemon
ncsim: *W,RNQUIE: Simulation is complete.

Example #2 - Multiple Initializations

在循环的第一部分可以进行多次初始化。在下面显示的代码中,变量ij在输入for循环后立即初始化。为了使示例更有趣,j指向的每个字符串的索引都替换为0。for

module tb;
  string array[5] =' {"apple", "orange", "pear", "blueberry", "lemon"};

  initial begin
    for (int i = 0, j = 2; i < $size(array); i++) begin
      array[i][j] = "0";
      $display ("array[%0d] = %s, %0dth index replaced by 0", i, array[i], j);
    end
  end
endmodule

模拟日志

ncsim> run
array[0] = ap0le, 2th index replaced by 0
array[1] = or0nge, 2th index replaced by 0
array[2] = pe0r, 2th index replaced by 0
array[3] = bl0eberry, 2th index replaced by 0
array[4] = le0on, 2th index replaced by 0
ncsim: *W,RNQUIE: Simulation is complete.

Example #2 - Adding multiple modifiers

在下面显示的代码中,j在循环的每次迭代后都会递减,同时递增ifor

module tb;
  string array[5] =' {"apple", "orange", "pear", "blueberry", "lemon"};

  initial begin
    for (int i = 0, j = array[i].len()-1; i < $size(array); i++, j--) begin
      array[i][j] = "0";
      $display ("array[%0d] = %s, %0dth index replaced by 0", i, array[i], j);
    end
  end
endmodule

模拟日志

ncsim> run
array[0] = appl0, 4th index replaced by 0
array[1] = ora0ge, 3th index replaced by 0
array[2] = pe0r, 2th index replaced by 0
array[3] = b0ueberry, 1th index replaced by 0
array[4] = 0emon, 0th index replaced by 0
ncsim: *W,RNQUIE: Simulation is complete.

标签:index,begin,end,--,replaced,3.3,array,ncsim,SystemVerilog
From: https://www.cnblogs.com/sys-123456/p/18173755

相关文章

  • @FixMethodOrder(MethodSorters.NAME_ASCENDING)的作用
    importorg.junit.*;importstaticorg.junit.Assert.*;importorg.junit.Test;importorg.junit.runners.MethodSorters;/***UserService测试类*///TODO填写顺序执行的代码@FixMethodOrder(MethodSorters.NAME_ASCENDING)publicclassUserServiceTest{staticUserServ......
  • 高级C语言1
    一、程序的内存分段:(进程映像)​ 当执行程序的运行命令后,操作系统会给程序分配它所需要的内存,并划分成以下内存段供程序使用:text代码段:​ C代码被翻译成二进制指令后存储在可执行文件中,当可执行文件被操作系统执行时,它会把里面的二进制指令(编译后的代码)加载到这个内存段,它里面......
  • Camunda 整合SpringBoot基本Api
    代码实现:需要接口@AutowiredprivateRuntimeServiceruntimeService;@AutowiredprivateRepositoryServicerepositoryService;@AutowiredprivateTaskServicetaskService;发布流程:@GetMapping("/deploy")publicObjectdeploy(){......
  • Direct3D 11(D3D11)是Microsoft DirectX API 中的一部分,Direct3D 12(D3D12)是微软开发的一
    Direct3D11编程指南-Win32apps|MicrosoftLearn什么是Direct3D12-Win32apps|MicrosoftLearnDirect3D12编程指南-Win32apps|MicrosoftLearn你可以使用以下命令来查询系统是否支持D3D12:CopyCodedxdiag运行此命令将打开DirectX诊断工具,你可以在其中......
  • 快速入门一篇搞定RocketMq-实现微服务实战落地
    1、RocketMq介绍RocketMQ起源于阿里巴巴,最初是为了解决邮件系统的高可靠性和高性能而设计的。在2016年开源分布式消息中间件,并逐渐成为Apache顶级项目。现在是Apache的一个顶级项目,在阿里内部使用非常广泛,已经经过了"双11"这种万亿级的消息流转,性能稳定、高效。官网地址:https://......
  • Apache Shiro 721反序列化漏洞Padding Oracle Attack
    目录漏洞原理复现修复方式漏洞原理Shiro的RememberMeCookie使用的是AES-128-CBC模式加密。其中128表示密钥长度为128位,CBC代表CipherBlockChaining,这种AES算法模式的主要特点是将明文分成固定长度的块,然后利用前一个块的密文对当前块的明文进行加密处理。这种模式的加......
  • Camunda 流程执行错误处理ERROR BOUNDARY EVENT
     ERRORBOUNDARYEVENT:在任务发生异常时候会触发走,在代码中必须显式抛出thrownewBpmnError("error.....");publicvoidexecute(DelegateExecutiondelegateExecution)throwsException{System.out.println("进来了>>>>>>>>>>>>&......
  • Merge Or Rebase
    MergeOrRebase都具备分支间变更的能力:但是二者间实现手段大不相同1.实现手段Merge(总是向前推进提交历史,并不会影响提交的原始状态)我们在特性分支上,执行#git会以我方、对方、以及双方最近公共祖先对应的快照===>执行三路合并生成新的快照gitmergemaster三路合......
  • 【学习方法】: 读书的方法
    【学习方法】:读书的方法    读书的方法。 读《历史》的方法。每段历史,都是一个场景;每段历史,都是一个抉择(选择做什么,选择不做什么)。每当我读历史类书籍的时候,置自己于历史之中。我想象自己在那段历史的环境中,自己会做什么不做什么;然后看看书中的人物做了什么......
  • m基于Yolov2深度学习网络的螺丝检测系统matlab仿真,带GUI界面
    1.算法仿真效果matlab2022a仿真结果如下:         2.算法涉及理论知识概要        基于YOLOv2(YouOnlyLookOnceversion2)深度学习网络的螺丝检测系统,是一种高效的目标检测方法,它在计算机视觉领域被广泛应用,尤其适合于实时检测和定位图像中的......