MVV, я здесь время с корыстью вообще никогда не провожу.
А что, обучение ты будешь оплачивать? Или уже сразу преподавать там будешь?![]()
MVV, я здесь время с корыстью вообще никогда не провожу.
А что, обучение ты будешь оплачивать? Или уже сразу преподавать там будешь?![]()
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
При работе с ПЛИС рано или поздно нужно будет знакомиться с конечными автоматами (state mashine), думаю на примере антидребезга можно и ознакомиться с этой парадигмой программирования.
В принципе там ничего сложного и вкратце работу алгоритма антидребезга на конечном автомате можно описать пимерно так:
1. есть несколько устойчивых состояний - в данном случае их два.
2. для перехода из одного состояния в другое должны опрашиваться какие-то внешние события, либо соблюдение условий.
Под спойлером готовый фрагмент программы антидребезга, но попробуй сначала сам что-нибудь написать)
Скрытый текст
Можно конечно сам сигнал state использовать как output, но для наглядности ввёл его отдельно.Код:signal input: std_logic; signal output: std_logic; signal state: std_logic:=0; signal counter: std_logic_vector (7 downto0):= '00000000'; process (clk,input,state) if rising_edge(clk) then if state = '0' then if input='1' then state <='1' ; output<='1'; endif else counter <= counter +1; if counter = '11111111' then output<='0'; state<='0'; endif; endif; end if; end process;
[свернуть]
Последний раз редактировалось shurik-ua; 16.10.2014 в 13:15.
Не? такой вариант не годится?Код:process(CLK,In_put,cnt) begin if (rising_edge(CLK)) then if (In_put = x"3F") then -- ни одна из десяти кнопок не нажата, везде высокий cnt <= "0000000000"; elsif (cnt /= 255) then -- счет до 255, и на этом тормозимся. cnt <= cnt+1; end if; if (cnt = 255) then Out_put <= not In_put; -- если дотикало, то на выход - единица в разр. нажатой кнопы. end if; end if; end process;
---------- Post added at 15:26 ---------- Previous post was at 15:19 ----------
Не, я еще слишком маленький и глупый. Просто делюсь тем, чему сам научился. В том числе и благодаря тебе![]()
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
У вас код антидребезга нерабочий.
Поясню:
1. код, который в процессе просто увеличивает счётчик когда на вход поступает '1', а так как '1' на входе будет появляться хаотично в течение небольшого промежутка времени, то и счетчик будет увеличиваться так же неравномерно - больше тот код ничего другого не делает.
2. int1_0 будет все время в единице, кроме одного периода тактовой когда счётчик будет в нулях.
в общем код нерабочий - я уже запутался - там вход сканируется только 1 период клока, а 255 клоков никак не влияет на результат.
смысл антидребезга немного по другому устроен:
1. ждём на входе '1' - если да идём к п.2
2. 256 (или сколько надо) периодов клока безразличны ко входу, после чего переходим к п.1.
К моему последнему варианту тоже относится?
---------- Post added at 15:43 ---------- Previous post was at 15:41 ----------
Пораскинув мозгами, да... Если проскочит ноль при зафиксированном уже нажатии, то всё начнется заново, со сброса в ноль выходного сигнала...
Надо отлавливать и нажатие, и отпускание.
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"
Виктор, ты бы хоть источники указывал... Или названия сигналов свои придумывал![]()
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Скрытый текст
Код:if a=b then c:=a; elsif b<c then d:=b; b:=c; else do_it; end if;Learning By Example Using VHDL Advanced Digital Design With a Nexys 2 FPGA BoardКод:If statements may be used to specify conditional assignments or state transitions in a finite state machine: case READ_CPU_STATE is when WAITING => if CPU_DATA_VALID = '1' then CPU_DATA_READ <= '1'; READ_CPU_STATE <= DATA1; end if; when DATA1 => -- other branches of the case statement end case;
http://dl.rutracker.org/forum/dl.php?t=3701607
Digital Design Using Diligilent FPGA Boards VHDL/Active-HDL Edition
http://dl.rutracker.org/forum/dl.php?t=3701599
[свернуть]
Последний раз редактировалось Totem; 16.10.2014 в 23:02.
Ты слыхал как грузится Flyshark ?! нет, совсем не тот, что на дискете...а Flyshark, тот самый блин Flyshark...тот ,что был когда то на кассете...
zx spectrum 48 issuse 6a, Ленинград-1, zx spectum 128 +2 grey,Пентагон-128, ZXM-Phoenix 5.02 ( assembly)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)