FW 심화 과정/[1] HDL, ARM프로세서설계

0623 { 게이트, 데이터플로우, 동작적행위 }모델링

천숭이 2022. 6. 23. 21:37

0621~0623 수업 중 실습을 제외한 이론.

 

** Datatype Rules **
1. 모든 input ports는 wire로 선언되어야 한다.
2. 모든 output ports는 wire로 선언되어야 한다.
3. assign 구문의 LHS는 wire로 선언되어야 한다.
4. initial 구문의 LHS는 reg로 선언되어야 한다.
5. always 구문의 LHS는 reg로 선언되어야 한다.

 

■ 모듈 구성요소

module 모듈명 ( 포트의 타입 및 이름 );

 1. wires, regs 등 신호 선언

 2. 데이터플로우 모델링 구문 (assign으로 구성)

 3. 하위모듈 Instantiation

 4. 동작적 행위 모델링 구문 (always, initial 블록)

5. 태스크와 함수 <심화>

endmodule

 

■ 포트 연결 방법

1. connecting by ordered list :  모듈의 해당하는 이름 순서대로

2. connecting by name :  해당하는 매개변수와 매핑

3. connectiong by ordered name ** 순서대로 매핑

 


■ 게이트 레벨 모델링

- 직관적인 디자인

- 미리 정의된 예약어 게이트를 사용해서 모델링

 

■ 게이트 타입

1. AND / OR gates  : 출력 하나, 입력 여러 개

Instantiation 할 때 (output, input, input) 순으로 작성해야 함

2. BUF / NOT gates : 입력 하나, 출력 여러 개

                             (output, output, input)순으로 작성해야 함

 

■ 게이트 딜레이 형태

- process, voltage, temperature 물리적인 변화로 게이트 딜레이가 발생.

- Min value / Typical value / Max value 를 설정할 수 있음

# (rise, fall, turn-off)

   Min : Typical : Max 세부적으로 설정 가능


게이트 모델링으로는 많은 게이트들을 기술하기에는 힘들다. 따라서 상위 모델링 데이터플로우 모델링이 생겼다

■ 데이터플로우 모델링

- 데이터 흐름에 초점을 맞춘 모델링

- 'assign'으로 이루어진 모델링

** assign 의 LHS는 wire로 선언되어야 한다 **

  ∵ RHS에 의해서 LHS쪽으로 계속해서 driving 되기 때문

- 피연산자, 연산자와 같이 사용하게 된다.

 

RTL 디자인 = 데이터플로우 모델링 + 동작적 행위 모델링

 

■ 연산자 종류

산술, 축약, 논리, 쉬프트, 비교, 결합, 등호, 복제, 비트단위, 조건문

 

■ shift 연산자

logical shift : 무조건 빈칸은 0으로

Arithematic shift : >>> msb로 채우기, <<< 0으로 채우기

x = 4'b1100 일때,

x>>1 = 4'b0110;   // right shift는 나누기2

x<<1 = 4'b1000;   // left shift는 곱하기 2

x>>>1 = 4'b1110; 

x<<<1 = 4'b1000;

 

< 헷갈리는 연산자 >
A=0011  B=0000
~A = 1100
!A=0
4'b1010==4'b1xxz    // 출력 x
4'b1xxx === 4'b1xxx // 출력 1

 


 

■ 동작적행위 모델링

- initial, always 구문을 활용하 디자안

- initial 구문은 동시다발적 독립적으로 실행된다.

- always 구문은 반복적으로 실행되는 구문이다.

 ** always와 initial의 LHS는 reg로 선언해야 한다 **

   ∵ LHS가 덮어씌어질때까지 변화가 없으므로

- always @( posedge, negedge, * )  신호리스트를 작성하고 해당 신호가 변화할 때마다 구문이 동작

 

 


■ 절차적 할당문

- 블록킹 할당문 (Blocking Assignments)

'=' 기호 사용. 절차적 실행.

 

- 논블록킹 할당문 (Non-Blocking Assignments)

 '<=' 기호 사용. 동시다발적 실행.

 

블록킹, 논블록킹 예시

 

module_procedural

module procedural;
wire [3:0] A, B, C, D;

endmodule

 

tb_procedural

`timescale 10ns/1ps
module tb_procedural;
reg [3:0] A, B, C, D;
reg clk;

initial begin
A=4'd0; B=4'd0; C=4'd0; D=4'd0;
clk = 1'b0;
#10 $finish;
end

always @(posedge clk) begin
A = A+1;
B = A+1;
end

always @(posedge clk) begin
C<=C+1;
D<=C+1;
end

always
#1 clk = ~clk;

endmodule

wave_procedural

 

 


 

■ Overriding Parameters

- 최신스타일의 모듈 작성법

module Adder #(parameter N=8) (
	input wire [N-1:0] A, B,
	input wire         C_IN,
	output reg [N-1:0] S,
        output reg         C_OUT
);

 

 

■ Cimpiler Driectives로 delay time unit 설정

'timescale 100ns / 1ns   // 기준 time unit은 100ns 이고 정밀도는 1ns

-> 5 time unit마다 toggle 값 변경

-> time unit = 500ns = 0.5us

 

'timescale 1us / 10ns   // 기준 time unit은 1us이고 정밀도는 10ns

-> 5 time unit마다 toggle 값 변경

-> module의 5 time unit = 5us = 5000ns