日常记录(96)mcdf代码结构
作者:互联网
总体结构
Channel module
一共三个slave
spec
Input
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
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
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如果是复位
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
监控起始数据,获取数据信息,发送。
function
new、set_interface
agent
content
1. name
2. driver
3. monitor
run task
run monitor、driver
function
set_interface、new
reg module
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