암바 강의 25장 6분 10초 질문드려요. hw의 stall은 empty와 full이 발생될 때 일어난다 하셨는데, 강의에서 예시로 들어준, 앞단의 입력하는 모듈이 fifo에 write하는 속도가 뒷단의 모듈이 read하는 속도보다 빠른다면 full이 일어나지 않아 하드웨어 성능이 좋아진다 하셨습니다. 그러나 이러면 empty도 자주 발생해서 퍼포먼스 드랍 또한 자주 발생되어 하드웨어 성능이 안좋아지는것 아닌가요?
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
안녕하세요 코드를 보다 의문점이 들어서 질문 드립니다. input으로 들어오는 SCL 을 그대로 사용하는게 아니라 3단 F/F을 통해 slave 쪽의 clk에 맞춰서 SCL_posedge, SCL_negedge를 사용함으로써 동기화를 하여 Slave의 메인 clk에 맞춰 데이터를 채갈 수 있도록 하는 것은 이해했습니다! 근데 SCL_posedge 및 SCL_negedge 의 경우 '안정화 된' [2:1] 세번째, 두번째 F/F의 결과를 보고 posedge 및 negedge를 출력하기에 SCL은 안정화 된 값을 가지는 것을 이해하엿으나 SDA_synched의 경우 [2:0] 총 3개의 F/F 에 대해 AND 를 취한 결과를 사용하고 있습니다. 이렇게 하게 되면 만약 최악의 경우 SCL_posedge가 '1'이 되었을때 data_in 에다가 SDA_synched의 값을 넣어야 하는데 SCL_posedge가 1이됨과 동시에 SDA_syncehd[2], SDA_syncehd[1] 이 모두 1이고 SDA_synched[0] 이 0에서 1로 바뀌는 중이라면 결국 data_in에 무엇을 저장해야 할 지 몰라서 meta stable 한 상태에 빠질것이라고 생각됩니다. 이를 방지하려면, wire SDA_synched = SDASynch[2] & SDASynch[1] 로 선언해서 사용해야 하는 것 아닌가요?? 감사합니다.
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
삼코치님 sram강의에서 waveform에서 inner 메모리를 보기위해서 modelsim에서 Memory List 부분에서 sram인스턴스 네임을 클릭하면 Objects 리스트에서 mem 시그널이 표시된다고 하셨는데 Memory List에서 클릭을 했는데 Objects 목록에서 mem 시그널이 안 뜨는데 어떻게 해야 하나요? 일단 저는 최신 quartus프로그램과 questa를 깔긴했는데 강의에서 처럼 quartus 20.1버전과 modelsim을 깔아서 다시 시뮬레이션을 돌려봐도 mem 시그널이 안보입니다.
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
안녕하세요 학습 중에 코드를 보고 궁금증이 생겨 질문 드립니다. DataMem spec을 보면 mem 이 4byte짜리로 총 128개로 구성되어 있는데, always 문을 보면 mem[0] ~ mem[63] 까지의 공간을 사용하는 것으로 보입니다. 나머지 mem[64] ~ mem[127] 까지는 사용이 안되는거 같은데, 그러면 굳이 reg [31:0] mem [127:0] 으로 선언한 이유가 있을까요?? 뭔가 제가 파악하지 못한 의도가 있는것인지 궁금하여 질문드립니다!! 감사합니다.
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
encoder의 경우, output이 [1:21]로 서술되어 있습니다. 근데 tb를 보면 output인 encoded_message가 [21:1] 로 선언되었는데, 이렇게 선언하게 되면 encoded_message 에 들어오는 값은 B[21:1] 로 매칭되서 들어오게 되는건가요? 아니면 tb 코드에서 [21:1]로 잘못 선언한 것인지 궁금합니다! 감사합니다.
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
안녕하세요, 시뮬레이션 결과를 보던 중 이해가 잘 안가는게 있어서 질문드립니다! 여기서 W_CRC는 제가 이해하기로는 '나머지' 에 대응되는 코드로, 나머지가 '0' 이면 오류가 없는 것이고, 나머지가 '0' 이 아니라면 오류가 있음을 알리는 코드로 알고 있습니다. 근데 시뮬레이션 결과를 보면 각 입력 데이터 r_data에 대응되어서 모두 0이 아닌 다른 값으로 update 되는데 그러면 CRC 오류가 있어서 저런 결과가 나오는거로 이해하면 될까요?? 감사합니다!
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
21분쯤 내용을 보면, Write 동작시에도 Write 이후 Pre Charge Stage를 거치는 것을 볼 수 있습니다. 만약 제가 8Bit에 해당하는 하나의 Word 라인을 선택하여, '1001 0001' 이라고 Write를 했을때, 1로 선택된 Column은 Write Driver가 값을 밀어 넣어 Cap에 1로 Write가 되었을 것이고, 0으로 선택된 Column은 WBL을 통해 방전이 됬을 것입니다. 이러고 ACT를 Low로 내려서 Write 상태를 빠져나가게 되면 제 생각엔, Precharge를 할 필요가 없을 거 같은데 왜 Write 시에도 Precharge를 해주는지 궁금합니다! Read Operation 시에는 RBL과의 Charge Sharing으로 인해서 어느정도 Cap에 저장되어 있던 전하가 소실되기 때문에 읽기 작업이 끝났으면 다시 소실된 전하를 채우기 위해 Refresh하는것은 이해한 상태입니다!
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
안녕하세요. 삼코치님! 수업 정말 잘 듣고 있습니다. 다름이 아니라, 학습 방법에 대한 질문이 있어 댓글 남깁니다. 저는 현재, 삼코치님께서 내주신 과제를 솔직히 완전히 처음부터 코딩을 하는 데 있어 무리가 있다고 생각해 삼코치님이 주신 자료를 참고로 코딩을 해석하고 있습니다. 이 학습 방법이 괜찮은지, 아니면 스스로 코딩을 해보는 것만이 의미가 있는지 궁금합니다.
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
quartus를 쓰면 gate level로 합성되게 되는 반면에, vivado를 쓰면 주로 LUT형태로 합성이 되는데 왜 그런지 궁금합니다! 그리고 vivado에서 power, timing 분석하려고 하는데, power는 잘 뜨는데, 각 port마다의 timing이 아무것도 안나옵니다. vivado에서는 어떻게 설정해야하는지 궁금합니다.
안녕하세요 맛비님! 개인 실습 중 질문이 있어 질문드리게 된점 양해부탁드립니다. 먼저 현재 실습 중인 내용 말씀드리겠습니다. axi4-lite 를 통해서 텍스트에 입력되어 있는 input data를 인풋bram 에 입력시킵니다. 그 후, 개인적으로 만든 연산코어를 통해 연산하고 나서 연산결과를 연산코어 내의 레지스터에 저장합니다. 레지스터에 저장된 값을 output bram 에 입력합니다. 연산코어가 여러개여서 1-3 과정을 반복했습니다. 정리하면, input txt -> data_mover_bram -> bram0 -> 연산core -> data_mover_bram -> bram1 -> 연산core -> data_mover_bram -> bram2 ... -> 연산 core -> 매 clk 마다 연산결과 출력 과 같은 구조를 만들었습니다. testbench simulation 상에서는 원하는 결과를 얻었습니다. 하지만, fpga 에 올리기 위해 generate bitstream 과정을 진행하다가 아래 사진과 같이 자원을 고려하지 않고 구현했음을 깨달았습니다. (보드는 zybo z7 10 입니다) 제 추측으로는 연산결과를 각 연산core 에서 레지스터에 저장했다가 bram 에 입력했던 점이 문제라고 생각됩니다. 연산결과가 32bit 가 쌓일 때마다 결과 bram 으로 입력하는 방안을 고민 중인데 그러려면 각 연산 코어에서 bram 에 입력할때 AXI4 stream 을 사용해야 하는게 맞는지, valid/ ready 스트림 구조만 사용하는지 좋을지 알려주시면 감사하겠습니다. 강의 외 내용이 많아서 죄송합니다 ㅜㅜ (답변 거부하셔도 괜찮습니다.)
안녕하세요 🙂 안녕하세요, 맛비님 ! 강의 항상 잘 듣고 있습니다! HDL 34장 강의를 들으며 궁금증이 생겨서 질문드립니다. HDL 34장 22분30초 쯤에 read task를 통해 IDLE의 상태를 확인하는 부분입니다. read task를 통해 VIP master에서 ADDR_AP_CTRL, 즉 설정한 pattern generator의 주소의 값을 읽어오고, 이를 lite_rdata로 저장한 후, 이를 CTRL_IDLE_MASK parameter를 통해 IDLE state인지 확인하는 방법을 통해 IDLE 상태를 확인하고 작업을 실행하는 것으로 알고 있습니다. 여기서 궁금한 부분이 IDLE 상태, 초기값을 설정하는 부분이 어디에 표시가 되어있는지, 만약 start_vip();를 통한 instantiation에서 초기값이 0x100으로 정해지는 것인지. 혹은 다른 방법을 통해 초기값을 0x100으로 지정할 수 있는지가 궁금합니다. 제가 맛비님 강의를 수강하며 SystemVerilog를 함께 배우고 있는 과정이라 코드를 따라가는 부분에서 어려움을 겪어 이렇게 질문 드립니다. ==================
안녕하세요 🙂 [1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요. [2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂 [3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) handshake는 Master가 VALID신호를 보내고 SLAVE가 READY신호를 보내면 MASTER가 DATA를 SLAVE에게 보내는 것으로 이해하였습니다. HDL 24장 1분 다이어그램 보면 제가 생각한대로 되어 있는데 근데 HDL 24장 1분 24초 로 넘어가면 skid buffer 다이어그램이 제가 설명한 것의 정반대로 되어 있습니다. 저는 skid buffer를 각 Master와 Slave를 연결 해주는 통로로 생각했었는데 skid buffer 자체가 오른쪽 절반은 Master역할을 하고 왼쪽 절반은 Slave역할을 한다고 봐야하나요? 어떻게 이해해야할지 모르겠습니다
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
26강 4:30에서 Ds가 0 또는 1로 간다고 하셨는데, 메타스태빌리티에서 캡처했기 때문에 값의 상태를 보장할 수 없다 로 이해했습니다. 클럭 도메인을 건널 때마다 동기화기를 써서 안정 상태로 보낼 수는 있겠지만, 그 값이 어떻게 변할지 알 수 없다면 어떻게 제어를 할 수 있는지 이해가 잘 안갑니다.