Не исключаю что на VHDL возможна такая запись, гуру VHDL приведите пример, этот код с натяжкой показывает как раз разницу между функциональным и поведенческим описанием
Не исключаю что на VHDL возможна такая запись, гуру VHDL приведите пример, этот код с натяжкой показывает как раз разницу между функциональным и поведенческим описанием
Ты слыхал как грузится Flyshark ?! нет, совсем не тот, что на дискете...а Flyshark, тот самый блин Flyshark...тот ,что был когда то на кассете...
zx spectrum 48 issuse 6a, Ленинград-1, zx spectum 128 +2 grey,Пентагон-128, ZXM-Phoenix 5.02 ( assembly)
Всё корректно, молодец!
Из мелких добавлений - в данном случае, поскольку y_out нигде более в проекте не используется. а просто выводится наружу, его можно не использовать, а результаты дешифрации сразу отдавать в y.
И второе, в списке чувствительности процесса y_out также излишен. Его состояние никак не влияет на работу процесса, тем более, что это сигнал выходной.
Образно говоря, в список чувствительности вносим те сигналы, которые входят в условия if и case. Больше ничего не надо.
---------- Post added at 18:47 ---------- Previous post was at 18:46 ----------
Что это???![]()
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Правильно ругается. нафига ты у засунул в список чувствительности? Я же тебе только что разъяснял, что это не нужно.
---------- Post added at 20:02 ---------- Previous post was at 20:00 ----------
вот это скомпилируй:
Код:library IEEE; use IEEE.std_logic_1164.all; use IEEE.STD_LOGIC_arith.ALL; use IEEE.STD_LOGIC_unsigned.ALL; entity dc_1 is port(a : in std_logic_vector (3 downto 0); -- Вход (8421). y : out std_logic_vector (15 downto 0)); -- Выход 16 выводов. end entity dc_1; architecture id_1 of dc_1 is -- Дешифратор 4:16. begin process (a) begin case a(3 downto 0) is when "0000" => y <= "0000000000000001"; when "0001" => y <= "0000000000000010"; when "0010" => y <= "0000000000000100"; when "0011" => y <= "0000000000001000"; when "0100" => y <= "0000000000010000"; when "0101" => y <= "0000000000100000"; when "0110" => y <= "0000000001000000"; when "0111" => y <= "0000000010000000"; when "1000" => y <= "0000000100000000"; when "1001" => y <= "0000001000000000"; when "1010" => y <= "0000010000000000"; when "1011" => y <= "0000100000000000"; when "1100" => y <= "0001000000000000"; when "1101" => y <= "0010000000000000"; when "1110" => y <= "0100000000000000"; when others => y <= "1000000000000000"; end case; end process; end id_1;
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Верно
Я тут хочу еще одну задачку подсунуть. просто она мне полчаса назад свалилась в реале, от нашего общего коллеги Микка_А
Вот рисунок, это по сути - программа в квартусе, но в схемном вводе.
![]()
Задача - перевести эту схемку в VHDL.
Способы могут быть разные, разумеется.
В дополнение к задаче - пины у ПЛИСы могут быть не только на вход и выход и вход/выход, а еще и "выход с возможностью чтения (buffer)".
Я этим воспользовался, хотя это совсем и необязательно.
Код на VHDL написан за десять минут, под спойлером.
Скрытый текст
Код:library IEEE; use IEEE.std_logic_1164.all; use IEEE.STD_LOGIC_unsigned.ALL; entity divider is port( CLK : in std_logic; Q : buffer std_logic_vector(9 downto 0) ); end divider; architecture arch of divider is signal CNT : std_logic_vector(1 downto 0); begin CNT <= CNT+1 when (rising_edge(CLK)); Q(0) <= (CNT(0) and CNT(1)); Q(1) <= not(Q(0)); Q(2) <= ((not CNT(0)) and CNT(1)); Q(3) <= not Q(2); Q(4) <= (CNT(0) and (not CNT(1))); Q(5) <= not(Q(4)); Q(6) <= ((not CNT(0)) and (not CNT(1))); Q(7) <= not(Q(6)); Q(8) <= (Q(0) or Q(2)); Q(9) <= (Q(4) or Q(6)); end arch;[свернуть]
Последний раз редактировалось Ewgeny7; 11.10.2014 в 21:33.
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Viktor2312, всё правильно
Сейчас - вообще всё правильно.
---------- Post added at 21:54 ---------- Previous post was at 21:47 ----------
Саму мелкую логику (И, ИЛИ, НЕ) тоже не нужно как-либо отображать. Берешь выходы, и от них и пляшешь, вставляешь всю необходимую and-or-not прямо в булеву алгебру.
---------- Post added at 22:37 ---------- Previous post was at 21:54 ----------
История с этой задачей получила забавный поворот событий...
Вот диаграмма симуляции кода на VHDL:
И здесь - всё правильно, "бегущий огонь" плюс "бегущая тень" плюс еще два клока в противофазе.
Но когда запустили в симуляцию оригинал на схемном вводе....
Вот такая вот ботва...
Я, когда только начинал учиться работать с ПЛИСами, тоже сидел на "схематике".
Кстати, прошивка СМУК-2 сделана на нем.
Но тоже частенько натыкался на странную работу прошивки... Поэтому плюнул, растерел и ушел на VHDL. Потом уже, позже, разобрался с Verilog. И Скорпион-1024 для самодельной девборды писал на Верилоге, и проект СкорпЭво - тоже на верилоге. Но, первая любовь - самая чистая, VHDL мне нравится больше![]()
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Viktor2312, Вроде как всё похоже на правду
Ты у себя еще не поставил Кактус с симулятором?
---------- Post added at 11:27 ---------- Previous post was at 10:45 ----------
Только симуляция маленько бред выдает, проверь скобки приоритета и логику.
![]()
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
А ты убери лишние НЕ, станет проще![]()
Оставь только И, а инверторы переставь на линии, на которых их небыло.
---------- Post added at 12:16 ---------- Previous post was at 12:13 ----------
Кстати, по диаграммам видно, что у тебя неправильно реализованы сигналы out_1_1 и out_1_2. И они тянут за собой мертвый out_or1
---------- Post added at 12:17 ---------- Previous post was at 12:16 ----------
А все остальное тикает как надо.
---------- Post added at 12:19 ---------- Previous post was at 12:17 ----------
Ладно, не будем тянуть кота за хвост, в строчке
out1_2a <= not cnt (0) and cnt (1);
надо просто поставить две скобки:
out1_2a <= not (cnt (0) and cnt (1));
и всё заработает правильно.
---------- Post added at 12:21 ---------- Previous post was at 12:19 ----------
![]()
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Да, всё правильно, как один из вариантов.
Заглядывай![]()
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
У меня давно блуждала мысль сделать ЮТ-88 на попуПЛИСной основе.
Т.е., берем настоящий 580ВМ80А, память статику 64кб, ПЗУ, индикаторы и CPLD.
Задача сама по себе копеечная, сел и сделал. Наверное хорошо, что я это так до сих пор и не сделал, ибо эту идею можно применить как темы следующих практических занятий
Для начала можно сделать на VHDL симуляцию 580ВК28.
По сути, там обычный двунаправленный буфер, направление которого определяется сигналами слова состояния ВМ80.
Какие биты за что отвечают - нам тоже известно.
Поэтому задача номер один - сделать дешифратор слова состояния в сигналы MEM_RD, MEM_WR, IO_RD, IO_WR.
Задачка уже по силам?![]()
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)