기본 component

VHDL 2014. 10. 30. 22:22

    -- 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
Posted by bogus919
,