目录

  • 一、MCDF功能描述[^1]
    • MCDF结构
    • slave端口时序
    • formater端口时序
    • 寄存器时序
  • 二、代码分析
    • 时间单位
    • 信号
    • 例化
    • 产生时钟
    • 产生复位
    • 发送激励
  • 三、Questasim的Makefile[^2]
  • 四、波形

一、MCDF功能描述1

MCDF结构

多通道的数据经fifo流入arbiter,arbiter对通道进行选择,将数据打包发送出去

slave端口时序

valid为高表示有发送数据的请求,同时发送数据,ready为高表示数据写书成功

formater端口时序

chid数据通道,length数据长度(持续到数据结束,多两个cycle),req为高(持续两个cycle)表示有发送数据请求,三个信号同时发送;一个cycle后,grant(持续两个cycle)同意发送数据;一个cycle后开始发送数据。

数据准备好,一个cycle后,进入fifo,发送数据发送请求;
一个cycle后,formater说好的我收到了,你开始发数据吧;
一个cycle后,这边知道了,我马上发

寄存器时序

  • 写地址,写命令和写数据在同一个时钟上升沿发送
  • 读地址,读命令在时钟上升沿发送,读出数据在下一个时钟上升沿得到
  • IDLE,为什么要等一拍,不懂

二、代码分析

时间单位

`timescale 1ns/1ps// 单位/精度

信号

reg为寄存器变量,用于过程赋值
wire为线,用于连续赋值
输出数据用reg,输入数据用wire

reg          clk;
reg          rstn;reg  [31:0]  ch0_data;//输出数据到DUT
reg          ch0_valid;//输出有效信号到DUT
wire         ch0_ready;//DUT输入ready
wire [ 5:0]  ch0_margin;//DUT输入fifo余量reg  [31:0]  ch1_data;
reg          ch1_valid;
wire         ch1_ready;
wire [ 5:0]  ch1_margin;reg  [31:0]  ch2_data;
reg          ch2_valid;
wire         ch2_ready;
wire [ 5:0]  ch2_margin;wire [31:0]  mcdt_data;//DUT输出当前输出的数据
wire         mcdt_val; //DUT输出当前输出的有效信号
wire [ 1:0]  mcdt_id;  //DUT输出当前输出的通道号

例化

将tb的信号与dut的端口相连

mcdt dut(.clk_i(clk),.rstn_i(rstn),.ch0_data_i(ch0_data),.ch0_valid_i(ch0_valid),.ch0_ready_o(ch0_ready),.ch0_margin_o(ch0_margin),.ch1_data_i(ch1_data),.ch1_valid_i(ch1_valid),.ch1_ready_o(ch1_ready),.ch1_margin_o(ch1_margin),.ch2_data_i(ch2_data),.ch2_valid_i(ch2_valid),.ch2_ready_o(ch2_ready),.ch2_margin_o(ch2_margin),.mcdt_data_o(mcdt_data),.mcdt_val_o(mcdt_val),.mcdt_id_o(mcdt_id)
);

产生时钟

周期为10,5s翻转一次

initial begin clk <= 0;forever begin#5 clk <= !clk;end
end

产生复位

仿真开始,等待10ns复位
再等待10个上升沿,10ns+5ns+90ns

initial begin #10 rstn <= 0;repeat(10) @(posedge clk);rstn <= 1;
end

发送激励

等待复位信号105ns:clk↑,rstn↑再等clk↑为下一个时钟
等待五次上升沿:105+50=155ns
三个通道依次发送数据:等待一个clk再发送数据:165ns

initial begin @(posedge rstn);repeat(5) @(posedge clk);// channel 0 testchnl_write(0, 'h00C0_0000);chnl_write(0, 'h00C0_0001);// channel 1 testchnl_write(1, 'h00C1_0000);chnl_write(1, 'h00C1_0001);// channel 2 testchnl_write(2, 'h00C2_0000);chnl_write(2, 'h00C2_0001);
end

发送有效数据间隔一个时钟再次发送有效数据
等待一个clk发送数据

// channel write task
task chnl_write(input reg[1:0] id, input reg[31:0] data); case(id)0: begin@(posedge clk);//模仿时序逻辑,等到上升沿后发送数据ch0_valid <= 1;ch0_data <= data;@(posedge clk);//模仿时序逻辑,等到上升沿后发送无效ch0_valid <= 0;ch0_data <= 0;end1: begin@(posedge clk);ch1_valid <= 1;ch1_data <= data;@(posedge clk);ch1_valid <= 0;ch1_data <= 0;end2: begin@(posedge clk);ch2_valid <= 1;ch2_data <= data;@(posedge clk);ch2_valid <= 0;ch2_data <= 0;enddefault: $error("channel id %0d is invalid", id);endcase
endtask

三、Questasim的Makefile2

  1. 用户变量:top和要编译的文件,需要修改
  2. 环境变量:
    -vopt: simulate full optimization;
    -novopt: simulate without optimization
    -voptargs=+acc: simulate
    v10.7用-voptargs=+acc
    v10.6用-novopt,不然会默认优化一些没有用到的参数,就无法查看这些参数
  3. 其它
    -c: command模式,不启动图形界面
    -do “xxx”: 执行xxx命令
  4. 命令行输入
    vsim & 启动questa
    restart 重新开始仿真
    f 查看全部波形
    vlog 编译
    run -all
    log -r /* 保存信号,-r递归,/*层层循环保存所有信号
#############################
# User variables
#############################
TB       = tb1
DFILES   = {arbiter.v,slave_fifo.v,mcdt.v}
VFILES   = $(TB).v
#############################
# Environment variables
#############################
VLAB                 = vlib work #创建名为work的lib
VCOMP                = vlog -l com.log #vlog编译;-l com.log将日志存放到com.log中
VSTART               = vsim -l sim.log #vsim启动questa
VSIMULATE            = -voptargs=+acc #simulate
VADDWAVE             = add wave -position insertpoint sim:/$(TB)/*#添加top文件的波形
VSAVE                = log -r /*#生成波形文件
RUN                  = run 1us #运行1ns
VQUIT                = quit -f #退出all: create_lib compile simulate #make要执行的顺序create_lib:$(VLAB)compile:$(VCOMP) $(DFILES) $(VFILES)simulate:#$(VSTART) -c $(VSIMULATE) work.$(TB) -do "$(SAVE) $(RUN);$(VQUIT)"$(VSTART) $(VSIMULATE) work.$(TB) -do "$(VADDWAVE);$(VSAVE);$(RUN)"clean:rm -rf work mti_lib transcript modelsim.ini *.log vsim.wlf

四、波形


  1. https://recclay.blog.csdn.net/article/details/118121495 ↩︎

  2. https://blog.csdn.net/qq_39794062/article/details/113402057 ↩︎

MCDF实验_lab0(0)相关推荐

  1. MCDF实验4(4)

    目录 引言:接着上篇的MCDF实验4(3),解释一下添加的检查 1)通道 en=0 时的检查 2)arbiter 的仲裁功能的检查 在tb.sv 中 连接信号 引言:接着上篇的MCDF实验4(3),解 ...

  2. 口令攻击实验V2.0

    口令攻击实验V2.0 实验目标 解开flag.rar的口令,获得解压缩文件中的Flag. 实验初始线索 打开nnn.docm,其中会有下一步指示. 提示:文档nnn.docm的打开口令由6位小写英文字 ...

  3. MCDF实验——Lab4

    在之前的Lab3中,通过一个初具规模的MCDT的验证环境,学习到: 验证环境按照隔离的观念,应分为硬件DUT,软件验证环境,和处于信号媒介的接口interface. 对于软件验证环境,需要经历建立阶段 ...

  4. c语言用p1口进行转弯灯实验,P1.0口转弯灯程序 单片机IO口的应用

    P1.0开关接5V时,右转弯灯闪亮,P1.1开关接5V时左转弯灯闪亮.P1.0.P1.1 开关同时接5V或接地时,转弯灯均不闪亮. 程序框图 P1.0开关接5V时,右转弯灯闪亮,P1.1开关接5V时左 ...

  5. MCDF实验_lab1(1)

    目录 一.问题 二.实验要求 三.代码分析 时间单位 信号 例化 产生时钟 产生复位 发送激励模块 产生数据 实例化slave模块 发送激励 三.Questasim的Makefile[^2] 四.波形 ...

  6. 逆向工程实验_lab0(密码学算法逆向)

    文章目录 一级目录 1. cipher text 2. cipher text 3. Vigenere cipher text 4.Rar file without password 一级目录 1. ...

  7. 网络渗透实验1.0——网络扫描与网络侦察

    1.实验目的: 理解网络扫描.网络侦察的作用:通过搭建网络渗透测试平台,了解并熟悉常用搜索引擎.扫描工具的应用,通过信息收集为下一步渗透工作打下基础. 2.实验内容: 1.用搜索引擎Google或百度 ...

  8. ESP32实验03:0.96tft液晶显示屏驱动

    基于ST7735s的0.96寸tft屏幕显示 效果展示 实现了时钟显示,基于ds1307模块,时钟字体采用的模拟数码管字体 实现了图标显示,后续用于天气以及状态指示 暂未添加网络校时,以及网络获取天气 ...

  9. MCDF实验——Lab5

    Lab5主要完成如何定义覆盖率,如何从验证计划到测试用例的实现,最后再到覆盖率的量化.验证量化分为代码覆盖率和功能覆盖率. 一.编译 在编译过程中,需要对于设计相关的文件设置额外的覆盖率编译选项. 只 ...

最新文章

  1. 拼多多“砍价免费拿”始终差“0.09%”遭起诉,官方回应:活动真实
  2. 动态规划 dp03 最长公共子串问题 c代码
  3. python——文件操作File
  4. VTK:vtkCellArray用法实战
  5. 电力电子应用技术_RFID技术应用在电力行业工具管控
  6. C#继承与多态 virtual虚方法的使用 在子类中使用override重写父类函数
  7. http请求post,返回excel文件,并接收
  8. 100条常用写作谚语(1)(2)(3)(4)
  9. r语言如何读取matlab数据类型,[转载]R语言数据类型解析[转]
  10. ISTQB高级国际认证试题及答案(一)
  11. 【Oracle经典】132个oracle热门精品资料——下载目录收藏 (转载)
  12. android checkbox 选中事件_挖穿Android第四十九天
  13. 【100题】第十九题(斐波那楔数列)
  14. 简单的遗传算法实例(MATLAB版)
  15. Docker加速器 DaoCloud
  16. 好书推荐《月亮与六便士》
  17. 《吐血整理》一篇文章教你学废Git版本管理
  18. win10添加打印机失败,无法正常使用打印机的解决办法
  19. Quasi-Monte Carlo Image Synthesis in a Nutshell——低差异序列
  20. android实现音乐播放器(进度条)

热门文章

  1. 深度学习中需要的矩阵计算
  2. 50个开机进BIOS按键查询
  3. 2018年蓝桥杯A组C/C++决赛题解
  4. 免费的移动硬盘数据恢复软件EasyRcovery15
  5. 学习Python全套代码【超详细】Python入门、核心语法、数据结构、Python进阶【致那个想学好Python的你】
  6. 在Windows 下的 Qt 应用程序获得 Administrator 权限
  7. c语言蚂蚁王国的货币系统,蚂蚁王国的探索之旅
  8. SQL(之一)-SQL经典题目
  9. python毕业设计能做什么工作_用python可以做什么毕业设计项目|融资公司的主要业务...
  10. 关于mirro多仓库配置的一些问题