首页 > 其他分享 >SystemVerilog练习(结构体加队列)

SystemVerilog练习(结构体加队列)

时间:2023-06-13 22:44:24浏览次数:49  
标签:pr addr 队列 Packet scb 0b 体加 data SystemVerilog

        《SystemVerilog验证测试平台编写指南》,刚刚学完队列和结构体,就想练习一下。

 1 module TestStruct;
 2     typedef struct packed
 3     {
 4         bit [7:0] addr;
 5         bit [7:0] pr;
 6         bit [15:0] data;
 7     } Packet;
 8 
 9     Packet scb[$];
10     
11     function void check_addr(bit [7:0] addr);
12         int intq[$];
13         
14         intq = scb.find_index() with (item.addr == addr);
15         case(intq.size())
16             0:$display("Addr %0b not found in scoreboard", addr);
17             1:begin
18                 $display("Find result: pr=%0b, data=%0b",scb[intq[0]].pr, scb[intq[0]].data);
19                 scb.delete(intq[0]);
20               end
21             default:$display("Error:Multiple hits for addr %0b",addr);
22         endcase
23     endfunction:check_addr
24 
25     initial
26     begin
27         static Packet var1 = {8'b1, 8'b11, 16'b111};
28         static Packet var2 = {8'b11, 8'b111, 16'b1111};
29         static Packet var3 = {8'b111, 8'b1111, 16'b11111};
30         static Packet var4 = {8'b111, 8'b1111, 16'b11111};
31 
32         scb.insert(0, var1);
33         scb.push_back(var2);
34         scb.push_front(var3);
35         scb.insert(scb.size(), var4);
36 
37         foreach(scb[i])
38             $display("index=%0d, addr=%0b, pr=%0b, data=%0b",i, scb[i].addr, scb[i].pr, scb[i].data);
39         check_addr(8'b1);
40         check_addr(8'b1);
41         check_addr(8'b111);
42         
43         foreach(scb[i])
44             $display("index=%0d, addr=%0b, pr=%0b, data=%0b",i, scb[i].addr, scb[i].pr, scb[i].data);
45     end
46 endmodule

        练习的输出结果如图:

        不能光看书,还是得敲代码,试验自己的想法。给自己加油,为了更好的自己。

 

标签:pr,addr,队列,Packet,scb,0b,体加,data,SystemVerilog
From: https://www.cnblogs.com/integrated-circuit-testing/p/17478891.html

相关文章

  • 事件队列(EventLoop)【宏任务,微任务】
    一、概念event:事件loop:循环,循环的是一个又一个的任务队列任务队列:是一个先进先出的数据结构,排在前面的事件,优先被主线程读取任务队列分为:宏队列,微队列,分别存放宏任务和微任务二、宏任务【多个】、微任务【1个】微任务一般比宏任务先执行,并且微任务队列只有一个,宏任务队列可......
  • STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收
     参考帖子:https://blog.csdn.net/freedompoi/article/details/122350866目前想要实现STM32F4自带的DMA双缓冲区,尝试过一版,结果不能预期,就使用了RxHalfCplt和RxCplt去实现DMA双缓冲区的效果。现在有时间了,又重新实现STM32F4自带的DMA双缓冲区,作为参考。 MCU:STM32F429ZIT6......
  • poj-2823 Sliding Window(单调队列)
    原题链接SlidingWindowTimeLimit: 12000MS MemoryLimit: 65536KTotalSubmissions: 54929 Accepted: 15814CaseTimeLimit: 5000MSDescriptionAnarrayofsize n ≤106 isgiventoyou.Thereisaslidingwindowofsize k whichismoving......
  • laravel 队列linux环境下的部署与使用 supervisor 的使用
    由于上一章写了laravel队列本地开发的注意事项,但真实项目是要上线到linux服务器上,所以还得借助supervisor工具,网上资料很多,但良莠不齐,所以自己基于实践总结了下: linux下laravel队列操作1.安装yuminstallsupervisor查看版本 supervisord-v 我使用的是4.2.2 2.......
  • laravel 队列的使用
    队列的好处:不阻塞程序运行,比如中间件,可以使用队列,不耽误程序返回数据的时间 创建队列需要使用的表 phpartisanqueue:tablephpartisanmigratephpartisanqueue:failed-tablephpartisanmigrate会生成jobs和failed_jobs表   查看队列运行情况phpartisanque......
  • 阻塞队列LinkedBlockingQueue
    入队方法:put和offerput方法共做了以下情况的考虑:(1)队列已满,阻塞等待;(2)队列未满,创建一个node节点放入队列中,如果放完以后队列还有剩余空间,继续唤醒下一个添加线程进行添加。如果放之前队列中没有元素,放完以后要唤醒消费线程进行消费。offer方法仅仅对put方法一点改动,当队列没有可......
  • STL之优先级队列(堆)的模拟实现与仿函数(8千字长文详解!)
    STL之优先级队列(堆)的模拟实现与仿函数优先级队列的概念优先队列是一种==容器适配器==,根据严格的弱排序标准,==它的第一个元素总是它所包含的元素中最大的==。本质就是一个堆!此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。......
  • 14.队列的顺序存储
    1.队列的概念1.1队列的定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(FirstInFirstOut)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。队头(Front):允许删除的一端,又称队首。队尾(Rear):允许插入的一端。空......
  • 《数据结构与算法》之队列与链表复习
    导言:我们在上一次学习了堆栈的数据结构以后,可以了解到它是受限制的操作,比如我们操作只能在栈顶,现在我们要学习的东西叫做队列,它也是受限制的一种数据结构,它的特点是队头只出数据,而队尾只入数据,它的结构就和它的名字,像我们平时排队一样先来的人肯定要先服务啊,所以它的英文叫做Fri......
  • Python多进程使用队列共享数据协同判断素数
    感谢江西师范大学李雪斌老师提供素材和第一版本代码。问题描述:创建两个队列,qIn用来存储指定范围内的整数,qOut用来存放该范围内的所有素数。创建多个进程,每个进程依次从qIn队列中获取整数,并判断是否为素数,如果是素数则存入qOut。技术要点:1)使用Python标准库multiprocessing创建和管理......