NOC调试流程

NOC调试流程

  • VCS仿真

    • Prj文件夹下写filelist.f 和 makefile

    • Prj下

      $make vcs_com 编译

      $make vcs_sim 仿真

      $make verdi 查看仿真结果

      $make simv 查看仿真

在这里插入图片描述

testbench

tb_round_robin_arbiter
  • 实现了一个轮询仲裁器

  • parameter AGENTS_NUM = 4 //代理数量

  • localparam [31:0] AGENTS_PTR_SIZE = $clog2(AGENTS_NUM);

信号位宽功能
requests_cmdAGENTS_NUM每个代理的请求命令
curr_highest_priorityAGENTS_PTR_SIZE当前最高优先级的值
next_highest_priorityAGENTS_PTR_SIZE下一个最高优先级的值
first_test1表示是否是第一次进行测试,是为1
starvationAGENTS_NUM用于表示每个代理是否处于饿死状态,为1则表示饿死
grantsAGENTS_NUM用于表示每个代理是否被授予访问权限
clk1时钟
rst1复位
  1. 初始化和复位:在 initialize 和 clear_reset 任务中,进行了一些初始化和复位操作,如设置时钟、复位信号、优先级等。

  2. 测试:在 test 任务中,进行了一些测试操作,如生成随机请求命令,并检查授权。

  3. 检查授权:在 check_grant 任务中,检查了授权的正确性。例如,确保只有发出请求的代理才能获得授权,确保在冲突情况下只有一个代理获得授权,以及确保获得授权的代理是优先级最高的。

  4. 饿死检查:如果一个代理连续10次没有获得授权,就认为该代理饿死了,将其对应的 starvation 标志设置为1。

  5. 失败检查:如果在一次授权中,有多于一个的代理获得授权,或者没有发出请求的代理获得了授权,或者应该获得授权的代理没有获得授权,那么就认为仲裁器失败,显示失败信息并结束测试。总的来说,这段代码是一个轮询仲裁器的测试模块,通过生成随机请求,检查授权的正确性,以及检查是否存在饿死的代理,来测试轮询仲裁器的功能和性能。
    在这里插入图片描述

可以画出轮询仲裁表,假设优先级从高到低为:DCBA

优先级当前的代理请求授权的请求
DCBA01000100
DABC00010001
BCDA10011000
ABCD00110001
BCDA11010100
DABC11011000
ABCD01010001
BCDA00100010
CDAB00010001
BCDA11010100

可见仿真波形与仲裁表的结果一致,仿真通过

tb_separable_input_first_allocator
  • 实现了一个可分离输入的优先级分配器
  • parameter VC_NUM = 2 //虚拟通道数
  • localparam PORT_NUM = 5 //端口数
信号位宽功能
requests_cmdPORT_NUM * VC_NUM一个二维逻辑数组,表示每个输入端口对应的虚拟通道请求。
out_port_cmdPORT_NUM * VC_NUM一个二维端口数组,表示每个输入端口对应的输出端口。
curr_highest_priority_vcPORT_NUM * AGENTS_PTR_SIZE_IN下一个最高优先级的值
grantsPORT_NUM * VC_NUM一个二维线网数组,表示每个输出端口对应的虚拟通道授权。
clk1时钟
rst1复位
  1. 初始化和测试:

- initialize任务用于初始化模块的内部变量和参数。
- clear_reset任务在时钟的上升沿将复位信号清零。
- test任务用于进行模块的功能测试。

  1. 生成授权和请求:

- gen_vc_grant任务根据输入端口的请求生成对应的虚拟通道授权。
- gen_ip_grant任务根据输出端口的请求生成对应的输入端口授权。
- gen_out_request任务根据虚拟通道授权生成输出请求。
- gen_grant_o任务根据输入端口和输出端口的授权生成虚拟通道授权。

  1. 检查矩阵:

- check_matrices任务用于检查生成的授权矩阵是否与预期的授权矩阵一致。

总体而言,这段代码实现了一个可分离输入的优先级分配器,通过输入端口的请求和输出端口的请求生成对应的虚拟通道授权,并检查生成的授权矩阵是否正确。
在这里插入图片描述
在这里插入图片描述

进行推理计算(以第一个周期为例):

  • request_i 请求矩阵
    [ 0 0 1 0 1 0 1 1 1 0 ] (1) \left[ \begin{matrix} 0 & 0 \\ 1 & 0 \\ 1 & 0 \\ 1 & 1 \\ 1 & 0 \end{matrix} \right] \tag{1} 0111100010 (1)

  • request_i 仲裁结果
    [ 0 0 1 0 1 0 1 0 1 0 ] (2) \left[ \begin{matrix} 0 & 0 \\ 1 & 0 \\ 1 & 0 \\ 1 & 0 \\ 1 & 0 \end{matrix} \right] \tag{2} 0111100000 (2)

  • outport_i 方向矩阵
    [ 1 1 4 4 1 1 4 4 2 2 ] (3) \left[ \begin{matrix} 1 & 1 \\ 4 & 4 \\ 1 & 1 \\ 4 & 4 \\ 2 & 2 \end{matrix} \right] \tag{3} 1414214142 (3)

  • out_request 矩阵
    [ 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 ] (4) \left[ \begin{matrix} 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 1 & 0 \\ \end{matrix} \right] \tag{4} 0000000001010000000100100 (4)

  • out_request 矩阵仲裁结果
    [ 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 ] (5) \left[ \begin{matrix} 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ \end{matrix} \right] \tag{5} 0000000001010000000000100 (5)

  • grant_o 授权矩阵

[ 0 0 1 0 1 0 0 0 1 0 ] (6) \left[ \begin{matrix} 0 & 0 \\ 1 & 0 \\ 1 & 0 \\ 0 & 0 \\ 1 & 0 \end{matrix} \right] \tag{6} 0110100000 (6)

第一个周期计算结果与仿真结果一致

tb_switch_allocator
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值