SPI MASTER 질문
254
작성한 질문수 1
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 확인"의 무한 반복입니다. 처음에는 어려워도 자꾸 하다보면 나도 모르게 실력이 쌓이게 됩니다~!!
감사합니다 ~!!
FIFO 질문
0
8
1
cache관련 질문 드립니다
0
36
1
수업자료내 출처 문의 드립니다.
0
31
2
보드 관련 질문 드립니다.
1
51
2
Verilog 코딩 스타일
0
124
2
xilinx 권고와 차이
0
262
2
강의자료
0
120
1
open hardware manager에서 보드 인식 못하는 문제
0
375
2
ifelse, 삼항연산자에 대해서 질문 있습니다.
0
432
1
RAM ip를 이용하여 FIFO 기능을 구현할 수도 있나요?
0
330
1
SPI master testbench 질문
0
333
1
자사 개발보드 관련
0
364
2
안녕하세요. IP Packaging 관련 질문 있습니다.
0
320
1
안녕하세요. verilog 활용 관련 문의드립니다.
0
352
1
안녕하세요 fpga_intro_v16 192p에 질문있습니다!
0
341
1
안녕하세요 SLVAE 컨트롤러에 대한 질문이 있습니다
0
383
1
안녕하세요 I2C Register 모듈에 대해서 질문이있습니다.
0
419
1
SPI에서 Master 내의 miso 값 update 과정에서 질문있습니다.
1
884
1
안녕하세요 i2c master 부분에 관련하여 질문있습니다.
0
618
1
SPI Master 부분 질문입니다.
1
618
3
I2C Master 모듈관련 질문입니다.
0
1192
1
memory configuration
0
849
1
UART, SPI구현
0
669
1
SPI와 I2C의 차이
2
2006
1





