|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在编写验证程序的时候,遇到了一些问题,想向大家请教,问题如下:
1、就是 always @ ( sensitive list )
begin
if ( condition 1)
begin
if(condition2)
begin
Part A
end
else
begin
Part B
end
end
end
在这样的过程块中,请问condition 1如果是沿触发如 if(a== 1&& a_d == 0),假设a的初始值为0,sensitive list是一个时钟信号的上升沿:posedge clk, 在程序的执行过程中,a有一个时钟周期值为1,然后隔很长的时间a又有一个时钟周期值为1,a_d为a延迟一个周期后的信号
备注: a信号不是由clk来同步的,而是由一个比clk频率低很多的时钟来赋值的
这样的话, 如果在一个时钟上升沿时满足第一个IF后的条件condition 1并且满足第二条件if(ondition 2), ondition 2只在第一个a信号的上升沿条件时是有效的,从a的第二个上升沿开始, if(condition 2) 都不成立拉, 那么紧接着的下一个时钟肯定不会满足的condition 1的,因为condition 1 的周期很长的
这时是不是在下一个时钟的上升沿就不执行if(condition 1)后面的程序了呢? 还是会继续执行if(condition 1)下面的if(condition 2)里面的程序,直到第二个a的上升沿的到来,然后跳出if(condition 2),执行else后面的程序呢?
备注:part A是一个嵌套调用,就是说可以执行很长时间的
2、就是在写验证程序的时候,always @ ( posedge clk )
begin
@(negedge flag_n)
begin
part A
end
end 可以这样写么?可以在always @ ( posedge clk )里面再包括一个 @(negedge flag_n)么?备注:flag_n是一个周期性信号,相对clk来说周期很长的,非常长的。
补充:给flag_n赋值的时钟不是clk,而是一个比clk频率低很多时钟
|
|