IC验证学习笔记(MCDF)实验0-MCDT

实验0目标是写出MCDT的程序,也就是slave+fifo+arbiter的部分

        最终目标是实现MCDF:MCDF为多通道数据整形器(multi-channel data formatter),它可以将上行(uplink)多个通道数据经过内部的FIFO,最终以数据包(data packet)的形式送出。此外,多通道数据整形器也有寄存器的读写接口,可以支持更多的控制功能。

 从上图的MCDF结构来看主要分为如下几个部分:

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

功能:数据输入到slave,储存在fifo中,由arbiter选择从哪个fifo读出数据并送出去。

分成三个模块来写:slave+fifoarbiterMCDT。然后写一个tb测试一下。

slave+fifo

先理清数据发送的逻辑:

1、外部数据channelx_data发送到slavex,当fifox不满则可以准备写入chx_write_ready

2、在chx_write_valid有效时才可以写入数据,在chx_write_ready准备好了才可以真的写入数据

3、当fifox不空且arbiterread_enable可以读时才可以读出fifox里面的数据

4、每个fifox可以显示剩余容量slavex_margin

当valid为高时,表示要写入数据。如果该时钟周期ready为高,则表示已经将数据写入;如果该时钟周期ready为低,则需要等到ready为高的时钟周期才可以将数据写入。

仲裁器arbiter

 

功能:选择三个通道中的一个读取其数据并发送出去

方法:状态机。找不到之前做的哪个题也是这样的状态机,有优先级在里面,就是哪个状态先判断哪个if里面的表达式

简介:输入端是fifo的输出端,包括ready信号,数据data,数据有效性validfifo来的这个数据是不是有效的);把输入过来的数据送出去,并且输出通道的id,即数据来自哪一个通道的,还有数据有效性validarbiter输出这个数据是不是有效的),通知fifo要哪一个通道的ackx信号

        整形器发送数据是按照数据包的形式发送的,可以选择数据包的长度有4、8、16和32。整形器必须完整发送某一个通道的数据包后,才可以转而准备发送下一个数据包,在发送数据包期间,fmt_chid和fmt_length应该保持不变,直到数据包发送完毕。
        在整形器准备发送数据包时,首先应该将fmt_req置为高,同时等待接收端的fmt_grant。当fmt_grant变为高时,应该在下一个周期将fmt_req置为低。fmt_start也必须在接收到fmt_grant高有效的下一个时钟被置为高,且需要维持一个时钟周期。在fmt_start被置为高有效的同一个周期,数据也开始传送,数据之间不允许有空闲周期,即应该连续发送数据,直到发送完最后一个数据时,fmt_end也应当被置为高并保持一个时钟周期。
        相邻的数据包之间应该至少有一个时钟周期的空闲,即fmt_end从高位被拉低以后,至少需要经过一个时钟周期,fmt_req才可以被再次置为高

控制寄存器接口时序

        在控制寄存器接口上,需要在每一个时钟解析cmd。当cmd为写指令时,需要把数据cmd_data_in写入到cmd_addr对应的寄存器中;当cmd为读指令时,即需要从cmd_addr对应的寄存器中读取数据,并在下一个周期,将数据驱动至cmd_data_out接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值