系统Verilog断言,SVA

时间:2018-02-13 04:33:34

标签: system-verilog-assertions

我为握手协议编写断言,其中可以有背对背请求和确认。请求后,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的一对一映射。

3 个答案:

答案 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个,则逻辑要简单得多。请说明是否是这种情况。