verilog 7

베릴로그 문법 (4) always 구문

- always 구문 설명always 구문은 initial 구문과 마찬가지로 reg에 값을 할당할 때 사용합니다. 다음 예시를 실행해볼까요?module top(); parameter period_clk = 10; reg clk; initial clk = 1'b0; reg resetn; initial resetn = 1'b0; always #(period_clk*0.5) clk = ~clk; initial begin #(period_clk); resetn = 1'b1; end initial begin #500 $display("//////////////"); $display("//sim_finish//"); $display("/////////////..

베릴로그 문법 (3) 인스턴스와 계층 구조

- 인스턴스인스턴스화는 이미 완성된 모듈을 가져오는 것을 말합니다. 어떤 경우에 인스턴스화를 할까요?? 1. testbench이전 글에서 testbench는 시뮬레이션을 하기 위한 환경이라고 말씀을 드렸습니다. 시뮬레이션을 하는 이유는 DUT(Device Under Test)의 기능을 확인하거나 검증하기 위해서 합니다. 그러기 위해서는 testbench에 DUT를 가져와야겠죠?? 이럴 때 모듈을 인스턴스화합니다. 2. 구조 설계아래 그림은 UART라고 하는 통신 IP의 block diagram 예시입니다.  UART 모듈 내부에 기능별로 여러 component들이 있죠?? 이러한 구조를 계층 구조(hierarchy)라고 합니다. 하나의 모듈의 위의 component를 모두 구현할 수 있지만, 이럴 경우 ..

베릴로그 문법 (2) initial 구문과 testbench, 절차 할당과 연속 할당

- initial 구문initial 구문은 주로 testbench(시뮬레이션을 위한 환경이라고 보시면 됩니다)에서 시뮬레이션을 위해 사용하는 구문으로, 논리 회로 합성에 사용되지 않습니다. initial 구문 안에는 절차형 할당들이 들어가며, 때문에 reg 값 할당을 작성해 주면 됩니다.한 initial 구문 안에서 작성된 절차형 할당은 문장의 순서에 따라 시뮬레이션이 진행됩니다. 이게 무슨 의미인지는 예시를 보면서 이해해 봅시다. - Testbench 작성지난 글에서 top.v를 작성했었습니다.module top (); //reg 선언 reg a; //1. reg control initial begin a = 1; #100 a = 0; #100 a = 1; e..

베릴로그 문법 (1) 기본 구성

이 글에서는 verilog 기본 문법을 살펴보겠습니다. 먼저 알아야 할 것은 한 문장의 끝은 세미콜론(;)으로 마무리해야 한다는 겁니다. - Verilog 기본 문법module module_name (port_list); //선언 reg reg_name; wire wire_name; parameter parameter_name; //회로 설명 part 인스턴스화 always 문 initial 문 function, task 정의 assign 문 endmodule 하나하나 알아볼까요? 1. 모듈 선언module: 기본 설계 단위입니다. module - endmodule, 한 파일에 여러 개의 module이 들어갈 수 있지만 한 개의 module만 작성하는 것을 추천합니다.po..

베릴로그 개요와 시뮬레이션 환경 세팅

- HDL(Hardware Description Language) 이란?HDL은 기본적인 소자에서 실제 반도체 chip에 이르기까지 디지털 시스템의 설계와 검증에 사용되는 하드웨어 기술 언어로, 회로의 기능과 timing에 대해 기술할 수 있습니다. 소프트웨어 설계 언어가 아니라 하드웨어 설계 언어이기 때문에 일반적인 컴퓨팅 언어와 차이가 있습니다. - HDL을 사용하는 이유그렇다면 왜 반도체는 설계도가 아닌 HDL로 설계하는 걸까요? 회로도 예시를 가져와봤습니다. 여러 component와 and gate도 보이는데요, 요즘의 칩은 과거에 비해 성능이 월등히 좋습니다. 그렇기 때문에 기본적으로 억대의 트랜지스터로 이루어져 있습니다. 이걸 일일이 그리는 것은 불가능하겠죠?? 예전에는 논리 게이트를 일일이 ..

OJT 3. SOC integration

OJT 2 Testbench 작성을 통해 verilog 코딩방법과 여러 IP들에 대해 공부했습니다. 다음으로는 저희 회사 프로젝트 중 하나에 참여해서 간단한 업무를 했는데요, 바로 integration입니다. ARM같이 자체 IP를 만드는 회사도 있지만 저희 회사는 고객사의 요청을 받아 SOC platform을 설계하는데요, 설계하려는 칩의 spec에 맞는 IP를 사서 칩으로 만드는 작업을 합니다. 반도체 설계 flow는 나중에 따로 정리하겠습니다. 그래서 제가 작업한 부분을 살짝 보여드리면 굉장히 간단한데요 AHB 버스와 APB 버스가 bridge로 연결되어 있고 각각의 APB 버스에 여러 가지 peripheral들이 달려있는 구조입니다. 저는 APB0 부분을 맡았는데요, verilog 코딩 자체는 어..

Ch2 업무 2023.05.30

OJT 2. testbench 작성

1. Checklist 작성 어떤 모듈에 대한 test를 하려면 먼저 체크리스트를 작성해야 합니다. I2C standard에도 나와있는데 Standard-mode, Fast-mode, Fast-mode Plus를 지원한다고 하네요. 모듈에 timing 세팅하는 레지스터가 있는데요, 내가 설정했던 대로 제대로 작동하는지 확인해야겠죠? 마스터모드, 슬레이브모드 설정가능하고 7-bit / 10-bit address mode 확인해야 합니다. (DMA는 아직 몰라서 넘김,,,,) 그리고 모듈의 레지스터들의 기본값이 제대로 읽히는지, Writeable 한 경우 입력한 대로 값이 설정되는지 확인해야 합니다. 마지막으로 제 숙제였던 Data Loopback test로 마무리했어요. 2. Block diagram 그리..

Ch2 업무 2023.05.17