我为握手协议编写断言,其中可以有背对背请求和确认。请求后,Acks可以在1到5个周期之间。我如何使用断言来确保每个req都有1个ack,同时还要考虑req或ack的毛刺?
属性p1: @(posedge clk)req ## [1:5] ack; endproperty
属性p2: @(posedge clk)$ rose(ack)| - > $过去(REQ,5);
我不确定这是否能保持req与ack的一对一映射。
答案 0 :(得分:0)
在ack之前可以有两个请求吗?如果没有,我会写:
property p_test;
@(posedge clk)
$rose(req) |=> !req[*0:$] ##0 ack;
endproperty
如果req仅为脉冲
,则有效答案 1 :(得分:0)
下面的属性2与属性1不同步。
属性p2:@(posege clk)$ rose(ack)|-> $ past(req,5);
您是说ack必须提前5个时钟提出请求。但是属性1表示req后跟ack是有效的。
我认为您需要一个ID,其中包含一个请求,该请求可以在确认发生时进行匹配。
class App extends React.Component{
constructor(props) {
super()
this.state = {
currentPage: 0,
sofaTabs: [[],[],[],....]
}
}
........
render(){
return(
<First
{Array.from(this.state.sofaTabs[this.state.currentPage] || '')}
/>
)
}
}
class First extends Component {
render() {
let sofas = this.props.sofas.map(item=>
<Sofa
changeSelection={this.props.changeSelection}
/>
)
return (
<div>... {sofas} ...</div>
)
}
function Sofa(props) {
return (
<div onClick={() => someFunction}>
some usage of props, does not really matter
</div>
)
}
答案 2 :(得分:0)
我认为您的意思是在提出任何要求之前可能会有多个要求?如果是这样,则解决方案需要属性变量或帮助程序逻辑。形式属性没有内存或计数器(不使用变量)。
如果您想使用助手逻辑,请参见以下代码:
假设您最多允许15个未完成的任务,并且最多需要25个时钟来获得所有确认:
logic [3:0] req_cnt, ack_cnt;
always @ (posedge clk) if (rst) req_cnt <= 0; else req_cnt <= req_cnt + req;
always @ (posedge clk) if (rst) ack_cnt <= 0; else ack_cnt <= ack_cnt + ack;
assert property (@ (posedge clk) disable iff (rst) sync_accept_on(req) ##25 req_cnt == ack_cnt);
计算请求和确认。然后断言经过25个周期的无要求后,req_cnt == ack_cnt。
如果未完成的请求数不超过1个,则逻辑要简单得多。请说明是否是这种情况。