문제

Verilog에서 automatic 키워드를 사용하여 작업을 선언한다는 것은 무엇을 의미합니까?

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

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

도움이 되었습니까?

해결책

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

알다시피 - 우리 중 일부는 Verilog를 사용합니다...(으으)

다른 팁

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

"자동"은 재귀 함수를 위한 것이지만 동시에 다른 실행 스레드에서 동일한 함수를 실행하기 위한 것입니다.예를 들어, N개의 서로 다른 블록을 "포크"하고(Verilog의 fork->join 문 사용) 모두 동시에 동일한 함수를 호출하게 하면 함수가 자신을 재귀적으로 호출할 때와 동일한 문제가 발생합니다.

대부분의 경우 작업이나 기능을 "자동"으로 선언하지 않아도 코드가 문제가 없지만 특별히 다르게 필요한 경우가 아니면 거기에 넣는 것이 좋습니다.

"automatic" 키워드를 사용하면 재귀 함수를 작성할 수도 있습니다(Verilog 2001부터).나는 그들이 바닥에 있다면 합성이 가능해야 한다고 믿지만, 도구 지원이 있는지는 잘 모르겠습니다.

나도 Verilog를 한다!

Will과 Marty가 말했듯이 automatic은 재귀 함수를 위해 만들어졌습니다.

정상인 경우(예:자동이 아님) 함수가 다른 값으로 호출되고 동일한 시간 조각에서 시뮬레이터에 의해 처리되는 경우 반환된 값은 불확실합니다.이는 발견하기 매우 까다로운 버그일 수 있습니다!이는 시뮬레이션 문제일 뿐이며, 합성되면 논리가 정확합니다.

함수를 자동으로 만들면 이 문제가 해결됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top