ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

最近日常(96)mcdf代码结构

2022-06-19 11:33:56  阅读:234  来源: 互联网

标签:function do run 代码 content interface 邮箱 mcdf 96


https://gitee.com/bai-mengwei/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。
  3. 一共3个slave,需要分配id。
  4. 输入数据和输出数据,需要分配data。data为可长可短的数据包。
  5. 数据包内是否需要空闲周期,data之间的空闲周期
  6. 数据包需要id。
  7. 数据包之间空闲周期nidles、
  8. 给予响应rsp(bit类型,和数据包无关,和driver的响应有关)。
  9. id本来应该限制到1-3个,但是如果有更多的slave,则为了更好的接入,建议soft
  10. data的大小,soft限制到4-32个。data的内容不限(但是应该有意义吧)
  11. 数据包的id不限
  12. 数据包内的数据空闲0-2
  13. 数据包之间的数据空闲1-10

Transaction

content

constraint

function

sprint

driver

content

  1. 数据包需要id,识别出哪个数据包,driver需要名字,作为driver本身
  2. driver需要interface
  3. driver需要接受来自generator的mailbox,返回给generator的mailbox
  4. reset until rstn is high
  5. drive when get data from mailbox

run task

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
  4. 并行的driver和monitor

run task

 

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邮箱。

  1. do_consume

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

  1. do_config

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

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

  1. 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
  8. 寄存器读写:地址、命令、地址和命令的交叉
  9. 寄存器非法访问读写:合法非法地址、命令、合法非法写数据、合法非法读数据、交叉
  10. 通道disable:0-2的使能、合法、以及交叉
  11. 仲裁器的优先级:0-2通道的仲裁器优先级0-3(是否需要非法)
  12. 整形器的长度:合法非法id、合法非法长度
  13. 整形器的准许:合法非法延迟长度
  14. do_reg_sample: 寄存器读写、寄存器非法访问读写
  15. do_channel_sample:
  16. do_arbiter_sample:
  17. do_formater_sample:

coverage

run task

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下行低带宽测试

标签:function,do,run,代码,content,interface,邮箱,mcdf,96
来源: https://www.cnblogs.com/bai2022/p/16390157.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有