작성
·
151
·
수정됨
0
reg [9:0] ready_cnt; //count 0~1023
reg [3:0] done_cnt; //count 0~15
reg [9:0] sck_cnt; //count 0~1023
reg [5:0] sck_index; //count 0~63
위와 같은 각각의 카운터의 의미가 이해가 되질 않습니다
구체적으로 카운터의 범위를 왜 저렇게 선언해야 하는지 이해가 되질 않습니다
또한 아래와 같은 파라미터로 선언된 부분이 배열처럼 사용되는 부분이 이해되질 않습니다
배열로 선언해야 하는게 아닌지 궁금합니다
parameter SLAVE_ID_WRITE = 8'h64;
parameter SLAVE_ID_READ = 8'h65;
-------------------------------------------------------------------
(~rw_flag ? SLAVE_ID_WRITE[6] : SLAVE_ID_READ[6]) :
(~rw_flag ? SLAVE_ID_WRITE[5] : SLAVE_ID_READ[5]) :
(~rw_flag ? SLAVE_ID_WRITE[4] : SLAVE_ID_READ[4]) :
(~rw_flag ? SLAVE_ID_WRITE[3] : SLAVE_ID_READ[3]) :
(~rw_flag ? SLAVE_ID_WRITE[2] : SLAVE_ID_READ[2]) :
(~rw_flag ? SLAVE_ID_WRITE[1] : SLAVE_ID_READ[1]) :
(~rw_flag ? SLAVE_ID_WRITE[0] : SLAVE_ID_READ[0]) :
답변 1
0
안녕하세요.
1) ready_cnt 는 ready 상태에서 사용되는 count로 아래와 같은 일들을 처리하는데 사용됩니다.
- ready 상태에서 ss 신호를 active(0)로 만들고 (141 라인),
- 첫번째 데이터 (SLAVE_IDW[7] or SLAVEIDR[7]) 를 전송하고 (157 라인),
- SCL 반주기 후에 s_send 상태로 이동합니다 (214 라인)
- ready_cnt 값이 [9:0]로 설정한 것은 freq[9:0] 이기 때문에 같은 크기를 사용합니다.
2) done_cnt는 done 상태에서 사용되는 count로 아래와 같은 일을 처리하는데 사용됩니다.
- done 상태에서 ss 신호를 deactive(1)로 만들고 (142 라인)
- done 신호를 생성하고 (205 라인)
- IDEL 상태로 이동합니다 (216)
- [3:0]로 설정한 것은, 임으로 설정하였습니다. [2:0]나 [4:0]로 설정해도 무관합니다.
3) sclk_cnt는 sck 파형을 생성하는데 사용됩니다.
- freq 값에 따라서 sck 주기 (엄밀히 말하면 1/2 주기)가 생성됩니다 (122 - 127 라인, 145-150 라인)
- sclk_cnt 값이 freq 값과 따라 사용되기 때문에 freq와 같은 [9:0]을 사용합니다.
4) sck_index 는 sck의 반주기를 count 합니다. 스펙 (42 페이지)에 총 3바이트를 전송합니다. sck는 총 24개의 clock이 발생하고, 이를 반주기로 계산하면 48이 됩니다. 따라서 sck_index는 0 - 48까지의 값을 가지기 때문에 6bits[5:0]로 설정합니다.
5) parameter, 배열
verilog에서 [6]은 C에서처럼 배열의 Index를 의미하는 것이 아니고, bit를 의미합니다.
SLAVE_ID_WRITE = 8'h64, 8'h64는 이진수로 표기하면 0110_0100 가 됩니다.
SLAVE_ID_WRITE[7] : 0
SLAVE_ID_WRITE[6] : 1
SLAVE_ID_WRITE[5] : 1
SLAVE_ID_WRITE[4] : 0
SLAVE_ID_WRITE[3] : 0
SLAVE_ID_WRITE[2] : 1
SLAVE_ID_WRITE[1] : 0
SLAVE_ID_WRITE[0] : 0
마지막으로 코드를 눈으로만 이해하려고 하면 어려움이 많습니다. simulation을 통해 파형을 확인해야 합니다. 각각의 clock에 따라 신호들이 어떻게 변하는지를 직접 확인해야 합니다. verilog는 "코드 구현 - simulation 확인"의 무한 반복입니다. 처음에는 어려워도 자꾸 하다보면 나도 모르게 실력이 쌓이게 됩니다~!!
감사합니다 ~!!