soi897의 등록된 링크

 soi897로 등록된 네이버 블로그 포스트 수는 48건입니다.

통신에 쓰이는 FSM 설계해 보기(Fsm hdlc) [내부링크]

이 게시글은 HDLBits 문제 풀이 인증 글입니다. 현재 등수: 1558위 현재 푼 문제 수: 163개 / 전체 182개 문제 설명 https://hdlbits.01xz.net/wiki/Fsm_hdlc Fsm hdlc - HDLBits Fsm hdlc fsm_serialdp Previous Next exams/ece241_2013_q8 Synchronous HDLC framing involves decoding a continuous bit stream of data to look for bit patterns that indicate the beginning and end of frames (packets). Seeing exactly 6 consecutive 1s (i.e., 01111110 ) is a "flag" that indicate frame boun... hdlbits.01xz.net 이번 문제의 주제는 통신에 쓰이는 FSM을 설계하는 것입니다. 통신에서 송수신하는

C++_함수 및 지역 범위(local scope) [내부링크]

공부 인증 ※ 블로그 저품질이 우려되어 앞으로는 기존에 올렸던 사진과 유사한 사진을 업로드하지 않기로 했습니다! 강의를 들었다는 증거는 아래의 공부 내용을 적은 것으로 증명이 가능할 것 같습니다. C++ 도전 4일차 진도율: 15강 / 201강 누적 학습 시간: 241분 / 2907분 (하루 평균 공부 시간 60분 유지 여부: O) 함수 함수가 return하는 value의 자료형과 함수 선언 시 함수 이름 앞에 쓰는 자료형은 같아야 합니다. 함수의 이름은 동사+명사 형태로 짓는 것이 보기 편합니다(무조건 동사+명사 형태로 이름을 지어야 하는 것은 아닙니다). (ex) addNumbers, divide_a_and_b 등등.... 아래는 두 정수를 더하는 함수를 구현한 것의 예제입니다. #include <iostream> using namespace std; int addTwoNumbers(int num_a, int num_b) { int sum = num_a + num_b; retur

16. 베릴로그_계층적 이름과 generate for문 [내부링크]

들어가며 안녕하세요. 베릴로그응애입니다. 오랜만에 베릴로그 기초 문법 시리즈가 돌아왔습니다! 이번 게시물은 특히나 작성 난이도가 높은 편이어서, 쓰는 데 좀 오래 걸렸던 것 같습니다. 그래도 여러분의 댓글/공감을 원동력으로 삼아 게시물을 완성했습니다! generate for문 generate for문은 동일한 코드를 반복적으로 생성(generate)해야 할 때 사용하는 유용한 문법입니다. generate for문을 설명하기 위해 필요한 개념인 '계층적 이름'에 대해 먼저 다루고, 이어서 generate for문을 다루어 보겠습니다. 계층적 이름 베릴로그의 모든 신호, 변수, 인스턴스(상위 모듈에 instantiate된 하위 모듈)들은 서로 겹치지 않는 이름을 가져야 합니다(그래야 서로 다른 신호, 변수, 인스턴스들을 구별할 수 있으니까요). 신호, 변수, 인스턴스에 겹치지 않는 이름을 부여하기 위한, '계층적 이름'이라는 개념이 있습니다. 아래에 있는 다이어그램은 제가 설계한 8비트

one-hot FSM 설계해 보기(2012 q2b) [내부링크]

이 게시글은 HDLBits 문제 풀이 인증 글입니다. 1일 1HDLBits 도전 5일차 현재 등수: 1536위 현재 푼 문제 수: 164개 / 전체 182개 문제 설명 https://hdlbits.01xz.net/wiki/Exams/2012_q2b Exams/2012 q2b - HDLBits Exams/2012 q2b exams/2012_q2fsm Previous Next exams/2013_q2afsm The state diagram for this question is shown again below. Assume that a one-hot code is used with the state assignment y[5:0] = 000001(A), 000010(B), 000100(C), 001000(D), 010000(E), 100000(F) Write a logic expression for the signal Y1 ... hdlbits.01xz.net 문제의 상태 다이어그램을 참

C++_코딩 스타일, 함수 선언과 정의, 헤더 파일 [내부링크]

공부 기록 C++ 매일 공부 도전 5일차 진도율: 20강 / 201강 누적 학습 시간: 291분 / 2907분 하드 코딩과 소프트 코딩 하드 코딩: 변수값을 리터럴과 같은 고정된 값으로 직접 대입해 주는 스타일의 코딩입니다. 소프트 코딩: 변수값을 프로그램 실행 중에 사용자의 입력이나 외부 파일, 인터넷 통신 등으로 데이터를 가져와 채우는 스타일의 코딩입니다. 선언과 정의의 분리 함수의 선언과 정의를 분리한다는 것은, 함수에 대한 최소한의 정보(이름, 입출력 데이터 타입)를 main 함수 이전에 컴파일러에게 제시하는 것입니다. 이렇게 하는 것을 선언(declaration)이라고 합니다. 이와 같이 main 함수 앞에 쓰이는 선언들을 함수의 프로토타입이라고 합니다. #include <iostream> using namespace std; int add(int a, int b); // 프로토타입 int multiply(int a, int b); // 프로토타입 int subtract(i

베릴로그 기초 알고리즘 시리즈 - 16. binary multiplier(이진 곱셈기) [내부링크]

안녕하세요. 베릴로그응애입니다. 베릴로그 기초 문법 시리즈가 거의 다 끝나가던 와중에, 갑자기 베릴로그 기초 알고리즘 시리즈, 그것도 후반부에 연재할 계획이었던 이진 곱셈기에 대해 다루게 되었습니다. 저희 블로그 이웃이신 종혁님께서, 베릴로그 기초 문법 시리즈 - 반복문 게시물에 댓글을 달아 주신 적이 있습니다. 그 때 종혁님께서 곱셈기 코드에 대해 질문하셨고, 저는 곱셈기 관련 게시물을 따로 포스팅하겠다고 약속드린 적이 있었습니다. 종혁님의 질문 저의 약속. 제가 했던 약속을 지키고자 오늘 곱셈기 게시물을 포스팅하려고 합니다. 곱셈 알고리즘을 상세하게 설명하고, 베릴로그 코드까지 첨부해서 글의 길이가 조금 깁니다. 양해 부탁드립니다! 이진 곱셈기(binary multiplier) 이진 곱셈이라고 해서 어려워 보이지만, 전혀 어렵지 않습니다. 저희가 평소에 하는 곱셈에서 규칙을 찾아 그것을 알고리즘으로 만들면 됩니다. 두 이진수의 곱셈을 수행하는 예시를 분석해 규칙을 찾아보죠. 이진

베릴로그로 게임 캐릭터 동작을 설계해 보기(Lemmings1) [내부링크]

이 게시글은 HDLBits 문제 풀이 인증 글입니다. 현재 등수: 1519위 현재 푼 문제 수: 165개 / 전체 182개 문제 설명 이번 문제의 주제는 Lemmings라는 게임 캐릭터의 동작을 FSM으로 설계해 보는 것입니다. 얼핏 보면 어려워 보여서 풀기를 기피했던 문제인데, 오늘 도전해서 맞췄습니다! 캐릭터의 동작 규칙은 아래와 같습니다. Lemmings는 왼쪽 또는 오른쪽으로만 걷습니다. Lemmings는 장애물과 부딪히지 않을 경우 현재 걷는 방향을 그대로 유지합니다. Lemmings가 왼쪽으로 가다가 장애물과 부딪히면 오른쪽으로 방향을 전환합니다. Lemmings가 오른쪽으로 가다가 장애물과 부딪히면 왼쪽으로 방향을 전환합니다. 만약 양쪽에서 장애물을 만나는 상황(비정상적인 case)이 발생하면, 방향을 전환한다고 치고 설계하면 됩니다. 입출력 목록은 아래와 같습니다. input clk, areset(비동기 리셋), bump_left(왼쪽에서 장애물과 부딪힘) bump

블로그를 찾아 주시는 분들께 하는 약속(+저의 목표) [내부링크]

한 달 전까지만 해도 주인을 잃고 방치되던 블로그가, 여러분들 덕분에 하루 방문자수 100명 정도를 유지하는 블로그가 되었습니다! 여러분들의 성원에 힘입어 저도 좀 더 열심히 해야겠지만, 요새 들어 점점 열정이 사그라드는 기분이 듭니다. 그래서 이대로는 안 되겠다 싶어 여러분들과 약속을 2개 하려고 합니다. 인프런의 "홍정모의 따라하며 배우는 C++" 강의를 하루에 1시간씩 수강하여 50일 안에 박살을 내겠습니다. 강의를 들었다는 것을 매일매일 블로그에 인증할 것이고, 공부한 내용에 대해 간단하게 포스팅도 하려고 합니다. 제가 학습 내용을 제대로 공부했는지, 아니면 강의를 제대로 듣지 않고 강의 시간만 채웠는지는 포스팅의 퀄리티로 여러분께서 판단하실 수 있으실 것입니다. 인증 게시판 : https://blog.naver.com/PostList.naver?blogId=soi897&from=postList&categoryNo=16 HDLBits의 문제는 총 182개인데, 현재 159개째

FSM의 설계(Exams/m2014 q6b) [내부링크]

이 게시글은 HDLBits 문제 풀이 인증 글입니다. 현재 등수: 1649위 현재 푼 문제 수: 160/182 문제 아래는 입력 w와 출력 z를 가지는 FSM(Finite State Machine)입니다. 자료 출처: HDLBits 이 상태 머신의 현재 상태(y[3:1])가 입력으로 들어올 때, 다음 상태의 일부분(Y2)을 출력하는 Verilog 코드를 짜는 것이 이 문제가 요구하는 것입니다. ※ '다음 상태의 일부분'을 좀 더 자세하게 설명드리면, 현재 상태가 3비트짜리 vector이므로 다음 상태 역시 3비트짜리 vector일 것입니다. 현재 상태를 나타내는 vector의 인덱싱이 y[3:1]이므로, Y2라는 것은 다음 상태의 두 번째 비트를 출력하라는 말이 되겠죠. 베릴로그 코드 코드는 아래와 같이 짤 수 있습니다. module top_module ( input [3:1] y, input w, output Y2); reg [2:0] n_state; // 다음 state를 나타내

C++_서론 [내부링크]

공부 인증 ※ 강의 수강 화면을 캡처할 수 없어서 아래와 같이 '진행도'를 캡처하는 방식으로 인증하겠습니다. 컴파일러 언어와 인터프리터 언어의 차이 컴파일러 언어(C, C++)는 목적 파일이 생성되고, 인터프리터 언어(python)는 실행 파일이 생성되지 않습니다. Visual Studio의 솔루션 구성 2가지 Debug mode, Release Mode Visual Studio에는 Debug mode, Release mode라는 2가지 종류의 솔루션 구성이 있습니다. Debug mode에서 만든 실행 파일에는 디버깅에 필요한 정보들이 같이 들어갑니다. 하지만 Release mode에서 만든 실행 파일은 배포가 목적이기에, 필요한 최소한의 정보만 들어갑니다. 따라서 Debug mode에서 만든 실행 파일과, Release mode로 만든 실행 파일 간에는 용량도 차이 나고, 실행 속도도 차이가 납니다. 간단한 프로그램을 만들 때는 저 차이가 눈에 보이지 않을 정도로 작지만, 크고 복

Visual Studio Solution의 관리와 C++의 기초적인 사용법 [내부링크]

공부 인증 ※ 강의 수강 화면을 캡처할 수 없어서 아래와 같이 '진행도'를 캡처하는 방식으로 인증하겠습니다. 인증 학습 시간: 62분(134분-72분) 솔루션과 프로젝트 간의 관계 Visual Studio에서 코드 관리를 쉽게 하려면 솔루션과 프로젝트 간의 관계에 대해서 알 필요가 있습니다. 구조는 간단합니다. 하나의 솔루션이 여러 개의 프로젝트를 포함하는 형태입니다. 또한 그 프로젝트는 여러 개의 소스 파일들을 포함합니다. 솔루션, 프로젝트, 소스 파일 간의 관계 저처럼 프로그래밍을 학습하는 사람들에게, 이 구조는 활용성이 높은 구조라고 생각합니다. 다음과 같이 관리하면 편하기 때문입니다. 솔루션: 대단원(Chapter) 프로젝트: 중단원 소스 파일들: 각 예제 및 단원 연습문제 실행되는 프로젝트를 바꾸는 방법 Visual Studio에서는 솔루션 단위로 build가 이루어집니다. 위에서 솔루션 내부의 수많은 프로젝트들이 있다고 했습니다. 이 상태에서 build를 하면 프로젝트별로

FSM의 설계(Exams/2013 q2afsm) [내부링크]

이 게시글은 HDLBits 문제 풀이 인증 글입니다. 현재 등수: 1617위 어제 등수와의 비교: 1649위 → 1617위 현재 푼 문제 수: 161/182 문제 아래는 입력 r[3:1]과 출력 g[3:1]을 가지는 FSM(Finite state machine)입니다. 이 FSM을 설계하는 것이 이 문제에서 요구하는 것입니다. 베릴로그 코드 코드는 아래와 같이 짤 수 있습니다. module top_module ( input clk, input resetn, // active-low synchronous reset // 0일 때 reset이 되는 동기형 리셋 input [3:1] r, // request. output output [3:1] g // grant. input ); reg [1:0] c_state, n_state; parameter A = 2'b00; // state를 나타내는 parameter 설정 parameter B = 2'b01; parameter C = 2'b10

One-hot 상태를 가지는 FSM의 설계(Exams/m2014 q6c) [내부링크]

이 게시글은 HDLBits 문제 풀이 인증 글입니다. 현재 등수: 1583위 현재 푼 문제 수: 푼 문제 161개 / 전체 182개 ※ 비슷한 사진을 많이 올리면 네이버 알고리즘이 저품질 블로그로 간주한다는 정보를 접해서, 오늘부터는 인증샷은 올리지 않겠습니다(문제를 풀었다는 증거는 밑의 코드로 대체하겠습니다!) 문제 문제는 아래의 링크를 참고해 주세요(사진이 아닌 링크를 올린 이유도 저품질이 걱정되어서입니다ㅠㅠ 사진이 저번 게시물이랑 겹치거든요)! 주어진 FSM의 상태 변화를 나타내는 combinational logic을 설계하는 문제입니다. https://hdlbits.01xz.net/wiki/Exams/m2014_q6c Exams/m2014 q6c - HDLBits Exams/m2014 q6c exams/m2014_q6b Previous Next exams/m2014_q6 Consider the state machine shown below, which has one input

C++_주석, 변수, 입출력 스트림 [내부링크]

공부 인증 ※ 블로그 저품질이 우려되어 앞으로는 기존에 올렸던 사진과 유사한 사진을 업로드하지 않기로 했습니다! 강의를 들었다는 증거는 아래의 공부 내용을 적은 것으로 증명이 가능할 것 같습니다. 공부를 시작한 날로부터: 3일차 진도율: 12강 / 201강 누적 학습 시간: 190분 / 2907분 주석 주석이란 컴파일러로 하여금 주석을 단 부분을 무시하도록 하는 것입니다. #include <iostream> int main() { //std::cout << "Hello World!" << std::endl; // 이 line은 무시하게 됩니다. return 0; } 코드만 봐도 알 수 있는 내용은 주석으로 달지 않는 것이 좋습니다. #include <iostream> int main() { // Hello world를 출력한다. ← 이런 내용은 코드만 봐도 알 수 있으니 달지 않는 게 좋겠죠... std::cout << "Hello World!" << std::endl; return

Lookup Table(LUT)와 베릴로그 코드 [내부링크]

HLS(High Level Synthesis)를 공부하려는데, 강의 초반부에 LUT의 원리를 설명하는 부분이 있었습니다. HDLBits에서 Lookup Table에 대한 이해를 제대로 하지 않고 얼렁뚱땅 넘어간 기억이 있어서, 이번 기회에 확실하게 이해하고 넘어가고자 이 게시물을 작성하게 되었습니다. Lookup Table이란? FPGA의 기본 구성 요소는 다음과 같습니다. 1. 프로그래머블 블록: LUT(Lookup table), FF(Flip-Flop) 2. 입력/출력 블록: I/O pin(Input/Output Pin) 3. 배선 자원: network interconnect 이 중 Lookup table이란 논리 연산을 구현하기 위해 만들어진 FPGA의 기본 소자입니다. Lookup Table을 여러 개 활용하면 어떠한 논리 연산이든 구현이 가능하다는 장점이 있습니다. Lookup Table의 동작 방식 Lookup Table이 동작하는 방식은 아래와 같습니다. 구현하고자 하는

디지털시스템설계_정적 타이밍 분석(STA)와 Setup time/Hold time [내부링크]

정적 타이밍 분석(STA)이란? 회로의 모든 경로(path)에 대해 전달 지연(propagation delay)을 계산하고 타이밍 위반(timing violation) 여부를 조사함으로써, 회로의 timing 성능을 검증하는 작업입니다. STA 방법 (1) propagation delay 계산 STA에서는 회로를 timing path들로 쪼갠 뒤, Path 각각의 전달 지연을 계산합니다. 또한 입출력 및 회로 내부의 모든 path들에 대해 타이밍 위반 여부를 조사합니다. 쪼개진 timing path들은 다음과 같은 요소로 이루어져 있습니다. 1. 시작점(Startpoint) data가 clock에 의해 load되어 사용 가능해진(available) 지점. 모든 시작점은 입력 포트(input port)이거나 레지스터의 클락 핀(clock pin)이어야 합니다. 2. 조합 논리회로 네트워크(Combinational logic network) 기억 소자(저장 장치)가 포함되지 않고, 다수

13. 베릴로그의 gate primitive [내부링크]

gate primitive 3-input and gate를 아래와 같이 assign문을 활용해 설계했습니다(물론 다른 방법도 얼마든지 있습니다!). module( input in1, input in2, input in3, output out ); assign out = in1 && in2 && in3; // 비트 and 연산자를 활용해도 됨 endmodule 하지만 베릴로그에 사전 구현되어 있는 gate primitive를 이용한다면 아래와 같이 구현할 수도 있습니다. module( input in1, input in2, input in3, output out ); and(out, in1, in2, in3); endmodule 보시는 것처럼, 굉장히 직관적이고 간단한 설계를 할 수 있습니다. assign문을 활용하거나 always문을 활용하여 회로를 디자인하는 경우 개발 시간이 줄어들고 확장이 용이(scalable)하다는 장점이 있습니다. 하지만 합성 툴은 엄청나게 많고, 당연히 그

14. 베릴로그의 parameter [내부링크]

parameter란? 베릴로그에서는 상수를 정의하는 방법이 2가지 있습니다. 그 중 하나가 오늘 배울 parameter입니다. 키워드로 'parameter' 를 사용해서, 모듈 내부에서 이용할 상수를 정의하는 방법입니다(선언도 모듈 내부에서 합니다). parameter DELAY_2 = 16; // parameter를 정의하는 일반적인 방법입니다. parameter BIT, OUT_BIT = 32, 16; // comma를 이용해서 2개 이상의 parameter를 한 번에 표시할 수 있습니다. parameter [3:0] DELAY_1 = 8; // parameter를 정의할 때, 그 크기를 명시할 수 있습니다. parameter TOTAL_DELAY = (DELAY_1 + DELAY_2); // parameter 값을 다른 parameter들의 산술 연산으로 나타낼 수 있습니다. 파라미터를 모듈 안에서 선언할 수도 있지만, 다음과 같이 input/output port를 선언하기 이

15. 베릴로그_module instantiation과 Parameter 재정의 [내부링크]

module instantiation이란? 만약 module instantiation이 무엇인지 기억나지 않으신다면, 아래의 두 게시물을 읽고 와 주세요! 1. instantiation을 다루는 게시물 https://blog.naver.com/soi897/222893340837 5. 베릴로그 모듈의 선언법과 input/output port, instantiation 오늘은 베릴로그의 기본, 모듈과 포트에 대해 배워 보겠습니다. 모듈(module) 모듈(module)은 베릴로그에서... blog.naver.com 2. 테스트벤치 작성법 https://blog.naver.com/soi897/222882888855 베릴로그 테스트벤치(testbench) 작성법 테스트벤치(testbench)란? 테스트벤치란 자신이 짠 Verilog 코드의 동작을 검증하는 Simulation을 위해 ... blog.naver.com 위치에 의한 포트 연결 instantiation을 할 때는 input/out

디지털시스템설계_valid 신호 필요 없는 것 아닌가? [내부링크]

라고 생각했었다가 오늘 깨달았습니다. valid 신호는 무조건 필요하다는 것을요... 저는 현재 KIST(한국과학기술연구원)에서 현장실습생으로 활동하고 있고, 베릴로그로 연구용 모델을 만들고 있습니다. 연구용 모델을 간략하게 설명 드리자면 인공지능 모델(Multiply and Accumulation 연산)에서 나온 계산 결과와, Random number를 비교하는 모델입니다. 인공지능 모델은 조금 복잡해서 첫 결과가 14사이클 뒤에 나오지만, Random number 생성기에서는 1사이클에 한 번 결과가 나오는 상황이었습니다. 즉, 계산 결과가 14사이클 뒤에 나오는 모델과 1사이클 뒤에 나오는 모델의 결과를 비교해야 하는 상황이었던 것입니다. 그리고 저는 여기에 아무 조치도 하지 않고 그냥 1:1로 비교해서 실험 데이터를 수집했습니다..... 이게 왜 문제가 되냐면, 유효한 결과가 나오는 14사이클 이전에 나온 결과들은 의미 없는 쓰레기값(유효하지 않은 값)이기 때문입니다. 즉,

11. 베릴로그의 조건문(if, case) [내부링크]

안녕하세요. 베릴로그응애입니다. 오늘은 조건문(if문과 case문)에 대해 다루어 보겠습니다. 조건문은 특정 조건에 따라서 문장이 수행될지, 수행되지 않을지 결정할 때 사용합니다. 베릴로그에서 조건문은 'if문', 'case문' 2가지로 나눌 수 있습니다. if문 기본 형식 기본 형식은 C언어와 동일하게 2가지가 있습니다. if-else, if-else if-else입니다. if-else는 선택해야 할 case가 2개일 때 사용하고, if-elseif-else는 선택해야 할 case가 3개 이상일 때 사용합니다. if(수식) statement_1; // '수식'이 참이면 statement_1 수행 else statement_2; // '수식'이 거짓 또는 x(unknown)이면 statement_2 수행 if(수식 1) statement_1; // '수식 1'이 참이면 statement_1 수행 else if(수식 2) statement_2; // '수식 1'이 거짓 또는 x(unk

12. 베릴로그의 반복문(for, while, repeat, forever) [내부링크]

안녕하세요, 베릴로그응애입니다. 이번 게시물에서는 베릴로그가 제공하는 4가지 반복문들에 대해서 다루어 보겠습니다. 모든 반복문에 적용되는 공통 사항 1. 모든 반복문 문장은 initlal 또는 always block 내에 위치해야 합니다. 2. 반복하고자 하는 문장이 여러 개일 경우, begin-end block으로 묶어야 합니다. for문 반복 방법 반복문 제어 변수에 의해 지정되는 횟수만큼 반복 실행합니다. ※ for 반복문을 작성하기 전, 반복문 제어 변수를 선언해야 합니다. 타입은 integer 타입입니다. integer type이 무엇인지 기억이 안 나신다면? 아래의 게시글을 보고 와 주세요. https://blog.naver.com/soi897/222897569354 [베릴로그 기초 문법] 9. 다양한 reg형 변수(정수형, 실수형, 시간형)와 배열(array) 안녕하세요. 베릴로그응애입니다. 오늘은 다양한 reg형 변수들과 배열에 대해서 다루어 보겠습니다. 배열을...

C언어_k 위치만큼 배열 회전하기 [내부링크]

주어진 배열을 k번 회전하는 함수를 작성하라. 예를 들어 배열 [10, 20, 30, 40, 50, 60]을 2번 회전하면 [30, 40, 50, 60, 10, 20]이 된다. 코드는 단순했습니다. 하지만 한 번에 해석하기에는 조금 어려웠습니다. 공부도 할 겸 이 알고리즘의 코드 해석을 게시물로 쓰려고 합니다. 코드와 코드 해석 #include <stdio.h> void reverseArray(int *a, int n); void rotateArray2(int *a, int m, int k); int main(void){ int a[6] = {10, 20, 30, 40, 50, 60}; int i; int n = sizeof(a) / sizeof(int); // 1번 rotateArray2(a, n, 2); for(i = 0; i < n; i++){ printf("%d ", a[i]); if(i == n-1) printf("\n"); } return 0; } void reverseA

C언어_함수의 구성 요소 [내부링크]

C언어의 함수는 특정한 task를 수행하는 코드 블록을 말합니다. 함수는 아래와 같이 4가지의 구성 요소로 이루어져 있습니다. Return type Function name Argument list Function body return_type function_name(argument_list){ function_body }

C언어_ call by value(값에 의한 호출) & call by reference(참조에 의한 호출) [내부링크]

함수가 변수로부터 그 값을 복사해 인자(argument)로 받아들이는 것을 call by vaule(값에 의한 호출)라고 합니다. 반면 변수의 값을 복사하는 것이 아닌 그 변수 자체를 인자로 받아들이는 방법이 있는데 그것이 call by reference(참조에 의한 호출)입니다. 이렇게 하면 변수 그 자체의 값을 함수 내부에서 변경할 수 있게 됩니다. 이를 위해서는 그 변수의 주소를 인자로 넘겨 줄 필요가 있습니다. 즉, 변수의 포인터를 인자로 넘겨 줘야 합니다. 예를 들어 아래와 같이 코드를 짜면, 함수 내부에서 변수 sub의 값은 그저 원본의 복사본이므로 원본 변수의 값 자체를 변경할 수는 없습니다. #include <stdio.h> //call by value // 출력 결과: 0(뺄셈의 값이 제대로 들어가지 않음) int substraction(int a, int b, int result){ result = a-b; return result; } int main(void){

7. reg형 데이터와 절차적 할당문(procedual assignment) [내부링크]

안녕하세요, 베릴로그응애입니다. 오늘은 베릴로그의 또 다른 데이터형 중 하나인 reg형 데이터에 대해 다루어 보겠습니다. 그리고 reg형 데이터에 값을 할당할 수 있는 절차적 할당문(procedual assignment)에 대해서도 말씀드리겠습니다. net형 데이터와 비교하시기 쉽도록, 글의 구성이나 예제는 저번 게시물인 "6. net형 데이터와 연속 할당문(assign문)"과 최대한 비슷하게 구성했습니다. 두 게시글을 반복해서 읽으시면 공부가 더 잘 되실 거에요. reg형 데이터 저번 시간에 배운 net형 데이터가 소자 간의 연결을 표현하는 데이터형이었다면, reg형 데이터는 특정 값을 저장할 수 있는 데이터형이라고 할 수 있습니다. 실제로 reg형으로 선언된 변수는 다음 상태까지 그 값을 유지하게 됩니다. reg형 데이터는 데이터를 저장하는 역할을 하기에, 마치 레지스터와도 같은 역할을 한다고 하여 "reg" 키워드로 선언합니다. 예시는 아래와 같습니다. * 베릴로그에서 reg형

8. always문과 initial문, blocking 할당문과 non-blocking할당문 [내부링크]

안녕하세요, 베릴로그응애입니다. 오늘은 베릴로그에서도 중요한 개념들이라고 할 수 있는 initial/always문, blocking/non-blocking 할당문에 대해 알아보겠습니다. initial 문이란? initial문이란 시뮬레이션 동안 한 번만 수행되는 문장들을 나타내는 데에 쓰이는 구문입니다. 여기서 하나의 문장이 아닌 여러 개의 문장들을 initial 구문을 통해 나타내고 싶다면 반드시 begin-end를 이용해 묶어 주어야 합니다. begin-end 및 initial 키워드를 통해 묶인 문장들을 통틀어서 initial block이라고 부릅니다. initial문의 기본적인 형태 initial begin (여러 문장들) end 예시 module tb_ff(); // 입출력 포트를 가지지 않는 tb_ff라는 모듈을 선언합니다. reg clk; // clk라는 1비트 reg형 변수 선언 reg [3:0] in; // in이라는 4비트 reg형 벡터 선언 wire out; //

[독서] 보도 섀퍼의 이기는 습관 - 어려움을 돌파하라 [내부링크]

한 대학으로부터 강연 초청을 받았을 당시, 윈스턴 처칠은 이미 고령이었다. 처칠이 강연장에 들어섰을 때, 수천 명의 사람들이 자리하고 있었다. 처칠에게는 생애 최고의 연설을 앞둔 순간이었고, 자신이 전 생애에 걸쳐 찾아낸 깨달음을 전할 수 있는 순간이었다. 우레와 같은 박수를 받으며 처칠은 단상으로 걸어갔다. 그러고는 이렇게 말했다. 어려분은 절대로, 절대로, 절대로, 절대로 포기하지 마십시오.

C언어_알고리즘의 시간 복잡도 계산 [내부링크]

C언어 알고리즘을 공부하기로 했습니다. 베릴로그 이외의 주력 언어를 하나는 파야 한다고 생각해서, C언어를 하기로 했습니다. 이 게시판에 올라갈 글들은 복습 차원에서 가볍게 적어 보려고 합니다. 제가 공부하는 책은 "실전 대비 C 알고리즘 인터뷰"입니다. https://product.kyobobook.co.kr/detail/S000001834479 실전 대비 C 알고리즘 인터뷰 | 헤먼 자인 - 교보문고 실전 대비 C 알고리즘 인터뷰 | 다양한 문제로 배우는 최적의 알고리즘 문제 해결법!효율적인 알고리즘 설계는 소프트웨어에서 아주 중요합니다. 그래서 모든 소프트웨어 회사의 코딩 인터뷰에서는 자료 구조와 알고리즘을 얼마나 아는지는 물론 지원자가 복잡한 문제를 자료 구조와 알고리즘을 이용해 어떻게 효율적으로 해결하는지를 살펴봅니다. 단지 아는 것을 넘어서 코딩 인터뷰에서 인정받고 소프트웨어 엔지니어로서 탁월한 능력을 발휘하려면 자료 구조와 알고리즘을 자유자재로 구사해야 합니다. 이 책은

9. 베릴로그의 다양한 reg형 변수(정수형, 실수형, 시간형)와 배열(array) [내부링크]

안녕하세요. 베릴로그응애입니다. 오늘은 다양한 reg형 변수들과 배열에 대해서 다루어 보겠습니다. 배열을 제외한 나머지 내용은 베릴로그에서 그렇게 중요한 내용은 아니니, 가볍게 봐 주시면 될 것 같습니다. 지금부터 소개할 3가지의 변수들은, 기본적으로는 reg형입니다. 하지만 평범한 reg형과는 다른 몇 가지 특징들이 있습니다. 아래의 3가지의 변수들과 평범한 reg형 사이에 어떤 차이점이 있는지에 초점을 맞춰서 읽어 주시면 감사하겠습니다. 정수형(integer) 특징 ① 정수형 변수는 integer 키워드로 선언합니다. ② 반복문의 카운트 변수(i, j, k...)나 generate문의 genvar를 선언하는 데에 쓰입니다. 주로 무언가를 반복하거나 카운트할 때 자주 쓰인다고 할 수 있습니다. * for문, generate문은 나중에 다룰 예정입니다. 여기서는 "for문, generate문이라는 것을 쓸 때 평범한 reg형보다는 integer형을 쓰는구나"라고만 알아 두시면 될 것

C언어 알고리즘 공부법 [내부링크]

1. 책의 알고리즘 설명을 읽는다. 2. 알고리즘 설명만 보고, 내가 직접 코드로 구현해 본다. 3. 직접 구현한 코드와 정답 코드를 비교하며 공부한다. 4. 정답 코드를 읽어 완전히 이해한 뒤, 안 보고 코드로 구현해 본다. 5. 빠뜨린 부분이 있을 것이다. 그 부분을 보충한다.

10. 베릴로그_이벤트 기반 타이밍 제어(event based timing control) [내부링크]

안녕하세요. 베릴로그응애입니다. 오늘은 베릴로그를 이용한 회로 설계에서 핵심 개념이라고 할 수 있는 이벤트 기반 타이밍 제어(event based timing control), 감지 목록(sensitivity list)에 대해서 다루어 보겠습니다. event based timing control(@) 베릴로그에서 event란, reg형/net형 변수의 값이 변화하는 것을 의미합니다. event based timing control이란 event가 발생할 때마다 특정 문장(statement)이 수행되도록 하는(=문장이 수행되는 timing을 control하는) 방법입니다. 기호로는 @를 사용하며, 종류와 예시는 아래와 같습니다. 종류 @(event) statement : event 변수의 값이 변할 때마다 statement가 수행됩니다. @(posedge clk) statement : clk 변수의 값이 0→1로 변할 때마다 statement가 수행됩니다. @(negedge clk)

1. 베릴로그의 연산자 (1) [내부링크]

들어가며 프로그래밍 언어를 배울 때 가장 중요한 것 중 하나가 자료형과 연산자라고 생각합니다. 오늘은 베릴로그의 연산자에 대해 다루어 보는 시간을 갖겠습니다. 베릴로그의 연산자는 다음의 10가지로 나눌 수 있습니다. 굵은 글씨로 표시한 것이 오늘 다루어 볼 연산자입니다. 산술 연산자 논리 연산자 축소 연산자 관계 연산자 등가 연산자 비트 연산자 시프트 연산자 결합 연산자 반복 연산자 삼항 연산자 산술 연산자 산술 연산자란 수학적 계산을 하는 데 쓰이는 연산자를 말합니다. C언어를 아시는 분이라면, C언어의 산술 연산자와 베릴로그의 산술 연산자와 똑같다는 것을 아실 수 있습니다. 연산자 모양 연산 + 두 수를 더한다. - 두 수를 뺀다. * 두 수를 곱한다. / 두 수를 나누어 몫을 구한다. % 두 수를 나누어 나머지를 구한다. ** 제곱 연산을 한다. 예를 들어 2**3이라고 쓰면 2^3=8을 의미. 산술 연산자에서 중요한 팁은 아래와 같습니다. n비트를 저장할 수 있는 변수 a와

2. 베릴로그에서의 수 표현 [내부링크]

들어가며 연산자를 다루다가, 베릴로그에서의 수 표현을 먼저 다루면 연산자를 설명하기에 더 용이할 것 같다는 생각이 들었습니다. 그래서 이번 시간에는 베릴로그에서의 수 표현에 대해 다루어 보는 시간을 가지겠습니다. 베릴로그에서의 수 표현 베릴로그에서 수를 표현하는 기본 형식은 아래와 같습니다. <① 비트 수>'<② 진법><③ 값> 위 형식의 각 부분에 대해 다루어 보겠습니다. ① 비트 수: 표현하고자 하는 수를 저장할 때 필요한 비트 수를 의미합니다. ② 진법: 표현하고자 하는 수를 몇 진법으로 나타낼지 결정하는 부분입니다. d, D: decimal. 10진법 b, B: binary. 2진법 o, O: octal. 8진법 h, H: hexadecimal. 16진법 * 제 경험상 b, d는 상당히 자주 쓰이고, h는 이진법(b)으로 표시하기에는 수가 너무 긴 경우 종종 쓰입니다. ③ 값: 표현하고자 하는 값을 ②에서 정한 진법에 맞추어 써 줍니다. 예시 4'b0010 // 2진법으로 나

3. 베릴로그의 연산자 (2) [내부링크]

들어가며 오늘도 베릴로그의 연산자에 대해 다루어 보겠습니다. 베릴로그의 연산자는 다음의 10가지로 나눌 수 있습니다. 굵은 글씨로 표시한 것이 오늘 다루어 볼 연산자입니다. 산술 연산자 논리 연산자 축소 연산자 관계 연산자 등가 연산자 비트 연산자 시프트 연산자 결합 연산자 반복 연산자 삼항 연산자 축소 연산자 축소 연산자는 베릴로그에만 있는 독특한 연산자입니다. 축소 연산자는 피연산자의 비트별로 특정 논리 연산을 수행해 연산의 결과를 1bit로 '축소'해 주는 연산자를 말합니다. 단항 연산자이며, 종류는 아래와 같습니다. 연산자 모양 연산 & 피연산자의 각 비트를 and 연산한다. ~& 피연산자의 각비트를 nand 연산한다. | 피연산자의 각 비트를 or 연산한다. ~| 피연산자의 각 비트를 ~nor 연산한다. ^ 피연산자의 각 비트를 xor 연산한다. ~^, ^~ 피연산자의 각 비트를 xnor 연산한다. 예시 // X = 5'b11011 &X // (1) && (1) && (0)

"베릴로그 통신 및 인터페이스 시리즈" 연재 예정! [내부링크]

계기 "베릴로그 기초 문법", "베릴로그 기초 알고리즘" 시리즈 연재를 예고하는 글에, "실베리온"님께서 아래와 같은 댓글을 달아 주셨습니다. https://blog.naver.com/soi897/222887340126 "베릴로그 기초 문법", "베릴로그 기초 알고리즘" 시리즈 연재 예정 연재 결심 계기 최근에 바빠서 글을 많이 올리지 못하고 있습니다. 새로운 게시물을 바라고 블로그를 찾아 ... blog.naver.com 저도 통신 부분은 많이 부족하지만, 비메모리 반도체 설계자로써 반드시 알아야 하는 기술이 통신이라는 생각이 들어 공부를 하기로 결심했습니다. 또한, 통신에 더해 AXI4 인터페이스에 대해서도 다루어 보면 좋을 것 같다는 생각이 들었습니다. 그래서 아예 통신 및 인터페이스를 시리즈로 연재하기로 결심했습니다! 연재는 내년 1월부터가 될 것 같습니다. 목차 I2C 설계 개념 설명 I2C 설계 in Verilog HDL (1) I2C 설계 in Verilog HDL (2

4. 베릴로그의 연산자 (3) [내부링크]

들어가며 오늘을 마지막으로 베릴로그 연산자 시리즈를 마치겠습니다. 다음 시간에는 module의 선언법, input/output port에 대해 다루어 보겠습니다. 베릴로그의 연산자는 다음의 10가지로 나눌 수 있습니다. 굵은 글씨로 표시한 것이 오늘 다루어 볼 연산자입니다. 산술 연산자 논리 연산자 축소 연산자 관계 연산자 등가 연산자 비트 연산자 시프트 연산자 결합 연산자 반복 연산자 삼항 연산자 시프트 연산자 시프트 연산자는 피연산자의 전체 비트 값을 좌측(left shift) 또는 우측으로(right shift) 주어진 횟수만큼 이동시키는 연산자입니다. 종류는 아래의 4가지가 있습니다. 연산자 모양 연산 연산자 이름 a << b 피연산자 a의 전체 비트 값을 좌측으로 b만큼 이동시킨다. 논리적 좌측 시프트 연산자 a >> b 피연산자 a의 전체 비트 값을 우측으로 b만큼 이동시킨다. 논리적 우측 시프트 연산자 a <<< b 피연산자 a의 전체 비트 값을 좌측으로 b만큼 이동시킨

5. 베릴로그 모듈의 선언법과 input/output port, instantiation [내부링크]

오늘은 베릴로그의 기본, 모듈과 포트에 대해 배워 보겠습니다. 모듈(module) 모듈(module)은 베릴로그에서 기본적인 설계 단위를 이르는 말입니다. 모듈은 다른 모듈과 연결되어 상호작용을 하는데, 연결 방법에는 2가지가 있습니다. 1. 입출력 포트를 통한 연결 2. 인스턴스화를 통한 연결 오늘은 이 두 가지 방법에 대해 다루어 보도록 하겠습니다. 모듈의 특징 모듈의 특징은 아래의 2가지로 요약할 수 있습니다. 1. 모듈은 입출력 포트(input/output port)를 활용해 다른 모듈과 상호작용을 할 수 있습니다. 즉, 한 모듈에서 다른 모듈로 데이터를 넘겨주거나 넘겨받을 수 있습니다. 2. 모듈 내에서 다른 모듈을 호출해 계층적인 설계를 하는 것이 가능합니다. 예를 들어 모듈 A 내에서 모듈 B를 호출했다면, A가 B의 상위 모듈이 되는 것입니다. 이렇게 다른 모듈을 '호출'하는 작업을 베릴로그에서는 인스턴스화(instantiation)라고 합니다. 베릴로그에서 모듈의 선

6. net형 데이터와 연속 할당문(assign문) [내부링크]

오늘은 베릴로그의 데이터형 중 하나인 net형 데이터와, 베릴로그에서 가장 기본적인 문법 중 하나라고 할 수 있는 연속 할당문(assign문)에 대해 다루어 보겠습니다. net형 데이터 베릴로그는 디지털회로의 구조와 동작을 기술하는 언어입니다. 당연히 논리 게이트, 플립플롭 등의 회로 소자뿐만 아니라, 그들 사이를 연결하는 선(wire) 역시 표현할 수 있습니다. net형 데이터는 선(wire)을 표현하는 데이터형입니다. net형 데이터는 선(wire)을 표현하기에, "wire" 키워드로 선언합니다. 예시는 아래와 같습니다. wire X; // 회로에서 net X를 정의한다. wire Y, Z, W; // 회로에서 net Y, Z, W를 정의하는 문장입니다. 이렇게 여러 개를 한 줄에 선언하는 것도 가능합니다. net형 벡터 net형 벡터란, 선언하고자 하는 net형 데이터가 여러 비트폭을 가진다는 것을 의미합니다. 예를 들어 5-input AND gate는 입력선의 비트 폭이 5입

[빠르게 복습] LFSR(Linear Feedback shift register) [내부링크]

LFSR이란? LFSR(Linear Feedback shift register)란 Random number를 생성할 때 쓰이는 디지털 논리 회로입니다. D-Flip flop의 개수 = 생성하는 random number의 bit수 입니다. 예를 들어 D-Flip Flop이 4개면 4bit random number를 생성하게 됩니다. 완전한 random이 아닌, 패턴이 정해져 있는 pseudo-random이지만, 비트 수를 충분히 크게 하면 의미 있는 random number를 만들 수 있습니다. 실제로 32bit 정도의 LFSR도 연구에 사용됩니다. 동작 방식 생성하는 Random number의 bit 수에 따라 서로 다른 D-Flip Flop들을 XOR 또는 XNOR gate 처리해서 맨 처음 D-Flip Flop의 input에 feedback해 줍니다. 어떤 D-Flip Flop들을 XOR 해야 하는가는 아래의 표를 보면 알 수 있습니다. 아래의 표는 LFSR 다항식을 나타낸 표인

[zybo z7 특강] SD카드에 file 읽고 쓰기(Vitis 활용) [내부링크]

Vitis에서 짠 C 프로그램에서 파일 입출력을 하려면 특수한 API들을 활용해야 하고, 그 전에 SD카드를 FPGA board에 꽃아서 file을 담을 저장 장치로 삼아야 합니다. 그래서 오늘은 Vitis를 활용해서, SD카드에 file을 읽고 쓰는 것을 해 보려고 합니다. 이 글과 아래의 링크를 참고해서 응용한다면, 원하시는 코드를 짤 수 있을 거라고 생각합니다. <링크: 아래의 에제 코드에 나오는 API에 대한 정보입니다> http://elm-chan.org/fsw/ff/00index_e.html FatFs - Generic FAT Filesystem Module FatFs is a generic FAT/exFAT filesystem module for small embedded systems. The FatFs module is written in compliance with ANSI C (C89) and completely separated from the disk I/O

[빠르게 복습 & Verilog code] JK 플립플롭(JK Flip Flop) [내부링크]

JK Flip Flop이란? JK 플립 플롭은 SR 플립 플롭의 한계점을 보완해 만들어진 플립플롭입니다. SR 플립플롭의 경우, S=R=1일 때의 값이 정의되지 않는다는 한계가 존재합니다. 하지만 JK 플립 플롭의 경우 J=K=1일 때, 현재 상태를 Toggle(0은 1로, 1은 0으로)한다는 특징이 있습니다. 즉, JK 플립플롭은 아래의 표와 같이 동작하는 플립플롭이라고 할 수 있습니다. J K Q(t+1) (다음 상태) 0 0 Q(t) (현재 상태 유지) 0 1 0(Reset) 1 0 1(Set) 1 1 Q'(t) (Toggle) JK Flip Flop의 Verilog code JK 플립플롭에 대한 설명은 지겹도록 많이 보시고 들으셨을 테니, 바로 Verilog code를 보여 드리도록 하겠습니다! 하지만 코드만 복사 붙여넣기 하시고 끝! 하면 안 됩니다!!! JK 플립플롭의 동작과 실제 코드를 비교하면서 "JK 플립플롭을 실제 코드로 구현하면 이렇게 되는구나"이렇게 한 줄 한

베릴로그 테스트벤치(testbench) 작성법 [내부링크]

테스트벤치(testbench)란? 테스트벤치란 자신이 짠 Verilog 코드의 동작을 검증하는 Simulation을 위해 필요한 파일을 말합니다. 내가 작성한 코드가 의도하는 대로 동작하는지 보는 과정이죠. 즉 필수적이라고 할 수 있는 과정입니다. 이 글을 작성하는 이유 여러분은 원하는 기능을 하는 디지털회로를 설계하기 위해 많은 블로그, 카페를 참고하실 겁니다. 하지만 많은 게시물들이 그냥 Verilog code만 딱 올려 놓는 경우가 되게 많아요. 원래 테스트벤치 코드까지 제공하는 것이 더 좋을 텐데 말이죠.. 그래서 저는 여러분들에게 테스트벤치 코드를 짜는 기본적인 방법을 알려 드림으로써, 여러분이 어떤 Verilog code를 보더라도 테스트벤치를 스스로 작성하실 수 있게 도와 드리려고 합니다. 방법 요약 `timescale 1ns/ 1ps 문장을 통해 delay 간격을 1ns로, precision을 1ps로 설정해 준다. module name과 함께 module을 선언한다.

이 사이트 활용하면 베릴로그 실력 확실히 올릴 수 있다고 장담합니다. [내부링크]

사이트 소개 여러분들에게 소개해 드릴 만한 베릴로그 사이트를 찾다가 노다지를 발견했습니다. 단언컨대 제가 봐 왔던 사이트들 중 베릴로그를 공부하기에 가장 좋은 사이트입니다. 그 이름은 <HDLBits — Verilog Practice>입니다. 링크: https://hdlbits.01xz.net/wiki/Main_Page HDLBits HDLBits — Verilog Practice HDLBits is a collection of small circuit design exercises for practicing digital hardware design using Verilog Hardware Description Language (HDL). Earlier problems follow a tutorial style, while later problems will increasingly challenge your circuit design skills. Each p... hdlbits.

"베릴로그 기초 문법", "베릴로그 기초 알고리즘" 시리즈 연재 예정 [내부링크]

연재 결심 계기 최근에 바빠서 글을 많이 올리지 못하고 있습니다. 새로운 게시물을 바라고 블로그를 찾아 주시는 분들께 죄송할 따름입니다 ㅠㅠ 그래서 공약을 하나 하려고 합니다. 일주일에 2회 이상, "베릴로그 기초 문법" 및 "베릴로그 기초 알고리즘" 시리즈를 연재하기로 여러분과 약속합니다! 목차는 아래와 같습니다. ※ 이 게시물의 목차는 자주 수정됩니다. "베릴로그 기초 문법" 시리즈 목차 연산자 (1) 베릴로그에서의 수 표현 연산자 (2) 연산자 (3) 모듈의 선언법과 input/output port, instantiation net형 데이터와 연속 할당문(assign문) reg형 데이터와 절차적 할당문(procedual assignment) always문과 initial문, blocking 할당문과 non-blocking할당문 다양한 reg형 변수(정수형, 실수형, 시간형)와 배열(array) 이벤트 기반 타이밍 제어(event based timing control) 조건문(i

업로드 예정인 글들 제목만 써 두기! [내부링크]

※ 이 게시물의 기존 내용 중 일부분은 아래의 게시물로 옮겨 갔습니다. "베릴로그 기초 문법", "베릴로그 기초 알고.. : 네이버블로그 (naver.com) "베릴로그 통신 및 인터페이스 시리즈" 연재 .. : 네이버블로그 (naver.com) <베릴로그 공부> 베릴로그 싸게 공부하는 법 - udemy 베릴로그 : 조금 어려운 책들에 대한 소개 Verilog를 이용한 디지털 시스템 설계 Verilog 합성: 최적의 합성을 위한 설계 가이드 <C++> 목차 미정 <HLS> 목차 미정 <디지털회로 기초> 목차 미정

논문 이론 공부 - 볼츠만 머신 [내부링크]

KIST에서의 업무를 위해 논문을 공부해야 한다. 논문 제목은 "Logically Synthesized, Hardware-Accelerated, Restricted Bolzmann Machines for Combinatorial Optimization and Integer Facorization"이다. FPGA 가속을 활용해 볼츠만 머신의 학습 수렴 속도를 줄이는 것이 핵심 내용이다. 난 볼츠만 머신을 처음 들어 봤기에, 위키백과/블로그 등지를 돌아다니며 공부를 하기로 했다. 그리고 공부한 것을 다시 찾아볼 수 있도록 블로그에 기록하기로 했다. 1. 볼츠만 머신의 정의(Bolzmann Machines) 볼츠만 머신이란 딥러닝 모델에서 노드들이 가질 수 있는 값들의 집합에 대한 확률 분포를 정의한 모델이다. 노드는 hidden layer의 노드, visible layer의 노드로 나누어지며 노드들이 갖는 값들의 각 조합을 configuration이라고 한다. 그 configuratio

FPGA / Verilog 입문할 때 유용한 사이트 목록입니다. [내부링크]

제가 이니프로 카페에 올렸었던 글인데, 인기가 좋은 것 같아 제 블로그에도 올립니다! 제가 생각했을 때, Verilog HDL은 배우기 어려운 축에 속하는 언어입니다. C언어를 배우면 좀 낫지만, 말 그대로 좀 낫다 뿐이고 여전히 어렵습니다. 이토록 어려운 언어인데도, 아직 쉽게 가르쳐 주는 인강이나 책은 없는 것 같습니다. 많이들 추천하시는 '디지털 설계와 합성의 길잡이' 이 책 초심자가 보기엔 깊고 어려운 것 같습니다. 저도 저 책 보다가 포기하고 인터넷의 다양한 사이트들을 찾아다니며 공부를 했었습니다. 지금은 왕초보를 탈출해 초보에 간신히 올라왔다고 할 수 있습니다! 제가 Verilog HDL 왕초보를 탈출할 때 참고했던 사이트들입니다. 도움이 될지는 모르겠지만 추천드립니다! 1. chipverify - '디지털 설계와 합성의 길잡이'보다 난이도가 쉽습니다(개인적인 생각!) - 기초 문법 정리도 잘 되어 있어서 Verilog 입문 시 유용할 듯합니다. https://www.c