2017-03-17 1 views
0

사례에 대한 와일드 카드를 포함하는 사례 명세서를 작성할 때 특정 사례가 어떻게 처리됩니까? 상기 단순화 된 예에서 SystemVerilog는 case 문에서 가능한 와일드 카드 충돌을 어떻게 처리합니까?

always_comb case(selector) 
    4'b0???: begin // Pick me if the msb is 0, unless the two lsb's are 01. 
    end 
    4'b0?01: begin // Pick me if the msb is 0 and the two lsb's are 01. 
    end 
    default: begin // Pick me if the msb is X or 1. 
    end 
endcase 

가 첫 번째 경우 (모든 와일드 카드) 선택기의 값으로 선정 만, 가장 특정 가능한 경우를 선택하도록 할 수있다. 그 사건들이 어떻게 다루어지는거야?

+0

사례는 항상 우선 순위 기반이며 사례 문과 일치하면 해당 사례 아래의 모든 문구가 실행되지 않습니다. –

답변

2

SystemVerilog는 case 문이 우선 순위에 있다고 가정합니다. 두 번째 항목은 절대로 일치하지 않습니다. 따라서 가장 구체적인 사례를 먼저 이동해야합니다. SystemVerilog는 의도를 더 잘 지정하기 위해 unique casepriority case 구문을 사용합니다.

+0

예제와 함께 고유 수정자를 사용할 수 있습니까? 보다 구체적인 사례와 덜 구체적인 사례가 상호 배타적이라는 디자인 의도를 전달하겠습니까 (가능하면 항상 더 구체적인 사례를 취하십시오)? 보다 구체적인 사례를 먼저 배치하고 우선 순위를 표시하면 내 용도에 대한 읽기가 어려울 것입니다. – Vreenak

+0

아니요, '고유 케이스'는 단 하나의 케이스 항목 만이 'selector'의 값과 일치한다는 것을 보장합니다. 그리고 care_는 당신이 그 비트 위치의 값을 고려하지 않는다는 것을 의미하므로, 일치하는 여러 아이템을 얻을 수 있습니다. 보다 구체적인 사례 항목이 다른 일치 항목보다 우선 순위가 높으면 먼저 지정해야합니다. –