전체 글

삽질을 통해 깊게 공부하는 Electronic Engineer 연락 및 문의사항은 'donghyun9904@naver.com' 으로 부탁드립니다!
[verilog | VHDL]

[VHDL] 병렬문(Concurrent Statement)

회로도의 동작이나 구조 서술을 위한 프로세스나 블록간 연결상태를 서술하는 용도로 사용한다. 보통 아키텍처 본체 내부의 문장 부분을 구성하게 되며 프로세스문 내부는 순차문, 프로세스문 자체는 병렬문이다. 병렬분의 종류는 프로세스문, 블록문, 병렬주장문, 병렬신호배정문 등이 있다. 1. 프로세스문(Process statement) - 기본적으로 동시처리인 VHDL에서 순차적 처리를 가능하게 해주는 문법이다. - 감지리스트(sensitivity list)에 들어가는 신호는 process내에서 선언 불가능하다. - 모듈 내부는 순차적으로 이루어지므로 순차문을 사용한다.(if, case) - 프로세스문 자체는 병렬문이며 여러개의 프로세스문이 있으면 서로 병행적으로 수행한다. - 프로세스문은 일종의 무한루프처럼 동..

[verilog | VHDL]

[VHDL] 순차문

VHDL의 아키텍처를 설계할때는 크게 병렬문과 순차문으로 나뉜다. 일반적으로 아키텍처는 문장부 서술은 병렬문으로 서술하지만 병렬문 내부 혹은 부프로그램(프로시저, 함수)은 순차문으로 동작을 하기 때문에 두가지 동작을 명확히 이해한 상태에서 설계를 진행해야 한다. 이번 포스팅에서는 순차문에 대해 알아보자. 순차문(Sequential Statement) • 병렬문의 부프로그램이나 프로세스문 수행을 위한 알고리즘 서술 용도로 사용 • 반드시 앞의 문장이 진행되어야 뒤에 문장이 진행할 수 있다. • 순차문 종류 : 대기문, 주장문, 신호배정문, 변수배정문, 프로시저 호출문, if문, case문, next문 등.. 1. 대기문(wait statement) - process문이나 procedure의 동작을 주어진 ..

[verilog | VHDL]

[VHDL] 기본 문법

1. 기본 구성 // AND_VHDL code // package 부분 library ieee; use ieee.std_logic_1164.all; // entity 부분 entity AND_VHDL is port(A, B : in std_logic; c : out std_logic); end AND_VHDL; // architecture 부분 architecture Behavioral of and_VHDL is begin process(A, B) begin if(A='1' and B ='1')then C 대형 설계를 쉽게 할 수 있다) - 컴포넌트의 연결관게는 port map이라는 예약어를 이용하여 이루어짐 architecture behav of half_add is component and_2 por..

리눅스/ROS

[ROS] 기본 용어 및 컨셉

Node - 각 프로세스들을 Node의 단위로 관리 - 노드들끼리 데이터를 주고받기 위해서는 어떤 노드가 생겼고, id는 볓번이고 등의 정보가 공유되어야 함. - 이를 관리해주는 것이 ROS Master rosrun & roslaunch Node를 실행시키는 방식 1) roslaunch : launch파일을 통해 한번에 여러개의 Node를 동시에 실행 roslaunch 2) rosrun : 단 하나의 Node를 실행 rosrun launch file - .launch 파일은 xml형식으로 구성 1) line의 시작과 끝, 태그 or ... 2. tag 종류 : launch 파일임을 알려주는 tag : launch 파일에서 다른 launch파일을 가져올 수 있음 : 단일 node를 추가하고자 하는 경우에 ..

ML | DL

[ML/DL] Cross-Entropy를 이용한 MNIST

Entropy / Cross-Entropy 엔트로피란 물리에서 '무질서도'를 가리키는 용어이지만 확률, 딥러닝분야에선 정보를 표현하는데 필요한 최소 평균 자원량(bit수)를 의미한다. 엔트로피를 통해서 알 수 있는 정보는 1. 엔트로피는 가장 최적의 방식으로 코딩했을 때 비트수를 나타낸다. 2. 엔트로피보다 더 짧게 코딩할 수 없다. 일반적인 엔트로피 수식은 다음과 같다. 여기서 pk는 '실제확률'를 의미하며 확률이 크면 짧게 코딩하고, 확률이 작으면 길게 코딩하는것이 효율적이라고 한다. 표본 샘플의 확률이 전부 동일하면 엔트로피가 최대값이 나오게된다. 이는 곧 비트수가 최대가 된다는 의미이며 결국 최악의 경우가 된다는 뜻이다. 반면, 샘플의 확률이 각각 달라서 특정 확률에 치우쳐져 있다면 엔트로피는 작..

ML | DL

[ML / DL] MNIST 학습모델

MNIST (Modified National Institute of Standards and Technology) MNIST란 손으로 쓴 숫자를 기계학습을 통해서 인식하도록 하는 모델이다. MNIST데이터 베이스에 60,000개의 트레이닝 이미지와 10,000개의 테스트 이미지가 있어서 이를 활용하면서 기계학습을 시켜나갈 수 있다. MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges yann.lecun.com 신경망 구성 MNIST데이터셋을 이용한 기계학습은 input layer와..

ML | DL

[ML/DL] 경사 하강법 SGD 실습(with.python)

딥러닝 학습 초기 a지점에서의 x값을 W0라고 하자. 해당 지점에서의 y값은 L이다. 이 때, a의 접선 즉 a의 순간 기울기(dL/dW0)는 음수가 나타나고 a'에서의 기울기는 양수가 나타난다. 기울기가 가장 작은값, 즉 기울기가 0에 수렴하도록 W의 값을 조절해야 가장 최적의 추세선을 그릴 수 있게 된다. 이를 수식으로 나타내면 다음과 같으며 이런 작업을 '경사하강법' 이라고 한다. 딥러닝관점에서 볼때 W를 가중치라고 부르며 가중치의 비중에 따라 신경망이 어떤 데이터에 더 중요도를 줄것인지 조절한다. 위와같은 알고리즘을 통해서 에러를 최소한으로 수렴하도록 최적의 기울기를 찾아내는것이 딥러닝의 목적이다. SGD(Stochastic Gradient Descent) 확률적 경사 하강법 - 오차가 더 이상 ..

ML | DL

[ML/DL] 딥러닝 기본 개념

딥러닝을 배울때 기본적으로 알고있어야 하는 지식이 상당히 많다. 2학년을 마치고 딥러닝을 배우고 나서야 대학에서 배운 수학이 인공지능에서 어떻게 쓰이는지 알게 되었다. AI를 배우기 위해 선형대수(행렬), 확률과통계, 미적분은 필수로 알고있어야 한다. error == loss == 오차 == 손실 != 오류 딥러닝에서 사용하는 error라는 용어는 우리가 일반적으로 아는 오류 라는 의미가 아닌 오차라는 뜻을 갖는다. 오차는 다른말로 error, loss, 손실이라고도 부른다. 가중치 숫자를 인식하는 신경망을 예로 들어보자. 8이라는 숫자 이미지는 28x28=784개의 픽셀로 구성되어 있다고 가정하자. 그러면 input으로 784개의 데이터를 입력해 주어야 한다. input layer에 784개의 뉴런이 ..

리눅스/ROS

[ROS] 초기 설정 및 에러 폭탄

올해부터 KASA(한국자동차안전학회)에서 주관하는 '국제 대학생 창작자동차 경진대회'에 참여하게 되어서 ERP42플렛폼을 이용한 자율주행 자동차를 제작해야 한다. 해당 플렛폼은 ROS(Robot Operating System)라는 프레임워크를 사용하게 되는데 이는 리눅스환경에서 돌아가기 때문에 우분투를 사용해야 한다. ROS를 설치하는 과정에서 상당히 많은 에러가 발생했으며 이를 대응하는 국내 자료가 많지 않아서 기록해 보도록 하자. 에러1. 우분투와 ROS버전 확인 우분투 버전에 따라서 설치가 가능한 ROS버전도 달라진다. 필자의 경우 기존에 우분투가 설치되어 있어서 아무 생각없이 ROS를 설치하려고 했지만 설치가 되지 않으며 알수없는 오류가 뜨게 되었다. 정리하면 다음과 같다. 우분투 18.04버전을..

연수 | 교육

[IDEC] Verilog HDL 기초

오늘부터 이틀간 Verilog HDL 기초에 관해 IDEC강의를 충남대학교 유효영 교수님께서 진행해 주셨다. 오전동안에는 HDL의 소개와 역사, 전자공학에서 IC칩을 바라보는 관점에 대해 소개 하셨으며 오후부터 본격적으로 HDL에 관해 문법, 작성법에 대해 강의가 진행되었다. 오늘 배운 내용을 되짚어보자. Verilog HDL != Hard & Difficult Language == Hardware Description Language 강의 초반에 농담식으로 hdl의 뜻을 비유해 주셨다. 사실 나도 처음에 hdl언어를 봤을때 그동안 봐왔던 C, C++, Python언어와 구조도 다를 뿐더러 읽는 방법도 상당히 어려워서 겁부터 났던 기억이 있다. hdl이 위의 언어와 다른 근본적이 이유가 있었다. 바로 하..

리눅스

[리눅스] 정기적 실행(cron) & wsl에서 cron안될때 해결법

cron cron이란 리눅스 시스템을 다룰때 특정시간이 지나면 정기적으로 프로그램이 실행되도록 하는 명령어다. cron 프로그램 작성법은 다음과 같다. ~ crontab -e # 처음 실행하면 어떤 에디터로 편집할것인지 선택하는 화면이 나오며 편한 에디터를 선택하면 된다. 맨 아래에 프로그램을 작성하면 된다. 왼쪽부터 순서대로 (분/시간/일/월/명령프로그램)작성하면 된다. 내가 작성한 프로그램은 1분이 지날 때 마다 현재 시간을 date.log라는 파일에 작성하는 자동화 프로그램을 작성했다. 위와 같이 작성 후 ^x, 엔터를 누르면 프로그램이 저장되며 crontab -l 명령을 내리면 작성한 프로그램을 확인 할 수 있다. 이제 cron프로그램이 제대로 실행되는지 확인하기 위해 tail -f 명령어를 통해..

리눅스

[리눅스] 백그라운드, 데몬 프로세스

우리가 pc로 작업을 할때 한가지 작업만 하지 않고 인터넷 검색도 하면서 코딩도 하고 유튜브화면도 띄우듯 멀티태스킹을 한다. 리눅스에서 겉보기엔 한 화면만 나오기 때문에 한가지 작업밖에 못할 것 같지만 사실 멀티태스킹이 가능하다. 현재 작업하는 일은 '포그라운드', 이외의 작업은 '백그라운드'라고 한다. 우선 nano편집기로 프로그램을 작업한다고 가정을 하고 ^z를 누르면 home화면으로 빠져나온다. 얼핏보면 작업이 끝나서 홈화면으로 나온 것 같지만 사실 백그라운드로 프로그램이 대기하는것을 jobs명령어를 통해 할 수 있다. ~ nano ^z ~ jobs 보통 작업을 할 때 하나의 작업만 하지 않기 때문에 여러 작업을 띄워보자. 위 화면은 3개의 작업을 멀티태스킹으로 해 놓은 화면이다. 과연 이게 정말 ..

리눅스

[리눅스] 디렉토리 구조 & 파일찾기

리눅스 시스템은 디렉토리가 모든 작업을 한다고 해도 과언이 아닐 정도로 중요한 개념이다. 우리가 처음 리눅스를 시작할때 home디렉토리에서 시작하며 ~로 표시하고 나름 안전한 영역(?)에서 작업을 하는 것이다. 최상위 단은 root디렉토리 라고 부르며 / 로 시작한다. root디렉토리에 있는 다른 디렉토리는 시스템을 진행할 때 매우 중요한 자료가 저장되어 있기 때문에 함부로 건들면 안된다. 간단히 bin(Essential User Binaries)이라는 디렉토리를 확인해보자. 해당 디렉토리에는 우리가 흔히 사용하는mv, rm, ls와 같은 프로그램 명령어들이 저장되어 있는것을 알 수 있다. 이렇게 root디렉토리에는 각각의 역할을 하는 중요한 디렉토리별로 시스템이 나뉜것을 알 수 있으며 각각의 역할은 다..

리눅스

[리눅스] 쉘 스크립트 맛보기

쉘(Shell)이란 리눅스에서 명령어를 작성하고 프로그램을 실행시킬때는 항상 '쉘'의 도움을 받는다. 쉘이란 사용자와 리눅스 커널간의 매개체, 연결다리 라고 생각하면 된다. 사용자가 직접 커널이나 하드웨어 조작을 할 수 없기 때문에 이를 편리하고 사용자친화적(?)이게 화면을 통해 소통을 하는 방식이다. 리눅스에서 여러개의 쉘이 있지만 기본적으로 사용하는 쉘은 bash이다. 현재 사용하고 있는 쉘을 확인하기 위해서 다음과 같이 작성하면 된다. echo $0 현재 내가 사용하고 있는 쉘은 zsh(제트쉘, 지쉘)이며 터미널 화면을 이쁘게 꾸미고 싶어서 변경 했다. 보기좋은 터미널이 개발하는데 즐거움(?)을 주기 때문이다.....(눈물) 이제 쉘의 개념을 알았으니 쉘 스크립트에 대해서 알아보자. 쉘 스크립트 우..

리눅스

[리눅스] I/O Redirection

원 안에 있는 과정이 프로세스 즉 프로그램이 진행하는 과정이라고 생각하면 쉽다. 예를들어 ls, pwd, mkdir와 같은 명령어가 실행되면 프로세서라고 한다. 이 프로세서는 입력과 출력이 있다. 예를들어 ls -al이라는 명령어를 작성하면 ls는 프로세스, -al은 input이며 구체적으로는 Command-line Argument라고 한다. 위의 명령어를 작성하고 엔터를 누르면 출력 결과가 나타나는데 이것이 standard output이다. 이 프로그램 출력 결과가 곧바로 모니터에 출력되는데 이 결과를 모니터가 아니라 다른 파일로 저장하는 작업을 redireaction이라고 한다. redireaction하는 방법은 다음과 같다. Output ls -l > result.txt > (파일이름) 을 진행함으..

리눅스

[리눅스] 패키지 매니저(apt, wget, git)

그동안 리눅스를 제대로 배우지 않고 라즈베리파이나 여러 작업을 할 때 아무 생각없이 sudo apt-get update와 같은 명령어를 사용한 적이 있다. 다들 그냥 그렇게 하길래 나도 의심의 여지없이 똑같이 따라했지만 리눅스 강의를 통해 apt-get명령어가 패키지 매니저라는 역할을 하는것을 알게 되었다. 패키지 매니저 처음 패키지 매니저라는 용어를 들으면 생소할 것이다. 쉽게 말하면 일종의 '프로그램'이라고 생각하면 된다. 흔히 사용하는 ls, pwd와 같은 명령어도 전부 패키지 이며 이는 리눅스에 기본적으로 깔려있지만 apt-get을 통해서 인터넷에서 정보를 가져올 수도 있다. apt를 통해 다운을 받을 수 있는데 이것을 패키지 매니저라고 하며 마치 앱스토에서 어플을 다운받는 것이라고 생각하면 편하..

리눅스

[리눅스] 에디터 편집하기(nano)

리눅스에서 파일을 생성할때 편집기를 이용해서 파일을 생성한다. 그중 대표적으로 nano와 vi 편집기가 있지만 nano가 더 쉽고 중고급자는 vi편집기를 사용한다고 한다. 아직 리눅스 초보이기 때문에 nano편집기 사용방법을 알아보자. nano 기본 창에서 nano를 입력한다. 위의 명령어 입력 후 엔터를 치면 다음과같은 편집화면이 나타난다. 해당 창에서 텍스트나 코드를 입력하고 (ctrl + o) 키를 누른 다음 파일 제목을 입력하라는 창이 나온다. 파일 제목을 입력 한 후 엔터를 누르면 성공적으로 우리가 작성한 코드를 갖는 파일이 생성된다. 그런다음 ctrl + x 를 통해 에디터 화면을 빠져나온후 ls를 통해 현재 디렉토리 목록을 보면 우리가 생성한 파일이 생성됨을 확인 할 수 있다. 지금까지 기본..

연수 | 교육

[IDEC] 임베디드 프로세서 구조의 이해 2일차(수료)

어제는 임베디드 CPU의 역사 및 개요를 보았다면 오늘은 실제 CPU의 동작원리 및 세부 구조에 대해 배웠다. 사실 2학년때 배운 컴퓨터 구조와 흐름 자체는 동일했으나 더 깊이있게, 영어로 수업을 진행한 것만 차이가 있었다. 오전동안은 RISC-V 프로세서의 파이프라인 구조를 살펴봤다. 실제 RISC-V 파이프라인 구조는 위와 같이 생겼으며 어느시점에 어떤 작업을 하는지 순서대로 강의를 진행해 주셨다. 이런 CPU의 구조는 정답이 없으며 설계자의 마음대로 설계를 진행하면 되나 최대한 효율적으로, 저전력의 목표와 부합하게 설계를 해야 한다. Pipeline 파이프라인이란 특정된 작업을 클럭이 발생할때마다 수행하는 작업을 의미한다. 말로 설명하기 어려우니 사진을 통해서 보자. 위와같이 5단계 파이프라인을 통..

연수 | 교육

[IDEC] 임베디드 프로세서 구조의 이해 1일차

카이스트를 본사로 운영하는 반도체설계교육센터에서 다양한 반도체설계에 관한 강의를 진행하고 있다. 아직 전공심화 과목을 수강하지 않았기 때문에 본격적인 하드웨어 설계 수업을 듣기에는 무리가 있어서 기본적인 반도체 구조에 관해서 공부하기 위해 이번 강의를 신청했다. 2학년 2학기때 컴퓨터 구조론 수업을 통해 기본적인 CPU의 구조에 대해서는 배웠지만 학교에서 배우는 내용 이외에 더 깊게 알아보고싶었다. 이번 강의는 포항공과대학교 이영주 교수님께서 (10:00 ~ 17:30)이틀동안 진행해 주셨다. IT산업의 발전 오전동안은 지금까지의 IT산업 발전에 대해 설명하셨는데 단순히 시대흐름적으로 나열하는게 아니라 왜 이렇게 발전을 해왔는지 이유와 당의성에 대해 자세히 설명해주신 모습이 인상깊었다. 1980년대까지 ..

AVR(Microchip Studio)

[AVR] Atmega328P 외부 인터럽트

이번 포스팅에서는 마이크로 컨트롤러의 외부인터럽트에 대해서 다뤄보자. 인터럽트 인터럽트란 프로그램이 진행될때 특별한 신호를 받으면 해당 신호를 먼저 처리하는 과정을 얘기한다. 위와같이 4번째 프로그램이 실행되다가 인터럽트(특별한 신호)가 발생하면 특정 과정이 진행되는데 이를 인터럽트 서비스루틴(ISR)이라고 한다. 즉, 우선순위는 진행되는 프로그램보다 인터럽트가 더 먼저 된다는 뜻이다. 인터럽트의 예는 TV리모컨과같이 우리가 어떤 채널을 보든 리모컨은 TV화면에서 나오는 영상보다 우선시 되기 때문에 이때 ISR은 리모컨 신호라고 할 수 있다. AVR입장에서 보면 인터럽트는 크게 2종류가 있다. 1. 외부 인터럽트 2. 타이머 인터럽트(타이머/카운터) 외부 인터럽트는 말 그대로 외부의 신호를 받아서 프로그..

시그널보내
시그널보내