2017-11-28 3 views
0

그래서 나는 이벤트가 트리거 될 때 일부 하드 와이어 확률 벡터의 일부 비트를 설정하고 싶었다, 그래서 나는이 한 :

always @(some_event) begin 
    err_byte[0] = ($urandom()&65535 < 85) ? 1'b1 : 1'b0; 
    err_byte[1] = ($urandom()&65535 < 85) ? 1'b1 : 1'b0; 
    //....etc 

내 err_byte 항상 있었다를 이 코드가 수천 번 트리거되었을지라도 (적어도 1 비트를 1로 설정하기에 충분 했음) 8'h00의 값. 정수 rndv를 선언하고 다음을 수행했습니다.

rndv = $urandom()&65535; 
err_byte[0] = (rndv < 85) ? 1'b1 : 1'b0; 
rndv = $urandom()&65535; 
err_byte[1] = (rndv < 85) ? 1'b1 : 1'b0; 
//etc... 

갑자기 작동합니다. 이제 질문 : 도대체 여기서 무슨 일이 일어나고있는거야? 조건부 표현식 내에서 시스템 작업을 호출 할 수 없습니까?

답변

3

운영자 우선 순위. <&보다 앞에 있으므로 첫 번째 예는 이와 같이 작성할 수 있습니다.

err_byte[0] = ($urandom() & (65535 < 85)) ? 1'b1 : 1'b0; 

지금보십시오.

+0

참으로 그걸 알아 냈고 내 자신의 질문에 답하고 싶었습니다. – artemonster