VHDL 프로그래밍 12. 메모리인터페이스회로설계 한동일 학습목표 ROM 의구조를이해하고 VHDL 로구현할수있다. 연산식의구현을위해서 ROM 을활용할수있다. RAM 의구조를이해하고 VHDL 로구현할수있다. FIFO, STACK 등의용도로 RAM 을활용할수있다. ASIC, FPGA 업체에서제공하는메가셀을이용하여원하는스펙의메모리를생성할수있다. SDRAM 의구조를이해한다. SDRAM 을이용하여로직을설계할수있다. SDRAM 의메모리맵을작성할수있다. SDRAM 제어기를설계할수있다. 2/38
ROM 의설계 단순 ROM(read only memory) 의구현 내용이변화되지않는규칙들을저장해놓고읽어내는용도로만사용 입력 : 어드레스 출력 : 해당어드레스에저장되어있는데이터 ROM 0 data 0 address 1 2 data 1 data 2 data 3/38 ROM 의설계 단순 ROM(read only memory) 의 VHDL 표현 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity simple_rom is port( end; addr : in std_logic_vector (2 downto 0); data : out std_logic_vector (7 downto 0)); architecture rom of simple_rom is subtype rom_word is std_logic_vector(7 downto 0); type rom_table is array (0 to 7) of rom_word; 4/38
ROM 의설계 단순 ROM 의 VHDL 표현 - 계속 constant simple_rom : rom_table := ( "00000001", "00000010", "00000100", "00001000", "00010000", "00100000", "01000000", "10000000"); begin read:process (addr) variable ab read_add addr : integer range ge00 to 7; begin read_addr := conv_integer(addr); data <= simple_rom(read_addr); end process read; end rom; 5/38 ROM 의설계 시뮬레이션파형예 6/38
ROM 의설계 Sine ROM 의설계조건 0.2 도이상의각도분해능 (degree 기준 ) 0.002 이상의사인크기분해능 어드레스, 데이터버스의크기 구현에필요한어드레스크기 360/0.2 = 1800 주기특성을고려한최적화시, 90/0.2 = 450 구현에필요한데이터의폭 2/0.002002 = 1000 주기특성을고려한최적화시, 1/0.002 = 500 어드레스와데이터가모두 9 비트로결정 7/38 ROM 의설계 Sin, Cos ROM 의구현 SIN_ROM COS_ROM address 0 data 0 0 data 0 1 data 1 data address 1 data 1 9 2 data 2 9 9 2 data 2 9 data 8/38
ROM 의설계 시뮬레이션파형예 9/38 ROM 의설계 아날로그파형관측을위한 ModelSim 설정예 wave 윈도우생성 관측하고자하는신호위에서오른쪽버튼클릭 생성된 sub-window 에서 Properties... 버튼클릭 10/38
RAM 의설계 단순 RAM(Random Access Memory) 의구현 입력 : 어드레스, write_enable 신호, 입력데이터, 클럭 출력 : 출력데이터 w_en 0 RAM data 0 data_in 1 2 data 1 data 2 data_out address memclk 11/38 RAM 의설계 단순 RAM 의 VHDL 표현 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; all; use ieee.std_logic_unsigned.all; entity simple_ram is generic( ( ADDR_BITS : integer := 4; DATA_BITS : integer := 8); port( w_en : in std_logic; addr : in std_logic_vector(addr_bits-1 downto 0); data_in : in std_logic_vector(data_bits-1 downto 0); data_ out : out std_ logic _ vector(data _ BITS-1 downto 0); memclk : in std_logic); end; architecture ram of simple_ram is subtype ram_word is std_logic_vector(data_bits-1 downto 0); type ram_memory is array (0 to 2**ADDR_BITS - 1) of ram_word; signal simple_ram : ram_memory memory ; begin 12/38
RAM 의설계 단순 RAM 의 VHDL 표현 - 계속 mem_write: process (memclk) variable write_addr : integer range 0 to 2**ADDR ADDR_BITS - 1; begin if memclk = '1' and memclk'event then if w_en = '1' then write_addr := conv_integer(addr); simple_ram(write_addr) <= data_in; end if; end if; end process; ; mem_read: process (addr) variable read_addr : integer range 0 to 2**ADDR_BITS - 1; begin read_addr := conv_integer(addr); data_out <= simple_ram(read_addr); end process; end ram; 13/38 RAM 의설계 시뮬레이션파형예 14/38
Xilinx Core Generator 활용 Two-Port RAM 생성예 15/38 Xilinx Core Generator 활용 Two-Port RAM 시뮬레이션파형예 16/38
Xilinx Core Generator 활용 Two-Port RAM 시뮬레이션파형예 17/38 SDRAM 의활용 메모리의종류 SRAM(Static Random Access Memory) 전원이공급되는경우한번기록한데이터를계속유지 메모리접근이용이하나고집적화에불리하고전력소모또한큰편 DRAM(Dynamic Random Access Memory) 데이터의유지를위해서는주기적인리프레시 (refresh) 동작필요 행번지와열번지를이용한단계적인접근이필요해서불편 고집적화에유리하고전력소모도매우적음 SDRAM(Synchronous DRAM) DRAM 의고집적도에 SRAM 의고속처리의장점을모두가짐 내부 DRAM 에 synchronous interface 가추가된메모리 DDR SDRAM(Double Data Rate SDRAM) 클럭의상승및하강에지모두를이용한데이터처리가능 18/38
SDRAM 의활용 SDRAM 의내부구조 19/38 SDRAM 의활용 SDRAM 인터페이스신호들 CKE : clock enable CLK : 메모리인터페이스클럭 CS# : chip select(negative logic) WE# : write enable(negative logic) CAS# : column address strobe(negative logic) RAS# : row address strobe(negative logic) A[12:0] : row address 와 column address 제공 BA[1:0] : 4 개의 bank 선택어드레스제공 DQM : data mask signal DQ[7:0] : 양방향데이터버스 20/38
SDRAM 의동작제어 SDRAM 의모드레지스터 21/38 SDRAM 의동작제어 SDRAM 의 CAS 지연 22/38
SDRAM 의동작제어 SDRAM 의초기화과정 23/38 SDRAM 의동작제어 SDRAM 의초기화과정 전원을공급한다. SDRAM의모든입출력신호가정상화될때까지 CKE 신호를 0 으로유지한다. 안정적인 clock 신호를제공한다. 클럭이안정된이후 100us 동안아무런동작을가하지않거나 Command Inhibit 동작이나 No Operation 동작만수행되어야한다. 이기간동안 CKE를 1 로인가한다. 100us 지연조건이만족된이후적어도하나의 Command Inhibit 동작이나 No Operation 동작이수행되어야한다. 이후 precharge all 명령이수행되어야한다. t RP 시간동안기다린이후 auto refresh 명령이수행되어야한다. t RP는 precharge에소요되는시간이며매뉴얼에서주어진최소값 (18 ns) 이상을기다려야한다. 24/38
SDRAM 의동작제어 SDRAM 의초기화과정 t RFC 시간동안기다리면서 Command Inhibit 동작이나 No Operation 동작만수행되어야한다. t RFC 는 auto refresh 에소요되는시간이며매뉴얼에서주어진최소값 (60 ns) 이상을기다려야한다. 이후 auto refresh 명령이수행되어야한다. t RFC 시간동안기다리면서 Command Inhibit 동작이나 No Operation 동작만수행되어야한다. 이후모드레지스터의설정작업을진행한다. t MRD 시간동안기다리면서 No Operation 동작만수행되어야한다. 이후 SDRAM을사용할수있는준비가완료되었으며필요한메모리제어동작을수행하면된다. 25/38 SDRAM 의동작제어 SDRAM 의제어명령어예 26/38
SDRAM 의동작제어 SDRAM 메모리맵의설정 SDRAM 의장점 100MHz 이상의고속동작 동시에여러개의 bank 사용가능 하나의행에대해서는임의의컬럼에접근가능 SDRAM의단점 하나의뱅크내에서동시에여러행에대한접근이어려움 한번의접근이후다음접근을위해프리차지명령을수행해야함 주기적인리프레시가필요 SDRAM 의효과적인사용방법 메모리맵구성시장점을살리고단점을극복할수있는구조필요 burst mode 와 burst length 를활용한효과적인구성이필요 27/38 SDRAM 의동작제어 SDRAM 사용예 SDRAM bank 0 480x800 480x800 28/38
SDRAM 의동작제어 SDRAM 메모리맵의예 29/38 SDRAM 의동작제어 SDRAM 사용예 SDRAM bank 0 480x800 800x480 30/38
SDRAM 의동작제어 SDRAM 메모리맵의예 31/38 SDRAM 의동작제어 SDRAM ACTIVE 명령타이밍도 먼저접근어드레스의해당뱅크, 행주소를활성화 32/38
SDRAM 의동작제어 SDRAM PRECHARGE 명령타이밍도 해당뱅크, 행주소를접근한후에는반드시프리차지 33/38 SDRAM 의동작제어 SDRAM WRITE 명령타이밍도 34/38
SDRAM 의동작제어 SDRAM READ 명령타이밍도 35/38 SDRAM 의동작제어 SDRAM WRITE 타이밍도 36/38
SDRAM 의동작제어 SDRAM READ 타이밍도 37/38 SDRAM 의동작제어 SDRAM PRECHARGE 타이밍도 38/38