프로그래밍 30

베릴로그 문법 (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도 보이는데요, 요즘의 칩은 과거에 비해 성능이 월등히 좋습니다. 그렇기 때문에 기본적으로 억대의 트랜지스터로 이루어져 있습니다. 이걸 일일이 그리는 것은 불가능하겠죠?? 예전에는 논리 게이트를 일일이 ..

[Python] 객체지향에 대하여 (2) 생성자와 클래스 변수/인스턴스 변수

- 생성자에 대하여 이전 글에서 grade라는 클래스를 선언했습니다, 코드를 다시 한번 확인해 볼까요? 2023.12.30 - [프로그래밍/Python] - [Python] 객체지향에 대하여 (1) 클래스와 객체 [Python] 객체지향에 대하여 (1) 클래스와 객체 - 객체지향 프로그래밍이란? OOP(Object Oriented Programming)라고도 하는 객체지향 프로그래밍이란 프로그래밍 방법론이라고 생각하시면 됩니다. 기존에는 데이터 선언하고 데이터를 처리하는 함수들 veriln-e.tistory.com class grade : #필드 name = "" score = 0 #메소드 def plus(self, num) : self.score = self.score + num return self...

[Python] 객체지향에 대하여 (1) 클래스와 객체

- 객체지향 프로그래밍이란? OOP(Object Oriented Programming)라고도 하는 객체지향 프로그래밍이란 프로그래밍 방법론이라고 생각하시면 됩니다. 기존에는 데이터 선언하고 데이터를 처리하는 함수들로 프로그램이 구성되었다면, 객체지향 프로그래밍에서는 프로그램을 객체(object)로 나누고 이 객체들의 상호작용으로 프로그램을 구성시킨 방법이라고 할 수 있습니다. 기존에는 함수를 선언하면 복사해서 재사용할 수 없지만, 객체지향 프로그래밍에서는 여러 번 복사해서 재사용할 수 있다는 장점이 있습니다. 여기서 객체는 데이터뿐만 아니라 데이터를 처리하는 함수인 메소드도 포함합니다. 즉, 객체는 데이터와 메소드의 집합이라고 보시면 됩니다. 객체지향 프로그래밍은 다음과 같은 장단점이 있습니다. 장점 코..

[C언어] 코드 실행 방법, 상수와 변수, printf

지난 글에서 C언어 프로그래밍을 위한 환경 세팅 방법에 대해 알아보았습니다. 이번 글에서는 실제 C언어 프로그래밍을 하기 위한 소스 파일 추가하는 방법과 printf 활용예시를 보겠습니다. 2023.12.20 - [프로그래밍] - [C언어] C언어의 특징과 환경세팅 [C언어] C언어의 특징과 환경세팅 - C언어의 특징 흔히 C언어는 대부분의 프로그래밍 언어의 기본이 되는 언어입니다. 그래서 다른 언어보다 익히기 어렵지만 C언어를 배우고 나면 다른 언어를 쉽게 익힐 수 있습니다. 다음으로 veriln-e.tistory.com - 소스 파일 추가 솔루션 탐색기에서 소스파일-추가-새 항목을 선택하여 소스파일을 추가할 수 있습니다. 그럼 다음과 같은 창이 나옵니다. 가장 위에 있는 항목인 c++ 파일을 선택하시..

프로그래밍 2023.12.22

[C언어] C언어의 특징과 환경세팅

- C언어의 특징 흔히 C언어는 대부분의 프로그래밍 언어의 기본이 되는 언어입니다. 그래서 다른 언어보다 익히기 어렵지만 C언어를 배우고 나면 다른 언어를 쉽게 익힐 수 있습니다. 다음으로 연동성이 굉장히 좋습니다. 그래서 오늘날 사용되고 있는 대부분의 컴퓨팅 시스템에서 사용할 수 있다는 장점이 있습니다. 그래서 C언어로 짠 프로그램은 다양한 하드웨어에서 실행할 수 있습니다. 또한 절차 지향 언어이기 때문에 코드가 복잡하지 않습니다. 그말은, 코드를 유지보수하는 것이 쉽다는 말입니다. 마지막으로, C언어는 간결합니다. 그래서 컴파일된 프로그램의 용량이 작고 실행속도가 빠르다는 장점이 있습니다. 위의 장점으로 인해 반도체 설계분야에서 검증 프로그래밍 용 언어로 사용됩니다. - 환경설정 먼저 visual s..

프로그래밍 2023.12.20

[Python] 파일 활용 방법 (2) 파일 쓰기

- 파일 쓰기 지난 글에 이어서 이번에는 파일에 쓰는 코드를 작성해보겠습니다. file = None String = "" file = open("D:\Download\Python\data1.txt","w",encoding="utf-8") while True : String = input("파일에 쓸 내용: ") if String != "" : file.writelines(String + "\n") else : break file.close() print("파일 쓰기 완료") >> 파일에 쓸 내용: 엄마가 >> 파일에 쓸 내용: 섬그늘에 >> 파일에 쓸 내용: 굴따러 >> 파일에 쓸 내용: 가면 >> 파일에 쓸 내용: >> 파일 쓰기 완료 코드를 보면 먼저 변수 선언을 하고 파일 경로를 지정했습니다. 지금..