SPI MASTER 질문
248
작성한 질문수 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 확인"의 무한 반복입니다. 처음에는 어려워도 자꾸 하다보면 나도 모르게 실력이 쌓이게 됩니다~!!
감사합니다 ~!!
[HDL 32장-2부] 참고 링크 관련
1
35
2
강의 만료일 연장 신청
0
32
2
기초예제 파일 불러오기 문의
0
25
2
Zybo 환경에서 PL RTL UART 보드 검증 방법
0
30
2
Verilog 코딩 스타일
0
119
2
xilinx 권고와 차이
0
248
2
강의자료
0
115
1
open hardware manager에서 보드 인식 못하는 문제
0
343
2
ifelse, 삼항연산자에 대해서 질문 있습니다.
0
425
1
RAM ip를 이용하여 FIFO 기능을 구현할 수도 있나요?
0
327
1
SPI master testbench 질문
0
327
1
자사 개발보드 관련
0
357
2
안녕하세요. IP Packaging 관련 질문 있습니다.
0
317
1
안녕하세요. verilog 활용 관련 문의드립니다.
0
342
1
안녕하세요 fpga_intro_v16 192p에 질문있습니다!
0
335
1
안녕하세요 SLVAE 컨트롤러에 대한 질문이 있습니다
0
371
1
안녕하세요 I2C Register 모듈에 대해서 질문이있습니다.
0
416
1
SPI에서 Master 내의 miso 값 update 과정에서 질문있습니다.
1
878
1
안녕하세요 i2c master 부분에 관련하여 질문있습니다.
0
612
1
SPI Master 부분 질문입니다.
1
612
3
I2C Master 모듈관련 질문입니다.
0
1182
1
memory configuration
0
841
1
UART, SPI구현
0
657
1
SPI와 I2C의 차이
2
1981
1





