微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 快崩溃了,请高手指教!--Questasim6.4c clocking采样问题!

快崩溃了,请高手指教!--Questasim6.4c clocking采样问题!

时间:10-02 整理:3721RD 点击:
我的代码中定义了一个接口,在使用接口时,时钟采样值不对:
`timescale 1/100
interface Rx_if;
logic rvalid;
logic rready
logic [63:0] rdata;
clocking cb @(posedge clk);
default input #5,output #5;
output rready;
input rvalid,rdata;
endclocking : cb
modport TB (clocking cb);
endinterface :axi_if
virtual Rx_if.TB vTb
program automatic test(...)
vTb Rddata;
logic [63:0] RcvData;
...
...
while(rvalid&&rready==0)
@Rddata.cb;
RcvData = RcvData.rdata;
...
...
endprogram

RcvData 的值总是采集时钟上升沿之后的数据,正常应该采集时钟沿之前的数据,望高手指点!

试一下是不是用<= 换 =

建议不要使用clocking.

while(rvalid&&rready==0)
@Rddata.cb;
RcvData = RcvData.rdata;
这里你是不是写错了?
while(rvalid&&rready==0)
@Rddata.cb;
RcvData = RddData.rdata;
解释:
0:对cb内的信号采样,如果在采样事件时被采样信号发生了变化,是采样到变化后的值。
1. 这里当然是采样的变化后的值了。
2. 这个是在cb的时钟沿处采集cb内的值,如果cb.input刚好在时钟沿发生变化,采集到的是变化后的值。
3. 如果想采集到变化前的值,那么在RcvData = RddData.rdata;前加一个延时#1,即可。但是这样时序得往后移一个时钟周期才能踩准。
4. 如果想采集到变化前的值,可以直接采样cb外部的rdata;或者直接使用内部的RddData.rdata,不要用RcvData = RddData.rdata对RddData.rdata再次采样
5. 我猜你是把dut的输出直接连接到了RddData.rdata,这是错误的做法,语法正确,行为错误。
6. 一般是只把cb作为tb的驱动和dut的输出采样使用
7. 可以找我qq10863523帮你一起揉捏clocking &interface

你这个接口写得极其混乱,不是一般的interface用法。

了解一下。

感谢答复~
试过了,不行,代码运行时报错。

感谢答复~
我是个初学者,呵呵,都是在已有的工程上修改代码来跑的,不用clocking比较麻烦。

感谢答复,QQ上请教

同初学者。

你的时间单位写的有问题。
`timescale 1/100->`timescale 1ns/10ps

再采样一次不就能取到你想要的值,不过时序不知道会不会乱

学习一下

上一篇:system verilog and vmm
下一篇:offgrid问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top