묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
HDL 16장 실습편 시뮬레이션 결과 질문
안녕하세요 🙂[1. 질문 챕터] : HDL 16장 실습편 9분 30초~ 의 시뮬레이션 wv 결과 화면[2. 질문 내용] : 시뮬레이션 결과를 보면 o_done과 현재 state가 reset_n이 0으로 입력되기 훨씬 전부터 각각 리셋되는 것으로 나타나는데 왜 이런 것인지 잘 이해가 되지 않습니다. (저는 don't care 'X' 상태가 reset_n=0전까지 유지될 것이라고 예상했습니다) 감사합니다.
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
MEM/WB 질문 있습니다
안녕하세요! MEM/WB 레지스터에 대해, data memory에서 나온 값과 ALU에서 나온 값의 타이밍에 대해 궁금한 점 있어서 질문 드립니다. EX/MEM 레지스터에서 나온 ALU 연산 결과는 다음 사이클에 바로 MEM/WB 레지스터로 이동하는 것은 이해했습니다.하지만, Data memory에서 값을 가져오는 경우, EX/MEM에서 Address를 받고 다음 사이클에서 값이 나오고, 그 다음 사이클에 해당 값이 MEM/WB로 이동하여 두 사이클이 걸린다고 생각했습니다.이러면 data load를 하는 경우는 5 cycle이 아닌 6 cycle이 소모된다고 생각했는데, 이렇게 생각하는 것이 맞는지 궁금합니다. 맞다면, Instruction 별로 소모되는 사이클이 차이가 생길 수도 있는지 궁금합니다.질문 읽어주셔서 감사합니다!
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
./build 시 .v파일이 다른폴더에 있는경우도 실행가능한가요?
안녕하세요 맛비님chapter2 폴더의 build기준으로chapter2 안에 abc라는 폴더를 생성하고chpater2 안에 clock_gating_model.vabc 안에 tb_clock_generator.v 이 있다고 가정할때 build를 어떻게 수정해야 실행 가능할까요? 회사에서 rtl코드와 tb코드를 다른 폴더에 보관하라고 해서 부득이하게 질문드립니다.
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
TPSRAM 구조 관련하여 질문 있습니다!
8T TPSRAM 구조를 설명하는 부분에서, BL와 BLB 방향 관련하여 질문이 있습니다.RWL = 1 RBL = 1이 되어 BL값을 볼 수 있는 상태에서, 해당 구조에서는 BL = 1이 되면 M5가 켜져서 0을 읽는 부분이 제가 생각하는 동작과 반대로 된다고 생각했습니다.만약 BL = 1인 상황에서 1의 값을 읽으려면 반대 방향의 인버터(M3, M1) 출력값인 BLB을 M5와 연결돼야 한다고 생각했는데, 이것이 맞는 생각인지 궁금합니다. 질문 읽어주셔서 감사합니다!
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
재설치 과정에서의 문의
안녕하세요 🙂[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.=================질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================최신 버전들로 설치과정 따라가다가 막힌 부분이 있어 지우고, 강의와 동일한 버전들로 재설치하여 따라가고 있었습니다.그런데 초기에 설치했을 때와 달리, 우분투를 지우고 이전 버전으로 다시 깔게 되니 UNIX username 설정하는 부분이 나오지 않네요..이 부분은 재설치 이전에 설정한 것이 남아있는 건가 해서 일단 넘어갔습니다.이후 mobaxterm을 열고보니 이전과 달랐습니다.강의 7:08 부분에는 /home/matbi/ 안에 .landscape, .bash_logout, .bashrc, . motd_shown, .profile, .Xauthority 이렇게 확인되는데..제 경우에는 /home/ 파일 안에는 아무것도 없었으며, 프로그램 이전에 설정했었던 UNIX username도 뜨지 않았습니다. 오히려 /root/ 파일 안에는 비슷하게 나열되어있기는 한데 .landscape, .bash_logout이 없고, .bash_history라는 파일이 있습니다.10:18 부근에서 다시 홈으로 돌아가서 루트 계정이 아닌 걸로 넘어가게 되는데 무언가 이전에 했던 작업이 남아있는 것인지.. 홈에서 다시 WSL-Ubuntu-20.04를 눌러도 루트계정으로 뜨더라구요.. 이런 부분은 어떻게 해결하면 될까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
1강 ./build시 'timesclae 1ns / 1ps error 문의
안녕하세요 맛비님 맛비님이 작성한 verilog 파일(~.v)의 script 내용을 19행('timescale 1ns / 1ps)에서 부터 끝까지 지우고 다시 작성하여 ./build 시에 아래와 같은 오류가 발생하고 있습니다. (자세한 상황은 밑에 참조한 사진을 통해서 확인하실 수 있습니다.) 오류의 문제로 지목하는 tb_clock_generator의 19행을 확인시에 영상과 달리 'timescale 1ns / 1ps가 변수? 로 인식이 안되는 것 같은데 왜 이런 문제가 발생하는지 알려주실 수 있습니까?맛비님이 작성한 원본의 파일을 다시 받아서 19행('timescale 1ns / 1ps)제외한 나머지를 삭제하고 진행시에는 vivado simulation이 동작하는 것을 확인하였습니다. 만약 현업에서는 verilog 파일을 새롭게 만들시에 timescale 구문을 작성할 때도 문제가 발생하는지, 그리고 다른 사람이 작성한 verilog 파일에서 timescale 구문의 해상도나 시간을 수정할 때는 어떻게 하면 되는지 자세히 알려주시면 감사합니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
HDL 4장 질문
안녕하세요 🙂강의영상을 보고 latch를 쓰지않는 이유를 알고 싶어 latch와 glitch에 대해 찾아보았지만 원하는 만큼의 내용을 찾지 못하여 글을 쓰게 되었습니다. =>clock gating시 조합회로, Flip-Flop을 사용하면 glitch nosie가 발생할수 있어 latch를 사용하여 Clock을 만들지만 일반적으로 latch를 사용할 경우 edge 상태가 아닌 level상태에서 데이터가 전달되어 많은 시간이 소요되고 glitch 발생시 timing이 어긋나기 때문에 사용하지 않으며 입력, 출력 등에 대해 기술하지 않는 조건이 있을 경우 이전 값을 유지하기 위해 latch가 만들어지므로 이점도 유의 하여야한다.위 내용이 검색하여 알게 된 내용입니다. 그 외에도 디지털 회로 설계시 latch를 쓰지않는 이유가 있을까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
HDL 2장 수업내용
안녕하세요 🙂HDL 2장 내용 확인차 질문을 하게 되었습니다.-Testbench는 디자인(module)에 대한 시뮬레이션을 실행하기 위한 환경으로 어떤방식, 어느 주기로 확인하는 과정을 어떻게 꾸밀지 정하며 크게 stimulus -> module -> checker로 구성되어 있다.-DUT는 설계한 logic으로 testbench에서 module에 들어가며 verilog, VHDL로 작성된 하드웨어 설계이다.-stimulus는 DUT의 input역할 -checker는 DUT의 output이 원하는 결과에 맞는지 check하는 모듈이다. 위와 같이 정리를 하였는데 시뮬레이션과 테스트벤치의 개념이 확실히 이해가되지 않아 작성하게 되었습니다.예를 들어 DUT가 단순히 and logic이라고 했을떄 시뮬레이션은 입력에 따라 and의 결과가 잘나오는지 확인하는 것이고 테스트벤치는 clock주기와 시뮬레이션을 모두 포함하는것이라고 생각하면 될까요?시뮬레이션은 단순히 and를 돌려보는 것이고 그것에 필요한 input,clk주기등은 테스트벤치에서 정하는것이라고 생각하면되나요?
-
미해결설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
cnn_kernel.v 코드질문입니다.
안녕하세요 맛비님 강의 잘 보고있습니다.🙂[1. 질문 챕터] : lab2 cnn설계 rtl 중 cnn_kernel 부분에 궁금한 점이 있어서 질문드리게됐습니다. [2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂맛비님 솔루션 코드 부분인데,acc_idx가 +1 되는건 1cycle이 지나고 아닌가요?always @(*) begin으로 시작해서 acc_kernel을 0으로 초기화 해주셨고그 아래줄에 r_mul의 인덱스에 해당하는 부분을 for문으로 loop를 돌면서 acc_kernel의 각 인덱스에 값을 할당하는 걸로 보이는데 clk edge 마다 acc_kernel을 0으로 초기화해주는데 아래 for문이 무슨 의미가 있나 싶어 질문하게되었습니다. [3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.=================질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
dram 질문
마지막 그림으로 질문하겠습니다Mat이 모여서 Bank을 구성하고Bank Group을 Chip으로 보며저렇게 Chip이 4개 앞, 뒤로 있으면 DIMM구조 인것으로 이해했습니다.여기서 row, col은 Bank Group 하나에 대해서 선택하는 것이고, Bank address는 Chip을 선택하는게 맞나요 ??(그런데 cell와 chip은 주소가 없다고 하셔서 잘 이해가 되지않습니다) 질문2) active, row access에서 CAS도 떠야 이제 Activate가 됐다고 하셨는데, 이때 CAS = Low인거죠? 그리고 여기서 we도 떠야한다고 하셨는데 그럼 we가 1이면 write 0이면 read동작을 수행하나요?
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
PCB HW 설계직무에서 디지털 설계 경험 어필하기
안녕하세요. 항상 좋은 강의 잘 듣고있습니다.다름이 아니라, PCB HW 설계 직무에 대한 관심이 있는 상태로 강의를 듣다보니 질문이 생겼는데요,PCB HW 설계는 PCB위에 IC, 능동소자, 통신 인터페이스등 다양한 소자를 배치해서 회로가 원하는 구동을 할 수 있게 설계하는 직무라고 알고 있습니다.질문) 그럼 FPGA를 직접 설계한다는 것은 IC를 직접 설계하는 것이고, FPGA를 검증용으로 쓴다는 것은 필요한 IC Chip을 구매하기 전에 미리 검증 한다는 의미로 이해해도 될까요?바쁘시겠지만 회신주시면 많은 도움이 될 것 같습니다. 감사합니다.
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
[Ch.5] SRAM의 장점 관련 질문
안녕하세요! SRAM의 장점 중 Mux, Demux의 딜레이를 줄일 수 있다는 부분에 대해 질문 드립니다. (1) 제가 이해한 내용으로는, 데이터를 Read할 때 BL와 BLB을 모두 합친 16개의 signal을 보기 위해 MUX 16:1이 필요한 걸로 볼 수 있지만, Sense amp로 인해 1-stage를 줄일 수 있기 때문에 딜레이를 감소시킬 수 있는 것으로 이해했습니다. 이렇게 이해하는 것이 맞는지 궁금합니다.(2) Sense amp 없이도 BL 8개만 확인하여 출력을 얻어내는 방식을 사용할 수 있다고 생각했는데, 이러한 방식은 왜 사용하지 않는지 궁금합니다.항상 좋은 강의와 함께 질문글 읽어주셔서 감사합니다!
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
과제3 질문
제가 포트에 대한 개념이 부족했었는데 아래에 정리한 글이 맞을까요?1. 칩 관점칩 포트: 칩 전체의 입출력을 위한 포트로, 외부와의 통신을 담당합니다.모듈 핀: 칩 내부의 특정 모듈에서 사용하는 개별적인 접점으로, 각 모듈의 기능을 수행하기 위한 신호를 전달합니다.2. 핀 묶음 관점포트: 여러 개의 핀을 묶어서 하나의 단위로 다루는 개념으로, 데이터 전송이나 제어 신호를 처리하는 역할을 합니다.핀: 포트의 구성 요소로, 개별적인 전기적 접점입니다.--> 싱글포트 sram : read, write중 하나를 할 수 있는 포트 1개가 존재(WE)--> 투포트 sram : read포트 1개, write포트 1개(we, wa, wd/ re, ra, rd)--> 듀얼포트 sram : read, write를 할 수 있는 포트가 2개씩(cs_a, addr_a, we_a, wd_a, rd_a / cs_b, addr_b, we_b, wd_b, rd_b)
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
error 문제
안녕하세요 ./build하면 계속 오류가 뜨는데 이유를 모르겠어요 ㅠ 33번째줄 end가 오류라는데 왜 오류인지 모르겠어요 🙂[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.=================질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
16강 질문
1) Area가 클수록 Cost가 비싸고 따라서 Area가 크면 용량이 작다고 설명하셨습니다.먼저 Area와 용량의 관계에서 "Area가 크다는 것은 각 메모리 Cell의 크기가 크다는 것이고 따라서 더 적은 수의 Cell을 넣을 수 있어 용량이 적음" 으로 이해했고, Area와 Cost의 관계는 Area가 클수록 공정에서 비용이 들어 Cost가 비싼것으로 이해했습니다 하지만 결론적으로 Area와 용량이 무조건적으로 반비례하는 것에 대한 이해가 잘 되지 않습니다. 2) 0이 저장된 상태에서 1을 WRITE→ 우측 인버터의 출력부분에 0이 저장되어 있을 때, 여기서 WL에 1을 주고 BL에 1을 주면 BL과 인버터가 short되면서 1과 0이 만나게 된다. 이때 BL의 신호 1은 우측 인버터 부분 신호 0이 있으므로 충전되지 않은(또는 매우 적게 충전된) Parastic Cap을 충전시키게 된다. 따라서 상태를 바꾸지 못 할수도 있는데, 이는 그저 BL의 신호 세기를 충분히 높혀주면 되는 부분이다. 라고 이해했는데 맞을까요??(pdf의 블로그에 들어가보니 접지로 BL의 신호가 흘러서 상태를 바꾸지 못할수도 있다고 되어있어서요 !!)
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
ASIC에서 SRAM에 관한 질문입니다.
안녕하세요, 정성이 느껴지는 강의를 제공해 주심에 감사드립니다. 컴퓨터 구조의 메모리 계층 구조와 Verilog로 SRAM 모델링하기 강의에서 궁금증이 생겨 질문 드립니다. ASIC 칩을 찍어내는 상황이라는 가정을 하고, SRAM의 DEPTH를 2의 지수가 아닌 수(예를 들면 1021)로 지정하면, 실제 칩에는 DEPTH가 1021인 SRAM이 올라가나요? 아니면 1024짜리 SRAM이 올라가나요? 파운드리마다 다른가요? 실제 ASIC 칩에 DEPTH가 1021인 SRAM이 올라간다고 가정한다면, 주소의 bitwidth는 10-bit이므로 1022번이나 1023번 주소처럼 잘못된 주소에 접근할 가능성이 있습니다. 그렇기 때문에 이를 막는 로직이 추가로 필요할 것이라고 생각이 드는데, 이때 발생하는 overhead를 고려하는 것과 그냥 DEPTH가 1024인 SRAM을 올려버리는 것을 PPA 관점으로 비교할 수 있는 방법이 있을까요? 3.parameter로 선언된 변수를 비교 대상으로 삼아도 ASIC에서 아무 문제 없나요? 가령, if (addr > DEPTH) 처럼요!
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
강의자료
수업하시는 ppt 자료는 혹시 어디서 확인 가능할까요 ?
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
cache 코드 관련 추가 질문드립니다.
한 회차에서 많은 너무 많은 질문을 드리는 것 같네요... 한번에 질문 드려야 하는데 볼때마다 새롭게 궁금하는 점이 생겨 또 질문드립니다...always @(posedge clk, negedge rstn)if (!rstn) cc_re_d <= 0;else cc_re_d <= cc_re; 위 코드의 경우 Cache에 read enable 하는 변수에 해당하는 것 같습니다. cc_re와 cc_re_d를 별도로 변수를 초기화 하고, clk 신호에 맞게 동기화를 하는 이유를 잘모르겠습니다. (제가 생각한 내용은 cc_re의 경우 i_cpu_req 신호에 비동기로 값을 변경하고, 해당 값을 clk 동기화 신호에 맞게 cc_re_d에 넣게되면, clk 주기 사이에 cc_re의 값이 변경되어도 cc_re_d의 값은 clk가 주기가 오기전까지 값을 유지하게 되는 상황인데 굳이 cc_re의 경우에만(추가로는 mem_we_d도 마찬가지) 이런식으로 구성한 이유를 잘모르겠습니다.)+ 추가로 찾아보니 메타스테이블 상태를 방지하기 위함 -레벨 트리거(cc_re가 그대로 전달될 경우) 신호가 엣지 트리거(다른 always @문에 사용되는 구문들) 상태와 겹치는 상태에서 불안정한 신호를 전달하기 때문이라는데, (레벨 트리거 신호를 엣지 트리거 상태로 변경하기 위함인가요?) 이게 맞는 내용일까요? => 그렇다면 다른 레벨 트리거 변수들은 위와 같이 동기화 신호로 안바꿔주는 이유가 궁금합니다...)
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
dual port ram 설계 코드 질문
module dpsram #( parameter DEPTH=8, parameter WIDTH=32, parameter DEPTH_LOG=$clog2(DEPTH) )( input clk, input [WIDTH-1:0] din_a, input [WIDTH-1:0] din_b, input [DEPTH_LOG-1:0] addr_a, input cs_a, input we_a, input [DEPTH_LOG-1:0] addr_b, input cs_b, input we_b, output reg [WIDTH-1:0] dout_a, output reg [WIDTH-1:0] dout_b ); reg [WIDTH-1:0] mem[DEPTH-1:0]; initial begin for(int i=0;i<DEPTH;i++) mem[i]=0; end always@(posedge clk) begin //write if(we_a && cs_a) mem[addr_a] <= din_a; if(we_b && cs_b) mem[addr_b] <= din_b; end always@(posedge clk) begin //read if(~we_a && cs_a) dout_a <= mem[addr_a]; if(~we_b && cs_b) dout_b <= mem[addr_b]; end endmodule위와같이 dpsram코드를 짰습니다. 예제 코드와는 다르게 저는 write와 read를 각각 나눠서 always block을 구성했는데 이렇게 짜면 다르게 동작하나요? RTL 뷰어로 보니 아래와 같이 복잡하게 나와서 질문드립니다.
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
cache 코드 관련 질문드립니다!
always @(posedge i_clk, negedge i_rstn) begin if(!i_rstn) r_wb_mem <= 0; else if(w_cpu_we) r_wb_mem[w_cc_wa] <= 1; else if(w_mem_re) r_wb_mem[w_cc_wa] <= 0; else if(w_mem_we) r_wb_mem[w_cc_wa] <= i_cpu_write; end위 코드의 경우 별도의 설명이 없었던 것 같습니다.코드를 분석하는 중 궁금한 점이 몇가지 생겨서 질문 드립니다.cpu_we이 1인 경우 CPU에서 (읽기를 통해 값을 비교하여 바꾸는 작업이 아닌) 쓰기 작업에 대한 요청을 보냈기 때문에 Main Memory에 값을 쓰기 위한 wb이 반드시 1로 되는게 맞는건지 궁금합니다.mem_re가 1인 경우 wb이 0이 되는 것이 헷갈립니다. 제가 이해한 Write Back은 쓰기 Main Memory에 데이터를 저장하는 것이기 때문에 mem_re 즉, 읽기 요청이 왔을 때 쓰는 행위가 같이 일어나면 안되는 것이라서 그런것인지 궁금합니다. (추가로 다른 이유가 있는지 궁금합니다.)mem_we가 1인 경우 memory에 Data를 써야하기 때문에 i_cpu_wirte에 값을 전달 받는 것이 아니라 1이 되어야 하는게 아닌지 궁금합니다.(i_cpu_write가 0인데 mem_we가 1인 상태가 궁금합니다. => 그냥 메모리에 쓸 준비가 되어 있는 상태에서 i_cpu_write 요청이 들어오면 그때 wb을 1로 만들겠다는 의미가 맞는지 궁금합니다.)아직 해석이 완벽하지 않아 내용 정리 및 전달이 미흡한점 죄송합니다.