지난 챕터에서 SoC를 이루는 3요소로 프로세서, 페리프럴, 버스를 소개했습니다. 이 요소들을 인체기관으로 빗대어보어 각기 대응하면 뇌, 감각·운동기관, 신경기관이라고 소개했었습니다. - 코어가 명령을 내리고 페리프럴에게 잘 전달하고, 페리프럴이 연산을 수행한 후, 그에 대한 리스폰스를 다시 코어에게 전달하는데 이 때마다 전달을 할 수 있게 해주는 역할이 바로 '버스'입니다. 만일, 버스가 없다면 프로세서와 페리프럴이 1:1 대응을 하여 모든 입력과 출력이 동작하게 될 것입니다. 그렇게 된다면 프로세서에서 처리할 인풋과 아웃풋이 매우 많아지겠죠. 하지만 이 때 버스를 이용한다면 공통적인 패스(Path)를 만들기 때문에, 그러한 1:1 대응을 할 필요가 없어지게 된다는 것입니다. Master Read / ..
) Cortex - M0 - 32 bit의 RISC 구조의 프로세서입니다. (Reduced Instruction Set Computing) 위 구조와 반대되는 것이 CISC 구조입니다. (Complex Instruction Set Computing) RISC 프로세서는 명령어를 동일하게 만들고 레지스터 위치를 동일하게 만들어 하드웨어를 제작할 때 용이하게 하는 구조입니다. SISC 프로세서는 각각의 명령어는 독립적인 길이와 위치를 가지고 있어, 프로그램 만들 때 효율적인 구조입니다. - 폰 노이만 아키텍처 (Von Neumann Architecture) 인스트럭션과 데이터를 하나의 메모리에 포함되어 있는 구조입니다. 위 아키텍쳐와 반대되는 것이 하버드 아키텍처입니다. (Harvard Architectur..
) System On Chip SoC는 하나의 반도체 칩 내부에 시스템을 집어넣은 것을 말한다. SoC의 구성 3요소 프로세서[Processor] ( Core라고도 함 ) 뇌 : 중요한 명령을 하달 페리프럴[Peripheral] ( IP, 주변장치 ) 감각, 운기관 : 동작 버스[Bus] 일련의 신경계 ) SoC 내부 구성요소 - 기본 SoC이며 실제로는 이보다 더 많은 Peripheral이 존재합니다. ) 해당 그림에서는 System Bus와 Peripheral Bus가 존재하는 Multiple Bus입니다. 시스템 버스에 물린 Peripheral(이하 Peri)은 RAM, UART, VGA, GPIO, TIMER, 7-SEGMENT DISPLAY가 물려있는 것을 볼 수 있고, 페리 버스에는 WATCH..
[Concurrency : 동시성] - Verilog HDL은 Description Language이기 때문에, 동시에 각각의 코드 블럭이 실행된다. 예로, module AND( inputA, B, outputC ); wire w; NANDU1(A, B, w); NANDU2(w, w, C); endmodule 여기서 동시에 수행되는 부분은 NAND U1과 NAND U2 부분이다. Continuous Assignments와 Procedural Blocks같은 것들이 동시적으로 수행된다. 즉, 순서가 바뀌어도 동시에 수행되기 때문에 결과는 같다. [Continuous Assignments] assign ~ ; 의 형태로 기술되는 것을 Continuous Assignments라고 한다. Combinationa..
기본적으로 C에서 사용하는 연산자를 따라가는 편이다. 그렇다해도 나는 Verilog 사용자가 C를 보면서 공부하는건 아닌거 같아서 따로 정리하고자 한다. [Relational Operations : 비교 연산자] 메인으로 사용되는 표현식 A > B A가 B보다 큰가? >= A >= B A가 B보다 크거나 같은가?
[Module Structure] module example_code #(parameter D=10)( inputwire[3:0]i, outputwire[3:0]o ); wiretmp; wirerst; ANDA1(i, tmp); assign o = ~i; always @(*) begin if(rst) tmp = 1'b0; end endmodule ※ 임의로 만든 모듈이기 때문에 제대로 작동하는지 아닌지는 판별 불가. 단순히 이렇게 모듈을 작성한다라는 것을 인지하면 되겠습니다. 한 가지 주의할 점은 assign 혹은 always와 같은 것을 사용하여 식을 정의할 때, 사용하는 변수가 그 이전에 선언이 되어야합니다. 즉, 위 모듈에서 선언 파트는 wire tmp; ~ wire rst;인데, 이 부분이 선언이..