MCDF-实验0

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
MCDF功能描述:
多通道数据整形器(MCDF,multi-channle data formatter),它可以将上行(uplink)多个通道数据经过内部的FIFO,最终以数据包(data packet)的形式送出。
需要注意的是上行数据和下行数据的接口协议不同,此外多通道数据整形器也有寄存器的读写接口,可以支持跟多的控制功能。

设计结构:

在这里插入图片描述
1.上行数据的通道从端(Channel Slave),负责接收上行数据,并储存到其FIFO中
2.仲裁器(Arbiter)可以选择从不同的FIFO中读取数据,进而将数据进一步传送至整形器(formatter)
3.整形器(Formatter)将数据按照一定的接口时序送出至下行接收端
4.控制寄存器(Control Registers)有专用的寄存器读写接口,负责接收命令并对MCDF的功能做出修改

提示:以下是本篇文章正文内容,下面案例可供参考

一、MCDT

先从MCDF的子模块channel 和 arbiter的组合MCDT入手,暂不考虑formatter的数据打包功能和寄存器的配置作用
MCDT由三个slave channel 和一个arbiter构成,作用类似于一个多路选择器,结构如下:
在这里插入图片描述
图片引自@changshengqiu

新建project将实验文件导入。编译并仿真。添加信号波形,仿真1us,观察波形输出。

在这里插入图片描述
可以看到三个slave channel,以及时钟信号和复位信号的值,如果是输入端口则为高阻态z,而输出端口是不定态x。

二、添加验证文件

添加验证文件tb1.v,编译仿真。
在tb1.v中已经给出了基本测试代码。它通过调用任务 chnl_write 使用case分支语句分别对channel0,channel1,channel2进行了数据输入
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

根据测试代码,在复位信号 rstn 的上升沿触发后,等待5个时钟周期再开始数据输入测试。
仿真波形如下:
在这里插入图片描述

二、分析波形

1.复位信号

在这里插入图片描述

2.各个channel信号

channel0信号

之所以经过6个周期而不是5个原因在于task chnl_write开始时需要等待一次上升沿,这个上升沿同时规定了之后chnl1与chnl0发送数据的间隔时间是一个时钟周期
在这里插入图片描述
数据完整写入
在这里插入图片描述

channel1信号

与chnl0最后一个数据间隔1个周期
在这里插入图片描述
数据同样完整写入
在这里插入图片描述

channel2信号

在这里插入图片描述

观察三个通道发送的数据可以发现他们是串行发送的。

3.arbiter输出端信号

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
valid有效期内(高电平期间)输出data,每次发送2个数据,且显示对应的输入通道id,串行输出。

拓展

连续发送

  • 如何使每个通道的数据在arbiter连续发送
    问题出在这里:在这里插入图片描述
    保持ch0_valid拉高即可使数据连续发送。
    在这里插入图片描述
    但是仲裁器的输出端有些问题
    在这里插入图片描述
    原因:由于chx_valid一直保持着拉高的状态chnl1和chnl2最后一次发送的数据持续发送
    在这里插入图片描述
    可以在调用完最后一次chnl_write后对valid和data置0
    在这里插入图片描述
    在这里插入图片描述
    这样仲裁器的输出就是连续的了。

并行发送

  • 如何使三个channel的数据同时向arbiter发送

在解决完连续输出的问题后接着是并行发送。可以从上图看到3个channel的数据是串行发送的。
将三个channel的测试代码分别放到相同的initial块中:
在这里插入图片描述
在这里插入图片描述
仿真波形:可以看到data发送的数据包有误,改一个initial块,将三个channel的测试分别用begin-end块包起来再放入fork-join内,仿真结果依旧不变
在这里插入图片描述
这个问题先留着,如果您有想法可以在评论区留言,跪谢!!!

6.19更新

连续发送数据时三个channel的最后一个数据**'h00Cx_009**没有发出来就置0了。可以在这之前添加等待语句等到下一个时钟上升沿再置0.
在这里插入图片描述
FIFO的余量显示也有些问题,slave从端数据进入FIFO后,经arbiter仲裁后输出,由原波形可知该过程是一放一拿的过程,FIFO的容量应该是32-31-32-31-32…也许是数据连续发送导致容量的计算方式有误?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值