-- 1. 8254
-- 기본코드 그대로 쓰면됨
-- PC에서 address 2bit 가져와서 cs로, wen 가져와서 wr신호로,
-- system clock 입력받고, 분주해서 out0으로 내보냄
component TOP_8254
Port ( m_clk0 : in STD_LOGIC;
m_clk1 : in STD_LOGIC;
m_clk2 : in STD_LOGIC;
m_clk_ctr : in STD_LOGIC;
m_reset : in STD_LOGIC;
m_data : in STD_LOGIC_VECTOR (7 downto 0);
m_gate0 : in STD_LOGIC;
m_gate1 : in STD_LOGIC;
m_gate2 : in STD_LOGIC;
m_addr : in STD_LOGIC_VECTOR (1 downto 0);
m_cs_b : in STD_LOGIC;
m_wr_b : in STD_LOGIC;
m_out0 : out STD_LOGIC;
m_out1 : out STD_LOGIC;
m_out2 : out STD_LOGIC);
end component;
-- 0. data address counter
-- 강의 다시 들어야함
-- Controller signal generator 안에 RAM0, RAM1 을 위한 counter가 각각 존재
-- component로 추가해서 쓰는듯
component data_addr_CNT
Port( d_din : in STD_LOGIC_VECTOR(10 downto 0);
d_en : in STD_LOGIC;
d_clk : in STD_LOGIC;
d_state_da4 : in std_logic;
d_reset : in STD_LOGIC;
d_dend : out STD_LOGIC);
end component;
-- 2. Address Decoder
-- input address를 가지고, 내부에서 지지고 볶아서
-- 각 모드를 선택할 수 있도록 1bit signal을 내보냄
-- 빠진거 추가해야 할 듯
component Address_Decoder
port(addr : in std_logic_vector(8 downto 0); -- input address
pcs_addr : out std_logic; -- 8254 setting
pc_RAM0_addr : out std_logic; -- PC mode, RAM0
pc_RAM1_addr : out std_logic; -- PC mode, RAM1
da_Data_Transfer_addr : out std_logic; -- DA mode, Data Transfer mode
da_RAM1_start_addr : out std_logic; -- DA mode, RAM1 start address
ad_RAM0_addr : out std_logic); -- AD mode, RAM0 start address
end component;
-- 3. Data Bus Buffer
-- en 신호로 버스 방향 설정
-- PC와 데이터 입출력 하는 부분
-- latch에서 받아서 PC로, PC에서 받아서 latch로
component Data_Bus_Buffer
Port ( buffer_en : in STD_LOGIC;
data_in : in STD_LOGIC_VECTOR (7 downto 0);
data_out : out STD_LOGIC_VECTOR (7 downto 0));
end component;
-- 4. Latch
-- input, output을 Latch로 clock 동기화시킨 후 보내야 안정적
-- PC와 입출력 할 때, ADC에서 입력 받을 때, DAC로 출력할때
component latch
Port ( clk : in STD_LOGIC;
lat_reset : in STD_LOGIC;
lat_en : in STD_LOGIC;
lat_in : in STD_LOGIC_VECTOR (7 downto 0);
lat_out : out STD_LOGIC_VECTOR (7 downto 0));
end component;
-- 5. MUX
-- MUX0 : RAM0에 쓸건데, PC로부터 받는건지, ADC로부터 받는건지
-- MUX1 : RAM1에 쓸건데, 필터의 출력, RAM0의 출력, MUX0의 출력 중 선택
-- MUX2 : DAC로 내보낼건데, RAM0에서 받거나 RAM1에서 받음
component MUX
Port ( MUX_en : in STD_LOGIC;
MUX_din1 : in STD_LOGIC_VECTOR (7 downto 0);
MUX_din2 : in STD_LOGIC_VECTOR (7 downto 0);
MUX_out : out STD_LOGIC_VECTOR (7 downto 0));
end component;
-- 6. RAM0, RAM1
-- write enable 들어오면 data in으로 들어온 data를 입력 address에다가 씀
-- read enable 들어오면 입력 address에 있는 데이터를 data out으로 내보냄
component dual_port_simple_ram
port (clka : IN STD_LOGIC;
ena : IN STD_LOGIC;
wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
addra : IN STD_LOGIC_VECTOR(10 DOWNTO 0);
dina : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
clkb : IN STD_LOGIC;
enb : IN STD_LOGIC;
addrb : IN STD_LOGIC_VECTOR(10 DOWNTO 0);
doutb : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
end component;
-- 7. Control Signal Generator
-- 시발 노답......
component Controller
port( m_reset_b : in std_logic;
m_clk : in std_logic;
led_da : out std_logic;
led_ad : out std_logic;
state_pc1_rd : out std_logic;
m_ren : in std_logic;
m_wen : in std_logic;
pcs_addr : in std_logic;
pc_ram0_addr : in std_logic;
state_da4 : out std_logic;
state_dt : out std_logic;
st_da : out std_logic;
pc_ram1_addr : in std_logic;
ad_ram0_addr : in std_logic;
da_data_transfer_addr : in std_logic;
da_ram1_start_addr : in std_logic;
m_ready : out std_logic;
latch_data0_en : out std_logic;
latch_data1_en : out std_logic;
latch_data2_en : out std_logic;
latch_data3_en : out std_logic;
ram_cs0 : out std_logic_vector(0 downto 0);
ram_cs1 : out std_logic_vector(0 downto 0);
MUX0 : out std_logic;
ram0_wen : out std_logic;
ram0_ren : out std_logic;
ram1_wen : out std_logic;
ram1_ren : out std_logic;
buffer_en : out std_logic;
m_address_ram0 : out std_logic_vector (10 downto 0);
m_address_ram1 : out std_logic_vector (10 downto 0);
m_address_ram2 : out std_logic_vector (10 downto 0);
m_address_ram3 : out std_logic_vector (10 downto 0);
m_d_en : out std_logic;
dend : in std_logic;
st_idle : out std_logic);
end component;
'VHDL' 카테고리의 다른 글
multi-driver error (0) | 2014.12.03 |
---|---|
디논실 project woring notes (0) | 2014.10.31 |
GODI_PC based function generator_working notes (0) | 2014.10.27 |
8254 datasheet (0) | 2014.10.27 |
Blocking and Nonblocking statements (0) | 2014.10.09 |