其他分享
首页 > 其他分享> > 日常记录(96)mcdf代码结构

日常记录(96)mcdf代码结构

作者:互联网

总体结构

clip_image002

Channel module

一共三个slave

spec
Input

clip_image004

Output

---->mcdt_data(31:0)

---->mcdt_val(0)

---->mcdt_id(1:0)

Interface

1. 对于driver。需要输入端口的数据clockblocking,方向为向外驱动。

2. 对于monitor。也需要输入端口的数据clockblocking,方向全为input。

Transaction
content

1. 一共3个slave,需要分配id。

2. 输入数据和输出数据,需要分配data。data为可长可短的数据包。

3. 数据包内是否需要空闲周期,data之间的空闲周期

4. 数据包需要id。

5. 数据包之间空闲周期nidles、

6. 给予响应rsp(bit类型,和数据包无关,和driver的响应有关)。

constraint

1. id本来应该限制到1-3个,但是如果有更多的slave,则为了更好的接入,建议soft

2. data的大小,soft限制到4-32个。data的内容不限(但是应该有意义吧)

3. 数据包的id不限

4. 数据包内的数据空闲0-2

5. 数据包之间的数据空闲1-10

function

sprint

driver
content

1. 数据包需要id,识别出哪个数据包,driver需要名字,作为driver本身

2. driver需要interface

3. driver需要接受来自generator的mailbox,返回给generator的mailbox

run task

1. reset until rstn is high

2. drive when get data from mailbox

2.1 drive and clone to rsp, write data to rsp, put to mailbox

clip_image006

function

new、set_interface

generator
content

1. 包括transaction的各个部分(除去响应部分)

2. transaction的数量n_trans

3. req\rsp的mailbox,和driver链接

constraint

对content的内容简单约束soft

run task

1. start

2. send_trans for each start item

function

new、sprint、post_randomize

packed (data id)
monitor
content

1. name用于标记

2. interface

3. mailbox发送,给比较

run task

mon_trans

function

new\set_interface

agent
content

1. name

2. driver

3. monitor

run task

1. 并行的driver和monitor

formate module

一个整形

spec

clip_image008

input

1. arbiter信号束

2. slaveX信号束,X为号码

3. grant信号

output

start、end、data、req、length

enum

fifo深度:小中大超大

带宽:低中高超高

fmt_trans
content

1. 比较数据:id

2. 比较数据:data

3. 比较数据:length

4. 类型信息:fifo深度

5. 类型信息:带宽

6. 返回信息:rsp

constraint

常规soft(可以是fifo深度、带宽)

function

sprint\clone\compare

fmt_driver
content

1. name

2. interface

3. 接收邮箱req_mb

4. 返回邮箱rsp_mb

5. 局部变量:邮箱 fifo

6. 局部变量:int:fifo边界

7. 局部变量:int:数据耗时

run task

并行:

1. do_receive

等待请求,等待指定长度边界的数据,发起准许,等待数据开始后,关闭准许,每个下降沿将数据存入局部变量的fifo邮箱。

2. do_consume

当局部变量的fifo邮箱有数据则取出、然后等待1-数据耗时的随机周期。

3. do_config

接收邮箱接收,配置fifo深度、本地实例化局部变量邮箱fifo、

配置耗时、复制、响应、返回邮箱

4. do_reset

配置grant为0如果是复位

clip_image010

function

new、set_interface

generator
content

1. fifo类型

2. bandwidth带宽

3. 发送邮箱

4. 接收邮箱

constraint

常规,类型和带宽

run task

发送给driver,和接收响应。

function

new\post_randomize\sprint

monitor
content

1. name

2. interface

3. 邮箱mon_mb

run task

监控起始数据,获取数据信息,发送。

clip_image012

function

new、set_interface

agent
content

1. name

2. driver

3. monitor

run task

run monitor、driver

function

set_interface、new

reg module

clip_image014

spec
input

cmd\addr\data_in

output

data_out

reg_trans
content

1. addr

2. cmd

3. data

4. 返回rsp

constraint

软约束:地址范围、命令范围、地址和命令的关系。

function

clone、sprint

driver
content

1. name

2. 接收邮箱

3. 响应邮箱

4. interface

run task

并行:

do_drive->reg_write->reg_idle

do_reset

function

new\set_interface

generator
content

1. addr

2. cmd

3. data

4. 发送邮箱

5. 响应邮箱

6. reg_req队列

run_task

send_trans:实例化、随机化、发送、等待响应

function

new、sprint、post_randomzie

monitor
content

1. name

2. interface

3. 发送邮箱mb

run task

mon_trans:监控数据并放入邮箱

function

new、set_interface

agent
content

1. name

2. driver

3. monitor

4. interface

run task

driver.run\monitor.run

function

new\set_interface

mcdf module

全局

结构体:mcdf_reg_t:长度、优先级、使能、可用性

枚举:mcdf_field_t:长度、优先级、使能、可用性

reference model
content

1. name

2. mcdf_interface

3. reg[0-2]

4. reg_mb:

5. in_mbs:channel_trans

6. out_mbs:fmt_trans

run task

并行:

do_reset:复位长度、优先级、使能、可用性

do_reg_update:根据来值更新寄存器reg[0-2]

do_packet(0-2):get数据从in_mbs,put数据到out_mbs

function

set_interface

mcdf checker
content

1. name

2. 数量统计:total

3. 数量统计:error

4. 数量统计:chnl_cnt

5. 接口:chnl*3

6. 接口:arb*1

7. 接口:mcdf_vif*1

8. 参考模型:refmod

9. 邮箱:chnl*3

10. 邮箱:fmt*1

11. 邮箱:reg*1

12. 邮箱:exp_mb*3:链接refmod的邮箱

run task

并行:

1. do_channel_disable_check*3:检查时序当en为0,但valid和ready为1则为错误。

2. do_arbiter_priority_check:

3. do_compare:

4. refmod.run:

function

new、set_interface、get_slave_id_with_prio、do_report

mcdf coverage
content

1. name

2. chnl_vif[3]

3. arb_if

4. fmt_if

5. reg_if

6. mcdf_if

7. delay_req_to_grant

coverage

1. 寄存器读写:地址、命令、地址和命令的交叉

2. 寄存器非法访问读写:合法非法地址、命令、合法非法写数据、合法非法读数据、交叉

3. 通道disable:0-2的使能、合法、以及交叉

4. 仲裁器的优先级:0-2通道的仲裁器优先级0-3(是否需要非法)

5. 整形器的长度:合法非法id、合法非法长度

6. 整形器的准许:合法非法延迟长度

run task

1. do_reg_sample: 寄存器读写、寄存器非法访问读写

2. do_channel_sample:

3. do_arbiter_sample:

4. do_formater_sample:

function

new、do_report、set_interface

mcdf env
content

1. name

2. reg_agent

3. fmt_agent

4. chnl_agent*3

5. checker

6. coverage

run task

并行:agent、check、coverage,run

function

new、do_config、do_report

base test
content

1. name

2. fmt_generator

3. reg_generator

4. chnl_generator

5. env

6. 局部变量:超时timeout=10

run task

新进程:env.run

do_reg

do_formatter

any:

do_data

do_watchdog

do_report

function

new、set_interface

继承

数据连续性测试

读写寄存器测试

寄存器稳定性测试

mcdf全随机测试

mcdf下行低带宽测试

标签:do,数据包,代码,name2,邮箱,mcdf,data,reg,96
来源: https://www.cnblogs.com/bai2022/p/16390206.html