작성
·
89
1
안녕하세요 🙂
[1. 질문 챕터] : 19장 9분경입니다.
[2. 질문 내용] :다이어그램을 보게 되면 WEA ->1 일 때 DINA가 1111로 들어오고 ADDRA는 bb이며 DOUTA는 1111로 보여집니다. 이때 posedge일 때 DINA를 보내고 DOUTA으로 1111이 나오는데 그림상으로는 동기화가 되어보이지 않아 햇갈리는 것 이 있습니다. 이는 출력 앞까지만 있다가 다음 posedge일 때 1111로 나오는 것인가요? 그림상으로는 동기화가 되지 않고 바로 1111으로 나오는 것 처럼 느껴져서 햇갈립니다
[3. 시도했던 내용, 그렇게 생각하는 이유] :
답변 1
0
안녕하세요 🙂
제가 실습코드로 드린 "true_dpbram.v" 는 ram 의 동작을 모델링 한 코드이고요. (지금 다룰 내용은 아니지만 추가로.. 동시에 Xilinx FPGA 에서 합성도 가능, 이거는 FPGA 강의를 들으시면 이 코드 그대로 사용해서 RAM 으로 적용해서 사용합니다.)
실습환경 waveform 에는 모델링 코드를 사용하기 때문에, delay 는 없고요. clock 동기화 된 것 처럼 시뮬레이션이 되죠.
보고 계시는 타이밍 다이어그램은 실제 RAM 의 delay 가 적용된 timing diagram 입니다.
data 는 1 cycle 내에 바로 준비 (delay 를 먹은 뒤) 는 되는데요.
결국 "1111" 이란 값의 활성화 시점은 write 를 요청한 1 cycle 이후의 CLKA 가 posedge 시점 이후라는 것을 이해하시면 좋을 것 같아요.
이 말은 모델링 코드인 "true_dpbram.v" 과 같은 timing 을 갖습니다.
동일 cycle 내에 RAM 의 DINA 를 통해 write 한 값을 바로 DOUTA 로 사용한다, 는 것은 Clock 동기화 based 의 설계에서는 불가능하다. 라고도 해석 하시면 되겠습니다. 즉 DINA 를 통해 write 한 값을 DOUTA 로 사용하려면 1 cycle 이후에 valid 해집니다.
현업에서 설계할때는 이런 delay 까지 고려하진 않고요. (합성 시 timing met 을 하면됨)
모델링의 clock sync 를 맞추시도록 설계하시면 동작에 문제는 없을꺼에요.
즐공하세요 🙂