SpiderHulk 0 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба Добрый вечер. Вопрос по проекту в рамках курса схемотехники. Есть две отладочные платы FPGA XC7A15T, соединены двумя проводами: синим и красным. На одной плате запущено нечто, что генерирует сигналы по которым вторая плата (с таймером) понимает что первая соединена с ней двумя проводами. Если обрыв красного провода, то остановка таймера, если синего то "взрыв" (звуковой сигнал), если таймер заканчивает отсчёт то "взрыв" Собственно проблема с реализацией таймер. Как я полагаю это должен быть счётчик числа импульсов делать, подсчитывающий количество импульсов от тактового генератора. Но как начать неясно совсем. Мой актуальный уровень знаний и умений, это программирование с помощью языка SystemVerilog простейших логических схем. На всякий случай прикрепляю материалы своего курса Отладочная плата на основе FPGA XC7A15T.pdf Лабораторная работа номер один этой мой уровень знаний и умений, со второй пока не справился. Самих микросхем у меня на руках нет, они доступны мне только на учебных парах. В списке рекомендованной нам литературы фигурирует книга "Цифровая схемотехника и архитектура компьютера" Второе издание Пререквизит к лабораторным работам - установка Vivado.pdf Лабораторная работа №1 – комбинационная логика.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpiderHulk 0 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба Обычный цикл как в программировании ведь не подойдёт. Так как генератор имульсов это миллионы сигналов в секунды, а таймер должен работать хотя бы несколько десятков секунд. Это значит миллионы знаков < или > в коде, а как мне стало известно на одной из лекций всего один такой знак это "стена" кода. Я прав? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба Приветствую! 52 minutes ago, SpiderHulk said: Обычный цикл как в программировании ведь не подойдёт. Так как генератор имульсов это миллионы сигналов в секунды, а таймер должен работать хотя бы несколько десятков секунд. Это значит миллионы знаков < или > в коде, а как мне стало известно на одной из лекций всего один такой знак это "стена" кода. Я прав? Скорее всего не правы. Событие запуска таймера может быт разным например длительное отсутствие импульсов на обеих проводах. Ну и намек - таймеров может быть не один. Начнем с аналогии - Опишите как бы вы это в программе делали? Что такое таймер (что он делает) ? И какой элемент в FPGA можно сделать который будет выполнять туже функцию? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба На счёт бомбы не понял. А на счёт таймера обычно делают так: Каждый новый такт увеличивают значение переменной на 1. После увеличения проверяют не равно ли новое значение тому на котором нужно остановиться или что-то сдалать. Само собой счётчик вниз делается точно так же только вначале мы загружаем в переменную некое число, а вместо сложения мы вычитаем единицу. И соответственно сравниваем с нулём. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpiderHulk 0 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба 7 минут назад, MegaVolt сказал: Каждый новый такт увеличивают значение переменной на 1. После увеличения проверяют не равно ли новое значение тому на котором нужно остановиться или что-то сдалать Вот можно ли так делать если предполагаемых сравнений очень много? Это ведь не программирование, а некая логическая схема должна получиться. Например вот подобный цикл можно реализовывать на верилоге? (здесь использую синтаксис си) int i=0; while(i<10000000) { i=i+1; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpiderHulk 0 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба 15 минут назад, RobFPGA сказал: Опишите как бы вы это в программе делали? Самое простое что мне приходит в голову это взять генератор 12 мегагерц и как то считать количество импульсов поступивших от этого генератора, сравнивая с заданным, пока оно не будет достигнуто, дальше сигнал на подрыв. Но правомерен такой подход если это заданное число скажем 1.200.000.000 и надо будет сделать столько же сравнений? Какая в итоге вообще логическая схема сформируется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба Приветствую! 9 minutes ago, SpiderHulk said: Но правомерен такой подход если это заданное число скажем 1.200.000.000 и надо будет сделать столько же сравнений? Какая в итоге вообще логическая схема сформируется? Вы в программе делаете миллионы отдельных IF для сравнения или сравнивает меняющиеся значения на выходе счетчика с константой ? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба Такое название теме давать может только провокатор или дурак. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpiderHulk 0 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба module timer( input clock, //input inp01, //input inp02, output out01 ); (* dont_touch = "true" *)reg [28:0] cont = 0; (* dont_touch = "true" *)reg [28:0] cont_max = 28'd120000000; always @(posedge clock) begin while (cont < cont_max) begin cont=cont+1'd1; end end assign out01=1; endmodule Я ожидаю, что данный код будет работать следующим образом: в момент подключения микросхемы к персональному компьютеру по USB запустится таймер на 10 секунд (clock соединён с генератором 12 МГц. По истечении 10 секунд переменной out01 будет присвоена 1, а так как 01 это лампочка, то она загорится. Я прав в своих ожиданиях? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpiderHulk 0 21 мая, 2019 Опубликовано 21 мая, 2019 (изменено) · Жалоба При переходе к Open Elaborated Design на экран были выведены следующие сообщения об ошибках: [Synth 8-3380] loop condition does not converge after 2000 iterations [H:/verilog/timer/timer.srcs/sources_1/new/timer.sv:34] [Synth 8-6156] failed synthesizing module 'timer' [H:/verilog/timer/timer.srcs/sources_1/new/timer.sv:23] [Vivado_Tcl 4-5] Elaboration failed - please see the console for details Вот как раз первое сообщение. Это не то самое о чём я ранее высказывал беспокойство? Что цикл не может иметь слишком много витков? Если я правильно понял данное сообщение, то согласно ему витков цикла должно быть не более двух тысяч Апдейт: хотя возможно я просто неправильно цикл написал, с невыполнимым условием выхода из цикла Изменено 21 мая, 2019 пользователем SpiderHulk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 21 мая, 2019 Опубликовано 21 мая, 2019 · Жалоба 11 hours ago, ViKo said: Такое название теме давать может только провокатор или дурак. Делать какие-то выводы, прочитав два слова из полусотни - тоже признак... не очень умного человека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 мая, 2019 Опубликовано 21 мая, 2019 · Жалоба 45 минут назад, esaulenka сказал: Делать какие-то выводы, прочитав два слова из полусотни - тоже признак... не очень умного человека. Мне заголовка хватило. И внешним органам - тоже. И даже не два слова, а одно. Или вы не видели первоначального заголовка темы? По содержимому пробежался по диагонали. Унылое... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 мая, 2019 Опубликовано 21 мая, 2019 · Жалоба А если по сути... Стартовать отсчет времени устройство может или при включении, или от срабатыаания датчика, кнопки. Считать можно и нужно секундные импульсы, или десятые доли секунд, сотые для крутизны игрушки. Но никак не 12 МГц-овые. Тактовый генератор нужно поделить. Отсчет должен быть обратным. Загружаться 60-ю. И сравниваться с нулем. А сраанение с нулем - обычныц жлемент ИЛИ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 21 мая, 2019 Опубликовано 21 мая, 2019 · Жалоба 29 minutes ago, ViKo said: И внешним органам - тоже. Кстати, да! Учитывая время, в которое живём, лучше не провоцировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 21 мая, 2019 Опубликовано 21 мая, 2019 · Жалоба 1 час назад, esaulenka сказал: Делать какие-то выводы, прочитав два слова из полусотни Тов.майору на ещё одну звёздочку хватит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться