2017-10-21 2 views
0

Verilog 파일을 가지고 싶습니다. 일부 파일을 실행 한 다음 다른 파일에서 include "maths.v"이고 작업을 호출하는 작업은 mathsfunction;입니다. 내가 제대로 이해한다면 그 시점에서 작업을 실행해야 다른 파일에 initial begin - end 블록 코드는 다음과 같습니다 :verilog 2001 구문에서 전역 선언이 불법 임.

Maths.v

task mathsfunction; 
reg [0:31] x; 
reg [0:31] y; 
reg [0:31] z; 
begin 
    x = $urandom; 
    y = $urandom; 
    z = x + y 
end 
#200  
endtask 

내가 처음에 한 컴파일 오류를 받고 있어요 line task mathsfunction; 어느 것이 Global declarations are illegal in Verilog 2001 syntax. 내가 지금까지 배웠던 것에서, 그냥 작업 (모듈이 아닌, 나는 모듈이되기를 원하지 않는다) 인 verilog 파일은 괜찮을 까? 왜 이것이 작동하지 않는지 확실하지 않습니다.

어떤 도움이 Verilog2K ("Verilog를")와 SystemVerilog를 혼동하고 있다는

+0

자세한 정보를 제공해야합니다. 글로벌 공간에서 작업을 선언 할 수 있습니다. 그래서 당신의 메시지는 다른 것과 관련이 있습니다. – Serge

+0

전 LRM이 없습니다.하지만 Verilog의 모든 버전은 전역 공간 (모듈 외부)에서 신호, 작업, 함수 또는 매개 변수 선언을 지원하지 않습니다. SystemVerilog가하는 것은 알고 있지만 그렇게하는 것은 나쁜 습관으로 간주됩니다. 공통적으로 공유되는 태스크, 함수 등을 정의하는 것은 SystemVerilog 패키지에 넣는 것이 좋습니다. – Greg

답변

0

첫 번째 문제는 좋은 것입니다. Verilog에서 작업 선언은 모듈 내에 만 나타나거나 생성 될 수 있으며 ('전역 적으로'가 아니라) 생성 될 수 있습니다. 그러면 오류 메시지가 나타납니다. 둘째, 작업에는 Verilog에서 유효하지 않은 두 개의 문 (begin/end seq 블록과 타이밍 제어)이 포함되어 있습니다. SV가 이것을 완화합니다. 그렇다고해서 블록 외부에 #200을 넣는 것은 아무 의미가 없으므로 블록 내부로 옮겨서 Verilog와 호환되도록 할 수 있습니다.

다음 문제는 작업에 입력 또는 출력이 없다는 것입니다. x, y, z은 내부입니다. 당신은 그들을 input, output 또는 inout로 만들어야합니다.

마지막으로 잘못 잘라서 붙여 넣었습니다.이 코드는 두 개 이상의 세미콜론없이 컴파일되지 않습니다.