2024/06 4

베릴로그 문법 (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..