2008-08-29 5 views
15

Verilog에서 자동 키워드로 작업을 선언하면 무엇을 의미합니까?Verilog 자동 작업

task automatic do_things; 
    input [31:0] number_of_things; 
    reg [31:0] tmp_thing; 
    begin 
    // ... 
    end 
endtask; 

참고 :이 질문은 사이트에 하드웨어 프로그래머가 있는지 궁금해하기 때문에 주로 발생합니다. :)

답변

14

이것은 태스크가 재진입한다는 것을 의미합니다. 태스크 내에서 선언 된 항목은 태스크의 다른 호출간에 공유되지 않고 동적으로 할당됩니다.

당신은 볼 - 우리 중 일부는 Verilog를 할 ... (우)

3

"자동"키워드는 또한 (2001 Verilog에 이후) 재귀 함수를 작성 할 수 있습니다. 나는 그들이 밑바닥이라면 합성 가능해야한다고 생각하지만 도구 지원이 있는지 확실하지 않습니다.

나도 그래, Verilog!

1

윌 (Will)과 마티 (Marty)가 말했듯이, 자동은 재귀 함수를위한 것입니다.

일반적인 (즉, 자동이 아닌) 함수가 다른 값으로 호출되고 시뮬레이터에서 동일한 시간 조각으로 처리되는 경우 반환 값은 불확정합니다. 그것은 아주 까다로운 버그 일 수 있습니다! 이것은 시뮬레이션 문제 일 뿐이며 합성 된 논리가 정확할 것입니다.

자동으로 기능을 수정합니다.

21

"자동"은 실제로 "재진입"을 의미합니다. 이 용어 자체는 소프트웨어 언어에서 도난당했습니다. 예를 들어, C는 범위가 실행될 때 스택에 할당 된 것으로 변수를 선언하고 이후에 할당을 취소하여 동일한 범위의 여러 호출이 해당 변수의 영구 값을 볼 수 없습니다. C에서이 키워드에 대해 들어 보지 못한 이유는 이것이 모든 유형의 기본 저장 클래스라는 것입니다. 대안은 "정적"이며 "이 변수를 정적으로 (메모리의 단일 전역 위치에) 할당합니다. 함수가 호출 된 횟수에 관계없이 프로그램을 실행하는 동안이 동일한 메모리 위치를 참조하십시오. "및"휘발성 "은"내 SoC의 다른 위치에있는 레지스터이거나 다른 장치에있는 레지스터입니다. 콘트롤, 컴파일러, 코드에서 중간 쓰기없이 이전 읽기에서 얻은 내 값을 알고 있다고 생각할 때조차도 읽지 않도록 최적화하지 마십시오. "

"자동"은 재귀 함수를위한 것이지만 동시에 다른 실행 스레드에서 같은 함수를 실행하기위한 것입니다. 예를 들어, Verilog의 fork-> join 문을 사용하여 N 개의 다른 블록을 "분기"하여 동일한 함수를 동시에 호출하게하는 경우 반복적으로 자체를 호출하는 함수와 동일한 문제가 발생합니다.

많은 경우 작업 또는 기능을 "자동"으로 선언하지 않고도 코드가 정상적으로 작동하지만 사용자가 별도로 지정해야하는 경우가 아니라면 코드를 넣는 것이 좋습니다.

관련 문제