![]() |
|
Другие темы раздела | |
Программируемая логика Дешифратор на 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 на ПЛИС - Программируемая логика - Ответ 406268928.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; Входные данные я задаю 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; Добавлено через 1 час 54 минуты в принципе с проблемой разобрался. Позже выложу проект готовый, может комуто пригодится в учебных целях. Вернуться к обсуждению: VHDL. Реализация UART на ПЛИС Программируемая логика |
|
28.01.2013, 16:52 | |
Готовые ответы и решения:
3
измеритель температуры на VHDL. ПЛИС Мигание светодиодов (ПЛИС,VHDL) Модуль UART на ПЛИС Реализация ОЗУ в ПЛИС ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL |
28.01.2013, 16:52 | |
28.01.2013, 16:52 | |
Помогаю со студенческими работами здесь
0
Реализация АЛУ на VHDL Реализация на ПЛИС Работа через терминал хост-компьютера с ПЛИС через USB-to-UART Реализация генератора шуму (Vhdl) Расчет и реализация КИХ фильтра на VHDL |