Перейти к содержанию
    

Как сделать лабораторную на FPGA XC7A15T ?

Добрый вечер. Вопрос по проекту в рамках курса схемотехники. Есть две отладочные платы FPGA XC7A15T, соединены двумя проводами: синим и красным. На одной плате запущено нечто, что генерирует сигналы по которым вторая плата (с таймером) понимает что первая соединена с ней двумя проводами. Если обрыв красного провода, то остановка таймера, если синего то "взрыв" (звуковой сигнал), если таймер заканчивает отсчёт то "взрыв" Собственно проблема с реализацией таймер. Как я полагаю это должен быть счётчик числа импульсов делать, подсчитывающий количество импульсов от тактового генератора. Но как начать неясно совсем. Мой актуальный уровень знаний и умений, это программирование с помощью языка SystemVerilog простейших логических схем. На всякий случай прикрепляю материалы своего курса

Отладочная плата на основе FPGA XC7A15T.pdf

Лабораторная работа номер один этой мой уровень знаний и умений, со второй пока не справился. Самих микросхем у меня на руках нет, они доступны мне только на учебных парах. В списке рекомендованной нам литературы фигурирует книга "Цифровая схемотехника и архитектура компьютера" Второе издание

Пререквизит к лабораторным работам - установка Vivado.pdf

Лабораторная работа №1 – комбинационная логика.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обычный цикл как в программировании ведь не подойдёт. Так как генератор имульсов это миллионы сигналов в секунды, а таймер должен работать хотя бы несколько десятков секунд. Это значит миллионы знаков < или > в коде, а как мне стало известно на одной из лекций всего один такой знак это "стена" кода. Я прав?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

52 minutes ago, SpiderHulk said:

Обычный цикл как в программировании ведь не подойдёт. Так как генератор имульсов это миллионы сигналов в секунды, а таймер должен работать хотя бы несколько десятков секунд. Это значит миллионы знаков < или > в коде, а как мне стало известно на одной из лекций всего один такой знак это "стена" кода. Я прав?

Скорее всего не правы. 

Событие запуска таймера может быт разным  например  длительное отсутствие импульсов на обеих проводах. 

Ну и намек - таймеров может быть не один.

Начнем с аналогии -  Опишите как бы вы это в программе делали?  Что такое таймер (что он делает) ?  И какой элемент в FPGA можно сделать который будет выполнять туже функцию? 

Удачи! Rob. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На счёт бомбы не понял. 
А на счёт таймера обычно делают так:
 

Каждый новый такт увеличивают значение переменной на 1.
После увеличения проверяют не равно ли новое значение тому на котором нужно остановиться или что-то сдалать.


Само собой счётчик вниз делается точно так же только вначале мы загружаем в переменную некое число, а вместо сложения мы вычитаем единицу. И соответственно сравниваем с нулём.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, MegaVolt сказал:

Каждый новый такт увеличивают значение переменной на 1.
После увеличения проверяют не равно ли новое значение тому на котором нужно остановиться или что-то сдалать

Вот можно ли так делать если предполагаемых сравнений очень много? Это ведь не программирование, а некая логическая схема должна получиться. Например вот подобный цикл можно реализовывать на верилоге? (здесь использую синтаксис си) 

int i=0;

while(i<10000000) {

i=i+1;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, RobFPGA сказал:

Опишите как бы вы это в программе делали?

Самое простое что мне приходит в голову это взять генератор 12 мегагерц и как то считать количество импульсов поступивших от этого генератора, сравнивая с заданным, пока оно не будет достигнуто, дальше сигнал на подрыв. Но правомерен такой подход если это заданное число скажем 1.200.000.000 и надо будет сделать столько же сравнений? Какая в итоге вообще логическая схема сформируется? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

9 minutes ago, SpiderHulk said:

 Но правомерен такой подход если это заданное число скажем 1.200.000.000 и надо будет сделать столько же сравнений? Какая в итоге вообще логическая схема сформируется? 

Вы в программе делаете миллионы отдельных IF для сравнения  или сравнивает меняющиеся значения на выходе счетчика с константой ? 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такое название теме давать может только провокатор или дурак.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 это лампочка, то она загорится. Я прав в своих ожиданиях?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При переходе к 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
 

Вот как раз первое сообщение. Это не то самое о чём я ранее высказывал беспокойство? Что цикл не может иметь слишком много витков? Если я правильно понял данное сообщение, то согласно ему витков цикла должно быть не более двух тысяч

 

Апдейт: хотя возможно я просто неправильно цикл написал, с невыполнимым условием выхода из цикла

Изменено пользователем SpiderHulk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, ViKo said:

Такое название теме давать может только провокатор или дурак.

Делать какие-то выводы, прочитав два слова из полусотни - тоже признак... не очень умного человека.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, esaulenka сказал:

Делать какие-то выводы, прочитав два слова из полусотни - тоже признак... не очень умного человека.

Мне заголовка хватило. И внешним органам - тоже. И даже не два слова, а одно. 

Или вы не видели первоначального заголовка темы? 

По содержимому пробежался по диагонали. Унылое... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если по сути... 

Стартовать отсчет времени устройство может или при включении, или от срабатыаания датчика, кнопки. 

Считать можно и нужно секундные импульсы, или десятые доли секунд, сотые для крутизны игрушки. Но никак не 12 МГц-овые. Тактовый генератор нужно поделить. 

Отсчет должен быть обратным. Загружаться 60-ю. И сравниваться с нулем. А сраанение с нулем  - обычныц жлемент ИЛИ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 minutes ago, ViKo said:

И внешним органам - тоже.

Кстати, да! Учитывая время, в которое живём, лучше не провоцировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, esaulenka сказал:

Делать какие-то выводы, прочитав два слова из полусотни

Тов.майору на ещё одну звёздочку хватит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...