Важная информация

User Tag List

Страница 9 из 41 ПерваяПервая ... 5678910111213 ... ПоследняяПоследняя
Показано с 81 по 90 из 404

Тема: Изучение с "нуля" VHDL и ПЛИС Xilinx

  1. #81

    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,168
    Спасибо Благодарностей отдано 
    147
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    MVV, я здесь время с корыстью вообще никогда не провожу.
    А что, обучение ты будешь оплачивать? Или уже сразу преподавать там будешь?
    ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
    Speccy-2007 128/AY/TR-DOS

    Сайт с документацией к "Scorpion ZS 256"

  2. #82

    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    При работе с ПЛИС рано или поздно нужно будет знакомиться с конечными автоматами (state mashine), думаю на примере антидребезга можно и ознакомиться с этой парадигмой программирования.

    В принципе там ничего сложного и вкратце работу алгоритма антидребезга на конечном автомате можно описать пимерно так:
    1. есть несколько устойчивых состояний - в данном случае их два.
    2. для перехода из одного состояния в другое должны опрашиваться какие-то внешние события, либо соблюдение условий.

    Под спойлером готовый фрагмент программы антидребезга, но попробуй сначала сам что-нибудь написать)

    Скрытый текст


    Код:
    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;
    Можно конечно сам сигнал state использовать как output, но для наглядности ввёл его отдельно.
    [свернуть]
    Последний раз редактировалось shurik-ua; 16.10.2014 в 13:15.

  3. #83

    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,168
    Спасибо Благодарностей отдано 
    147
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    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 ----------

    Цитата Сообщение от MVV Посмотреть сообщение
    Почитав топик, сложилось мнение, что ты преподаешь там
    Не, я еще слишком маленький и глупый. Просто делюсь тем, чему сам научился. В том числе и благодаря тебе
    ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
    Speccy-2007 128/AY/TR-DOS

    Сайт с документацией к "Scorpion ZS 256"

  4. #84

    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У вас код антидребезга нерабочий.
    Поясню:
    1. код, который в процессе просто увеличивает счётчик когда на вход поступает '1', а так как '1' на входе будет появляться хаотично в течение небольшого промежутка времени, то и счетчик будет увеличиваться так же неравномерно - больше тот код ничего другого не делает.
    2. int1_0 будет все время в единице, кроме одного периода тактовой когда счётчик будет в нулях.

    в общем код нерабочий - я уже запутался - там вход сканируется только 1 период клока, а 255 клоков никак не влияет на результат.

    смысл антидребезга немного по другому устроен:
    1. ждём на входе '1' - если да идём к п.2
    2. 256 (или сколько надо) периодов клока безразличны ко входу, после чего переходим к п.1.

  5. #85

    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,168
    Спасибо Благодарностей отдано 
    147
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    У вас код антидребезга нерабочий
    К моему последнему варианту тоже относится?

    ---------- Post added at 15:43 ---------- Previous post was at 15:41 ----------

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    смысл антидребезга немного по другому устроен
    Пораскинув мозгами, да... Если проскочит ноль при зафиксированном уже нажатии, то всё начнется заново, со сброса в ноль выходного сигнала...
    Надо отлавливать и нажатие, и отпускание.
    ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
    Speccy-2007 128/AY/TR-DOS

    Сайт с документацией к "Scorpion ZS 256"

  6. #86

    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,168
    Спасибо Благодарностей отдано 
    147
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MVV Посмотреть сообщение
    Антидребезг на VHDL
    слово "какафонический" убило......
    Ну да, VHDL проще русского языка...
    ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
    Speccy-2007 128/AY/TR-DOS

    Сайт с документацией к "Scorpion ZS 256"

  7. #87

  8. #88

    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,168
    Спасибо Благодарностей отдано 
    147
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Виктор, ты бы хоть источники указывал... Или названия сигналов свои придумывал
    ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
    Speccy-2007 128/AY/TR-DOS

    Сайт с документацией к "Scorpion ZS 256"

  9. #89

    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Viktor2312 Посмотреть сообщение
    Вот с того, что вы уже запутались и нужно было начинать.
    Да погорячился - код работает - но имхо запутанный он како-то - прям VHDL обфускация )

  10. #90

    Регистрация
    13.12.2007
    Адрес
    Архангельск
    Сообщений
    2,189
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Viktor2312 Посмотреть сообщение
    Интересно, а в if написанный так:

    Код:
    if (in_c="0000000001") then
          cod <= "0001";
    else
    ...
    Можно ли добавить следующее:

    Код:
    if (in_c="0000000001") then
          cod <= "0001";
          t <= t + 1;
    else
    ...

    Скрытый текст



    Код:
    if a=b then
         c:=a;
     elsif b<c then
         d:=b;
         b:=c;
     else
         do_it;
     end if;
    Код:
    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;
    Learning By Example Using VHDL Advanced Digital Design With a Nexys 2 FPGA Board
    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)

Страница 9 из 41 ПерваяПервая ... 5678910111213 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 172
    Последнее: 28.11.2017, 13:28
  2. Микроконтроллеры STM32, "с нуля".
    от Viktor2312 в разделе Для начинающих
    Ответов: 279
    Последнее: 07.11.2016, 19:45
  3. Техническая литература: Языки описания аппаратуры "AHDL, VHDL и Verilog"
    от Viktor2312 в разделе Техническая литература
    Ответов: 1
    Последнее: 14.09.2014, 22:29
  4. Ответов: 71
    Последнее: 31.07.2014, 19:42

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •