나는 비교적 새로운 Verilog (VHDL 사용자)이며, 내 기술을 향상시키기 위해 Verilog를 사용하여 내 테스트 환경을 구축했다. (내 QC는 자신의 환경을 사용한다.)Verilog에서 여러 줄 매크로를 정의하는 방법은 무엇입니까?
내 env에서 나는 회선 (i2c 마스터)에 무작위로 자극을주는 마스터를 에뮬레이트합니다.
는`define writeChipId(addr)\
sda = 1\
#7500 sda = addr[3];\
#2500 sda = addr[2];\
#2500 sda = addr[1];\
#2500 sda = addr[0];\
#2500;
`define writeData(data)\
sda = data[7]\
#2500 sda = data[6];\
#2500 sda = data[5];\
#2500 sda = data[4];\
#2500 sda = data[3];\
#2500 sda = data[2];\
#2500 sda = data[1];\
#2500 sda = data[0];\
#2500 sda = 1;\
#2500; // time for the slave to answer
`define readData\
#sda = 1\
#20000 sda = 0;\
#2500; // master always answer ACK
내 문제가 있다는 것입니다 : 난 정말 진정한 마스터를 사용하려는 경우에만 '바르게 행동'마스터 싶어하지 않았기 때문에
, 나는 I2C 통신에 저를 제공하기 위해 다음과 같은 매크로를 만들어 , 내가 이러한 매크로를 사용하려고하면 내가 컴파일 오류 (modelsim을 사용하여) 내가 구문 오류가 있고 나는 '예기치 않은'[ '' '이어야합니다. chipID 매크로를 사용하고 예기치 않은 '#'은 ';'이어야합니다. 읽기 \ 쓰기 매크로를 사용할 때.
내가 시도 (실패)
`writeChipId(`chipID)
및
`writeData(rndData)
및
`readData
아니지만 적어도 마지막으로있는 용도 : 내가없이 같은 라인을 작성하는 경우 내 코드의 매크로, 그것은 완벽하게 컴파일됩니다 (단 한 곳에서만 시도 했으므로 다른 곳에서는 12 곳을 원하지 않습니다. 매크로 ...)
누구는 단서가 무엇입니까? 나는 행운이 함께 매크로와 함께 놀려고 노력하고 또한 그들이 중간에 갇혀 공백이 없다는 것을 확인했습니다.
또한 여러 줄로 된 매크로 예제를 찾아 보았지만 비슷한 결과를 얻지 못했습니다. 모든 repliers
편집에 사전에
감사
뭔가 내가 말을 잊어 버렸 : 내가 매크로를 가지고 입력을 제거하고 CONST 값 대신 입력을 사용할 때, 그것은 잘 작동합니다.
왜 '작업'대신 인수를 사용하여 멀티 라인 매크로를 사용하기로 결정 했습니까? – Greg
내가 말했듯이 나는 Verilog을 처음 사용한다. 나는 '과제'에 대해 잘 알지 못하고 있으며 이것은 내 TB의 진화이다. (수동으로 행동을하거나 매크로로 옮겨 가기 시작했다.)매크로없이 마스터와 명령 CPU 동작을 에뮬레이션 할 수 있을지 확신 할 수 없습니다. 나는 틀릴 수도 있지만 이것은 내가 지금까지 언어에 대해 알고있는 전부다. ... – user2141046