Introduce 한번에 수행하기 위해서 여러 문장들은 블록문으로 그룹지어 진다. 키워드 begin-end를 사용해 여러 문장들을 그룹지었는데 이들은 하나의 문장을 수행하고 다음 문장을 수행하는 순차 처리 블록을 사용했다. 이번 장에서는 블록의 형태를 알아본다. 블록 형태 순차 처리와 병렬 처리. 2가지 형태의 블록이 있다. 순차 처리 블록 문장을 순차 처리 블록으로 그룹 짓기 위해서 키워드 begin과 end를 사용한다. 순차 블록은 다음과 같은 특징을 갖느다. 순차처리 블록의 문장들은 지정된 순서에 따라 처리된다. 만약 지연 또는 사건 제어가 지정되었다면, 블록 안에서 이전 문장이 완전히 수행을 끝내는 시뮬레이션 시간에 관계된다. // 지연이 없는 순차 처리 블록 reg x, y; reg [1:0] ..
Introduce Verilog에는 4가지 형식의 루프문이 있다. 모든 루프 문장은 initail, always블록 안에 위치해야 한다. while for repeat forever While 루프 while-수식이 거짓이 될 때까지 수행한다. 다음은 while 루프의 사용법이다. // 0부터 127까지 카운트 예제 integer count; initial begin count = 0; while (count
조건문 조건문은 특정 조건에 따라서 결정하기 위해 이 조건은 문장을 수행할지 말지를 결정하는데 사용된다. // 형식 1 if(!lock) buffer = data; // 형식 2 if(number_queued < MAX_Q_DEPTH) begin data_queue = data; number_queued = number_queued + 1; end else $display("Queue Full. Try again"); // 형식 3 // ALU 제어 신호에 따라 문장을 수행한다. if(alu_control == 0) y = x + z; else if(alu_control == 1) y = x - z; else $display("Invalid ALU control signal"); 다중 분기 위의 조건문의..
Introduce Verilog에서는 다양한 행위 수준의 타이밍 제어구조를 사용할 수 있다. 지연 기반 타이밍 제어(delay-based timing control) 사건 기반 타이밍 제어(event-based timing control) 준위-구동 타이밍 제어(level-sensitive timing control) 지연 기반 타이밍 제어 수식문 안에서 지연 기반 타이밍 제어는 문장을 만나고 그것이 수행되는 사이의 시간 지연을 지정한다. 지연은 기호 #에 의해서 지정된다. 절차적 할당을 위한 지연에는 3가지 형태가 있다. 정규 지연 제어 내부 할당 지연 제어 제로 지연 제어 정규지연 제어 절차적 할당의 왼쪽에 0값이 아닌 지연이 지정될때 사용한다. 사용법은 다음과 같다. parameter latency..
구조적 프로시저 Verilog에는 두 가지 구조적 프로시저 always와 initial이 있다. 이 두 문장은 행위 수준 모델링에서 가장 기본적인 문장이다. 모든 행위 수준 문장은 반드시 구조적 프로시저 문장 안에 나타난다. 두 구문은 중첩될 수 없으며 각 always와 initial문이 분리되어 독립적으로 수행된다. ★ 규칙4 : always, initial의 LHS는 무조건 reg형이다. initial문 initial블록은 시간 0에서 시작하고, 시뮬레이션동안 한 번만 수행되고, 다시는 수행되지 않는다. 만약 여러 개의 initial 블록이 있으면, 각 블록은 시간 0에서 동시에 수행되고, 다른 블록과 상관없이 독립적으로 실행을 마친다. 여러 개의 행위 수준 문장은 반드시 키워드 begin과 end문..
연산자(Operator) 산술(Arithmetic) 연산자 - 나누기와 나머지 연산자에서 두 번째 피연산자가 0인 경우, 결과값은 x가 된다. - 나머지 연산자의 결과 값은 첫번재 피연산자의 부호를 따른다. 산술연산의 예 논리 연산자 논리 연산의 예 관계 연산자 - 두 피연산자의 비트 수가 다른 경우네는, 비트 수가 작은 피연산자의 MSB쪽에 이 채워져 비트 수가 큰 피연산자에 맞추어진 후, 관계를 판단함. 관계 연산자의 예 등가 연산자 - 두 피연산자의 비트 수가 다른 경우에는, 비트 수가 작은 피연산자의 MSB쪽에 0이 채워져 비트 수가 큰 피연산자에 맞추어진 후, 등가를 판단한다. 등가 연산자의 예 조건 예 비트 논리 연산자 비트 논리 연산의 예 축약 연산자 - 단항(unary) 연산자 - 피연산자..
연속(Continuous)할당 연속 할당문은 데이터플로우 모델링 기법에 있어서 가장 기본이 되는 문장으로 하나의 값을 넷에 할당하는데 사용된다. 연속할당문은 키워드 assign로 시작하며, 다음과 같은 특징을 가지고 있다. ★ 규칙3 : 연속 할당문의 왼쪽은 항상 wire형이다. 연속 할당문은 항상 능동적이다. 할당문은 항상 오른쪽 피연산자들의 값이 바뀌자마자 왼쪽의 넷에 값을 할당한다. 연산자의 오른쪽에 올 수 있는 것은 레지스터 또는 넷 또는 함수 호출문이다. 지연값은 할당문 안에서 단위 시간으로 지정된다. 지연 지연 값은 오른쪽의 피연산자들의 값이 연산되어 왼쪽에 값을 할당할 때까지의 시간을 제어해 준다. 수식, 연산자 그리고 피연산자 수식 수식은 결과를 산출해 내기 위한 연산자와 피연산자들의 조합..
모듈 모듈 정의는 항상 키워드 module로 시작한다. 모듈 정의의 처음에는 모듈 이름, 포트리스트, 포트 선언, 그리고 선택적으로 파라미터가 온다. 포트리스트와 포트 선언은 외부 환경과 연결할 때만 쓴다. endmodule문은 반드시 모듈 정의의 마지막에 와야한다. SR 래치는 S와R을 가지고 입력 포트로, Q와 Q_bar를 출력 포트로 가진다. 포트 포트는 모듈이 외부 환경과 소통할 수 있는 인터페이스이다. 모듈 정의는 선택적인 포트 리스트를 포함하지만 모듈이 외부 환경과 상호 작용을 하지 않는다면, 모듈은 포트를 가지지 않는다. 최상위 모듈 Top의 내부에서 파생된 4bit full_adder를 보면 모듈 Top이 최상위 모듈이며, 모듈 fulladd4는 Top 밑으로 파생된다. 그리고 포트 a,b..
사전적 규약 C프로그래밍과 매우 유사하다. 주석 주석은 가독성과 문서화를 위해 코드에 들어간다. 주석을 사용하는 방법은 두가지가 있다. 한 줄 주석은 //로 시작하고, 여러줄 주석은 /*로시작해 */로 끝난다. 연산자 연산자는 단항, 이항, 삼항 세 가지 형이 있다. 수 표현 Verilog는 크기 지정 기능과 크기 지정 불가능 형태의 두 가지 수 표현이 있다. 크기 지정 가능 수 형식 : ' 는 숫자의 비트 수의 개수를 나타내고, 오직 10진수만 가능하다. 은 10진수(d), 16진수, 2진수(b) 등이 있다. 크기 지정 불가능 수 을 지정하지 않은 숫자는 기본적으로 10진수이다. 가 지정되지 않은 숫자는 시뮬레이터나 기계마다 다른 기본값을 갖는다.(최소한 32bit는 된다.) X, Z값 Verilog는..
HDL : Hardware Description Language 디지털 논리 회로의 문자 표현 - 그림(schematic)보다 만들거나 고치기 쉬움 - 그러나 HDL 설계시에는 항상 그림(schematic)을 생각해야 함 HDL은 "programming languages"가 아님 - 매우 비슷하게 보이지만 프로그램처럼 작성하면 안된다. (verilog와 C가 상당히 유사함) - 뛰어넘어야 할 가장 중요하고 어려운 개념 - C : 순차적(sequential) 실행 - HDL : 병렬적(parallel) 실행 - 컴파일 방법은 비슷함 - C : Source > 컴파일 > 실행파일 - HDL : Source > 컴파일 > 시뮬레이션 > 합성(synthesis) > Hardware SW와 HW의 차이 위 그림과..