Форум программистов, компьютерный форум, киберфорум
Программируемая логика: ПЛИС, ПАИС
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программируемая логика Дешифратор на 16-ть выходов https://www.cyberforum.ru/ programmable-logic/ thread771697.html
Здравствуйте, у меня в институте предмет :"САПР РЭА",я написал программу для схемы кодового замка, описал там 4 счетчика и 4 дешифратора, дешифратор описал с помощью выборочного значения сигнала, преподаватель сказал описать дефишраторы с помощью подпрограммы (процедуры и функции), и тогда он поставит "хорошо",дело простое но я не могу,помогите пожалуйста ! вот моя программа: library IEEE;...
Программируемая логика VHDL код пограммы
Здравствуйте! Помогите пожалуйста исправить ошибки в коде: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.numeric_bit.all; use IEEE.numeric_std.all; use IEEE.std_logic_signed.all; use IEEE.std_logic_unsigned.all; use IEEE.math_real.all;
Программируемая логика Расчет адресного дешифратора для блока памяти https://www.cyberforum.ru/ programmable-logic/ thread756291.html
БП 1КБ из микросхем 256*8. Я так понимаю что выходов должно быть 4 которые идут к CS. Не знаю должны ли здесь быть OЕ. У меня есть пример дешифратора 2кб по 1кб. Там сперва задаются два адреса Анач.111000000000000 Акон.11100111111111. кроме того приведены еще вторые варианты этих адресов. Но там две схемы. В моем-4. Потом на основание этих адресов приведены логические выражение для CS1 И CS2...
Программируемая логика Смоделировать регистровое устройство 74173 https://www.cyberforum.ru/ programmable-logic/ thread755073.html
Где найти схему этого регистра. В нете я что то не нахожу. Кроме того интересует как это делать в электроник воркбенч-есть ли какие нюансы?
Изучение VHDL Программируемая логика
Всем привет. Мне нужно срочно разобраться с VHDL. Установила, что дальше делать - не представляю. Гугл не спасает. Книжек накачала - бесполезно. У меня Debian 6.0.6 и gcc 4.5. Никакой информацией по теме не обладаю, так что, если кому не лень, надо все с нуля, или может кто знает полезные статьи или учебники..:)
Программируемая логика Мультиплексор 16 в 1 на основе 4 в 1 https://www.cyberforum.ru/ programmable-logic/ thread750183.html
мультиплексор типа 16-1 на основе мультиплексора 4-1 Нужна схема узла ЕОМ парные: ТТШЛ не парные: КМОН
Программируемая логика Сложение чисел в коде Грея https://www.cyberforum.ru/ programmable-logic/ thread742335.html
Как вообще такое сделать? Что такое код гоея знаю. Про сумматор в прямом коде тоже читал. А как в коде Грея это все сделать?
Программируемая логика Регистр сдвига влево
Ребята помогите! Нужно нарисовать схему сдвига регистра на два разряда влево, а так же временную диаграмму и составить таблицу истинности.
Программируемая логика Мультиплексор "6 в 1" https://www.cyberforum.ru/ programmable-logic/ thread732757.html
Здравствуйте, помогите, пожалуйста, нужно построить на логических элементах мультиплексор 6 ->1.
Программируемая логика Построение 8-ми разрядного АЛУ https://www.cyberforum.ru/ programmable-logic/ thread729659.html
Требуется построить 8-ми разрядное АЛУ, выполняющее операции сложения и вычитания операндов в двоичном доп. (не суть важно, можно и прямом или обратном) коде. Весь интернет облазил, нигде ничего полезного по построению АЛУ не нашел, может кто кинет ссылочку или поможет с решением задачи?
Программируемая логика Построение схемы по картам Карно
Есть таблица истинности. Из нее построил карты карно. А как теперь по картам карно построить схему? Можете помочь, желательно в квартусе, но принцип можете хоть в пеинте показать. Там 3 JK триггера должно быть.
Программируемая логика Регистры. Сдвиг влево есть следующая таблица функциональности: y1 y2 y3 y4 y5 1 1 0 0 0 1 1 1 1 1 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 1 1 1 0 0 1 0 0 0 1 1 https://www.cyberforum.ru/ programmable-logic/ thread727924.html
Lessberg
0

VHDL. Реализация UART на ПЛИС - Программируемая логика - Ответ 4062689

28.01.2013, 16:52. Показов 21367. Ответов 3
Метки (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Была поставлена задача реализовать передачу данных через UART (com порт) интерфейс rs-232 передачу данных (чисел) с ПК на плату altera DE2.

За основу решил брать уже готовый проект. Их множество. Мой выбор пал вот на этот:
Код
----------------------------------------------------------------------------------
-- Creation Date: 21:12:48 05/06/2010 
-- Module Name: RS232/UART Interface - Behavioral
-- Used TAB of 4 Spaces
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity uart is
generic (
	CLK_FREQ	: integer := 50;		-- Main frequency (MHz)
	SER_FREQ	: integer := 9600		-- Baud rate (bps)
);
port (
	-- Control
	clk			: in	std_logic;		-- Main clock
	rst			: in	std_logic;		-- Main reset
	-- External Interface
	rx			: in	std_logic;		-- RS232 received serial data
	tx			: out	std_logic;		-- RS232 transmitted serial data
	-- RS232/UART Configuration
	par_en		: in	std_logic;		-- Parity bit enable
	-- uPC Interface
	tx_req		: in	std_logic;						-- Request SEND of data
	tx_end		: out	std_logic;						-- Data SENDED
	tx_data		: in	std_logic_vector(7 downto 0);	-- Data to transmit
	rx_ready	: out	std_logic;						-- Received data ready to uPC read
	rx_data		: out	std_logic_vector(7 downto 0)	-- Received data 
);
end uart;

architecture Behavioral of uart is

	-- Constants
	constant UART_IDLE	:	std_logic := '1';
	constant UART_START	:	std_logic := '0';
	constant PARITY_EN	:	std_logic := '1';
	constant RST_LVL	:	std_logic := '1';

	-- Types
	type state is (idle,data,parity,stop1,stop2);			-- Stop1 and Stop2 are inter frame gap signals

	-- RX Signals
	signal rx_fsm		:	state;							-- Control of reception
	signal rx_clk_en	:	std_logic;						-- Received clock enable
	signal rx_rcv_init	:	std_logic;						-- Start of reception
	signal rx_par_bit	:	std_logic;						-- Calculated Parity bit
	signal rx_data_deb	:	std_logic;						-- Debounce RX data
	signal rx_data_tmp	:	std_logic_vector(7 downto 0);	-- Serial to parallel converter
	signal rx_data_cnt	:	std_logic_vector(2 downto 0);	-- Count received bits

	-- TX Signals
	signal tx_fsm		:	state;							-- Control of transmission
	signal tx_clk_en	:	std_logic;						-- Transmited clock enable
	signal tx_par_bit	:	std_logic;						-- Calculated Parity bit
	signal tx_data_tmp	:	std_logic_vector(7 downto 0);	-- Parallel to serial converter
	signal tx_data_cnt	:	std_logic_vector(2 downto 0);	-- Count transmited bits

begin

	tx_clk_gen:process(clk)
		variable counter	:	integer range 0 to conv_integer((CLK_FREQ*1_000_000)/SER_FREQ-1);
	begin
		if clk'event and clk = '1' then
			-- Normal Operation
			if counter = (CLK_FREQ*1_000_000)/SER_FREQ-1 then
				tx_clk_en	<=	'1';
				counter		:=	0;
			else
				tx_clk_en	<=	'0';
				counter		:=	counter + 1;
			end if;
			-- Reset condition
			if rst = RST_LVL then
				tx_clk_en	<=	'0';
				counter		:=	0;
			end if;
		end if;
	end process;

	tx_proc:process(clk)
		variable data_cnt	: std_logic_vector(2 downto 0);
	begin
		if clk'event and clk = '1' then
			if tx_clk_en = '1' then
				-- Default values
				tx_end					<=	'0';
				tx						<=	UART_IDLE;
				-- FSM description
				case tx_fsm is
					-- Wait to transfer data
					when idle =>
						-- Send Init Bit
						if tx_req = '1' then
							tx			<=	UART_START;
							tx_data_tmp	<=	tx_data;
							tx_fsm		<=	data;
							tx_data_cnt	<=	(others=>'1');
							tx_par_bit	<=	'0';
						end if;
					-- Data receive
					when data =>
						tx				<=	tx_data_tmp(0);
						tx_par_bit		<=	tx_par_bit xor tx_data_tmp(0);
						if tx_data_cnt = 0 then
							if par_en = PARITY_EN then
								tx_fsm	<=	parity;
							else
								tx_fsm	<=	stop1;
							end if;
							tx_data_cnt	<=	(others=>'1');
						else
							tx_data_tmp	<=	'0' & tx_data_tmp(7 downto 1);
							tx_data_cnt	<=	tx_data_cnt - 1;
						end if;
					when parity =>
						tx				<=	tx_par_bit;
						tx_fsm			<=	stop1;
					-- End of communication
					when stop1 =>
						-- Send Stop Bit
						tx				<=	UART_IDLE;
						tx_fsm			<=	stop2;
					when stop2 =>
						-- Send Stop Bit
						tx_end			<=	'1';
						tx				<=	UART_IDLE;
						tx_fsm			<=	idle;
					-- Invalid States
					when others => null;
				end case;
				-- Reset condition
				if rst = RST_LVL then
					tx_fsm				<=	idle;
					tx_par_bit			<=	'0';
					tx_data_tmp			<=	(others=>'0');
					tx_data_cnt			<=	(others=>'0');
				end if;
			end if;
		end if;
	end process;

	rx_debounceer:process(clk)
		variable deb_buf	:	std_logic_vector(3 downto 0);
	begin
		if clk'event and clk = '1' then
			-- Debounce logic
			if deb_buf = "0000" then
				rx_data_deb		<=	'0';
			elsif deb_buf = "1111" then
				rx_data_deb		<=	'1';
			end if;
			-- Data storage to debounce
			deb_buf				:=	deb_buf(2 downto 0) & rx;
		end if;
	end process;

	rx_start_detect:process(clk)
		variable rx_data_old	:	std_logic;
	begin
		if clk'event and clk = '1' then
			-- Falling edge detection
			if rx_data_old = '1' and rx_data_deb = '0' and rx_fsm = idle then
				rx_rcv_init		<=	'1';
			else
				rx_rcv_init		<=	'0';
			end if;
			-- Default assignments
			rx_data_old			:=	rx_data_deb;
			-- Reset condition
			if rst = RST_LVL then
				rx_data_old		:=	'0';
				rx_rcv_init		<=	'0';
			end if;
		end if;
	end process;


	rx_clk_gen:process(clk)
		variable counter	:	integer range 0 to conv_integer((CLK_FREQ*1_000_000)/SER_FREQ-1);
	begin
		if clk'event and clk = '1' then
			-- Normal Operation
			if counter = (CLK_FREQ*1_000_000)/SER_FREQ-1 or rx_rcv_init = '1' then
				rx_clk_en	<=	'1';
				counter		:=	0;
			else
				rx_clk_en	<=	'0';
				counter		:=	counter + 1;
			end if;
			-- Reset condition
			if rst = RST_LVL then
				rx_clk_en	<=	'0';
				counter		:=	0;
			end if;
		end if;
	end process;

	rx_proc:process(clk)
	begin
		if clk'event and clk = '1' then
			-- Default values
			rx_ready		<=	'0';
			-- Enable on UART rate
			if rx_clk_en = '1' then
				-- FSM description
				case rx_fsm is
					-- Wait to transfer data
					when idle =>
						if rx_data_deb = UART_START then
							rx_fsm		<=	data;
						end if;
						rx_par_bit		<=	'0';
						rx_data_cnt		<=	(others=>'0');
					-- Data receive
					when data =>
						-- Check data to generate parity
						if par_en = PARITY_EN then
							rx_par_bit		<=	rx_par_bit xor rx;
						end if;

						if rx_data_cnt = 7 then
							-- Data path
							rx_data(7)		<=	rx;
							for i in 0 to 6 loop
								rx_data(i)	<=	rx_data_tmp(6-i);
							end loop;

							-- With parity verification
							if par_en = PARITY_EN then
								rx_fsm		<=	parity;
							-- Without parity verification
							else
								rx_ready	<=	'1';
								rx_fsm		<=	idle;
							end if;
						else
							rx_data_tmp		<=	rx_data_tmp(6 downto 0) & rx;
							rx_data_cnt		<=	rx_data_cnt + 1;
						end if;
					when parity =>
						-- Check received parity
						rx_fsm				<=	idle;
						if rx_par_bit = rx then
							rx_ready		<=	'1';
						end if;
					when others => null;
				end case;
				-- Reset condition
				if rst = RST_LVL then
					rx_fsm			<=	idle;
					rx_ready		<=	'0';
					rx_data			<=	(others=>'0');
					rx_data_tmp		<=	(others=>'0');
					rx_data_cnt		<=	(others=>'0');
				end if;
			end if;
		end if;
	end process;

end Behavioral;
На ПК стоит программа COM Port Tool Kit.

Входные данные я задаю 8-ми тумблерами тем самым передавая значения от 00 до FF. Все хорошо. ПК их принимает.

Вся загвоздка с выводом данных при передачи с ПК на ПЛИС. В конце хотелось бы получить конечно отображение на семисегментных индикаторах, но для начала, вывод подключаю на 8 светодиодов, чтобы понимать какой код пришел.

Данные посылаются в виде HEX чеез программу на ПК. Например я хочу получить '1' Отправляю значит "01" с ПК но загораются все 8 диодов сразу. Если введу "01,01" тоже все 8 горят. "01,02" уже получается что пришел сигнал "1111 1110". В общем не могу понять как с компа верно посылать данные..

Код
					when data =>
						-- Check data to generate parity
						if par_en = PARITY_EN then
							rx_par_bit		<=	rx_par_bit xor rx;
						end if;

						if rx_data_cnt = 7 then
							-- Data path
							rx_data(7)		<=	rx;

							for i in 0 to 6 loop
								rx_data(i)	<=	rx_data_tmp(6-i);
							end loop;
Вопрос в том, как верно передать данные, в каком формате. COM port Tool Kit передает HEX значения по парам например "00" "01,02,03" "10,50,32,98" и тд

Добавлено через 1 час 54 минуты
в принципе с проблемой разобрался. Позже выложу проект готовый, может комуто пригодится в учебных целях.

Вернуться к обсуждению:
VHDL. Реализация UART на ПЛИС Программируемая логика
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2013, 16:52
Готовые ответы и решения:

измеритель температуры на VHDL. ПЛИС
Здравствуйте, появилась задача написать код на VHDL или verilog для измерителя темпратуры, где...

Мигание светодиодов (ПЛИС,VHDL)
Устройство моргания 4-мя светодиодами.По сути,программа очень простая.Но у меня в итоге светодиоды...

Модуль UART на ПЛИС
Здравствуйте, уважаемые форумчане. Пробую написать UART на VHDL, с которым раньше не работал....

Реализация ОЗУ в ПЛИС
реализовать ОЗУ для 8 разрядных значений с возможностью чтения по адресам задаваемым через свич и...

ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
Подтолкните в нужную сторону, никак не могу сообразить. С одной стороны поступают байты по...

3
28.01.2013, 16:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2013, 16:52
Помогаю со студенческими работами здесь

Реализация АЛУ на VHDL
Помогите пожалуйста разобраться. Передо мною стоит задача - описать на VHDL 32 разрядное АЛУ, с...

Реализация на ПЛИС
Здравствуйте Может кто знает как блоками реализуется структурная схема на плис на камеру приходит...

Работа через терминал хост-компьютера с ПЛИС через USB-to-UART
Здравствуйте! Мне нужно организовать связь компьютера с платой от фирмы Xilinx ZC702. Решил ничего...

Реализация генератора шуму (Vhdl)
Приветствую! Задача: создать генератор шума с нормальным распределением. Получил ПСП с помощью...

Расчет и реализация КИХ фильтра на VHDL
Здравствуйте, У меня есть плата HELPER LMD-System c АЦП, ЦАП(в виде шим фильтра), cyclon 3. Я...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru