Вторник, 08.07.2025, 20:01


Сборник радио схем



Простой экзаменатор    |    Измерительный мост    |    Устройство индикации дней недели    |    Реле времени для фотопечати    |    Питание ламп дневного света    |    Электрическое световое табло    |    Устройство сигнализации    |    Объемная цветомузыкальная установка    |    Карманный радиоприемник    |    Модернизация канала звукового сопровождения.





Приветствую Вас Гость | RSS
Главная | Регистрация | Вход


Магазин электротехники

Меню сайта




Последнее на форуме



Статистика


PR-CY.ru
Счетчик PR-CY.Rank


Онлайн всего: 2
Гостей: 2
Пользователей: 0


Главная » » На основе FPGA / CPLD Проектирование и внедрение UART (VHDL)
00:57

На основе FPGA / CPLD Проектирование и внедрение UART (VHDL)




1 Введение
Как микроэлектроники и вычислительной техники развивается быстро, чтобы EDA (Electronic Design автоматизации) промышленности принес большие изменения. Особенно в начале 20-го века, 90 лет, электронная система была интегрирована с платы на уровне системы становятся, в том числе ASIC, FPGA / CPLD и многорежимный встраиваемых систем. EDA промышленности можно сказать, что электронные информационные продукты стала основным промышленности. EDA смогла процветать одним из ключевых факторов является использование языка описания аппаратных средств (HDL) описание электронных схем. О развитии FPGA и CPLD, более популярным основном HDL Verilog HDL, VHDL, Абель-HDL, AHDL и т.д., в которых VHDL и Verilog HDL из-за направление для разработки стандартизированных в конечном итоге стать IEEE стандартов.
Следующий проект реализуется с помощью VHDL, чтобы закончить.

2 UART дизайн пример
Наиболее часто используемые схемы цифрового дизайна системы сверху вниз слоя, разделенные функции иерархического метода проектирования, который снизу вверх, чем традиционный дизайн EDA более очевидное преимущество (во время основного файла конструкция схемы.) Потому что сверху вниз процесс проектирования можно увидеть от начала и до окончательного проекта общее поведение логика синтеза, формирования сети таблицы до сих пор. Для моделирования каждом шагу экспертизы, это поможет раннего выявления проблем в проектировании системы, которая может значительно уменьшить дизайн системы аппаратного цикла.
Ниже для иллюстрации того, как дизайн UART: (дизайн только дизайн общий модуль, чтобы сделать все виды MAX + PLUS II на различные обстоятельства, для суб-модуль только, чтобы сделать некоторые необходимые инструкции.)
UART (универсальный асинхронный приемник передатчик или UART) является широко используемым ближнего последовательный интерфейс передачи. UART позволяет полнодуплексный последовательный канал связи. Последовательный периферийный использовать RS232-C асинхронный последовательный интерфейс, как правило, с помощью специального UART интегральная схема, которая реализуется. Такие, как 8250,8251, NS16450 и другие чипы распространенных устройств UART, таких чипов является довольно сложным, и некоторые содержат ряд вспомогательных модулей (например, FIFO), иногда мы не должны использовать полный функции UART и эти вспомогательные функции. Или конструкция используется в FPGA / CPLD устройств, то мы должны быть интегрированы в FPGA функции внутреннего UART. Основные UART использованием VHDL функционального интегрирования, так что весь дизайн более компактным, стабильной и надежной. В данной работе, EDA, основанный на FPGA / CPLD дизайн устройства и реализации UART.

Около 2,1 UART
2.1.1 UART структуры
UART основном интерфейса шины данных, логика управления, бод генератора скорости, отправка и получение части часть других компонентов. Основной дизайн UART дизайн самой важной частью отправки и получения части, другие части конструкции не повторять их здесь.
Функций, включая передачу буфера (TBR), передавать регистра сдвига (TSR), рамка поколения, четность и передачи последовательных данных приемного буфера (RBR), получать регистра сдвига (RSR), рамка поколения, четности , струнных и очереди. Рисунок 1 является типичным применением UART.
 
Рисунок 1
2.1.2 UART формат кадра
UART формат кадра показано на рисунке 2.
 
Рисунок 2
В том числе линии состоянии простоя (в режиме ожидания, высокий), стартовый бит (стартовый бит, низкий), от 5 до 8 бит данных (бит данных), бит четности (бит, опционально) и стоп-бит (остановка бит, бит для 1,1.5,2 бит).
Этот формат запуска и остановки бит для достижения характер синхронизации.
UART регистров конфигурации в целом, вы можете настроить бит данных (5 до 8), независимо от типа бит паритета и равенства, стоп-биты (1,1.5,2), и другие параметры.
Конструкция без проверки четности, паритета устанавливается, если есть нечетное число тестовых данных или даже 1. Биты данных составляет 8 бит, 1 стоп-бит.

2,2 Дизайн UART и реализация
2.2.1 UART передатчика
Передатчик каждые 16 CLK16 выход один такт, порядка следует стартовый бит, 8 бит данных, 1 стоп-бит.
Процессора, когда он может записать данные в буфер передачи TBR, TBR, что запись данных на центральный процессор должен определить, является ли текущий можно записать, если не приговорили к условиям, отправка данных не так. Дизайн WRN управления.
Передача данных контролируется микропроцессором, микропроцессор дает WRN сигнала передатчика параллельные данные, основанные на этот сигнал шум [7 .. 0] запертом в буфер передачи TBR [7 .. 0], и, отправив регистр сдвига TSR [7 .. 0] Отправить последовательной передачи данных к последовательному SDO выходных данных. В процессе передачи данных с использованием tbre выходной сигнал, tsre как символ сигнала, когда буфер данных по отправке TBR [7 .. 0], чтобы передать передать регистра сдвига TSR [7 .. 0] время, tbre сигнала 1 и данные из регистра сдвига передать TSR [7 .. 0], когда сериал был отправлен, tsre сигнал 1, уведомляет загрузка процессора новые данные следующей часов.
Порт сигнала передатчика показано на рисунке 3.
 
Рисунок 3
Длина символа и отправить введение порядка отправки счетчик no_bits_sent, для осуществления дизайн источника следующим образом.

Библиотека IEEE;
использование ieee.std_logic_1164.all;
использование ieee.std_logic_arith.all;
лица txmit является
порт (RST, clk16x, WRN: в std_logic;
DIN: в std_logic_vector (7 downto 0);
tbre: из std_logic;
tsre: из std_logic;
SDO: из std_logic);
конце txmit;

архитектуры v1 из txmit является
Сигнал clk1x_enable: std_logic;
Сигнал TSR: std_logic_vector (7 downto 0);
Сигнал TBR: std_logic_vector (7 downto 0);
сигнала четности: std_logic;
Сигнал clkdiv: неподписанные (3 downto 0); - используется для управления данными выборки часы
Сигнал clk1x: std_logic;
Сигнал no_bits_sent: неподписанные (3 downto 0);
Сигнал wrn1: std_logic;
Сигнал wrn2: std_logic;
начать

процесса (первого, clk16x) - ширина WRN лечение для предотвращения ошибок в данных полученных
начать
если первое = '1 ', то
wrn1 <= '1 ';
wrn2 <= '1 ';
clk16x'event ELSIF и clk16x = '1 ', то
wrn2 <= wrn1;
wrn1 <= WRN;
конец, если;
Завершить процесс;

процесса (первого, clk16x) - контроль clk1x_enable
начать
если первое = '1 ', то
clk1x_enable <= "0";
tbre <= '1 ';
clk16x'event ELSIF и clk16x = '1 ', то
если wrn1 = "0" и wrn2 = '1 ', то
tbre <= "0";
clk1x_enable <= '1 ';
ELSIF std_logic_vector (no_bits_sent) = "0010", а затем
tbre <= '1 ';
ELSIF std_logic_vector (no_bits_sent) = "1101", а затем
clk1x_enable <= "0";
конец, если;
конец, если;
Завершить процесс;

процесса (первого, WRN) - получить данные из TBR
начать
если первое = '1 ', то
TBR <= (другие => '0 ');
wrn'event ELSIF и WRN = "0", то
TBR <= DIN;
конец, если;
Завершить процесс;
процесса (первого, clk16x, clk1x_enable)
начать
если первое = '1 ', то
clkdiv <= "0000";
clk16x'event ELSIF и clk16x = '1 ', то
если clk1x_enable = '1 ', то
clkdiv <= clkdiv + "0001";
конец, если;
конец, если;
Завершить процесс;

clk1x <= clkdiv (3); - у clk1x часы

процесса (первого, clk1x, no_bits_sent, TBR)
начать
если первое = '1 ', то
SDO <= '1 ';
tsre <= '1 ';
TSR <= "00000000";
четности <= '1 ';
clk1x'event ELSIF и clk1x = '1 ', то
если std_logic_vector (no_bits_sent) = "0001", а затем
TSR <= TBR; - TBR данных буфера передачи в передачу регистра сдвига TSR
tsre <= "0", - передает регистра сдвига пустой флаг установлен на "0"
ELSIF std_logic_vector (no_bits_sent) = "0010", а затем
SDO <= "0"; - послать сигнал начала немного "0"
ELSIF std_logic_vector (no_bits_sent)> = "0011" и std_logic_vector (no_bits_sent) <= "1010", а затем
TSR <= TSR (6 downto 0) & "0"; - переход от низкого до высокого выхода в серийное производство SDO
SDO <= TSR (7);
четности <= четности XOR TSR (7); - 1 проверить бит в
конец, если;
конец, если;
Завершить процесс;

процесса (первого, clk1x, clk1x_enable) - создать и отправить того, чтобы отправить характер счетчик длины
начать
если первое = '1 'или clk1x_enable = "0", то
no_bits_sent <= "0000";
clk1x'event ELSIF и clk1x = '1 ', то
если clk1x_enable = '1 ', то
no_bits_sent <= no_bits_sent + "0001";
конец, если;
конец, если;
Завершить процесс;
конец;

2.2.2 UART приемника
Рамка и получать серийные часы данные асинхронно данных, передаваемых по логической 1 в 0 можно рассматривать как начало кадра данных. Приемник должен сначала захватить стартовый бит, чтобы определить RXD вход от 1 до 0, логики 0 до 8 CLK16 тактов, является нормальной стартовый бит, а затем каждые 16 CLK16 тактов для получения данных образцов, сдвига входного Получить регистра сдвига RSR, окончательный вывод данных Даут. Также выход данных, полученных флаг сигнала флаг приема данных конца.
Порт приемника сигнала показано на рисунке 4.
 
Рисунок 4
Введение порядка получили и получают характер счетчик длины no_bits_rcvd, для осуществления дизайн источника следующим образом. Некоторые из инструкций и передатчик похожие на не повторять ее здесь.

Библиотека IEEE;
использование ieee.std_logic_1164.all;
использование ieee.std_logic_arith.all;
лица rcvr является
порт (RST, clk16x, RXD, RDN: в std_logic;
Даут: из std_logic_vector (7 downto 0);
data_ready: из std_logic;
framing_error: из std_logic;
parity_error: из std_logic);
конце rcvr;
архитектуры v1 из rcvr является
Сигнал rxd1: std_logic;
Сигнал RxD2: std_logic;
Сигнал clk1x_enable: std_logic;
Сигнал clkdiv: неподписанные (3 downto 0);
Сигнал RSR: неподписанные (7 downto 0);
Сигнал RBR: неподписанные (7 downto 0);
Сигнал no_bits_rcvd: неподписанные (3 downto 0);
сигнала четности: std_logic;
Сигнал clk1x: std_logic;
начать

процесса (первого, clk16x)
начать
если первое = '1 ', то
rxd1 <= '1 ';
RxD2 <= '1 ';
clk16x'event ELSIF и clk16x = '1 ', то
RxD2 <= rxd1;
rxd1 <= RXD;
конец, если;
Завершить процесс;

процесса (первого, clk16x, rxd1, RxD2, no_bits_rcvd)
начать
если первое = '1 'или std_logic_vector (no_bits_rcvd) = "1100", а затем
clk1x_enable <= "0";
clk16x'event ELSIF и clk16x = '1 ', то
если rxd1 = "0" и RxD2 = '1 ', то
clk1x_enable <= '1 ';
конец, если;
конец, если;
Завершить процесс;

процесса (первого, clk16x, RDN, no_bits_rcvd)
начать
если первое = '1 'или RDN = "0", то
data_ready <= "0";
clk16x'event ELSIF и clk16x = '1 ', то
если std_logic_vector (no_bits_rcvd) = "1100", а затем
data_ready <= '1 ';
конец, если;
конец, если;
Завершить процесс;

процесса (первого, clk16x, clk1x_enable)
начать
если первое = '1 ', то
clkdiv <= "0000";
clk16x'event ELSIF и clk16x = '1 ', то
если clk1x_enable = '1 ', то
clkdiv <= clkdiv + "0001";
конец, если;
конец, если;
Завершить процесс;

clk1x <= clkdiv (3);

процесса (clk1x, RST)
начать
если первое = '1 ', то
RSR <= "00000000";
RBR <= "00000000";
четности <= '1 ';
framing_error <= "0";
parity_error <= "0";
clk1x'event ELSIF и clk1x = '1 ', то
если std_logic_vector (no_bits_rcvd)> = "0001" и std_logic_vector (no_bits_rcvd) <"1001", а затем --- данных кадра данных по приемном конце последовательных данных смещен в получают регистр сдвига
RSR (0) <= RxD2;
RSR (7 downto 1) <= RSR (6 downto 0);
четности <= четности XOR RSR (0);
ELSIF std_logic_vector (no_bits_rcvd) = "1010", а затем
RBR <= RSR; - получать регистра сдвига данных в приемном буфере
ELSIF четности = "0", то
parity_error <= '1 ';
ELSIF std_logic_vector (no_bits_rcvd) = "1001" и RxD2 = "0", то
framing_error <= '1 ';
конец, если;
конец, если;
Завершить процесс;

процесса (первого, clk1x, clk1x_enable, no_bits_rcvd)
начать
если первое = '1 'или (std_logic_vector (no_bits_rcvd) = "1100" и clk1x_enable = "0"), то
no_bits_rcvd <= "0000";
clk1x'event ELSIF и clk1x = '1 ', то
если clk1x_enable = '1 ', то
no_bits_rcvd <= no_bits_rcvd + "0001";
конец, если;
конец, если;
Завершить процесс;
Даут <= std_logic_vector (RBR), когда RDN = "0" другое "ZZZZZZZZ";
конец;

2.2.3 UART общая конструкция модуля
Передатчик и приемник модулей собраны, вы можете легко достичь общего универсальный асинхронный приемопередатчик модули, и аппаратная реализация не требует много ресурсов, в частности, может быть встроен в более гибкой FPGA / CPLD на развитие.
Ниже приведен исходный код из модуля:

Библиотека IEEE;
использование ieee.std_logic_1164.all;
использование ieee.std_logic_arith.all;
использование ieee.std_logic_unsigned.all;
лица UART является
ПОРТ (RST, clk16x, RXD, RDN, WRN: в std_logic;
DIN: в std_logic_vector (7 downto 0);
Даут: из std_logic_vector (7 downto 0);
data_ready: из std_logic;
parity_error: из std_logic;
framing_error: из std_logic;
tbre: из std_logic;
tsre: из std_logic;
SDO: из std_logic);
конце UART;
архитектуры v1 из UART является
Компонент txmit
порт (RST, clk16x, WRN: в std_logic;
DIN: в std_logic_vector (7 downto 0);
tbre, tsre, SDO: из std_logic);
конце компонента;
Компонент rcvr
порт (RST, clk16x, RXD, RDN: в std_logic;
data_ready, parity_error, framing_error: из std_logic;
Даут: из std_logic_vector (7 downto 0));
конце компонента;
начать
U1: txmit ПОРТ НА КАРТЕ (RST => RST, clk16x => clk16x, DIN => DIN, tbre => tbre, tsre => tsre,
SDO => SDO);
U2: rcvr ПОРТ НА КАРТЕ (RST => RST, clk16x => clk16x, RXD => RxD, RDN => RDN, data_ready => data_ready, framing_error => framing_error, parity_error => parity_error, Даут => Даут);
конце v1;

RTL показано на рисунке 5, общий модуль
 
Рисунок 5
Просмотров: 1218 | Добавил: Jan_Klod | Рейтинг: 0.0/0

[03.09.2011]
Простое контактно-транзисторное зажигание (0)
[23.01.2011]
Фотоэлектрический детектор дыма с 433 МГц радио передачи (0)
[31.03.2011]
Три биологической цепи принимать наркотики (0)
[23.01.2011]
Катушка зажигания драйвера (0)
[19.02.2011]
14-разрядный АЦП трубопровода (0)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Калькуляторы



Популярное

индикатор напряжения схема 220 380



Форма входа
E-mail:
Пароль:



У нас нашли
Загрузка...


Copyright MyCorp © 2025