Presentation is loading. Please wait.

Presentation is loading. Please wait.

VHDL을 이용한 통신 칩 설계 -DS/SS MODEM 설계를 중심으로-

Similar presentations


Presentation on theme: "VHDL을 이용한 통신 칩 설계 -DS/SS MODEM 설계를 중심으로-"— Presentation transcript:

1 VHDL을 이용한 통신 칩 설계 -DS/SS MODEM 설계를 중심으로-
인천대학교 공과대학 전자공학과 System ASIC Design Lab. 지도교수 : 조 중 휘 ㈜ 본 강의 교재에 대한 복제 및 사용을 위하여는 저자의 허락을 받아 주십시오.

2 ASIC 제품의 기획, 설계 및 구현 과정에 대한 기본 이해
단계별 구성 시스템 이해 알고리즘 설계 RTL 블록 설계 VHDL 표현 검증 및 합성 FPGA Emulation Physical 설계 ASIC으로의 제작 System Board 구성 ASIC의 검증 ASIC 선택 FPGA SOG Cell-Based Full Custom

3 설계 대상체의 동작 및 구조 특성에 대한 표현의 다양성
설계 사양의 표현 수준 System Level Behavioral Level RTL Level Logic Level Circuit Level Layout Level 설계 사양의 표현 Graphic Diagram HDL 표현 설계 단계에 대한 이해

4 Synthesis 가능한 VHDL 표현을 위한 Hardware 추출
Target Architecture Register-Transfer Level의 블록 구성도 RTL 회로도의 주요 구성 요소 조합 논리 회로 블록 : Basic Gates, Modular Units (mux, decoder, arithmetic units) 동기 신호 요구 블록 : F/Fs, Registers 기억 소자 블록 : ROM, RAM Bus 연결 요구 블록 : 3-Buffer

5 VHDL 표현과 Design Compiler에 의한 설계
Design Flow의 3단계 구성과 의미 RTL 회로 설계 회로도 추출 및 효율적 VHDL 표현 기능 Simulation에 의한 회로 검증 Gate Level 회로 설계 면적,속도,Power를 고려한 조건 설정 Design Library의 설정 : FPGA, ASIC Component Delay를 고려한 기능 및Timing Simulation에 의한 회로 검증 Physical Design을 위한 EDIF 생성 FPGA를 이용한 Physical Design FPGA Tool에 의한 Compile 수행 사용할 Device 및 Option의 설정 Layout Data를 이용한 Simulation Target Board의 구성과 Emulation을 통한 검증 ASIC으로의 변환 여부에 따른 대응 ASIC 설계를 위한 Physical Design Design House와의 연계 및 EDIF 전달 Wire Delay를 함께 고려한 Simulation Sign-off 와 ASIC에 대한 기다림 Test Board 구성, 검증 및 평가 Design Flow의 모형

6 다양한 Digital ASIC 구현 방법 Digital ASIC 구현의 종류

7 Digital ASIC 구현 방법에 대한 선택

8 Standard-Cell Design에 대한 개념
Boding Diagram 예제

9 Sea-of-Gate Design에 대한 개념
Boding Diagram 예제: FLEX Decoder Chip

10 HDL의 비교 및 VHDL의 변화 과정 표준화를 목표로 하면서 사용되고 있는 HDL 의 비교 VHDL의 개발과 변화
VHDL : 시스템에 대한 기술의 능력은 매우 높으나, synthesis를 위하여 sub-set VHDL과 modeling에 대한 guide가 요구. Verilog : VHDL보다는 기술의 능력이 높지는 않으나 널리 사용되고 있으며, gate 레벨의 simulation 언어로는 매우 적합하여 design kit의 golden simulator에 사용 VHDL의 개발과 변화 Value 체계에 대한 변화 1987년의 STD-1076 Version STD library에 정의된 2-Value 체계 즉, {‘0’, ‘1’}를 기본으로 사용 1990년을 전후로 하여 Value 체계에 대한 표준안에 대한 요구 IEEE library에 정의된 9-value 체계 즉, {‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’}를 사용

11 VHDL의 다양한 사용 목적 사용 관점에 따른 목적의 다양성 Chip 설계자에의 유용성 및 제약성
System 설계자의 관점 : Simulation과 Documentation Chip 설계자의 관점 : Simulation, Synthesis 및 Documentation Chip 설계자에의 유용성 및 제약성 IP(Intellectual Property) Model에 대한 개발과 Re-Use의 개념이 가능 Synthesis가 가능한 VHDL 표현과 효율적인 Modeling 방법의 이해가 요구

12 H/W 및 S/W 관점에서 요구되는 Interface 와 Body의 2가지 개념
VHDL을 이용한 표현의 단위를 Design Entity라 부름 표현하고자 하는 hardware design 대상체를 의미함 예시 : NOT gate, ALU, Micro-Processor, Board, Computer System 등 VHDL에서 Design Entity를 표현하기 위하여 요구되는 개념

13 System 분할과 VHDL 표현을 위한 개념(1)
IP 또는 Macro Component로 구성되어 있는 경우의 분할함 논리 합성의 대상체는 4,000~5,000 Gate가 Optimization 관점에서 보편적으로 적합함 분할에 대한 표현 예-1 Design Tree와 Fully 계층적 VHDL 표현 모든 Design Node를 Entity Unit + Architecture Unit으로 표현 논리 합성의 결과는 계층적으로 나타나므로 분할의 정보를 유지함

14 System 분할과 VHDL 표현을 위한 개념(2)
분할에 대한 표현 예-2 Design Tree와 Fully Flatten VHDL 표현 Root Design Node에 대하여 만 Entity Unit + Architecture Unit으로 표현 Root 이외의 Design Node는 Concurrent VHDL 구문을 사용하여 표현 논리합성의 결과는 하나의 도면으로 나타나므로 분할의 정보가 유지되지 않음 분할에 대한 표현의 다양성 위의 2가지 표현 사이에 여러 가지 다양한 표현이 가능함 -> 설계자의 선택 사항

15 Entity Declaration Unit의 정의
Entity Unit에 대한 기본 개념의 표현 Entity Unit 표현에 대한 Syntax 정의 entity ENTITY_NAME is [ generic ( LIST_OF_GENERICS_AND_THEIR_TYPES ) ; ] [ port ( LIST_OF_PORTS_AND_THEIR_MODE ) ; ] [ DECLARATIONS ] [ begin { ENTITY_STATEMENT } ] end [ entity ] [ ENTITY_NAME ] ;

16 Entity Declaration Unit의 예제
D Flip-Flop의 Symbol Entity Unit의 설계 -- 9-value Package 공유를 위한 Visibility library IEEE; use IEEE.std_logic_1164.ALL; -- Pin Name, Mode, Data Type의 표현 entity DFF is port (D : in std_logic; CLK : in std_logic; CLR : in std_logic; -- D, CLK, CLR : in std_logic; Q, QBAR : out std_logic); end DFF; Generic Decoder의 Symbol Entity Unit의 설계 library IEEE; use IEEE.std_logic_1164.ALL; entity GENERIC_DECODER is -- Static Information에 대한 표현 generic (SIZEIN, SIZEOUT : integer); -- Dynamic Pin Data에 대한 표현 port (EN: in std_logic; A : in std_logic_vector (SIZEIN-1 downto 0); B : out std_logic_vector (SIZEOUT-1 downto 0)); end GENERIC_DECODER;

17 Architecture Unit에 대한 개념과 표현 형태
예제 회로에 대한 이해의 관점에 대한 분류 behavioral view Q=‘1’이기 위한 조건은 x=‘1’ 이거나, Y와 Z가 동시에 ‘1’인 경우라 분석하여 순서적으로 수행되는 구문을 사용하여 동작적 특성을 기술하는 관점이다. data-flow view Boolean 또는 state equation의 형태로 분석하여 동시적으로 수행되는 구문을 사용하여 동작적 특성을 기술하는 관점이다. structural view and gate와 or gate의 연결에 의한 구성으로 분석하여 구조적 특성을 기술하는 관점이다. 이때 and 및 or gate는 위의 2가지 중 하나로 표현되어야 한다. mixed view 위의 3가지가 혼합되어 사용되는 표현

18 Architecture Body Unit에 대한 다양한 표현 형태
Entity design unit library IEEE; use IEEE.std_logic_1164.all; entity EXAMPLE is port (X, Y, Z: in std_logic; Q: out std_logic); end EXAMPLE; Behavioral architecture body unit architecture RTL1 of EXAMPLE is begin process (X, Y, Z) if X=‘1’ then Q <= ‘1’; elsif (Y=‘1’ and Z=‘1’) then else Q <= ‘0’; end if; end process; end RTL1; Data-flow architecture body unit architecture RTL2 of EXAMPLE is begin Q <= X or (Y AND Z); end RTL2; Structural architecture body unit architecture RTL3 of EXAMPLE is component OR2 port (I1, I2: in std_logic; O1: out std_logic); end component; component AND2 for U0: OR2 use entity work.OR2(RTL); for U1: AND2 use entity work.AND2(RTL); signal S1: std_logic; U0: OR2 port map (X, S1, Q); U1: AND2 port map (Y, Z, S1); end RTL3;

19 Source file과 Compiled file의 관계
VDHL source file을 compile하는 경우 library의 지정이 요구되며, compiled file (intermediate format)은 지정된 library에 저장 WORK library에 대한 개념 정의 VHDL 사용자가 사용하고 있는 현재의 library를 편의상 WORK로 부르기로 약속함 IEEE VHDL 표준화 위원회(VASG)에서 지정한 library 2-value를 위한 STD 와 9-value를 위한 IEEE VHDL Analyzer에 의한 처리 과정

20 Library의 종류와 Visibility의 범위
VHDL Code에서 Package Unit을 사용하기 위한 Visibility의 부여 방법 공유하는 package가 WORK library에 있는 경우 design unit의 기술 앞에 다음을 기술 use WORK.package_name.item_name; 공유하는 package가 예를 들어 LIB1인 경우 design unit의 기술 앞에 다음을 기술 library LIB1; use LIB1.package_name.item_name;

21 Library Visibility의 표현과 영향의 범위
Entity Unit의 표현 앞에 기술하는 경우 해당되는 architecture와 configuration unit까지만 영향을 받음 --library visibility의 부여 library IEEE; use IEEE.std_logic_1164.ALL; use IEEE.std_logic_unsigned.all; --entity unit에 대한 표현 시작 entity ADD_SUB is port ( A, B : in std_logic_vector(3 downto 0); SEL : in std_logic; S : out std_logic_vector(3 downto 0); CF, ZF : out std_logic); end ADD_SUB; Package Declaration Unit의 표현 앞에 기술하는 경우 해당되는 package body unit까지만 영향을 받음 library IEEE;use IEEE.std_logic_1164.ALL; use IEEE.std_logic_arith.all; use IEEE.std_logic_signed.all; package PACK_MATCH is function COMP2C ( A: std_logic_vector) return std_logic_vector; function TWO_MUL ( A: std_logic_vector; B: std_logic) return std_logic_vector; end PACK_MATCH;

22 Structural View의 표현을 위한 기본 개념의 정의
Schematic Capture System과 VHDL 표현과의 비교 Capture System에서 사용하는 Component에 대한 선택 Architecture Unit에 Component로 선언하며, 특정 Component로 지정 Symbol Edit 또는 Copy 기능에 의하여 회로 구성 Component Instantiation 구문에 의하여 회로 구성 회로 구성 시에 요구되는 Wire의 사용 Wire는 Signal Object로 선언하고 사용 Formal Name 과 Actual Name에 대한 정의 Formal Name : 선언된 Component의 Generic 및 Port Name으로 Pin Name을 의미함 Actual Name : Hardware 구현 시의 Generic 및 Port Name으로 Wire Name을 의미함 표현을 위한 3가지 형태의 구문 Component Instantiation 구문, For..Generate 구문, IF.. Generate 구문 예제 회로 : 1-Bit Half-Adder와 등가 회로

23 Component Instantiation 구문에 의한 표현
Formal Name과 Actual Name을 연결하는 2가지 방법 Positional Association Mapping Named Association Mapping 앞의 회로에 대한 VHDL 표현 library IEEE; use IEEE.std_logic_1164.all; entity HA is port (X, Y : in std_logic; S, C : out std_logic); end HA; architecture RTL of HA is --Component의 Formal Name 선언 component NAND2 port ( A, B : in std_logic; Y : out std_logic); end component; component INV port ( X : in std_logic; -- 2 종류의 Component의 Link 정보 표현 for U4 : INV use entity work.INV(RTL); for others: NAND2 use entity work.NAND2(RTL); -- 연결 Wire에 대한 Data Object 선언 signal S1, S2, S3 : std_logic; begin -- Positional Association Mapping 예제 U0 : NAND2 port map (X, Y, S3); U1 : NAND2 port map (X, S3, S1); U4 : INV port map (S3, C); -- Named Association Mapping 예제 U2 : NAND2 port map (A => S3, Y => S2, B => Y); U3 : NAND2 port map (A => S1, B => S2, C => S); end RTL; 사용되는 Component에 대한 VHDL Modeling은 미리 Compile 되어 지정 Library에 저장하여야 한다.

24 Unconnected Port에 대한 처리 방법
Actual Name이 존재하지 않는 경우 Unconnected Output Port Unconnected Input Port Unconnected Port에 대한 회로 예제 VCC를 ‘1’로 정의하고 연결함 Reserved Identifier인 OPEN을 연결함 Unconnected Port에 대한 처리 예제 architecture RTL of EX1 is component EX2 port (CLK, PRESET, RESET, D : in std_logic; Q, QBAR : out std_logic); end component; for U1: EX2 use entity work.DFFSR(RTL); signal VCC : std_logic; begin -- VHDL-87에서의 처리 방법 VCC <= ‘1’; U1 : EX2 port map (D => D, CLK =>CLK, PRESET =>VCC, RESET=>CLR, Q=>Q,BAR=>open); -- VHDL-93에서의 처리 방법 U1 : EX2 port map (D => D, CLK=>CLK, PRESET =>’1’, RESET=>CLR, Q=>Q, QBAR=>open); end RTL;

25 Generic Map Command의 사용
Generic 구문의 Behavioral 표현 entity AND_GATE is generic (Tdelay : time := 10 ns; N : positive := 2); port (A : in std_logic_vector(N-1 downto 0); C : out std_logic); end AND_GATE; architecture RTL of AND_GATE is begin P0 : process (A) variable INT : std_logic; INT := ‘1; for I in (A’length-1) downto 0 loop if (A(I)=‘0’) then INT := ‘0’; end if; end loop; C <= INT after Tdelay; end process; end RTL; Generic Map을 갖는 Structural 표현 entity EX is port (D1, D2, D3, D4, D5 : in std_logic; Q1, Q2 : out std_logic); end EX; architecture RTL of EX is component AND_COMP generic (TDELAY : time; N : positive); port (A : in std_logic_vector(N-1 downto 0); C : out std_logic); end component; for all : AND_COMP use entity work.AND_GATE(RTL); begin U1: AND_COMP generic map (n=>2, TDELAY=>8 ns) port map (A(0)=>D1, A(1)=>D2, C=>Q1); U2: AND_COMP generic map (n=>3, TDELAY=>12 ns) port map (A(0)=>D3, A(1)=>D4, A(2)=>D5, C=>Q2); end RTL;

26 Behavioral View의 표현을 위한 구문
병렬적인 수행을 행하도록 정의된 구문 basic signal assignment statement conditional signal assignment statement selected signal assignment statement process statement with many sequential statements concurrent subprogram call statement block statement with guarded signal assignment statement concurrent assert statement 순서적인 수행을 행하도록 정의되 구문 process 구문, function 또는 procedure와 같은 subprogram 내에서만 사용 variable assignment statement if statement case statement loop statements : for..loop statement, while loop statement, infinite loop statement next statement, exit statement null statement sequential subprogram call statement wait statement sequential assert statement

27 Basic Signal Assignment 구문 예제
Full-Adder 회로와 각 Gate에 대한 Sensitivity Signal에 대한 개념 정의 Basic Signal Assignment 구문에 의한 Architecture Unit의 설계 architecture RTL of ADDER is signal S0, S1 : std_logic; begin --각 gate를 signal assignment 구문으로 표현 S0 <= A xor B; S1 <= A and B; SUM <= S0 xor CIN; COUT <= S1 or (S0 and CIN); end RTL; 다양한 형태의 Signal Assignment 구문 Aggregate : 하나의 Target Signal에 여러 개로부터의 Source 값을 Assign 하는 경우 architecture RTL of EX is signal A : std_logic_vector( 4 downto 0); signal B : std_logic_vector( 4 downto 0); begin A <= (others => ‘0’); -- A <= “00000”; -- A <= (‘0’, ‘0’, ‘0’, ‘0’, ‘0’); B <= (1=>C(2), 3=>C(1), others => D(0)); -- B <= D(0)&C(1)&D(0)&C(2)&D(0); end RTL; 하나의 Source 값을 여러 개의 Target Signal에 나누는 경우의 표현 방법에 대하여도 생각하여 보자.

28 Conditional Signal Assignment 구문의 정의와 예제
Syntax 정의와 동작 개념 signal_identifier <= waveform_1 when condition_1 else waveform_2 when condition_2 else ……………… waveform_(N-1) when condition_(N-1) else waveform_N ; D Type Flip-Flop의 VHDL 표현과 Symbol architecture A2 of DFF is begin Q <= ‘0’ when CLR=‘0’ else D when (CLK=‘0’ and CLK’EVENT) else Q; QBAR <= not Q; end A2; Data Selector에 대하여 Conditional Signal Assignment 구문에 의한 표현 MUXOUT <= I0 when (SEL=‘0’) else I1;

29 Selected Signal Assignment 구문의 정의와 예제
Syntax 정의와 동작 개념 with expression select signal_identifier <= waveform1 when expression_1, ………………... waveform(n-1) when expression(n-1), waveform(n) when others ; 1-Bit Half-Adder에 대한 표현 library IEEE; use IEEE.std_logic_1164.ALL; entity HA is port (A, B : in std_logic; SUM, COUT : out std_logic); end HA; architecture RTL of HA is signal TMP1, TMP2 : std_logic_vector(1 downto 0); begin TMP1 <= A & B; with TMP1 select TMP2 <= “00” when “00”, “01” when “01”, “01” when “10”, “10” when others; (COUT, SUM) <= TMP2; end RTL; 2*1 MUX에 대한 표현 library IEEE; use IEEE.std_logic_1164.ALL; entity MUX21 is port (SEL, A, B : in std_logic; C : out std_logic); end MUX21; architecture RTL of MUX21 is begin with SEL select C <= A after 10 ns when ‘0’, B after 10 ns when others;

30 Process 구문에 대한 정의와 예제 Syntax 정의 동작 개념 AND Gate에 대한 표현
[ Label : ] process [ ( Sensitivity_Signals ) ] -- declaration statements begin -- sequential activity statements end process [ Label ] ; 동작 개념 Sensitivity Signal List가 있는 경우 Wait 구문을 포함할 수 없다. Simulation에 대한 수행 명령과 함께 각 Signal의 초기값을 갖고 내부 구문에 대한 1회의 수행을 수행한다. 수행 완료와 함께 Process 문에 표현된 Sensitivity Signal List에 포함된 Signal 중 어느 하나라도 Event가 생기는 가를 검사하여 Event가 발생하면 Process 문에 대한 Simulation을 다시 수행한다. 합성 H/W 표현에 이용 권장 Sensitivity Signal List가 없는 경우 적어도 1개 이상의 Wait 구문을 포함해야 한다. Simulation의 시작과 함께 Wait 구문을 만날 때까지의 구문을 수행한다. Wait 구문을 만나면 해당 조건을 만족할 때까지는 Simulation을 중지한다. Stimulus Vector 표현의 이용 권장 AND Gate에 대한 표현 process (A, B) begin C <= A and B; end process; Sensitivity Signal이 차이에 따른 문제점 이해 A, B를 모두 기술한 경우 A만 기술한 경우

31 If 구문에 대한 정의와 사용 예제 Syntax 정의와 동작 개념
if ... then … end if; (주의 사항: Latch 생성 요인이 있음) if ... then ... else … end if; Nested if Statements 다음의 Architecture Unit으로부터 생성되는 파형을 예측하여 보자. architecture RTL of OSC is signal CLK : std_logic := ‘0; begin process variable SWITCH : std_logic := ‘0’; if SWITCH=‘0’ then CLK <= ‘0’; else CLK <= ‘1’; end if; SWITCH := NOT SWITCH; wait for 25 ns; end process; end RTL;

32 Case 구문에 대한 정의와 사용 예제 Syntax 정의와 동작 개념 1-Bit Half-Adder에 대한 표현-2
case EXPRESSION is when EXPRESSION_VALUE_1 => (sequential_statements;) ….. when EXPRESSION_VALUE_(N-1) => when others => end case ; Truth Table에 대한 표현에 적합함 1-Bit Half-Adder에 대한 표현-1 architecture RTL1 of EX is begin process (A, B) variable TMP1, TMP2 : std_logic_vector(1 downto 0); TMP1 := A & B; case TMP1 is when “00” => TMP2 := “00”; when “01” | “10” => TMP2 := “01”; when others => TMP2 := “10”; end case; (COUT, SUM) <= TMP2; end process; end RTL; 1-Bit Half-Adder에 대한 표현-2 Signal에 Over-Writing 하는 경우 의미 architecture RTL2 of EX is begin p1: process (A, B) variable TMP: std_logic_vector(1 downto 0); TMP := A & B; (COUT, SUM) <= “00”; case TMP is when “00” => null; when “01”|”10” => SUM<= ‘1’; when others => COUT <= ‘1’; end RTL2;

33 For..Loop 구문에 대한 정의와 사용 예제 For..Loop 구문의 Syntax VHDL 표현 예제-1
[Label:] for loop_parameter in discrete_range loop --sequential statements end loop [Label] ; VHDL 표현 예제-1 process (A) variable sum : signed(7 downto 0); begin sum := (others => ‘0’); for I in 7 downto 0 loop sum := sum + A(I); end loop; sum_out <= sum; end process; 예제-1에 대응하는 Flow-Graph을 생각하여 보자. 동작 속도의 관점에서 효율적인 VHDL 표현을 생각하여 보자. VHDL 표현 예제-2 process (A) variable count : integer; begin count := 8; for LEVEL in 0 to 2 loop count := count / 2; for I in 0 to (count-1) loop A(I) := A(I*2) + A(I*2+1); end loop; sum_out <= A(0); end process; discrete_range 표현 방법 integer_expression TO integer_expression integer_expression DOWNTO integer_expression array_attribute’RANGE array_attribute’REVERSE_RANGE

34 Next와 Exit 구문에 대한 정의와 사용 예제
Next 구문의 Syntax와 개념 next; next loop_label; next when boolean_expression; next loop_label when boolean_expression; 예제 LBL1 : process (S) variable TMP, J : integer := 0; begin TMP := 0; J := 0; A_LOOP: for I in 0 to 7 loop J := J + 1; if I > 5 then next A_LOOP; end if; TMP := TMP + 1; end loop; end process LBL1; Exit 구문의 Syntax와 개념 exit; exit loop_label; exit when boolean_expression; exit loop_label when boolean_expression; 예제 LBL2 : process (S) variable SUM, CNT : integer := 0; begin SUM:= 0; CNT:= 0; FIRST: loop CNT:=CNT+1; SUM:=SUM+CNT; exit when SUM > 100; end loop FIRST; SECOND: loop if SUM > 100 then exit; end loop SECOND; end process LBL2;

35 VHDL의 Test Bench Modeling의 개념
Test Harness를 위한 기본 구조 Synthesis를 목적으로 표현된 Hardware VHDL Model Simulation을 위한 입력 Data를 생성하는 Vector Generation VHDL Model Test Harness 내부에서 생성 Array에 상수 형태로 저장된 Vector를 읽으면서 수행 별도의 System File에 저장된 Vector를 읽으면서 수행 Simulation Tool에 의한 계산 값과 설계자의 기대 값을 비교하는 VHDL Model 출력된 파형에 대하여 설계자가 추적하여 Simulation 결과를 판단하는 방식 Simulation 결과를 File로 출력하는 방식 기대 값과 계산 값을 assert 구문을 비교하여 Pass/Fail 만을 출력하는 방식 HDL Test Harness MODEL UNDER TEST One, or possibly more component instantiation(s) Stimulus of hardware model under Output vectors test. vectors WAVEFORM COMPONENT RESULTS Results Test GENERATON Compare and possibly File Vectors (may include other parts generate pass /fail File of modeled hardware Reference vectors indication. Pass/fail system) indication

36 Test Vector 생성에 대한 3가지 모형과 VHDL 표현
Case1 : 초기화 신호 및 반복적 특성의 Clock 신호 생성 case2 : Random하게 변화하는 신호의 생성 (1개의 구문 사용) case3 : Random하게 변화하는 신호의 생성 (여러 개의 구문 사용)

37 Test Vector 생성을 위한 Modeling 예제
--9-value visibility 부여 library IEEE; use IEEE.std_logic_1164.ALL; --entity unit에 대한 표현 entity TB is port (CLOCK1 : buffer std_logic := ‘0’; CLOCK2, RESET1, RESET2 : out std_logic ; ENABLE : out std_logic; A_DATA, B_DATA : out std_logic_vector(7 downto 0)); end TB; --architecture unit에 대한 표현 architecture TB_A of TB is begin CLOCK1 <= not CLOCK1 after 20 ns; RESET1 <= ‘0’, '1' after 100 ns; process begin if now = 0 ns then CLOCK2 <= '0'; wait for 250 ns; else CLOCK2 <= '1'; wait for 20 ns; CLOCK2 <= '0'; wait for 20 ns; end if; end process; process begin A_DATA <= " "; B_DATA <= " "; wait for 120 ns; A_DATA <= " "; wait for 30 ns; B_DATA <= " "; wait for 90 ns; A_DATA <= " "; wait for 150 ns; end process; if now = 0 ns then RESET2 <= '0'; ENABLE <= '0'; wait for 50 ns; else RESET2 <= '1'; ENABLE <= '1'; wait for 300 ns; ENABLE <= '0' after 200 ns, '1' after 400 ns; wait for 800 ns; RESET2 <= '0', '1' after 150 ns; ENABLE <= '0' after 50 ns; wait for 200 ns; end if; end TB_A;

38 Test Vector 생성 Waveform과 의미 분석
생성 신호에 대한 의미 분석 CLOCK1, CLOCK2와 같이 주기성을 갖는 신호 RESET1, RESET2와 같이 변화의 빈도가 매우 적은 특징을 갖는 신호 A_DATA, B_DATA와 같이 변화의 빈도가 많은 특징을 갖는 신호 보편적인 제어 신호와 Data 신호가 해당 Process 구문을 사용한 표현이 적합함

39 Spread Spectrum 통신 시스템에 대한 개념도
주요 구성부 Source CODEC Channel CODEC Modulator-Demodulator

40 Rectangular Pulse에 대한 Bandwidth 분석

41 대역 확산의 개념과 Power Density에 대한 이해

42 대역 확산과 Frequency Domain의 관계

43 Direct-Sequence Spread-Spectrum 시스템
DS/SS System에 대한 블록 구성도 PN Sequence에 대한 이해 주기가 15인 PN Sequence에 대한 예 PN 신호의 자기 상관 함수 성질에 대한 이해

44 Frequency-Hopping Spread-Spectrum 시스템
FH/SS System에 대한 블록 구성도

45 DS/SS-BPSK 송신부 구조와 동작에 대한 이해
기본 블록 구성과 신호 예제

46 DS/SS-BPSK 수신부 구조와 동작에 대한 이해
기본 블록 구성과 신호 예제

47 DS/SS-QPSK 송신부와 수신부의 기본 구조
송신부에 대한 기본 블록 구성 수신부에 대한 기본 블록 구성

48 DS/SS-QPSK 송신부의 신호 예제를 통한 동작 이해

49 Differential BPSK 송신부의 기본 구조
Differential BPSK (DBPSK) Modulator의 기본 구조 동작에 대한 이해 현재의 심벌과 이전 심벌간의 논리 회로의 결과를 출력한다. 이전 심벌은 지연 소자(Register)를 사용하여 기억한다. 한 심볼 구간(Tb)을 지연 시킨 Register의 출력은 Feedback 한다. 논리 회로는 XOR나 XNOR를 사용하는데, 현재의 심벌과 이전 심벌간의 위상의 합은 XOR로 구현한다. Level shift block은 차동 부호화된 심볼(‘0’ or ‘1’)을 부호 확장하여 ‘1’ or ‘-1’로 변환하는 블록이다. 차동 부호화된 심벌에 반송 주파수(carrier Frequency)를 곱하여 BPSK(Binary Phase-Shift-Keying)를 하고 대역 통과 필터(band Pass Filter)를 취한다. 수신부에서 Non-Coherent 시스템을 사용하는 경우 수신부 구조의 간결화 가능

50 Differential BPSK 수신부의 2가지 형태의 구조
Differential BPSK (DBPSK) Demodulator non-coherent detection Differentially Encoded BPSK(DEBPSK) Demodulator coherent detection

51 DS/SS 시스템의 송신기에 대한 기본적 Block Diagram
Base Band Modulator

52 본 강좌에서 설계하는 Base Band Modem의 개요
기본적인 특징 DQPSK 방식의 변조와 복조 : Non-coherent Demodulation 대역 확산을 위한 생성 다항식 : 역 확산 방식 : Matched filter를 사용 시스템 구성과 입출력 신호

53 송신부에 대한 개념에 따른 구성 요소 추출 송신부의 구성 요소 송신부의 VHDL 표현을 위한 Design Tree 구성
입력 신호에 대한 I, Q Channel 분리의 기능 Differential Encoding의 기능 PN-Code를 이용한 대역 확산의 기능 확산된 신호에 대하여 QPSK Modulation을 수행하여 6-Bit의 값을 생성하는 기능 송신부에서 요구되는 내부 Clock 신호를 생성하는 기능 송신부의 VHDL 표현을 위한 Design Tree 구성 Behavioral Modeling을 행하는 Block Name S2P, DIFF_ENC, SPREAD, QPSK_MOD, TX_CLK Structural Modeling Block을 행하는 Block Name DQPSK_ENC, TX_BLK, 송신부에 대한 Test Bench Block

54 설계-1 : Serial-to-Parallel 블록에 대한 개념 설계
기능의 정의 직렬 정보를 I, Q 병렬 정보로 분류 동작을 위한 Timing Diagram S bclk sclk tmp q_ch info 1 2 3 4 5 6 7 8 9 S 9 I_ch S S S S S 2 4 6 8

55 설계-1 : Serial-to-Parallel 블록에 대한 구조 설계
RTL H/W 설계 Entity Unit의 설계 library IEEE; use IEEE.std_logic_1164.ALL; entity S2P is port ( SCLK : in std_logic; RESET, INFO : in std_logic; I_CH, Q_CH : out std_logic); end S2P; Architecture Unit의 설계 2개의 Process 구문을 사용 signal object의 사용과 선언 process (RESET, SCLK) begin if RESET = '0' then TMP <= '0'; elsif SCLK=’1' and SCLK'event then TMP <= INFO; end if; end process; if RESET='0' then I_CH <= '0'; Q_CH <= '0'; elsif SCLK='0' and SCLK'event then I_CH <= TMP; Q_CH <= INFO; INFO D Q D Q I_CH D Q Q_CH SCLK

56 설계-2 : Differential Encoding 블록에 대한 개념 설계
Gray-code Labeling (QPSK) DQPSK를 위한 Encoding Rule

57 설계-2 : Differential Encoding 블록에 대한 구조 설계
FSM 형태의 H/W로 표현 Entity Unit의 설계 library IEEE; use IEEE.std_logic_1164.ALL; entity DIFF_ENC is port ( RESET, SCLK : in std_logic; I_CH, Q_CH : in std_logic; D_I_CH, D_Q_CH : out std_logic); end DIFF_ENC; Architecture Unit의 설계 2개의 Process 구문을 사용 을 기억하는 2-bit register 에 의하여 을 결정 case 구문에 의한 N_STATE 결정 (D_I_CH,D_Q_CH) <= N_STATE; IQ_IN <= I_CH & Q_CH; process (C_STATE, IQ_IN) begin case C_STATE is when “00” => case IQ_IN is --중간 생략되었으므로 각자 표현할 것 end case; when others => end process;

58 설계-3 : DQPSK Encoder에 대한 Structural Modeling 설계
블록 구성에 대한 표현 Architecture Unit의 VHDL 표현 사용할 component 선언 component 사이 연결 signal 선언 component configuration 선언 전체적인 VHDL 표현 library IEEE; use IEEE.std_logic_1164.ALL; entity DQPSK_ENC is port ( RESET, SCLK : in std_logic; INFO : in std_logic; I_CH, Q_CH : out std_logic); end DQPSK_ENC; architecture RTL of DQPSK_ENC is component S2P port ( SCLK : in std_logic; RESET, INFO : in std_logic; I_CH, Q_CH : out std_logic); end component; component DIFF_ENC port ( RESET, SCLK : in std_logic; I_CH, Q_CH : in std_logic; D_I_CH, D_Q_CH : out std_logic); signal I_CH_S, Q_CH_S: std_logic; for u0 : S2P use entity work.S2P(RTL); for u1 : DIFF_ENC use entity work.DIFF_ENC(RTL); begin u0 : S2P port map ( SCLK, RESET, INFO, I_CH_S, Q_CH_S ); u1 : DIFF_ENC port map ( RESET, SCLK, I_CH_S, Q_CH_S, I_CH, Q_CH ); end RTL; INFO I_CH S2P DIFF_ENC Q_CH SCLK

59 설계-4 : PN Code에 의한 대역 확산부의 구조 설계
대역 확산 개념 설계 PN Code의 생성 : RTL H/W 설계

60 PN Code의 Auto-correlation 특성
length=7; signal mapping =(1,-1) length=8; length=7; signal mapping =(3,-4) length=8;

61 설계-4 : PN Code에 의한 대역 확산부의 VHDL 설계
Entity Unit의 설계 library IEEE; use IEEE.std_logic_1164.ALL; entity SPREAD is port ( RESET, CCLK : in std_logic; I_IN, Q_IN : in std_logic; I_OUT, Q_OUT : out std_logic); end SPREAD; Architecture Unit의 설계 PN Code Shift-Register의 표현 Process 구문을 사용 2개의 XOR Gate의 표현 Data Flow 구문을 사용 architecture RTL of SPREAD is signal PN_CODE : std_logic_vector(7 downto 0); begin -- 2개의 XOR Gate를 위한 표현 I_OUT <= I_IN xor PN_CODE(0); Q_OUT <= Q_IN xor PN_CODE(0); -- Shift Register를 위한 표현 process ( RESET, CCLK ) if RESET = '0' then PN_CODE <= " "; elsif CCLK = '0' and CCLK'event then -- Rotate Right Operation -- 출력되는 PN_Code의 순서에 유의 PN_CODE <= PN_CODE(0) & PN_CODE(7 downto 1); end if; end process; end RTL;

62 offset binary/2's complement
설계-5 : QPSK 변조 블록에 대한 구조 설계 QPSK 변조를 위한 기본 수식과 위상 분포 QPSK 변조부 설계를 위한 Micro-Architecture 회로도 설계 S (t) I offset binary/2's complement cos mux MSB 5 2x1 1 mux -cos 1 5 5 S (t) Q divider txifout 6 6 6 sin 5 2x1 5 mux LSB0 -sin 1 5 txifclk

63 설계-5 : QPSK 변조 블록에 대한 VHDL 설계
Entity Unit의 설계 library IEEE; use IEEE.std_logic_1164.ALL; use IEEE.std_logic_unsigned.”+”; entity QPSK_MOD is port (SI, SQ : in std_logic; SIN, COS : in std_logic_vector(4 downto 0); TX_OUT : out std_logic_vector(5 downto 0)); end QPSK_MOD; Architecture Unit의 설계 process 구문과 concurrent 구문을 사용 concurrent 구문만을 사용 process 구문 1개만을 사용 architecture RTL of QPSK_MOD is signal TX_I, TX_Q : signal TX_TMP : std_logic_vector(5 downto 0); begin process (SI, COS) begin if SI= '0' then TX_I <= COS; else TX_I <= not(COS) + 1; end if; end process; process (SQ, SIN ) begin if SQ = '0' then TX_Q <= SIN; TX_Q <= not(SIN) + 1; TX_TMP <= (TX_I(4)&TX_I)+ (TX_Q(4)&TX_Q); TX_OUT <= TX_TMP(5 downto 0); end RTL;

64 설계-6 : Sine, Cosine의 디지털 신호 생성부에 대한 개념 설계
기본 목적 의 system clock을 사용하여 의 sine 및 cosine 신호 발생 = ( * FCW) / 샘플링 수 Sine, Cosine 신호 생성을 위한 ROM table을 구성하기 위한 개념 Address 생성부와 Sine, Cosine 값 생성부 표현을 위한 개념 설계

65 설계-6 : Sine, Cosine ROM Table 구성을 위한 자료 추출
Sine Table Sine, Cosine 값의 검증 Cosine Table

66 설계-6 : Sine, Cosine의 디지털 신호 생성부 구조와 VHDL 설계
개념 설계에 따른 DDFS의 블록 구성도 VHDL 설계의 방향 Sine, Cosine에 대한 Table을 ROM으로 표현하고, System Clock의 변화에 따라 1회씩 Read하여 16-Clock에 1 주기를 Read 한다. 생성된 Data에 대한 변형을 행하여 QPSK Modulation 블록으로 출력한다.

67 설계-7 : Clock 분주기에 대한 구조 설계 송신부에서 요구되는 Clock에 대한 정의
Bit Rate : 36Kbps (가정) Symbol Rate : 18Kbps (Bit Rate / 2) Chip Rate : 144Kbps (symbol Rate * PN_Code_Length) System Rate : 2304Kbps (Chip Rate * (1-주기 Sampling 횟수)) Counter에 의한 RTL H/W 설계 동기식 Counter 또는 Ripple Counter등의 Counter 종류 결정 동기식 Counter : State Machine 형태 또는 + ‘1’ 연산을 이용 Ripple Counter : 하나의 Flip-Flop을 설계하고, Generate 구문을 이용 Ring 또는 Johnson 형태의 Counter : & Operator를 이용 본 강좌에서 사용하는 Counter +1 연산을 이용한 MOD-128 동기식 Counter Entity Unit의 설계 library IEEE; use IEEE.std_logic_1164.ALL; use IEEE.std_logic_signed.ALL; entity TX_CLK is port ( RESET, SYS_CLK : in std_logic; BCLK, SCLK, CCLK : out std_logic); end TX_CLK;

68 설계-7 : Clock 분주기에 대한 VHDL 설계
+1 연산을 이용한 설계 계수 State 가 많은 경우에 표현이 보다 간결함 architecture RTL of TX_CLK is signal TMP1, TMP2: std_logic_vector(6 downto 0); begin TMP1 <= TMP2 + 1; process (RESET, SYS_CLK) begin if (RESET=’0’) then TMP2 <= “ ”; elsif (SYS_CLK=’0’ and SYS_CLK’EVENT) then TMP2 <= TMP1; end if; end process; (SCLK, BCLK) <= TMP2(6 DOWNTO 5); CCLK <= TMP2(3); end RTL; State Machine을 이용한 설계 architecture RTL1 of TX_CLK is signal C_STATE, N_STATE : std_logic_vector(6 downto 0); begin process ( RESET, SYS_CLK ) begin if RESET = '0' then C_STATE <= " "; elsif SYS_CLK = '0' and SYS_CLK'event then C_STATE <= N_STATE; end if; end process; process ( C_STATE ) begin case C_STATE is when " " => N_STATE<=” "; --중간 생략되어 있으므로 각자 표현할 것 when others => N_STATE<=" "; end case; (SCLK, BCLK) <= C_STATE(6 DOWNTO 5); CCLK <= C_STATE(3); end RTL1;

69 설계-8 : 송신부에 대한 Structural Modeling 설계
송신부에 대한 VHDL 설계 5개의 Component를 연결하는 Structural Modeling을 행한다. library IEEE; use IEEE.std_logic_1164.ALL; entity TX_BLK is port ( RESET, SYS_CLK, INFO : in std_logic; BCLK : out std_logic; TX_OUT : out std_logic_vector(5 downto 0); end TX_BLK; -- Architecture에 대한 Structuring Modeling architecture RTL of TX_BLK is component TX_CLK port ( RESET, SYS_CLK : in std_logic; BCLK, SCLK, CCLK : out std_logic); end component; -- 다른 4개의 COMPONENT에 대한 선언도 -- 기술한다. -- Component 연결을 위한 Wire에 대한 선언 --을 행한다. signal BCLK_S, SCLK_S, CCLK_S : std_logic; signal I_CH_S, Q_CH_S, I_CH, Q_CH : std_logic; signal SIN, COS : std_logic_vector(4 downto 0); -- Component Configuration을 위한 표현 for u0 : TX_CLK use entity work.TX_CLK(RTL); for u1 : DQPSK_ENC use entity work.DQPSK_ENC(RTL); for u2 : SPREAD use entity work.SPREAD(RTL); for u3 : QPSK_MOD use entity work.QPSK_MOD(RTL); for u4 : DDFS use entity work.DDFS(RTL); begin BCLK <= BCLK_S; u0 : TX_CLK port map ( RESET, SYS_CLK, BCLK_S, SCLK_S, CCLK_S ); u1 : DQPSK_ENC port map ( RESET, SCLK_S, INFO, I_CH_S, Q_CH_S ); u2 : SPREAD port map ( RESET, CCLK_S, I_CH_S, Q_CH_S, I_CH, Q_CH ); u3 : QPSK_MOD port map ( I_CH, Q_CH, SIN, COSIN, TX_OUT ); u4 : DDFS port map (SYS_CLK, RESET, SIN, COS ); end RTL;

70 설계-9 : 송신부 검증을 위한 임의 신호 생성부 설계
임의 송신 신호 생성을 위한 개념 20-Bit 상수 Data를 Right Rotate 시키면서 1-Bit 단위로 신호 생성 VHDL 설계 library IEEE; use IEEE.std_logic_1164.ALL; entity RANDOM is port ( RESET, BCLK: in std_logic; RANDOM_OUT: out std_logic); end RANDOM; architecture RTL of RANDOM is signal TMP : std_logic_vector(19 downto 0); begin process ( RESET, BCLK ) begin if RESET = '0' then TMP <= " "; elsif BCLK = ’1' and BCLK'event then TMP <= TMP(0) & TMP(19 downto 1); end if; end process; RANDOM_OUT <= TMP(0); end RTL;

71 설계-10 : 송신부 검증을 위한 Test Bench에 대한 설계
Test Bench에 대한 VHDL 설계 library IEEE; use IEEE.std_logic_1164.ALL; entity TB_TX is end TB_TX; architecture RTL of TB_TX is component TX_BLK port ( RESET,SYS_CLK,INFO : in std_logic; BCLK : out std_logic; TX_OUT : out std_logic_vector(5 downto 0)); end component; component RANDOM port ( RESET, BCLK : in std_logic; RANDOM_OUT : out std_logic); end component; signal RESET, SYS_CLK : std_logic := ‘0’; signal INFO, BCLK_S : std_logic; signal TX_OUT : std_logic_vector(5 downto 0); for u0 : TX_BLK use entity work.TX_BLK(RTL); for u1 : RANDOM use entity work.RANDOM(RTL); begin RESET <= '1' after 20 ns; SYS_CLK <= not SYS_CLK after 3 ns; u0 : TX_BLK port map ( RESET, SYS_CLK, INFO, BCLK_S, TX_OUT ); u1 : RANDOM port map ( RESET, BCLK_S, INFO ); end RTL; configuration TB_TX_C of TB_TX is for RTL end for; end TB_TX_C;

72 설계-10 : 송신부에 대한 Simulation 결과

73 DS/SS 시스템의 수신기에 대한 기본적 Block Diagram
Base Band Demodulator

74 Base Band Receiver의 개념에 따른 구성 요소 추출
Complex Multiplier에 의한 IF Carrier Frequency에 대한 제거 Matched Filter를 사용한 역 확산(De-Spreading)의 기능 PN Code 동기에 따른 Symbol Clock 신호 생성 기능 DQPSK Demodulation의 기능 병렬로 복원된 신호를 직렬 신호로 변경하는 기능 수신부에서 요구되는 내부 Clock 신호를 생성하는 기능

75 설계-12 : Down Conversion 기능의 개념 설계
Complex Multiplier 설계를 위한 수식 송신 신호 : 정보 신호의 위상과 국부 반송파를 분리하기 위한 수식 (DSB 경우) 정보 신호의 위상과 국부 반송파를 분리하기 위한 수식 (SSB 경우) Real의 수신신호 를 Complex Number 로 변환하여 처리하여야 함. : Hilbert Transform

76 설계-12 : Complex Multiplier의 구조 설계
Complex Multiplier에 대한 Micro-Architecture 회로 설계 ALTERA FLEX10K에서 8비트 곱셈기가 덧셈기 보다 약 10배 크다.

77 설계-12 : Integrate and Dump Filter 기능의 구조 설계
Integrate and Dump Filter에 대한 Micro-Architecture 회로 설계 1-Chip 구간에 대하여 16회 Integrate 하여 Data로 추정하고, Dump하는 기능 VHDL 설계에 대한 고찰 Mod-16 Counter에 대한 설계 : System Clock에 의하여 Count 되는 회로 Accumulate 및 Dump 기능을 갖는 회로에 대한 설계 Adder 기능에 대한 설계 출력 값을 Window 설정에 따라 출력하는 기능에 대한 설계

78 설계-13 : 수신부 NCO 설계를 위한 Sine, Cosine ROM Table 자료
Sine Table Cosine Table

79 설계-13 : 수신부 NCO 설계에 대한 구조 설계 NCO에 대한 블록 구성도 VHDL 설계에 대한 고찰
송신부의 DDFS와 동일한 개념으로 설계 : 차이점은 ROM Bit임에 유의할 것 향후 Timing Recovery Block과의 Interface를 위한 기능의 설정 요구

80 설계-14 : 역 확산을 위한 Matched Filter 구조 설계
역 확산을 위한 기본 수식과 개념 송신부에서 전송하는 Information Data가 ‘0’인 경우 와 Information Data가 ‘1’인 경우에 대한 Filter 출력 값에 대한 판단 Matched Filter 설계를 위한 Micro-Architecture 회로 설계

81 설계-14 : 역 확산을 위한 Matched Filter의 VHDL 설계 (1)
Entity에 대한 VHDL 표현 library IEEE; use IEEE.std_logic_1164.ALL; use IEEE.std_logic_signed.ALL; use work.PACK_MATCH.ALL; entity MATCH_FILTER is port ( RESET, CCLK,CCLKX8 : in std_logic; MATCH_IN: in std_logic_vector(2 downto 0); MATCH_OUT: out std_logic_vector(6 downto 0)); end MATCH_FILTER; Architecture Unit에 대한 VHDL 설계를 위한 기본 방향 8개의 3-Bit Shift Register에 대한 표현 하나의 Process 구문을 이용하여 표현 가능함 PN Code 값에 따른 3-Bit Register 값의 4-Bit로의 변형 Package Unit에 Function으로 표현하고, Function Call 구문을 사용 CHIP Clock보다 8배 빠른 Clock을 이용하여 8개의 Register를 차례대로 곱함 최종 출력단의 Bit수를 고려하여, 8번 Dump 과정에서 덧셈 수행에 있어서 4-Bit Data를 7 Bit로 Sign Extend 덧셈 Sign Extend의 이유와 방법에 주의하여 표현 최종 출력에 있어서 8번 덧셈이 정확히 수행되었는지를 주의깊게 관찰

82 설계-14 : 역 확산을 위한 Matched Filter의 VHDL 설계 (2)
Entity에 대한 VHDL 표현 SIGNAL shift_reg0, shift_reg : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL shift_reg6, shift_reg : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL shift_reg4, shift_reg : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL shift_reg2, shift_reg : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL pn_reg : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL mul8_reg : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL pn_code : STD_LOGIC; SIGNAL mul_out : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL sum_in : STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL sum_out : STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL count8 : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN PROCESS ( reset, cclk ) IF reset = '0' THEN shift_reg7 <= ( OTHERS => '0' ); shift_reg6 <= ( OTHERS => '0' ); shift_reg5 <= ( OTHERS => '0' ); shift_reg4 <= ( OTHERS => '0' ); shift_reg3 <= ( OTHERS => '0' ); shift_reg2 <= ( OTHERS => '0' ); shift_reg1 <= ( OTHERS => '0' ); shift_reg0 <= ( OTHERS => '0' ); ELSIF cclk = '1' AND cclk'EVENT THEN shift_reg0 <= shift_reg1; shift_reg1 <= shift_reg2; shift_reg2 <= shift_reg3; shift_reg3 <= shift_reg4; shift_reg4 <= shift_reg5; shift_reg5 <= shift_reg6; shift_reg6 <= shift_reg7; shift_reg7 <= match_in; END IF; END PROCESS; pn_reg <= " "; PROCESS (count8) BEGIN CASE count8 IS WHEN "000" => pn_code <= pn_reg(0); WHEN "001" => pn_code <= pn_reg(1); WHEN "010" => pn_code <= pn_reg(2); WHEN "011" => pn_code <= pn_reg(3); WHEN "100" => pn_code <= pn_reg(4); WHEN "101" => pn_code <= pn_reg(5); WHEN "110" => pn_code <= pn_reg(6); WHEN OTHERS => pn_code <= pn_reg(7); END CASE;

83 설계-14 : 역 확산을 위한 Matched Filter의 VHDL 설계 (3)
PROCESS (count8) BEGIN CASE count8 IS WHEN "000" => mul8_reg <= shift_reg0; WHEN "001" => mul8_reg <= shift_reg1; WHEN "010" => mul8_reg <= shift_reg2; WHEN "011" => mul8_reg <= shift_reg3; WHEN "100" => mul8_reg <= shift_reg4; WHEN "101" => mul8_reg <= shift_reg5; WHEN "110" => mul8_reg <= shift_reg6; WHEN OTHERS => mul8_reg <= shift_reg7; END CASE; END PROCESS; mul_out <= two_mul (mul8_reg, pn_code); PROCESS (reset, cclkx8) VARIABLE tmp_sum : STD_LOGIC_VECTOR(6 DOWNTO 0); IF reset <= '0' THEN sum_out <= (OTHERS => '0'); count8 <= (OTHERS => '1'); match_out <= (OTHERS => '0'); ELSIF cclkx8 = '0' AND cclkx8'EVENT THEN count8 <= count8 + 1; IF count8 = 0 THEN tmp_sum :=(mul_out(3)&mul_out(3)&mul_out(3)&mul_out); ELSE tmp_sum := mul_out + sum_out; END IF; IF count8 = 7 THEN match_out <= tmp_sum ; sum_out <= tmp_sum; END IF; END PROCESS; END matched_a; 요구되는 Package와 Function Unit에 대한 설계를 행할 것 Function Name : Two_Mul Package Name : Pack_Match

84 설계-15 : Power Detection 블록을 위한 구조 설계
Power magnitude의 검출을 위한 수식 기본식 : 근사식 : Power Detection 블록에 대한 Micro-Architecture의 설계 Threshold Register의 값은 MCU에 의하여 Programmable 하여야 한다. 본 강좌에서는 내부 Constant로 설정한다. Threshold 값보다 큰 경우의 Detect 신호는 Active-Low로 설정한다.

85 설계-15 : Power Detection 블록을 위한 VHDL 설계(1)
Entity Unit의 설계 library IEEE; use IEEE.std_logic_1164.ALL; use IEEE.std_logic_signed.ALL; entity DETECT is port ( RESET, CCLK : in std_logic; MAT_ISUM, MAT_QSUM : in std_logic_vector(6 downto 0); MAT_IOUT, MAT_QOUT : out std_logic_vector(6 downto 0); DET : out std_logic); end DETECT; Architecture Unit의 설계를 위한 방향 설정 Magnitude를 계산하는 블록 : Process 구문을 사용 ABS Function을 이용하여 절대값을 구함 2개의 절대값에서 큰 값과 적은 값을 결정함 (최대값 + 1/2*최소값)의 식에 따라 Magnitude 값을 결정함 Detect 신호를 생성하는 블록 : Process 구문을 사용 설계자가 설정한 임계 값과 비교하여 Detect 신호를 Active-Low로 생성함 Detect 신호가 생성되는 순간의 Matched Filter 출력을 저장하는 기능 수행

86 설계-15 : Power Detection 블록을 위한 VHDL 설계(2)
architecture RTL of DETECT is signal MAG: std_logic_vector(6 downto 0); begin process(MAT_ISUM, MAT_QSUM) variable I_V, Q_V, T_MAX, T_MIN: --절대값을 생성하는 구문 I_V := abs(MAT_ISUM); Q_V := abs(MAT_QSUM); --최대값과 최소값을 생성하는 구문 if I_V > Q_V then T_MAX := I_V; T_MIN := Q_V; else T_MAX := Q_V; T_MIN := I_V; end if; MAG <= T_MAX + (‘0’&T_MIN(6 downto 1)); end process; process ( CCLK, RESET ) constant HOLD: std_logic_vector(6 downto 0) :=” "; begin if RESET = '0' then DET <= ’1'; MAT_IOUT <= (others => '0'); MAT_QOUT <= (others => '0'); elsif CCLK='0' and CCLK'event then if MAG > HOLD then DET <= ’0'; MAT_IOUT <= MAT_ISUM; MAT_QOUT <= MAT_QSUM; else end if; end process; end RTL;

87 설계-16 : Differential Demodulation 블록의 개념 설계 (1)
현재 symbol과 이전 symbol 사이의 위상차에 대한 정의 Power Detection 블록의 출력 I(k)와 Q(k)를 복소수 형태로 표현 에 대한 계산 과정 = Dot(k) + j Cross(k)

88 설계-16 : Differential Demodulation 블록의 개념 설계 (2)
Dot와 Cross로 정의된 값에 대한 식 의 각 경우에 대하여 에 따른 Dot, Cross의 값

89 설계-16 : Differential Demodulation 블록의 구조 설계
Symbol 회전을 위한 구성식과 Micro-Architecture의 설계 Dot, Cross의 생성을 위한 구성식과 Micro-Architecture의 설계

90 설계-16 : Differential Demodulation 블록의 VHDL 설계(1)
Entity Unit의 설계 library IEEE; use IEEE.std_logic_1164.ALL; use IEEE.std_logic_signed.ALL; entity DEMOD_BLK is port ( RESET, DET : in std_logic; ISUM, QSUM : in std_logic_vector(6 downto 0); DOT, CROSS : out std_logic); end DEMOD_BLK; Architecture Unit의 설계를 위한 방향 설정 를 Rotate 하기 위한 블록에 대한 표현 7-Bit의 Operand를 Sign Extend 하고 덧셈과 뺄셈을 행함 연산 결과 중 상위 7-Bit를 1-Symbol Delay를 수행하는 블록으로 전달 1-Symbol Delay를 행하는 블록에 대한 표현 Dot 와 Cross를 생성하고, 해당하는 부호를 출력하는 블록에 대한 표현 4회의 곱셈 연산자를 사용하고, 결과를 4개의 각 Variable Object에 저장 4개의 곱셈 결과를 이용하여 DOT와 CROSS의 결정 식에 따라 Sign Extend하고 연산 수행 DOT와 CROSS의 최종 연산 값에 따른 부호를 출력

91 설계-16 : Differential Demodulation 블록의 VHDL 설계(2)
architecture RTL of DEMOD_BLK is -- signal에 대한 선언을 표현하여야 함 begin process(ISUM, QSUM) -- variable에 대한 선언을 표현하여야 함 ROT_I_V := (ISUM(6) & ISUM)+(QSUM(6)& QSUM); ROT_I <= ROT_I_V(7 downto 1); -- 생략되어 있는 구문을 각자 표현할 것 end process; process(RESET, DET) begin if RESET = '0' then D_IOUT <= ( others => '0' ); D_QOUT <= ( others => '0' ); elsif DET'event and DET = ’0' then D_IOUT <= ROT_I; D_QOUT <= ROT_Q; end if; process (ISUM, QSUM, D_IOUT, D_QOUT) -- variable에 대한 선언을 표현하여야 함 begin MUL1_V := ISUM * D_IOUT; -- 생략되어 있는 구문을 각자 표현할 것 DOT_V :=(MUL1_V(13)&MUL1_V) + (MUL4_V(13)&MUL4_V); CROSS_V :=(MUL3_V(13)&MUL3_V) - (MUL2_V(13) & MUL2_V); DOT <= DOT_V(14); CROSS <= CROSS_V(14); end process; end RTL;

92 available dot,cross data
설계-17 : 수신부 클럭 생성 블록의 개념 설계 기능에 대한 정의 Power Detection Block에서 생성된 detect 신호에 의해 dot, cross신호가 발생 하므로 dot와 cross 신호가 유용한 범위에서 심볼 클럭과 비트 클럭을 생성한다. 설계 방법론 처음으로 detect 신호가 동기 되면 acq가 ‘1’이 되며, 이때 칩 클럭에 동기 되는 8진 카운터를 구동하여 cnt(2), 즉 MSB는 심볼 클럭이 되며, cnt(1)은 비트 클럭이 된다. 7 1 2 3 4 5 6 available dot,cross data cclk detect dot, cross acq counter cnt(0) cnt(1) cnt(2) sclk bclk

93 설계-18 : 병렬 신호를 직렬 신호로 출력하는 블록의 개념 설계
기능에 대한 정의 입력 1-Bit의 I-Channel 과 1-Bit의 Q Channel의 병렬 신호 Symbol Clock 단위로 입력 출력 1-Bit의 직렬 신호로 수신 신호를 표현 Bit Clock 단위로 출력 개념에 따른 Timing 설계 I-1 I-2 I-3 I-4 Q-2 Q-3 Q-4 Q-1 I-5 Q-5 BCLK SCLK I_TMP Q_TMP MUX_OUT DATA_OUT

94 설계-18 : 병렬 신호를 직렬 신호로 출력하는 블록의 구조 설계
블록 구성도 Entity Unit의 설계 library IEEE; use IEEE.std_logic_1164.All; entity P2S is port ( RESET : in std_logic; BCLK, SCLK : in std_logic; DOT, CROSS : in std_logic; RX_OUT : out std_logic); end P2S; Architecture Unit의 설계 2개의 process 구문으로 구성 Process 구문 사이의 Signal 선언이 요구됨 architecture RTL of P2S is signal I_TMP, Q_TMP : std_logic; begin process ( SCLK, RESET ) begin if RESET = '0' then I_TMP <= '0'; Q_TMP <= '0'; elsif SCLK = '0' and SCLK'event then I_TMP <= DOT; Q_TMP <= CROSS; end if; end process; process ( RESET, BCLK ) begin RX_OUT <= '0'; elsif BCLK = ’1' and BCLK'event then if SCLK='1' then RX_OUT <= I_TMP; else RX_OUT <= Q_TMP; end RTL; DOT D Q MUX D Q RX_OUT 1 CROSS D Q SCLK BCLK

95 설계-19 : Timing Recovery Block에 대한 개념 설계(1)
DBPSK 변조 방식인 경우 주파수 Error에 대한 정의식 유도 과정 위의 수식에 를 각각 대입하여 정리하면 다음과 같다. DQPSK 변조 방식인 경우 주파수 Error에 대한 정의식 유도 과정 위의 수식에 를 각각 대입하여 정리하면 다음과 같다.

96 설계-19 : Timing Recovery Block에 대한 개념 설계 (2)
주파수 Error에 대한 정의식 전달 함수에 대한 정의식 K1, K2의 값 : 20 ~ 221 Block Diagram

97 설계-20 : 수신부에 대한 Structural Modeling 설계
수신부에 대한 VHDL 표현 library IEEE; use IEEE.std_logic_1164.ALL; entity RX_BLK is port ( RESET, SYS_CLK : in std_logic; RX_IN : in std_logic_vector(5 downto 0); RX_BIT_CLK, DATA_OUT : out std_logic); end RX_BLK; architecture RTL of RX_BLK is -- 사용하는 Component에 대한 선언을 한다. component RX_CLK port ( RESET, SYS_CLK, DET : in std_logic; BCLK, SCLK, CCLK,CCLKX8 : out std_logic); end component; component MATCH port ( RESET,CCLK,CCLKX8 : in std_logic; MATCH_IN : in std_logic_vector(2 downto 0); MATCH_OUT : out std_logic_vector(6 downto 0)); -- Component를 연결하는 Wire에 대한 선언을 한다. signal BCLK_S, SCLK_S, CCLK_S, CCLKX8_S, DET_S, DOT_S, CROSS_S, DOT, CROSS : std_logic; signal I_CH_S, Q_CH_S, DET_ISUM, DET_QSUM : std_logic_vector(6 downto 0); signal SIN_S, COS_S : std_logic_vector(5 downto 0); signal RX_IN_I, RX_IN_Q : std_logic_vector(2 downto 0);j -- 사용하는 Component에 대한 Configuration -- Specification을 모두 표현하여야 한다. for u0 : RX_CLK use entity work.RX_CLK(RTL); -- 다른 Component에 대한 Configuration 정보도 표현한다. begin RX_BIT_CLK <= BCK_S; u0 : RX_CLK port map (RESET, SYS_CLK, BCLK_S, SCLK_S, CCLK_S, CCLKX8_S ); u1 : MATCH port map (RESET, CCLK_S, CCLKX8_S RX_IN_I, I_CH_S ); u2 : MATCH port map (RESET, CCLK_S, CCLKX8_S RX_IN_Q,, Q_CH_S ); u3 : DETECT port map ( RESET, CCLK_S, I_CH_S, Q_CH_S, I_CH_DET, Q_CH_DET, DET_S ); u4 : DEMOD_BLK port map ( RESET, DET_S, DET_ISUM, DET_QSUM, DOT_S, CROSS_S ); u5 : P2S port map ( RESET, BCLK_S, SCLK_S, DOT_S, CROSS_S, DATA_OUT ); u6 : DN_CONV port map ( RESET, SYS_CLK, RX_IN, COS_S, SIN_S, RX_IN_I, RX_IN_Q); u7 : NCO port map (RESET, SYS_CLK, SIN_S, COS_S); end RTL;

98 설계-21 : DS/SS-MODEM 설계를 위한 Test Bench 설계
Test Bench VHDL 표현 library IEEE; use IEEE.std_logic_1164.ALL; entity TB_MODEM is end TB_MODEM; -- architecture RTL of TB_MODEM is component TX_BLK port ( RESET, SYS_CLK, INFO : in std_logic; BCLK : out std_logic; TX_OUT : out std_logic_vector(5 downto 0)); end component; component RANDOM port ( RESET, BCLK : in std_logic; RANDOM_OUT : out std_logic); component RX_BLK port ( RESET, SYS_CLK : in std_logic; RX_IN : in std_logic_vector(5 downto 0); RX_BIT_CLK : in std_logic; DATA_OUT : out std_logic); end component; signal RST_TX, RST_RX: std_logic := '0'; signal TX_CLK, RX_CLK: std_logic := '0'; signal INFO, OUT_DATA, BIT_CK_S, RX_BIT_CLK : std_logic; signal TX_RX : std_logic_vector(5 downto 0); for u0 : TX_BLK use entity work.TX_BLK(RTL); for u1 : RANDOM use entity work.RANDOM(RTL); for u2 : RX_BLK use entity work.RX_BLK(RTL); begin RST_TX <= '1' after 20 ns; RST_RX <= '1' after 120 ns; TX_CLK <= not TX_CLK after 3 ns; RX_CLK <= not RX_CLK after 3 ns; u0 : TX_BLK port map ( RST_TX, TX_CLK, INFO, BCLK_S, TX_RX ); u1 : RANDOM port map ( RST_TX, BCLK_S, INFO ); u2 : RX_BLK port map ( RST_RX, RX_CLK, TX_RX, RX_BIT_CLK, OUT_DATA ); end RTL; -- configuration TB_MODEM_C of TB_MODEM is for RTL end for; end TB_MODEM_C; Test-bench Model Info. Data TX-RXchannel TX Clock Stimulus TX Reset MODEM 6 Vector Block RX Clock RX Reset Recovered Data

99 설계한 MODEM의 Test Bench에 대한 Simulation
VHDL Simulation 파형과 분석을 행할 때의 관찰 사항 Source Information을 표현하는 INFO 와 수신하여 복원한 Information을 표현하는 OUT_DATA 에 대한 비교를 행한다. 송신부에서 대역 확산된 값이 PN Code에 대응하는 값이며, I-Channel과 Q-Channel의 값이 동일 위상 또는 다른 위상으로 동일하게 변화하는 가를 확인한다. Power Detect 검출 신호가 Symbol Rate 단위로 검출되는 가를 확인한다. Matched Filter의 출력에 대한 검사를 행한다. Differential Demodulation 블록에 대한 검사를 행한다. 병렬 신호가 직렬 신호로 출력되는 가를 검사한다.

100 회로 합성을 위한 VHDL Code Compile
회로 합성을 위한 Design_Analyzer환경 Loading Unix Prompt 상에서 (design_analyze &) 하위 계층부터 최상위 계층 순으로 (File -> read) 최상위 Block을 Click하고 (Edit -> Uniquify -> hierarchy) read에 의한 결과 Constraint를 위해 최상위 Block Double click

101 회로 합성을 위한 Constraint 설정(1)
Clock Speed 설정 Attributes -> Clocks -> Specify Clock Duration : 20 ns Clock Constraint를 위한 Clock 신호 선택

102 회로 합성을 위한 Constraint 설정(2)
Fan-out 설정 Attributes -> Design Constraints -> Design Constraint Fan-out : 4

103 회로 합성을 위한 Constraint 설정(3)
회로 합성을 위한 노력의 정도를 지정 Tools -> Optimization 회로합성 노력 정도 : 중간

104 FPGA를 위한 EDIF Netlist 생성
File -> Save as File Format에서 EDIF를 선택 출력 File 이름 지정 출력 Netlist Format 지정

105 Max+PlusII Tools 구동 Max+PlusII Tools 구동
max2win & FPGA P&R을 위한 Project 선택 (Synopsys에서 생성한 EDIF Netlist) File -> Project -> Name Project 파일 선택

106 Compile Window 활성화 Compile Window 활성화 Device 선택
MAX+plusII -> Compiler Device 선택 Assign -> Device Compiler Window 활성화 Family 선택 Device 선택

107 Compile Option 지정 및 Compile
VHDL Timing Simulation을 위해 VHDL write Option 지정 Interfaces -> VHDL Netlist writer P&R 시작 : Start button click 활성화된 VHDL Netlist Writer Start button

108 Timing Simulation 결과 MAXPLUSII의 출력 VHDL Code를 이용한 Timing Simulation 결과
SYS_CLK 주파수 : 33.3 MHz

109 PAD 정보를 부여한 VHDL 표현 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
ENTITY top_tx_blk IS PORT ( p_reset : IN STD_LOGIC; p_sys_clk : IN STD_LOGIC; p_info : IN STD_LOGIC; p_bclk : OUT STD_LOGIC; p_tx_out : OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END top_tx_blk; ARCHITECTURE rtl OF top_tx_blk IS COMPONENT tx_blk PORT ( reset : IN STD_LOGIC; sys_clk : IN STD_LOGIC; info : IN STD_LOGIC; bclk : OUT STD_LOGIC; tx_out : OUT END COMPONENT; COMPONENT pzic PORT (pad : IN STD_LOGIC; y : OUT STD_LOGIC); COMPONENT NID4 PORT (a : IN STD_LOGIC; y : OUT STD_LOGIC); END COMPONENT; COMPONENT pob4 pad : OUT STD_LOGIC); SIGNAL reset, sys_clk, sys_clk_buf, info, bclk : STD_LOGIC; SIGNAL tx_out : STD_LOGIC_VECTOR(5 DOWNTO 0); BEGIN CORE : tx_blk PORT MAP( reset, sys_clk_buf, info, bclk, tx_out); BUF0 : NID4 PORT MAP ( sys_clk, sys_clk_buf); U0 : pzic PORT MAP ( p_reset, reset); U1 : pzic PORT MAP ( p_sys_clk, sys_clk); U2 : pzic PORT MAP ( p_info, info); TX_DATA : FOR i IN 0 TO 5 GENERATE PAD0 : pob4 PORT MAP (tx_out(i), p_tx_out(i)); END GENERATE; U3 : pob4 PORT MAP (bclk, p_bclk); END rtl;

110 PAD 정보를 포함한 VHDL에 대하여 논리 합성 도면

111 결론 및 향후 연구 과제


Download ppt "VHDL을 이용한 통신 칩 설계 -DS/SS MODEM 설계를 중심으로-"

Similar presentations


Ads by Google