• SV--数组队列代码练习(8/14)


    练习一:

    简单的数组复制,比较练习

    1. module array_compare();
    2. bit [31:0] src[5]={0,1,2,3,4},
    3. dst[5]={5,4,3,2,1};
    4. if(src==dst)
    5. $display("src==dst");
    6. else
    7. $display("src!=dst");
    8. dst=src;
    9. src[0]=5;
    10. $display("src %s dst",(src==dst)?"==":"!=");
    11. $display("src[1:4] %s dst[1:4]",(src[1:4]==dst[1:4]?"==":"!=");
    12. endmodule

     仿真结果:

     练习二:

    利用foreach循环比较数组

    1. module array_compare1();
    2. bit [31:0] src[5]={0,1,2,3,4},
    3. dst[5]={5,4,3,2,1};
    4. dst=src;
    5. src[0]=5;
    6. foreach(dst[i]) begin
    7. if(dst[i]==src[i])
    8. $display("src[%d]==dst[%d]",i,i);
    9. else
    10. $display("src[%d]!=dst[%d]",i,i);
    11. end
    12. endmodule

     仿真结果:

    练习三:

    压缩结构体与非压缩结构体的赋值特点

    1. module pixel_array();
    2. typedef struct{
    3. bit [7:0] r;
    4. bit [7:0] g;
    5. bit [7:0] b;
    6. } pixel_s; //非压缩结构体
    7. typedef struct packed{
    8. bit [7:0] r;
    9. bit [7:0] g;
    10. bit [7:0] b;
    11. } pixel_t; //压缩结构体
    12. pixel_s my_pixel;
    13. pixel_t my_pixel1;
    14. initial begin
    15. my_pixel = '{'h10,'h10,'h10};
    16. my_pixel1 = {'h10,'h10,'h10};
    17. $display(my_pixel);
    18. $display(my_pixel1);
    19. my_pixel = '{8'h10,8'h10,8'h10};
    20. my_pixel1 = {8'h10,8'h10,8'h10};
    21. $display(my_pixel);
    22. $display(my_pixel1);
    23. end
    24. endmodule

     仿真结果:

    练习四:

    联合结构体的应用

    1. module union_pixel();
    2. typedef struct packed{
    3. bit [7:0] r;
    4. bit [7:0] g;
    5. bit [7:0] b;
    6. } pixel_rgb_t;
    7. typedef struct packed{
    8. bit [7:0] y;
    9. bit [7:0] u;
    10. bit [7:0] v;
    11. } pixel_yuv_t;
    12. typedef union packed{
    13. pixel_rgb_t rgb;
    14. pixel_yuv_t yuv;
    15. } pixel_t;
    16. pixel_t pixel_test;
    17. initial begin
    18. pixel_test = 0;
    19. $display("color RGB is: R=%h, G=%h, B=%h",
    20. pixel_test.rgb.r,pixel_test.rgb.g,pixel_test.rgb.b);
    21. $display("color YUV is: Y=%h, U=%h, V=%h",
    22. pixel_test.yuv.y,pixel_test.yuv.u,pixel_test.yuv.v);
    23. pixel_test.rgb.r=8'hab;
    24. pixel_test.rgb.g=8'hcd;
    25. pixel_test.rgb.b=8'hef;
    26. $display("color YUV is: Y=%h, U=%h, V=%h",
    27. pixel_test.yuv.y,pixel_test.yuv.u,pixel_test.yuv.v);
    28. end
    29. endmodule

     仿真结果:

    知识点补充:

    联合结构体简单的说,就是在结构体定义内部,不论什么数据,这些数据共享同一段内存,以达到节省空间的目的。

    如上所示,union_pixel声明中包含了两个具有不同变量的packed struct,从上面代码中我们可以发现,只要改变union_pixel 中的任意一个变量,另一个变量与之相对应的地址也将发生相同的变化,所以这也引出了union_pixel声明的多个变量必须要有相同的地址,否则编译器会编译失败哦!

     练习五:

    枚举类型应用

    1. typedef enum {GREEN=1,YELLOW,RED=10,BLUE} colors;
    2. typedef enum {GREEN=1,YELLOW,RED,BLUE=3} colors;
    3. typedef enum {GREEN,YELLOW,RED,BLUE} colors;
    4. module top_tb;
    5. initial begin
    6. colors color;
    7. color=YELLOW;
    8. color=10;
    9. $display("color.first()=%0d",color.first());
    10. $display("color.last()=%0d",color.last());
    11. $display("color.next()=%0d",color.next());
    12. $display("color.prev()=%0d",color.prev());
    13. $display("color.num()=%0d",color.num());
    14. $display("color.name()=%0d",color.name());
    15. end
    16. endmodule

     形式一:

    typedef enum {GREEN,YELLOW,RED,BLUE} colors;

    默认GREEN=0,YELLOW=1,RED=2,BLUE=3

    color.first()    first method:function int first(ref index);color第一个index
    color.last()    last method:function int last(ref index); color最后一个index
    color.next()   next method:function int next(ref index);color给定index的下一个index
    color.prev()   prev method:function int prev(ref index);color给定index的前一个index
    color.num()   num method: function int num(); color 数目
    color.name() 

     形式二:

    enum 定义变量的同时也可以赋值index,在索引的过程中可以直接使用index索引

     形式三:

    注意!!!

    enum在定义过程中使用index时保证不能重复,如下GREEN=1,默认YELLOW=2,RED=3,但是,BLUE被自定义为3,所以编译过程中会报error。

  • 相关阅读:
    Linux常见命令手册
    WoShop分销积分直播短视频商城全开源无加密商城源码
    图库 | 图存储的基础概念
    17.Iterator迭代器(行为型模式)
    2023-10-04:用go语言,现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号 给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges , 其中 edge
    项目收获总结--MyBatis的知识收获
    Apache ShardingSphere 5.1.1 正式发布
    服务器和客户端信息的获取
    Spring Boot 学习-基础
    8.11 DAy39---MyBatis面试题
  • 原文地址:https://blog.csdn.net/weixin_45680021/article/details/126331927