디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
hamming encoder의 input data는 [16:1]인데 output은 [21:1]이 아닌 [1:21]으로 한 이유가 있을까요? verilog에서 vector를 선언할 때에 [msb : lsb] , [lsb : msb] 두가지 방식을 혼용해서 쓰지 않는 것으로 알고 있었는데 testbench에도 이를 위해서 reverse 시키는 부분이 존재하여 hamming code logic의 특징인지 궁금하여 문의드립니다.
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
Direct Mapped chache메모리 설계하기 스텝에서 주어진 조건에 맞춰서 address 와 data bit수를 정하는 부분에서 막혔습니다. 제가 이해한게 맞는지 확인 부탁드립니다. 우선 메모리 사이즈란 DRAM의 사이즈로 이해했습니다. 그래서 디램의 사이즈가 256B이므로 하나의 메모리가 4B로 처리된다면, 디램은 총 64개의 메모리를 저장할 수 있는 것으로 생각했습니다. ( Blocks = 64 ) cache size는 SRAM 즉, 캐시메모리의 사이즈로 이해했습니다. 그렇다면, 캐시메모리에서 저장가능한 갯수는 하나의 메모리가 4B를 담고 있으므로 총 4개 ( 4sets)가 됩니다. 데이터를 주고 받는 것에 필요한 라인을 설정해야 하는데, 데이터라인과 어드레스 라인은 서로 다른 것으로 이해했습니다. 어드레스는 상위비트부터 순서대로 tag,index,byte offset으로 분류됩니다. tag란 DRAM의 어느 곳에서 온 메모리인지를 담고 있는 데이터 입니다. 캐시메모리는 총 4개의 데이터를 저장 가능하며, 하나의 cache line당 16개의 데이터를 맵핑할 수 있습니다.따라서 tag에는 총 4개의 비트가 필요합니다. index는 4개의 캐시라인에 대한 주소를 의미하므로, 2개의 비트가 필요합니다. 마지막으로 byte offset은 블록 사이즈가 4바이트이므로, 2개의 비트를 사용해야 할 것으로 보입니다. 하여 어드레스에 해당하는 비트 수가 총 8개여야 할 것 같습니다. 근데 어드레스로 보이는 코드의 비트수가 6개여서 질문드립니다. 혹시 byte-offset은 고려하지 않은채로 설계가 된건가요?
다른 분들 질문을 보고 답변을 보았는데요 https://www.inflearn.com/community/questions/813583/%EC%9D%8C%EC%88%98-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%ED%91%9C%EC%8B%9C%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC 위의 답변을 보면 보수 표현을 하면 덧셈 뺄셈 연산이 더 단순하다고 되어 있는데요 사진 처럼 보수를 사용하지 않고 어짜피 플래그가 있다면 같은자리끼리 계산하기가 더 편할 거 같아서요 2의 보수를 사용하여 1 1 1 + 0 0 1 을 보고 바로 0이 된다고 계산이 쉽지 않을 것 같아서요
안녕하세요? 강의에서는 메모리 상에서 szBuffer와 nData가 바로 인접해서 서로에게 영향을 주는 상황이 나온 것으로 이해했습니다. 그런데 제가 변수가 메모리에 어떻게 저장되는지 궁금하여 이전에 간단히 #include <stdio.h> int main(void) { int x = 16; int y = 8; int z = 4; return 0; } 로 두고 메모리를 따라가 봤더니 다음과 같은 결과가 나왔습니다. 0x000000886A2FFB04 10 00 00 00 .... 0x000000886A2FFB08 b4 05 63 2e ?.c. 0x000000886A2FFB0C fc 7f 00 00 ?... 0x000000886A2FFB10 c8 d2 29 d8 ??)? 0x000000886A2FFB14 bc d9 00 00 ??.. 0x000000886A2FFB18 02 00 00 00 .... 0x000000886A2FFB1C 00 00 00 00 .... 0x000000886A2FFB20 00 00 00 00 .... 0x000000886A2FFB24 08 00 00 00 .... 0x000000886A2FFB28 16 20 60 2e . `. 0x000000886A2FFB2C fc 7f 00 00 ?... 0x000000886A2FFB30 00 00 00 00 .... 0x000000886A2FFB34 88 00 00 00 ?... 0x000000886A2FFB38 00 00 00 00 .... 0x000000886A2FFB3C 00 00 00 00 .... 0x000000886A2FFB40 00 82 68 b3 .?h? 0x000000886A2FFB44 04 00 00 00 ....( (볼드체 + 기울임이 각각 x, y, z입니다) 여기서 질문이 두 가지 있습니다. 보안 설정에서 아무것도 바꾸지 않았는데 변수들이 모두 메모리 주소를 32씩 띄워서 저장되고 있습니다. int는 4byte이니 원칙적으로는 메모리 주소를 4씩만 띄워서 저장해도 될 것 같은데 (강의상에서도 szBuffer와 nData가 붙어서 저장된 것처럼) 왜 이런 것일까요? 변수 x, y, z는 자동변수이므로 현재 저장된 메모리 공간은stack frame으로 이해했습니다. 강의에서 stack frame의 위쪽 공간일수록 메모리의 0번지에 가까워진다고 하셨는데 왜 x - > y -> z로 갈수록 메모리 주소가 증가하는 걸까요? 가장 먼저 정의된 변수 x가 stack의 가장 밑에 저장되고 그 위에 y, z가 정의되었다고 한다면 z로 갈수록 메모리 주소가 0번지에 가까워져야 하지 않을까... 생각을 하였습니다. 감사합니다.
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
begin: tpsram_write @(posedge clk); for (int i=0;i<DEPTH;i++) begin we <= 1; wa <= i; wd <= 'h10+i; @(posedge clk);//필요한 이유 end we <= 0; @(posedge clk); end @(posedge clk); for문 마지막과 begin문 마지막에 필요한 이유가 뭔가요? 주석 처리 후 시뮬레이션을 돌려보니 for문에 맞게 wa값과 wd값이 업데이트가 되지 않았습니다. 혹시 system verilog에서 for문과 begin문을 작성하면 @(posedge clk)을 해주는 것이 규칙인가요?
문득 궁금한건데 아스키코드가 ’A’ 는 65잖아요 예를들어 union Data { int intValue; char charValue; }; 이고 main함수에 charValue 값만 ‘A’ 로 대입 해주고 printf를 통해 intValue 값을 출력하면 65가 나오더라구요 이게 왜 이러는건가요? 메모리내에 값이 [41] [xx] [xx] [xx] 같이 0x41 값을 제외하고는 모두 쓰레기값일텐데 왜 65를 잘 출력하는거죠? 좀 헷갈립니다.
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
create_clock -name root_clk -period 20 [get_ports {clk}] derive_pll_clocks derive_clock_uncertainty 챕터3의 마지막 tool시연 영상에서 해당 부분을 입력하고 run synthesis하는 과정에서 막혔습니다. 저는 이미 비바도가 설치되어 있기에 해당 프로그램을 바탕으로 실습 진행중이었습니다. 다만 비바도의 경우 xdc파일 형태로 런이 진행되고, derive_pll_clocks derive_clock_uncertainty 위의 두 문장은 적용되지 않는 다는 것을 알게 되었습니다. 이럴 경우 어떤 코드를 작성해야 해당 기능을 대체할 수 있을 까요? 양질의 강의 감사 드립니다.
보조기억장치 강의에서 셀이 모여서 페이지라고 하셨고, 페이지가 모여서 블록이라고 하셨는데, 혹시 그 전 강의에서 프로그램을 페이지단위로 나누는것을 페이징 이라고 했는데 그때의 페이지가 셀이 모인 페이지인가요 ? 그게 맞다면 보조기억장치에서는 블록단위로 저장한다고 햇는데, 페이지 스왑인 할때는 페이지가 모인 블록단위( 페이지 세트 )로 스와핑되는건가요 ? 여담으로 이 강의가 너무좋아서 전공지식을 강사님꺼로 다 학습해보려고 해요. 인프런에 혼공넷 이 올라왔더라고요. 유튜브에만 있었던거같은데. 자료구조,알고리즘 공부하려했다가 네트워크부터 공부하겠습니다. 자료구조,알고리즘 강의도 집필하시고 인강이 나왔으면 좋겠습니다 ..!!!!
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
안녕하세요 첫 과제 진행에 있어 질문이 생겨 남깁니다. 제가 궁금한 점은 '왜 같은 SRAM 모델을 똑같이 인스턴스 시켜주냐' 입니다. 제가 이해한 바는 `define 한 줄로 시뮬레이션, FPGA, ASIC을 선택할 수 있게 만드는 것이 이번 과제라고 생각합니다. 근데 동일한 모듈은 그저 인스턴스 해준다는게 의미가 없다고 생각들어 질문드립니다. 상황에 맞게 다른 모듈을 정의해주어야하는게 아닌가요? 예를 들어 시뮬레이션에서는 시뮬레이션 전용 SRAM 모듈을 인스턴스 해줘야하고 FPGA에서는 FPGA 전용 모듈을 인스턴스 해줘야한다고 생각합니다. 제 생각이 틀린 것일까요?
프로그램이 8kb이라고 가정 페이지 크기를 2kb로 설정했다고 가정 근데 변수를 100개 초기화,선언 했다고 가정 근데 그 변수 100개의 주솟값이 변위 3 을 가진다고 가정 그럼 프레임에서 3만큼 떨어지게끔 설계된거지요. 실제로 4페이지로 나뉘는게 아니라 100개 이상의 페이지로 나뉠수도있을거같아요
강의를 보다가 동적할당한 영역 이상으로 값을 넣고 동작시 Free 부분에서 디버그 에러가 발생하는것을 보여주셨는데, Free가 정상적으로 동작하지 않고 끝나는것처럼 보입니다. 그렇다면 메모리에 할당후 값을 넣은 부분은 계속 메모리에 남아있게 되는건가요? 다른 프로그램에서 메모리를 덮어쓰거나 해당영역을 초기화 하지 않는이상 남아있을 것으로 판단되네요
signal()을 호출한 프로세스의 실행을 일시 중단하고 자신이 실행된 뒤 다시 signal()을 호출한 프로세스의 수행을 재개 방식은 선점형 방식이랑 유사한것같고 wait()를 호출햇떤 프로세스는 signal()을 호출한 프로세스가 모니터를 떠난뒤에 수행을 재개 하는 방식은 비선점형이랑 유사한것같네요. 2. 상호배재를 위한 큐와 우선순위를 위한 조건변수 큐는 순서로 봣을떄 연속배치되는 형식의 그림이 더 자연스러울거같은데 우선순위를 위한 조건변수 큐 는 모니터 위에 있도록 그림이 그려진 이유가 잇을가요 ? 3. pcb의를 대기큐, 준비큐에 삽입하는것이 전에 봣던 강의중 명령어 사이클의 연장선이라고 생각해도될까요 ? 가령 pcb안에 잇는 프로세스 상태의 값을 변경하는것이라고 봐도되는걸까요
스레드 컨텍스트 스위칭이란 cpu의 레지스터에 있는 정보를 해당 스레드의 tcb에 저장하고 다른 스레드의 tcb의 정보를 가져오는거라고 생각합니다. 그럼 thread1 = threading.Trhead(target=foo).start() thread2 = threading.Trhead(target=foo).start() 에서 멀티코어환경에서 실행시킨다고 가정할 시에는 이 코드를 실행시켯을때 스레드 컨텍스트 스위칭이 일어나지 않겠죠 ??
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
안녕하세요. tool 관련 질문드립니다. vivado로 진행해도 상관이 없을까요? 또한 zynq z7-20 보드가 있어 직접 설계한 부분을 hw에서 구현출력값을 확인하고 싶어 질문드립니다. 앞으로 프로젝트 진행과정에서 직접 hw구현 시 어떠한 방식으로 확인 가능할까요? 예를 들어 serial 통신이나 ila같은 방식으로 확인하는게 좋을까요?