2014-01-08 7 views
2
내가 요즘 시뮬레이션을 수행하는 ModelSim을 사용하던, 그리고 문제가 나에게 와서

으로, 즉 :ModelSim을 컴파일러 동일하지의 Quartus

그리고 thers이 같은를 Verilog 코드의 조각이었다

if (cnt == `END_CNT) 
... 
reg [7:0] cnt; 
always @(posedge clk) 
    if (en) 
     cnt <= cnt +1; 
... 

이는 할당 블록까지 reg 권한을 정의한다는 것을 의미하며 정의 전에 변수를 사용할 수 있습니다. 제 코딩 스타일이며 Quartus에서도 괜찮습니다.

하지만 ModelSim을에서 파일을 컴파일 할 때, "변수가 정의되지 않은"오류가 올 것, 나는 if 문 위의 정의 라인을 이동해야 :

reg [7:0] cnt; 
... 
if (cnt == `END_CNT) 
... 
always @(posedge clk) 
    if (en) 
     cnt <= cnt +1; 
... 

나는 다음과 같은 코드를 많이 가지고, 그리고 그것은 나를 그렇게 괴롭힌다. ModelSim 초보자로서, 나는 거기에 내 문제를 다루는 컴파일러 설정 (난 아무것도 찾을 수 없습니다) 궁금해?

+4

는 IEEE 표준 1800년부터 2012년까지 절에 따르면 6.5 그물과 변수 "들이 사용되기 전에 데이터는 암시 적 그물 떨어져 선언한다 ". 코드가 Std를 따르지 않으므로 모든 선언을 이동해야합니다. – toolic

+1

제 경험상, Modelsim은 언어 법의 시행과 관련하여 가장 엄격한 시뮬레이터입니다. @toolic 의견을 답해야합니다. – dwikle

+0

@ dwikle : 내 의견은 "modelsim 컴파일러 설정이 있습니까?"라는 질문에 대한 답변을 제공하지 않으며 SO 사용자는 그다지 관대하지 않습니다. – toolic

답변

0

Quartus Verilog 컴파일러는 모델 1만큼 엄격하지 않으므로 언급 한 것과 같은 재미있는 일을 할 수 있습니다.

그러나 Verilog 표준에 따르면 reg는 선언 된 후에 만 ​​사용할 수 있으므로이 문제를 해결하기위한 유일한 방법은 사용하기 전에 reg 선언을 이동하는 것입니다.

참조 : SystemVerilog를 표준 (섹션 6.5 참조 : 그물 변수) http://standards.ieee.org/findstds/standard/1800-2012.html