작성
·
232
0
안녕하세요. 강사님.
verilog 활용 관련 강의 보면서 열공 중에 있습니다.
다름아니라 spi freq 설정할때 main clock을 이용하여 다음과 같은식으로
spi 주파수를 구한다고 하셨는데 해당 수식이 이해가 되지 않으며
"sck_freq = (freq + 1) / clock"
I2c freq 설정 식 또한 "100M/(30*8) = 416 Kbps" 이해가 되지 않아 문의드립니다.
제가 알고 있기론 단순히 메인클럭에 set 하고자하는 clock을 나눈 값으로 분주하는 것으로
(main clock/i2c sys_clock) or (main clock/spi sys_clock)
알고 있는데 강의 내용에 클럭 분주 방식이 이해가 되지 않아 문의드리게 됐습니다.
spi 강의 내용 중에 "비트단위로 처리하고, 비트단위로 Timing 을 맞추어 주는게 맞습니다. 어렵고 힘들어도 이렇게 코딩하시길 바랍니다" 라고 하셨는데 만일 처리하고자 하는 데이터가 100byte 라고 해도 강의 내용 처럼 bit 단위로 쪼개서 처리 해야하나요?
그러기엔 데이터가 워낙 많고 코드 줄이 너무 길어지는게 아닌가 싶은데 혹시 괜찬은 방식이
있는지 문의드립니다.
감사합니다.
답변 1
0
안녕하세요.
강의 통해 많은 도움 되시길 바랍니다.
1. spi, i2c frequency
spi, i2c 주파수는 serial clock (sck, scl)의 주파수를 말합니다. controller를 설계할 때, main clock이 100Mhz를 사용할 경우 너무 높은 주파수가 됩니다. 따라서 sck 신호를 생성할 때, main clock을 분주해서 생성하고, 이 값은 사용자가 설정하도록 되어 있습니다. simulation을 해보시면 설정 주파수 (spi : freq, i2c : period) 값에 따라서 sck (or scl_o) 값이 분주되어서 생성되는 것을 확인할 수 있습니다.
2. 데이터 100bytes를 처리하는 코드를 만들지는 않습니다. spi 통신이 데이터가 8bits 이면 8bits을 처리하는 코드를 만들고, 상위단에서 8bits (1byte)씩 데이터를 전송하고, spi 통신이 데이터가 16bits 이면, 16bits를 처리하는 코드를 만들고, 상위단에서 16bits(2bytes)씩 데이터를 전송하게 됩니다. 강의에서 "비트 단위로 처리한다"는 의미는, embedded sw를 경험하신 분들은 해당 코드를 for문이다 다른 것들을 사용하여 간단하게 표현하고 싶은 생각이 많을 수도 있는데, verilog는 그렇게 처리하지 않는다는 것을 강조한 내용입니다. 꼭 그렇게만 처리해야 하느냐고 하면 다른 방법이 있을 수 있겠지만, verilog는 HW를 설계하는 프로그램이므로 강의에 설명된 내용대로 설계하는 것이 더 좋은 방법이라 할 수 있습니다.
verilog는 프로그램으로 기능만 구현하는 것이 아닙니다. 타이밍 관련된 내용도 함께 고려해서 프로그램을 해야 합니다. 예를 들어 어떤 기능을 처리하기 위하여 delay가 1개가 추가 되었다면, 이 delay가 다른 모듈과의 타이밍에서 문제가 없는지 확인해야 합니다. 어떤 경우는 해당 모듈에 delay 1개를 추가할 경우, 다른 연관된 모듈들도 delay를 추가해 주어야 하는 경우도 많습니다. 이러한 것들은 많은 경험에 의해서 얻을 수 있습니다.
감사합니다 ~!!
답변감사합니다.
아주 초보적인 질문인데
메인 클럭 분주할때 spi 클럭 구할땐 메인클럭이 분모에 있고 i2c는 분자에 있는지 설명해주실 수 있을까요?
감사합니다