System verilog【2】字符串,函数,任务

news2024/11/17 13:54:47

前言

素手青颜光华发,半世尘缘半世沙。我唤青天睁开眼,风霜怎奈并蒂花

在这里插入图片描述


         \;\\\;\\\;

目录

    • 前言
    • 字符串
    • packed
      • 组合型结构体
      • 组合型数组
    • 过程块
      • initial & always
    • function
    • task

字符串

module chertanis;


   
    initial begin
      
        string s="hola,mundo!",s2;
        
        $display(s.getc(0));//#           #  104
        $display(s[0]);                 //#  104
        $display(s.toupper());//#全大写    # HOLA,MUNDO!

        //#替换
        s.putc(s.len() - 7, "#");
        $display(s);                     //# hola#mundo!

        //#显示子字符串
        $display(s.substr(2,5));         //# la#m

        //#字符串拼接
        s = {s,"-0101"};

        //#复制4次
        s = {4{s}};

        //#格式化打印
        my_log($sformatf("%s %5d",s,42));//# @0: hola#mundo!-0101hola#mundo!-0101hola#mundo!-0101hola#mundo!-0101    42
        
    end

    task my_log(string _msg);
        $display("@%0t: %s",$time,_msg);
    endtask

endmodule

         \;\\\;\\\;

packed

组合型结构体

声明都放在标识符左边就是组合型

module chertanis;


    typedef struct packed {
        logic [7:0] a;
        logic [63:0] b;
    } mydata;

    mydata [7:0] arr;

    initial begin
        
        //#arr = {8{8'b1000_0000,64'h0000_0000_0001_0000}}; //#也行
        arr = '{'{8'b1000_0000,64'h0000_0000_0001_0000},
                '{8'b1000_0000,64'h0000_0000_0001_0000},
                '{8'b1000_0000,64'h0000_0000_0001_0000},
                '{8'b1000_0000,64'h0000_0000_0001_0000},
                '{8'b1000_0000,64'h0000_0000_0001_0000},
                '{8'b1000_0000,64'h0000_0000_0001_0000},
                '{8'b1000_0000,64'h0000_0000_0001_0000},
                '{8'b1000_0000,64'h0000_0000_0001_0000}};

        foreach(arr[i])
            $display("%h -> %h",arr[i].a,arr[i].b);
    end
   

endmodule
# 80 -> 0000000000010000
# 80 -> 0000000000010000
# 80 -> 0000000000010000
# 80 -> 0000000000010000
# 80 -> 0000000000010000
# 80 -> 0000000000010000
# 80 -> 0000000000010000
# 80 -> 0000000000010000

         \;\\\;\\\;

组合型数组

  • 组合型数组的数据是连续存储的,即使复制语句两侧的维度不一样,都可以复制
  • 非组合数组数据不连续,因此复制非常严格!两边的维度必须一样,而且非组合和组合型之间无法直接复制
module chertanis;


    //                        3 2      1 0
    logic [3:0][7:0] a = {16'haaaa,16'hbbbb};//4X8=32
    wire [31:0] b=a;//32

    wire c = a[3][7]; //1

    wire [3:0] d = a[0][3:0]; //4

    byte e;//8
    assign e = a[3];//8,1slice

    logic [15:0] f;//16
    assign f = a[1:0];//16,2slices


    initial begin

        $display("a is %h",a);//# aaaabbbb
        $display("b is %x",b);//# 
        $display("c is %x",c);//# 
        $display("d is %x",d);//# 
        $display("e is %h",e);//# aa
        $display("f is %h",f);//# bbbb
        
    end
   

endmodule

         \;\\\;\\\;

过程块

initial & always

initial只能做测试,不能做综合,只能执行一次!always是描述硬件行为的。

system verilog中一部分是硬件的,一部分是软件的;

硬件

module
	...
endmodule

interface 
	...
endinterface

软件

program
	...
endprogram

class
	...
endcalss

always只能在硬件部分,即module/interface当中使用!

always是并行的,由时钟或非时钟驱动的

      \;\\\;

initial可以放在module、interface和program中使用

         \;\\\;\\\;

function

module chertanis;

    function int dual_num(int _a);
        $display("input %0d",_a);
        return 2*_a;
    endfunction
    
    initial begin
        $display("%0d",dual_num(10));
    end
endmodule
# input 10
# 20
module chertanis;


    typedef struct {
        bit [1:0] cmd;
        bit [7:0] addr;
        bit [31:0] data;
    }trans_t;

    //#动态函数 动态automatic,静态static
    function automatic void clone(output trans_t _dst,input trans_t _src);
        _dst=_src;
    endfunction
    
    initial begin

        trans_t  a,b;
        a='{2'b10,8'b0010_0010,32'haaaa_bbbb};
        $display("%b-%b-%h",a.cmd,a.addr,a.data);

        clone(b,a);
        b.cmd='h3;
        $display("%b-%b-%h",b.cmd,b.addr,b.data);
    end
   

endmodule
# 10-00100010-aaaabbbb
# 11-00100010-aaaabbbb

动态函数就是局部函数,静态函数不是全局函数,静态函数是第三类,放在静态区的函数,就算全局的module结束了,静态函数也不会销毁,会被多个进程和方法共享;

sv中的变量默认声明就是static的

module chertanis;


    //#动态函数,局部函数
    function automatic int counter_1(input _step);
        int cnt = 0;
        cnt += _step;
        return cnt;
    endfunction


    //#静态函数
    function static int counter_2(input _step);
        static int cnt = 0;
        cnt += _step;
        return cnt;
    endfunction


    //#普通函数,就是静态函数
    function int counter_3(input _step);
        static int cnt = 0;
        cnt += _step;
        return cnt;
    endfunction

    
    initial begin

        $display("1-%d",counter_1(1));
        $display("1-%d",counter_1(1));
        $display("2-%d",counter_2(1));
        $display("2-%d",counter_2(1));
        $display("3-%d",counter_3(1));
        $display("3-%d",counter_3(1));
        
      
    end
   

endmodule
# 1-          1
# 1-          1
# 2-          1
# 2-          2
# 3-          1
# 3-          2

变量声明 在 module , interface 和 program 内部,在 task , process 和 function 外部 也默认是静态的

  • 在 module , interface 和 program 中定义的 task ,function 默认就是静态的!

如果 task ,process 和 function 定义成静态的,那么其中定义的变量也默认是静态的

         \;\\\;\\\;

task

task能调用function,但是function不能调用task

不能使用return返回,只能用output,inout或ref的参数返回

task中可以加入耗时语句,function中不能

  • @event
  • wait event
  • # delay


         \;\\\;\\\;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/493029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 多线程知识

参考链接:https://www.cnblogs.com/kingsleylam/p/6014441.html https://blog.csdn.net/ly0724ok/article/details/117030234/ https://blog.csdn.net/jiayibingdong/article/details/124674922 导致Java线程安全问题最主要的原因: (1&#…

修改亮度、对比度、色调、饱和度,达到预期效果

用户态可以通过v4l2自带工具进行一些UVC相机参数的设定,包括采集卡驱动之类,也可以通过v4l2自带工具进行参数设定。 通过修改这些参数的值,可以弥补相机本身彩色部分自带不足。 总的来说就这么几种命令: 查看设备所有参数信息&a…

C++系列三:变量、常量

常量、变量 1. 变量1.1 定义变量1.2 初始化变量1.3 变量数据类型1.4 变量作用域 2. 常量2.1 定义常量2.2 常量类型2.3 常量作用域2.4 常量用法 3. 总结 1. 变量 变量是一个用于存储值的命名内存位置,可以存储多种不同类型的数据,例如整数、实数、字符或…

淘宝搜广推技术备注

第一篇文章 一、序列特征处理方式 1:淘宝的类目体系中,有大类目、小类目(淘宝大类目和小类目怎么区分?有何运营技巧?-卖家网),在做推荐系统时,有个sim建模(search-base…

【Java】抽象类接口

目录 1.抽象类 2.接口 2.1实现多个接口 2.2接口之间的关系 2.3接口使用实例 2.3.1Comparable接口 2.3.2Comparator接口 2.3.2Clone接口 2.4抽象类与接口的区别 1.抽象类 定义:抽象方法:这个方法没有具体的实现; 抽象类:不…

边学边记——数据结构☞和搜索有关的数据结构(搜索树,Set,Map,哈希表)

目录 模型 一、搜索 1. 场景 2. 搜索树 2.1 概念 2.2 查找 2.3 插入 2.4 删除 2.5 实现 2.6 性能分析 2.7 和Java的关系 二、Set 1. 常见方法 2. 注意 三、Map 1. 关于Map.Entry的说明,> 2. Map的常用方法说明 3. 注意 四、哈希表 1. 概念 2. 冲突 2…

[论文分享] VOS: Learning What You Don‘t Know by Virtual Outlier Synthesis

这篇文章是ICLR‘ 2022的一篇文章。 No.contentPAPER{ICLR’ 2022} VOS: Learning What You Don’t Know by Virtual Outlier SynthesisURL论文地址CODE代码地址 Motivation 现有OOD Detection方法大多依赖于真实的离群点数据集进行模型正则化,实际应用中过于昂…

常用位运算

一、求解二进制表示的第k位数字 #include<iostream> using namespace std;int main() {int n 10; // 例如&#xff0c;十进制10用二进制表示为1010 for(int k3;k>0;k--)cout << (n >> k & 1);// 第一步&#xff1a;右移k位// 第二步&#xff1a; &am…

JVM基础总结

文章目录 一、程序计数器二、Java虚拟机栈栈内存溢出【StackOverflowError】线程运行诊断 三、本地方法栈【Native Method Stacks】四、堆【Head】线程共享堆内存溢出【OutOfMemoryError&#xff1a;Java heap space】堆内存诊断 五、方法区【Method Area】线程共享运行时常量池…

Springboot +Flowable,为流程设置租户

一.简介 什么叫flowable的租户呢&#xff1f;这边举个例子&#xff1a; 假设现在有 A、B、C、D 四个子系统&#xff0c;四个子系统都要部署同一个名为 leave 的流程&#xff0c;如何区分四个不同子系统的的流程呢&#xff1f;通过租户就可以解决这个问题。Flowable 中的租户其…

dell r750服务器安装centos系统全记录

1、启动盘制作 1.1 下载系统 打开 https://www.centos.org/download/ 任意选择一个镜像网站&#xff0c;博主选择的是163镜像 下载内存为4g镜像文件 这里也可以参考 https://blog.csdn.net/weixin_46703995/article/details/121191113 1.2 下载启动盘制作软件 linux系统一…

Denoising Diffusion Probabilistic Model,DDPM阅读笔记——(二)

Denoising Diffusion Probabilistic Model&#xff0c;DDPM阅读笔记 一、去噪扩散概率模型&#xff08;Denoising Diffusion Probabilistic Model&#xff0c;DDPM&#xff09; 一、去噪扩散概率模型&#xff08;Denoising Diffusion Probabilistic Model&#xff0c;DDPM&…

C++数据结构:手撕红黑树

目录 一. 红黑树的概念及结构 二. 红黑树节点的定义 三. 红黑树节点的插入 3.1 初步查找插入节点的位置并插入节点 3.2 红黑树结构的调整 3.3 红黑树节点插入完整版代码 四. 红黑树的结构检查 4.1 检查是否为搜索树 4.2 检查节点颜色是否满足要求 附录&#xff1a;红黑…

TypeScript进阶

目录 TypeScript 与 Vue 文档说明 vscode 插件说明 准备页面基本结构 defineProps与Typescript defineEmits与Typescript ref与Typescript reactive与Typescript computed与Typescript 事件对象与Typescript 模板Ref与Typescript 可选链操作符和非空断言 TypeScript…

21.网络爬虫—js逆向详讲与实战

网络爬虫—js逆向 js逆向JavaScript逆向的详细讲解实战演示有道翻译设置密钥和初始向量对密钥和初始向量进行哈希处理创建AES对象并解密消息移除padding并返回结果 前言&#xff1a; &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &#x1f396;️&#x1f…

python基于卷积神经网络实现自定义数据集训练与测试

样本取自岩心照片&#xff0c;识别岩心是最基础的地质工作&#xff0c;如果用机器来划分岩心类型则会大大削减工作量。 下面叙述中0指代Anhydrite_rock&#xff08;膏岩&#xff09;&#xff0c;1指代Limestone&#xff08;灰岩&#xff09;&#xff0c;2指代Gray Anhydrite_r…

深度学习-第T6周——好莱坞明星识别

深度学习-第T6周——好莱坞明星识别 深度学习-第T6周——好莱坞明星识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目3、查看数据 四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签 2、数据可视化3、检查数据4、配置数据集 …

Flutter学习之旅 - 页面布局Stack层叠组件

文章目录 StackPositioned定位布局浮动导航(StackPositioned)FlutterMediaQuery获取屏幕宽度和高度StackAlign Stack Stack意思是堆的意思&#xff0c;我们可以用Stack结合Align或者Stack结合Positioned来实现页面的定位布局 属性说明alignment配置所有元素显示位置children子组…

23.Lambda表达式

Lambda表达式 一、Lambda表达式背景 Lambda 表达式(lambda expression)是一个匿名函数&#xff0c;Lambda表达式基于数学中的λ演算得名&#xff0c;直接对应于其中的lambda抽象(lambda abstraction)&#xff0c;是一个匿名函数&#xff0c;即没有函数名的函数。Lambda表达式…

2023-05-05 背包问题

背包问题 1 01背包和完全背包问题 01背包问题 有N件物品和一个容量为V的背包&#xff0c;第i件物品的体积是v[i]、价值是w[i]&#xff0c;每种物品只可以使用一次&#xff0c;求将哪些物品放入背包可以使得价值总和最大。这里的w是weight即权重的意思 这是最基础的背包问题&a…