cache에서 data miss가 나고 메모리에서 read data할때 이해가 안가는 신호가 있어서 질문 드립니다.
10
15 câu hỏi đã được viết
wire mem_rd = miss & ~i_cpu_write; 이 코드를 보면 miss (N+1 clk)이고 ~i_cpu_write은 (N clk)인데 ~i_cpu_write 신호는 1 클락을 기다리게 됩니다. 이거에 대해서 AI한테 물어보니 cpu가 pipeline 이면 엄청난 문제가 되고 Handshake / Stall 구조이면 문제가 되지 않는다고 답을 주었습니다. cpu는pipeline으로 설계한다고 강의 커리큘럼에 나와 있는데 저희가 설계하는 cpu를 cache와 연결 하는 거면 이건 오류가 아닌가요?
Câu trả lời 1
0
안녕하세요, 답변 남겨드립니다.
질문하신 wire mem_rd = miss & ~i_cpu_write;에서 miss는 N+1 클럭의 신호이고 i_cpu_write는 N 클럭의 신호라고 해석하셨는데, 제가 작성한 코드에서는 두 신호를 서로 다른 명령의 정보로 사용한 것이 아닙니다.
이 Cache는 한 번에 하나의 요청을 처리하는 Blocking Cache 구조를 전제로 작성했습니다. CPU에서 Read 또는 Write 요청이 들어온 뒤 Cache miss가 발생하면 해당 요청의 처리가 끝날 때까지 CPU 진행을 정지시키기 때문에 주소와 i_cpu_write를 포함한 요청 정보가 그대로 유지됩니다. 따라서 miss = 1인 시점의 i_cpu_write도 다음 명령의 값으로 변경되는 것이 아니라 현재 miss가 발생한 동일한 요청의 Read 또는 Write 정보를 나타냅니다.
파이프라인 CPU라고 해서 Cache miss가 발생한 상태에서도 다음 메모리 요청을 계속 Cache로 보내는 것은 아닙니다. 예를 들어 5-stage Pipeline에서 Load 명령이 MEM Stage에서 Cache miss를 발생시키면 PC와 앞단 Pipeline Register에 Stall을 걸어 현재 명령을 유지합니다. 메모리 응답이 10클럭 뒤에 도착하더라도 해당 기간에는 i_cpu_write = 0과 요청 주소가 유지되므로 mem_rd = miss & ~i_cpu_write는 정상적으로 메모리 Read 요청을 발생시킵니다.
여기서 한 가지 짚고 넘어가야 하는 부분은 wire 신호가 자동으로 한 클럭 지연되는 것은 아니라는 점입니다. miss가 Tag와 Valid Bit 비교 결과로 만들어지는 조합논리라면 현재 입력에 대해 같은 사이클에 계산됩니다. always @(posedge clk) 블록에서 miss를 레지스터에 저장했을 때만 실제로 N 클럭 요청에 대한 결과가 N+1 클럭에 나타납니다. 따라서 파형을 볼 때는 신호 이름만으로 클럭 차이를 판단하지 않고, miss가 어느 always 블록에서 생성되는지까지 확인해야 합니다.
물론 실무에서 여러 요청을 연속으로 받을 수 있는 Non-blocking Cache나 AXI처럼 VALID/READY Handshake를 사용하는 구조라면 처리 방법이 달라집니다. 요청을 수락하는 시점에 req_write_q <= i_cpu_write, req_addr_q <= i_cpu_addr처럼 Transaction 정보를 내부 레지스터에 저장하고, 이후에는 mem_rd = miss & ~req_write_q와 같이 저장된 정보를 사용해야 합니다. 그렇지 않으면 이전 요청의 miss와 다음 요청의 i_cpu_write가 섞이는 문제가 실제로 발생합니다.
이번 과제에서는 Dual-port와 Two-port RAM의 Port 구조와 동시 접근을 이해하는 데 초점을 맞추기 위해 Cache를 Blocking 방식으로 단순화했습니다. 이후 CPU Pipelining과 Hazard를 다룰 때 Cache miss에 따른 Stall 제어를 함께 연결하게 됩니다. 따라서 현재 코드가 파이프라인 CPU와 연결되기 때문에 오류가 되는 것은 아니며, Cache miss가 해소될 때까지 동일한 CPU 요청을 유지한다는 제어 조건이 포함되어 있다고 이해하시면 됩니다.
어떤 방식으로 이 강의를 듣고 공부를 해야 하는지 고민 됩니다.
0
56
2
쿼터스 스케메틱에 대한 질문
0
41
2
FIFO 질문
0
37
2
cache관련 질문 드립니다
0
64
1
강의 만료일 연장 신청
0
79
2
강의자료 pdf파일
0
123
2
수강기간변경
0
95
2
프로그램 종류
0
115
1
안녕하세요 강의 도중 궁금한 점 있어서 질문드립니다!
0
106
1
수강기간 변경관련
0
79
2
수강기간 만료
0
83
2
수강 연장 문의
0
91
2
I2C SCL_Synched, SDA_Synched 질문
0
110
1
no data path질문
0
129
3
SRAM 강의 modelsim 시뮬레이션에서 inner 메모리를 Objects 리스트에서 찾으려고 하는데 안보입니다.
0
126
2
DataMem 스펙 질문
0
71
1
Hamming Code 질문
0
92
1
W_CRC 값 질문하기
0
89
1
Precharge에 대한 질문
0
224
1
tpsram spec 질문
0
91
2
학습 관련 질문 있습니다!
0
104
2
[과제7] AXI 통신 프로토콜 설계하기 문의드립니다
0
114
2
SRAM 강의 TB 작성 후 waveform 확인시에 dout이 모두 don't care 처리 관련 질문드립니다.
0
132
5
SRAM Interface Behavior(Diagram) 질문
0
184
3

