2016-10-12 2 views
1

누군가이 코드를 확인하고 실수가 어디 있는지 말해 줄 수 있습니까? 컴파일러에서이 오류 메시지를 보냅니다. Funcio_2.vhd (10) : "OR"근처 : (vcom-1576) 'expect'). vhdl의 잘못된 기능

--Definimos la entidad funcio_2- 
ENTITY funcio_2 IS 
PORT(a,b,c,d:IN BIT;f:OUT BIT); 
END funcio_2; 

--Definimos su arquitectura logica- 

ARCHITECTURE logica OF funcio_2 IS 
BEGIN 
f<= (((NOT a) AND b) AND ((NOT c) OR b) AND(NOT d) OR(a AND c AND d) OR a AND(NOT d)) AND (NOT(a OR (NOT d)) OR NOT(((NOT a) AND b) AND ((NOT c) OR b) AND(NOT d) OR(a AND c AND d) OR a AND(NOT d)) AND (a OR (NOT d)); 


END logica; 

내 코드를 Rewrited 지금과 같은 : 내가 말할 수있는 건

+0

을,이 편안하지 않습니다. – Yeste

+0

다시 작성된 코드에서 같은 오류 메시지가 표시되지 않습니다. 지금 "작동하지 않는 이유"를 설명하십시오 – trentcl

+0

이전과 동일 : "OR"근처 : (vcom-1576) expecting ')'. – Yeste

답변

1

를 작동하지

f<= (NOT a AND b AND NOT c OR b AND NOT d OR a AND c AND d OR a AND NOT d) AND NOT(a OR (NOT d)) OR NOT(NOT a AND b AND NOT c OR b AND NOT d OR a AND c AND d OR a AND NOT d) AND (a OR (NOT d)); 

, ModelSim을가 명확하게하기 위해 괄호로하는 ANDOR 연산자를 결합 식을 필요로 자신의 상위. 나는 어디서나 문서화 된 것을 발견 할 수 없었으므로 나는 단지 교육적인 추측을했고 그것을 컴파일하는 것으로 밝혀졌다. VHDL 표준에 따르면 ANDOR의 우선 순위가 같기 때문에 왼쪽에서 오른쪽으로 평가해야합니다.

는 좀 일시적인 신호를 정의하는 자유를했다, 그러나 나는이 같은 일이라고 생각 :

t1 <= ((((((NOT a AND b AND NOT c) OR b) AND NOT d) OR a) AND c AND d) OR a) AND NOT d; 
t2 <= a OR (NOT d); 
t3 <= t1 AND NOT t2; 
t4 <= t3 OR NOT t1; 
f <= t4 AND t2; 

당신이 다른 언어로, 다음 VHDL과 같은 OR보다 긴밀하게 더 바인딩 AND을 원한다면 어쨌든 당신이 원했던 것을 해본 적이 없으며 Modelsim이 버그를 잡았을 것입니다. 어쨌든 표현을 괄호로 묶어 원하는 것을 명확하게해야합니다.

은 물론, 당신은 또한 몇 가지 부울 대수 할 수있는 : 열심히 실수를 찾기 위해 노력하고 시도

f <= a XNOR d;