Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 25, 2024 02:00

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - UART на VHDL
Автор Сообщение
  Заголовок сообщения:  UART на VHDL  Ответить с цитатой
Вот, для процессоров. Интерфейс надо адаптировать к конкретному решению, конечно, но тут видно, в какой момент и откуда забирать данные и куда их подавать.

Код:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity uart is
   generic ( FCORE : integer := 100000000;
             UART_BAUDRATE : integer := 115200
           );
    Port ( clk : in  STD_LOGIC;
           rx : in  STD_LOGIC;
           tx : out  STD_LOGIC;
           txe : in  STD_LOGIC; -- start transmit
           received : out  STD_LOGIC_VECTOR (7 downto 0);
           transmit : in  STD_LOGIC_VECTOR (7 downto 0));
end uart;

architecture Behavioral of uart is

signal rxstate, txstate : integer range 0 to (FCORE * 12) / UART_BAUDRATE := 0;

begin

process(clk)
begin
  if clk'event and clk = '1' then
    case rxstate is
      when 0 to FCORE / 2 / UART_BAUDRATE => if rx = '0' then rxstate <= rxstate + 1; end if;
      when 3 * FCORE / 2 / UART_BAUDRATE => received(0) <= rx; rxstate <= rxstate + 1;
      when 5 * FCORE / 2 / UART_BAUDRATE => received(1) <= rx; rxstate <= rxstate + 1;
      when 7 * FCORE / 2 / UART_BAUDRATE => received(2) <= rx; rxstate <= rxstate + 1;
      when 9 * FCORE / 2 / UART_BAUDRATE => received(3) <= rx; rxstate <= rxstate + 1;
      when 11 * FCORE / 2 / UART_BAUDRATE => received(4) <= rx; rxstate <= rxstate + 1;
      when 13 * FCORE / 2 / UART_BAUDRATE => received(5) <= rx; rxstate <= rxstate + 1;
      when 15 * FCORE / 2 / UART_BAUDRATE => received(6) <= rx; rxstate <= rxstate + 1;
      when 17 * FCORE / 2 / UART_BAUDRATE => received(7) <= rx; rxstate <= rxstate + 1;
      when 19 * FCORE / 2 / UART_BAUDRATE => rxstate <= 0; -- rxcounter <= rxcounter + 1;
      when others => rxstate <= rxstate + 1;
    end case;
  end if;
end process;

process(clk)
begin
  if clk'event and clk = '1' then
    case txstate is
      when 0 => tx <= '1';
                if txe = '1' then txstate <= 1; end if;
      when 1 => tx <= '0'; txstate <= txstate + 1;
      when FCORE / UART_BAUDRATE => tx <= transmit(0); txstate <= txstate + 1;
      when 2 * FCORE / UART_BAUDRATE => tx <= transmit(1); txstate <= txstate + 1;
      when 3 * FCORE / UART_BAUDRATE => tx <= transmit(2); txstate <= txstate + 1;
      when 4 * FCORE / UART_BAUDRATE => tx <= transmit(3); txstate <= txstate + 1;
      when 5 * FCORE / UART_BAUDRATE => tx <= transmit(4); txstate <= txstate + 1;
      when 6 * FCORE / UART_BAUDRATE => tx <= transmit(5); txstate <= txstate + 1;
      when 7 * FCORE / UART_BAUDRATE => tx <= transmit(6); txstate <= txstate + 1;
      when 8 * FCORE / UART_BAUDRATE => tx <= transmit(7); txstate <= txstate + 1;
      when 9 * FCORE / UART_BAUDRATE => tx <= '1'; txstate <= txstate + 1;
      when 11 * FCORE / UART_BAUDRATE => txstate <= 0;
      when others => txstate <= txstate + 1;
    end case;
  end if;
end process;


end Behavioral;
Сообщение Добавлено: Ср янв 25, 2012 00:40

Часовой пояс: UTC + 3 часа [ Летнее время ]


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB