분류 전체보기 88

makefile 기초: 소개 및 실행 과정

makefile은 어떤 모듈이 수정되어 다시 컴파일되어야 하는지 자동으로 결정해서, 필요한 파일들만 재 컴파일해서 하나의 프로그램으로 생성하므로 재컴파일에 따른 시간 낭비를 최소화할 수 있다. makefile은 makepp에게 프로그램을 컴파일하는 방법을 알려주는 명령어들의 집합이다. makepp는 표준 유닉스 make를 위해 작성된 makefile들을 읽을 수 있다. 소스 파일들을 사용하여 하나의 실행 프로그램으로 컴파일하는 과정은 복잡하고, 컴파일에 많은 시간이 소요된다. 개발자가 하나의 프로그램을 만들기 위해 각 소스 파일들을 컴파일하는 명령을 직접 입력하기엔 입력할 인자들이 너무 많다. 물론 shell script를 사용하여 프로그램을 컴파일할 수 도 있지만, 사용되는 소스 중 단 하나만 수정되어..

SW 설계/make 2021.10.19

파이썬 기초: 숫자, 문자열 자료형

개요 자료형은 숫자, 문자열 등 프로그램 상에서 자료 형태로 표현하는 모든 것을 뜻한다. C언어 전후로 프로그래밍 언어를 이해하는 전통적인 방법은, 그 언어의 자료형을 이해하는 것이었다. 과거 프로그램들은 연산 위주의 코드들이 많았고, C언어 이전에 연산에 주로 사용되어온 Fortran 으로부터 C언어로 넘어가면서, C언어가 처리할 수 있는 수의 범위가 중요했던 때가 있었다. 90년대부터 C언어가 대중화되면서, 대부분의 C언어 관련 서적들은 C언어에서 사용하는 char, int, float, double 과 같은 자료형들을 먼저 다루었고, 90년대 이후로 8, 16, 32, 64 bits 컴퓨터들이 생겨나면서, 각 컴퓨터들이 기본적으로 몇 bits까지 처리하는지, 처리할 수 있는 숫자의 범위는 얼마나 되..

SW 설계/파이썬 2021.10.17

파이썬 기초: 변수

변수 변수 (Variable) 란 데이터; 혹은 값을 저장하는 공간이다. 즉, 컴퓨터가 프로그램에서 사용하는 데이터를 기억하는 곳이고, 이는 컴퓨터 메모리에 저장된다. 컴퓨터에서 실행되는 모든 프로그램들은 실행될때 실행될 코드와 데이터들이, 별도의 코드 실행 영역과 코드 실행에 필요한 데이터 영역에 올라오게 된다 (load). 예를 들어, 아래 그림과 같이 우리 눈 앞에 멋진 자동차가 있어서, 그 상황을 기억해서 친구에게 얘기하게 될 경우를 생각해보자. 우리는 그 자동차를 눈으로 보고, 우리 뇌 속에 자동차 모양, 색깔, 번호판, 메이커 등을 기억하게 된다. 이후 친구를 만나면, 뇌 속에 기억된 내용을 가지고 그 자동차에 대해 친구에게 말할 수 있게 된다. 자동차를 말하기 위해 우리가 뇌의 한 공간에 이..

SW 설계/파이썬 2021.10.17

Verilog: Icarus Verilog, GTKwave

하드웨어 프런트엔드 (Hardware frontend) 설계를 위해서는 HDL 시뮬레이터와 합성 툴이 필요하다. C나 C++, Python과 같은 SW 들은 무료로 사용할 수 있는 Visual Studio, GCC와 같은 컴파일러들이 있지만, 하드웨어 설계 분야는 거의 대부분이 유료의 상용 소프트웨어들이고, 개인이 구매하기엔 소프트웨어 가격이 매우 높다. 주로 사용되는 상용 툴로는 Synopsys사의 VCS, Cadence사의 NCS, Mentor사의 Questa, Modelsim 등이 있다. Doulos가 운영하는 EDA Playground는 회원가입을 하면, Cadence, Synopsys, Mentor의 상용 시뮬레이터를 무료로 사용해 볼 수 있다. 또한, 디자인이 작거나, 약간의 불편함을 감수한다..

Verilog: timescale, delay

timescale timescale은 컴파일러 지시자 중 하나로서, 컴파일러 지시자는 backward quite(`)으로 시작한다 timescale은 합성과 상관없이, 회로를 테스트하기 위한 시뮬레이션에만 영향을 준다. timescale은 시뮬레이션시 기본적인 시간 단위를 결정하는데, 아래와 같이 설정하는경우, 기본 시뮬레이션 단위인 time unit은 1 ns이고, time precision은 1 ps 가 된다. // usage: `timescale [time unit]/[time precision] `timescale 1ns/1ps timescale 관련하여 몇가지 유용한 시스템 함수들을 알아보면, 시스템 함수인 $printtimescale은 time unit과 time precision을 출력할 수..

makefile 사용시 유용한 팁들!

GNU make는 코드를 컴파일하기 위해 만들어진 유틸리티지만, 현재는 많은 파일들과 디렉토리들에서 변경사항을 적용하기 위한 용도로도 많이 사용된다. 따라서, 현재는 개발자 뿐만 아니라, 시스템 관리자에게도 매우 유용한 툴이다. make를 사용하려면 설정 파일이 필요한데, 이 설정 파일이름이 보통 makefile이다. 아무 인자없이 make를 실행하면, GNU make는 현재 작업 디렉토리에서 설정파일 GNUmakefile, Makefile, makefile을 찾는다. 만약 설정 파일에 다른 이름을 사용하고자 한다면 make -f filename을 사용해야 한다. 본 자료는 makefile을 사용할 때 혼동되거나, 자주 사용되는 구문들을 정리해보았다. 오늘 포함할 내용들은 아래와 같다. 변수 선언: =,..

SW 설계/make 2021.10.12

스칼라: Mixins

오늘은 Scala Mixin에 대한 내용을 소개해보려고 합니다. Mixin은 클래스들을 합치는 데 사용되는 trait (속성) 으로서, DRY 한 Scala언어가 되는데 크게 일조하고 있습니다. 소개 가장 쉽게, 혹은 흔하게 사용하는 mixin방법은 4 단계로 진행됩니다. Step 1: 가장 먼저 super class A를 abstract class로 선언합니다. Step 2: 이를 상속한 하위 클래스 B를 일반 클래스로 정의합니다. 이를 위해 부모 클래스인 abstract class에서 선언한 abstract형들을 명시합니다. Step 3: Super class A에 대한 method들을 포함하는 trait C를 정의합니다. Step 4: 최종적으로 사용할 일반 클래스 D는 일반 클래스 B를 상속하고,..

SW 설계/스칼라 2021.10.09

git 커밋: 특정 커밋 돌아가기, 되돌리기, 차이 확인하기, 날짜 바꾸기, 이슈처리

저장소 (Repository) git 은 변경 이력을 관리하는 툴로서, 저장소(Repository)를 사용하여 변경 이력을 관리합니다. 파일들이 변경 이력별로 저장되는데, 두 개의 저장소로 구분되어 저장됩니다. 하나는 원격 저장소 (Remote Repository)로서, 여러 사람이 함께 공유하기 위한 저장소입니다. 다른 하나는 지역 저장소 (Local Repository)로서, 개인 전용입니다. 일반적으로, 개인의 로컬 저장소에서 작업하다가, 공개하고 싶을때 원격 저장소에 업로드하게 됩니다. git commit 명령은 변경 이력이 기록된 인덱스를 로컬 저장소에 저장할 때 사용하고, git push 명령은 로컬 저장소에 저장된 변경 이력을 원격 저장소로 올릴 때 사용합니다. 반대로 git pull 명령은..

작업 tools/git 2021.10.08

git 서브모듈: 추가하기, 변경하기,삭제하기

서브 모듈 추가하기 아래와 같은 2개의 별개 코드를 포함한 프로젝트를 생성하고자 할 경우, shot 프로젝트 stick 코드 band 코드 다른 저장소에 있는paper이라는 프로젝트를 shot 저장소에 서브모듈로 추가하려고 할 경우, 아래와 같이 git submodule add [path]을 사용하여 submodule을 add하면 됩니다. git submodule add https://github.com//paper paper git status를 확인해보면, .gitmodule과 paper폴더가 추가된 것을 확인할 수 있고, .gitmodule 에는 git에서 관리되는 서브모듈에 정보가 들어있고, 아래 내용이 추가됩니다. [submodule "paper"] path = paper url = https:..

작업 tools/git 2021.09.26

git 저장소: 복제하기, 합치기, 변경하기

로컬 저장소 복제하기 git 을 통해 작업하다가 보면, 원격 저장소를 간단하기 관리 하기 위해, 모든 브랜치들의 작업 내역들을 원격 저장소에 저장하지 않고 로컬 저장소에만 저장해서 진행하는 경우가 많습니다. 어떠한 사유로 인해, 로컬 저장소를 내용을 현재까지로 유지한 채, 다른 폴더에서 새롭게 다시 시작하고자 하는 경우에는 원격 저장소에 저장하지 않은 로컬 저장소의 작업 내역까지 복제해야 합니다. 이 경우, 모든 작업내역까지 포함해 복제하는 방법은 새롭게 시작할 원격 저장소를 만들고, mirror 옵션을 사용해 push할 수 있습니다. git remote set-url --push origin git remote -v git push --mirror 예 아래 예에서 https://github.com/te..

작업 tools/git 2021.09.26