sequence 性能测试

本文介绍了作者根据Oracle Sequence的工作原理实现的一个序列号生成器,并进行了性能测试。测试环境为Ubuntu 13 64位系统,使用C语言编写,包含序列号缓存管理、序列号生成函数以及性能基准测试部分。
摘要由CSDN通过智能技术生成

根据自己理解的oracle sequence的方式,实现了下,并做了性能测试,

测试环境为公司报废的笔记本电脑 dell E4300 ubuntu 13 64位系统.


代码实现:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/time.h>


/**
* created by gongbo.yxh
  seq mod
  2013-06-11
**/


#define SEQ_CACHE_SIZE 1000 
#define START 1 


//两个seq cache
unsigned long long * seq_buf;
unsigned long long int *seq_pointer;  
int isprepared = 1;   //是否准备好 
unsigned long long int seq_extend_next_val = SEQ_CACHE_SIZE + 1;




int is_consumer_head = 1; //在定长数组中,是否生产者的指针在前面
unsigned long long int *seq_producer; //生产者指针 
unsigned long long int *seq_consumer; //消费者 


/**
初始话,将两个数组构造好

`sequence.start()`是在UVM(Universal Verification Methodology)中用于启动一个sequence执行的方法。 在UVM验证环境中,`sequence.start()`方法用于开始执行一个sequence。一个sequence是由继承自`uvm_sequence`类的自定义sequence类创建的,它包含了一系列的操作步骤,用于验证设计被测对象(DUT)的功能或性能。 当调用`sequence.start()`方法时,以下事件会发生: 1. 生成下一个transaction:`sequence.start()`方法会生成并返回下一个transaction,作为测试序列的起始点。这个transaction会被传递给相应的sequencer。 2. 启动transaction的驱动:返回的transaction会被传递给sequencer,并由sequencer驱动到DUT的输入端口,以执行相应的操作。 3. 监控sequence的执行进度:一旦transaction被传递给sequencer,UVM framework会自动监控sequence的执行进度。它会检查是否还有更多的transaction需要执行,并根据预定的顺序和优先级选择下一个要执行的transaction。 需要注意以下几点: - 在调用`sequence.start()`之前,需要确保相应的sequence已经被创建和配置,并且已经与sequencer建立了联系。 - `sequence.start()`方法通常在Testbench中的test类中被调用,以启动整个测试序列的执行。 - 可以对不同的sequence设置不同的启动条件和触发事件,以满足测试的需求。 通过调用`sequence.start()`方法,可以启动一个sequence的执行,并通过sequencer驱动transaction到DUT,从而进行功能验证或性能评估。这样可以实现测试序列的灵活性和自动化,提高验证效率和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值