2014-07-22 2 views
0

즉석에서 헤더 파일을 변경하는 방법이 있습니까?즉석에서 헤더를 업데이트하는 방법

헤더 파일에는 모듈에 사용할 수있는 많은 상수가 들어 있습니다. 그러나 내 응용 프로그램에서는 일부 상수를 수동으로 자주 변경해야합니다. 값을 자동으로 변경할 수있는 방법이 있습니까?

다음 방법을 시도했습니다. 1. C++을 사용하여 상수를 결정하고 헤더 파일에 씁니다. 2. SV 모듈을 사용하여 헤더 파일을 업데이트하십시오. 이러한 모든 방법은 맨 위 모듈을 실행하기 전에 추가 단계가 필요합니다. 시뮬레이터를 실행할 때 헤더 파일을 업데이트 할 수있는 방법이 있습니까?

다음 header.v에는 모듈 main에서 사용되는 NUM이 포함됩니다. NUM은 자주 변경됩니다.

이 문제는 C++이나 Java와 같은 다른 언어에서도 마찬가지입니다.

header.v: 
`define NUM 256 //256 must be changed often 

module top(); 
    initial ... 
    //instantiation 
    main MAIN(); 

endmodule 

//this module contains NUM 
module main(); 
    byte[0:`NUM - 1]; 

endmodule 
+4

를 종종 변경하는 경우, NUM이 있어야 할 정의가 아닌 구성 가능한 매개 변수 에드 상수. – Caleb

+0

왜 자주 변경해야합니까? 귀하가 상수 (헤더 파일)를 사용하고 그것을 변수처럼 사용하고 싶다고 설명합니다. 나는 당신이 당신이 거기서 얻는 것을 시도하고있는 무슨을 기술하는 경우에 아마 더 나은 응답을 생각한다. – Morgan

+0

또 다른 옵션은 다른 상수를 사용하는 여러 시뮬레이션을 만드는 것입니다. 512x512 배열에서 작동하는 시뮬레이션을 사용하기 전에이 작업을 수행했습니다. 8x8 어레이에서 작동하는 시뮬레이션을 실행하여 더 빠르게 실행하고 초기 버그 검사를 수행 할 수 있습니다. 그런 다음 작동이 끝나면 전체 512x512 시뮬레이션을 실행합니다. 두 파일의 유일한 차이점은 파일 상수입니다 .v – Russell

답변

1

동일한 시뮬레이션에서 모듈마다 다른 경우 `define 대신 parameter을 사용해야합니다.

main #(parameter NUM) (/*portlist*/); 
    // ... 
    byte array [0:`NUM - 1]; // FYI 'byte' is a SystemVerilog keyword 
    // ... 
endmodule 

대부분 시뮬레이션 값이 시뮬레이션 내에서 동일하지만, 각각의 시뮬레이션에 대한 다른 경우 일 수있는, 명령 라인에서 정의 통과 지원.

  • +define+NUM=256
  • -define NUM=256
  • -D NUM=256
header.v의 정의에 `ifndef 포장, 경고를 재정의 줄이려 :

`ifndef NUM 
    `define NUM 256 //256 must be changed often 
`endif 
+0

그렉, 대답 해 주셔서 감사합니다. 그것은 작동합니다. – gnoejh

1

C++ 물건 같은 상수는 컴파일 시간 동안 기계 언어로 번역 된 compiled language이다 (I 상세한 이해는 주소 공간을 처리하기 위해 참조 할 수 있습니다, 매우 원시 설명을 알고 상수 http://www.geeksforgeeks.org/memory-layout-of-c-program/를 그 안에있는 경우) . 이러한 상수 (또는 비슷한 내용)를 변경하려면 코드를 다시 컴파일해야합니다. 몇 가지 도구를 사용하여 입력 텍스트 파일에서 사용자 정의 코드를 생성 할 수있는 기술이 있습니다. 그러나 이것은 귀하의 시나리오에는 적용되지 않습니다.

사용자 지정에 따라 매개 변수를 정의 할 수있는 경우 구성 파일이 가장 적합하다고 가정합니다.

관련 문제