-1

###로 작성된 지연이있는 SystemVerilog 코드를 합성하려고하지만 신디사이저가 지연이 합성 가능하지 않으므로 구문 오류가 발생합니다. 합성 될 지연을 줄 수있는 방법이 있는지 알고 싶습니다. 예를 들어 지연 코드가있는 SystemVerilog 어설 션Verilog에서 합성 가능한 지연

어설 션 속성 ((req1 == 0) ## 1 (req1 == 1) ## 1! (req2 == 1) || (gnt1 == 0));

어떻게 동작을 잃지 않고 합성 할 수 있습니까?

답변

1

속성은 Verilog의 일부가 아니며 SystemVerilog의 일부입니다. 더 중요한 것은 속성 자체도 합성 할 수 없다는 것입니다. 속성은 시뮬레이션 환경에서 cover 또는 assert 문에서 사용됩니다.

지연의 유일한 옵션은 신호를 지연시키기 위해 플립 플롭을 사용하는 것입니다. 귀하의 재산에서 ##1은 "다음 번에"귀하의 재산과 관련된 클럭킹 (커버/단언 문 또는 클럭킹 블록 내에 있음)이 있다고 가정합니다.

는 달리 합성 코드에 합성 사이클 지연을 만들려면 :

[email protected](posedge ck or posedge arst) begin 
    if(arst) 
    data_delayed <= '0; 
    else 
    data_delayed <= data; 
end 
+0

입니다. 예, 코드의 특성이 SystemVerilog 어설 션을 사용하여 지정되었습니다. 실제로 하드웨어 설명 코드를 형식적으로 검증 가능한 코드로 변환하려고합니다. 그래서 특성을 지정하고이를 신디사이저로 전달하여 검증을 위해 변환하기 위해 어설 션을 사용하고 있습니다. 신디사이저는 사용 된 지연 신택스, 즉 ## 1을 수용하지 않고있다. 위에서 언급 한 것이 신디사이저의 지연을 모델링하는 유일한 방법입니까? – mii9

+0

속성을 종합 할 수 없으며 정식 검증자가 작동하는 방식이 아닌 것으로 판단됩니다. 필자의 (제한적) 공식 검증을 통해 공식 도구는 구현을 하나의 입력으로, HDL 속성을 다른 것으로 입력합니다. 따라서 속성은 합성되지 않으며 정상적인 방법으로 작성할 수 있습니다. 아마도 당신이 사용하고있는 도구에 대해 더 많은 정보를 제공하는 곳과 사용 방법을 묻는 또 다른 질문을해야합니다. – Hida

1

당신이 어떤 이해가되지 않습니다 쓴 속성을. 부울 표현식의 중간에 지연을 추가 할 수 없습니다. 대신 일련의 표현식을 작성 하시겠습니까? 그렇다면 올바른 구문은

sequence s1; 
((req1 == 0) ##1(req1 == 1) ##1 !(req2 == 1) || (gnt1 == 0)); 
endsequence 
+0

네, 맞습니다. 그것은 올바른 길입니다, 미안 해요, 내 실수. 고마워. 그러나 지연 구문은 지정된 동작에 사용되며 신디사이저는 구문 오류를 발생시킵니다. 그것은 지연 구문없이 속성에 대해 잘 작동합니다. – mii9