Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа1 / Курсовая работа.doc
Скачиваний:
28
Добавлен:
01.05.2014
Размер:
687.1 Кб
Скачать

4. Описание схемы сопряжения с интерфейсом на языке vhdl Компонент – селектор адреса

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity Selector is

port (

BaseAddr: in std_logic_vector (7 downto 0);

SA : in std_logic_vector (15 downto 0);

AEN : in std_logic;

CS : out std_logic_vector (1 downto 0)

);

end Selector ;

architecture Behave_selector of Selector is

signal Selector_active : std_logic;

begin

Selector_active <= '1' when (SA(15 downto 8) = BaseAddr(7 downto 0) and

AEN = '1' and

SA(7 downto 1)="0000000")

else '0';

Process (SA, Selector_active)

variable decode : integer range 1 downto 0;

begin

CS <= "00";

if selector_active = '1' then

decode := conv_integer(SA(0));

for i in 1 downto 0 loop

if i = decode then

CS(i) <= '1';

else

CS(i) <= '0';

end if;

end loop;

end if;

end process;

end Behave_selector;

Компонент - таймер

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity Timer is

port(

Freq_Mode : in integer range 0 to 65535;

AEN : in std_logic;

Reload : in std_logic;

Sysclk : in std_logic;

Timer_Clk : out std_logic

);

end Timer;

architecture Timer_Struct of Timer is

begin

process(Reload,Sysclk,Freq_mode)

variable i : integer range 0 to 65535;

variable clk : std_logic;

begin

if (Reload='1') then

i := Freq_Mode;

clk := '0';

elsif (Sysclk = '1' and Sysclk'event) then

if (i = 1) then

clk := not(clk);

Timer_Clk <= clk and AEN;

i := Freq_Mode;

else

Timer_Clk <= '0';

i := i-1;

end if;

end if;

end process;

end Timer_Struct;

Основное устройство

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity cpld is

port(

BaseAddr : in std_logic_vector (7 downto 0);

SA : in std_logic_vector (15 downto 0);

AEN : in std_logic;

Data_In : in std_logic_vector (15 downto 0);

Data_Out : out std_logic_vector (15 downto 0);

IOR : in std_logic;

IOW : in std_logic;

Rst : in std_logic;

Sysclk : in std_logic;

ADC_Start : out std_logic;

Out_Start : in std_logic;

Interrupt : out std_logic;

Fifo_Full1 : in std_logic;

Fifo_Full2 : in std_logic;

Fifo_Reset : out std_logic;

Fifo_Empty1 : in std_logic;

Fifo_Empty2 : in std_logic;

Fifo_In1 : in std_logic_vector (7 downto 0);

Fifo_In2 : in std_logic_vector (7 downto 0);

Fifo_Read : out std_logic;

Fifo_Write : out std_logic

);

end cpld;

architecture cpld_struct of cpld is

signal cs_signal : std_logic_vector (1 downto 0);

-------------------------------------------------------Ragister I/O Signals Declaration

signal csr_timer_mode : std_logic_vector (7 downto 0);

signal csr_out_start_en : std_logic;

signal csr_over_int_en : std_logic;

signal csr_over_flag : std_logic;

signal csr_data_ready : std_logic;

signal csr_ready_int_en : std_logic;

-------------------------------------------------------End

-------------------------------------------------------Register Control Signals Declaration

signal DR_RD : std_logic;

signal CSR_WR : std_logic;

signal CSR_RD : std_logic;

-------------------------------------------------------End

-------------------------------------------------------Component Declaration

component Selector

port(

BaseAddr : in std_logic_vector (7 downto 0);

SA : in std_logic_vector (15 downto 0);

AEN : in std_logic ;

CS : out std_logic_vector (1 downto 0)

);

end component;

component Timer

port(

Freq_Mode : in integer range 0 to 65535;

AEN : in std_logic;

Reload : in std_logic;

Sysclk : in std_logic;

Timer_Clk : out std_logic

);

end component;

-------------------------------------------------------End

begin

-------------------------------------------------------Ports Mapping

In_Selector : Selector

port map(

BaseAddr => BaseAddr,

SA => SA,

AEN => AEN,

CS => cs_signal

);

In_Timer : Timer

port map(

Freq_Mode => conv_integer(csr_timer_mode),

AEN => AEN,

Reload => Rst,

Sysclk => Sysclk,

Timer_Clk => ADC_Start

);

-------------------------------------------------------End

-------------------------------------------------------Register Control Signal Description

DR_RD <= '1' when ((cs_signal(1) = '1') and (IOR = '0')) else '0';

CSR_WR <= '1' when ((cs_signal(0) = '1') and (IOW = '0')) else '0';

CSR_RD <= '1' when ((cs_signal(0) = '1') and (IOR = '0')) else '0';

-------------------------------------------------------End

-------------------------------------------------------Register I/O Signals And CPLD Pins Declaration

csr_data_ready <= Fifo_Empty1 and Fifo_Empty2; -- Data Ready Flag

csr_over_flag <= not(Fifo_Full1) and not(Fifo_Full2); -- Overflow Flag

Fifo_Write <= (CSR_WR and Data_In(0)) or

(csr_out_start_en and Out_Start); -- Fifo Write Pin

Interrupt <= (csr_data_ready and csr_ready_int_en) or

(csr_over_flag and csr_over_int_en); -- Interrupt Pin

Fifo_Reset <= CSR_WR and Data_In(3); -- Fifo Reset Pin

Fifo_Read <= DR_RD; -- Fifo Read Pin

-------------------------------------------------------End

-------------------------------------------------------CSR Write

process(Rst,CSR_WR)

begin

if (Rst = '1') then

csr_out_start_en <= '0';

csr_over_int_en <= '0';

csr_timer_mode <= "00000001";

elsif (CSR_WR = '1' and CSR_WR'event) then

csr_out_start_en <= Data_In(1);

csr_over_int_en <= Data_In(2);

csr_ready_int_en <= Data_In(4);

csr_timer_mode <= Data_In(15 downto 8);

else

Data_Out <= "ZZZZZZZZZZZZZZZZ";

end if;

end process;

-------------------------------------------------------End

-------------------------------------------------------CSR Read

process(DR_RD,CSR_RD)

begin

if (DR_RD = '1') then

Data_Out <= "ZZZZZZZZZZZZZZZZ";

elsif (CSR_RD = '1' and CSR_RD'event) then

Data_Out(0) <= csr_data_ready;

Data_Out(1) <= csr_out_start_en;

Data_Out(2) <= csr_over_int_en;

Data_Out(3) <= csr_over_flag;

Data_Out(4) <= csr_ready_int_en;

Data_Out(7 downto 5) <= "000";

Data_Out(15 downto 8) <= csr_timer_mode;

else

Data_Out <= "ZZZZZZZZZZZZZZZZ";

end if;

end process;

-------------------------------------------------------End

-------------------------------------------------------DR Read

process(DR_RD)

begin

if (CSR_RD = '1') then

Data_Out <= "ZZZZZZZZZZZZZZZZ";

elsif (DR_RD = '1') then

Data_Out(15 downto 8) <= Fifo_In1(7 downto 0);

Data_Out(7 downto 0) <= Fifo_In2(7 downto 0);

else

Data_Out <= "ZZZZZZZZZZZZZZZZ";

end if;

end process;

-------------------------------------------------------End

end cpld_struct;

С помощью временной диаграммы проверим правильность функционирования схемы, описанной на языке VHDL.

Заключение:

В результате выполнения данного курсового проекта мной было разработано устройство сбора аналоговой информации, параметры которого удовлетворяют техническому заданию.

В ходе работ были получены новые знания, умения и навыки в области разработки аналоговой и цифровой техники, изучены принципы работы интерфейса USBиISA, проведён сравнительный анализ номенклатуры микросхем различных производителей, приобретён опыт разработки и отладки проектов, реализованных на микросхемах программируемой логики с использованием языкаVHDLи систем автоматизированного проектирования.

Список литературы:

  1. Грушвицкий Р.И., Мурсаев А.Х., Угрюмов Е.П. “Проектирование систем на микросхемах программируемой логики” – СПб.: БХВ-Петербург, 2002

  2. Угрюмов Е.П.”Цифровая схемотехника” – СПб.: БХВ-Петербург, 2002

Источники сети Internet:

  1. Сайт фирмы “Analog Devices” – www.analog.com

  2. Сайт фирмы “Cypress Semiconductor” – www.cypress.com

5

Соседние файлы в папке Курсовая работа1