해결된 질문
작성
·
322
0
이 부분에서 reg_ren이 1일때 reg10에 저장된 값을 읽으려하는데 저의 생각에는 reg_ren값이 1이 되는 순간 reg_rdata값이 나올줄 알았는데 5ns뒤인 20ns뒤에 나오는걸 확인했습니다.
이런 타임딜레이는 하드웨어상 어쩔수없는 딜레이인가요?
답변 1
1
문서의 어떤 부분인지 알려주시면(페이지) 감사하겠습니다.
일단 파형으로 봐서는 simulation이 시작되는 부분이네요.
해당 모듈의 reset, mclk (main clock)이 어떤지 확인해 보시고요,
reg_ren 신호를 어떻게 만드셨는지요?
모든 코드들은 mclk (main clock)과 동기되어 동작하도록 되어 있어서, mclk와 같이 파형을 보셔야 합니다.
아래는 tb_i2c_slave8x8 simulation 파형입니다. reg_ren이 Active 되고 그 다음 mclk clock에 reg_rdata가 나오도록 동작합니다.
registermodule 로 구성된 모듈(강의의 소스는 i2c_reg8x8 입니다만)의 read/write 동작은 mclk의 positive edge에서 동작합니다.
작성하신 test bench의 mclk 주기가 2x5ns = 10ns 입니다.
read/write 동작이 완료되기 위해서는 적어도 10ns 의 시간이 필요합니다.
작성하신 test bench에서는 5ns 단위로 동작합니다. 이는 read/write 동작을 위한 시간이 부족하게 됩니다.
#5 을 #10으로 변경해서 테스트 해보시길 바랍니다.
그리고 simulation 하면 오류 발생하지 않나요?
모든 신호들은 reg, wire 선언후 사용해야 맞는 것입니다.
아래 코드는 제가 수정해서 simulation 한 코드입니다.
참고하시길 바랍니다.
simulation 결과입니다.
fpga_intro에 있는 reg 8*8부분(11.3.3, 192page)만 따로 모듈화하여 테스트벤치 해보았습니다.
이건 제가 구성한 테스트벤치 코드입니다! 제가 궁금한건 reg_rdata가 reg_ren이 입력되는 동시에 값이 읽혀야 하는건지 궁금하여 여쭤봅니다.