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

    

Flip-fl0p

Свой
  • Публикаций

    795
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Flip-fl0p

  • Звание
    В поисках себя...
  • День рождения 03.01.1990

Контакты

  • Сайт
    http://
  • ICQ
    226550164

Информация

  • Город
    Санкт-Петербург

Старые поля

  • skype
    Flip-fl0p
  • Vkontakte
    https://vk.com/id4024060

Посетители профиля

4 608 просмотров профиля
  1. А не скажите тогда что за блок за это отвечает. Я в своем время искал похожий функционал, но не нашел. Нашёл только блок dynamic delay chain. Но это немного не то. Может пропустил чего ?
  2. Двигать биты на Altera например нельзя...
  3. Симулируйте в Modlesim. Симулятор, встроенный в Quartus, это особый способ совокуплять мозг разработчикам.
  4. От Vivado плакать хочется... На прошлой работе пытался установить его, но он так и не заработал как должен. На новой работе ставил его на чистую систему - не поставился. Переставил систему ещё раз - и о чудо ! Заработал зараза такая. Никаких отличий от первой установки не было. За исключением того, что Microsoft Visual C++ я сразу последнюю версию ставил, а не ту что шла вместе с установщиком. На каждый чих надо ждать пока он подумает. Очень непривычно после работы в Quartus. Очень странно, что такой производитель FPGA, как xilinx не может выпустить достойную среду разработки. А вот симулятор в Vivado мне поначалу даже понравился. Но никак не могу понять как перекомпилировать только тестбенч, а не перезапускать всю симуляцию.
  5. Вот ознакомьтесь с темой: http://vhdlguru.blogspot.com/2010/03/entity-instantiation-easy-way-of-port.html Думаю после прочтения отпадут все вопросы. Можно в довесок ещё и это прочитать: https://www.ics.uci.edu/~jmoorkan/vhdlref/compinst.html
  6. Конечная реализация показана на Technoligy map, где всё упаковано в LUT... Но смотреть на неё смысла нет никакого. Для правильной работы нужно разобраться в концепции синхронного проектирования. Разобраться что такое Tsetup, Thold. К чему приводят нарушения этих временных соотношений. В противном случае на выходе будет глючная фигня, работающая с постоянными сбоями. Это шаманство ни к чему. Делать нужно сразу правильно.
  7. Я не понимаю что значит перепишется. Каким значением он перепишется ? Вот примерная схема Вашей конструкции: SPI.bmp
  8. Значение в reg_Shift будет с большей вероятностью иметь значение, загружаемое в него во время reg_load ='1' . Однако из-за того, что возможно нарушения времени установки и удержания, когда произойдут одновременно события: reg_load ='1'  и falling_edge(spi_clk), то reg_shift(7) то с некоторой вероятностью будет иметь случайное значение. Это будет на практике. Если взять и немного теоретизировать и считать, что у нас не происходит нарушения времени установки и удержания, то каждый такт в reg_shift(7) будет появляться то значение, которое вы загрузили в reg_Shift. Например вы загрузили b"1111_0000", то сначала будет так: 1, 1,1,1 затем 0,0,0,0. А потом будут каждый такт нули, т.к сдвиговый регистр заполнился нулями... P.S. Иногда очень полезно код представить в виде схемы и нарисовать это на бумажке. Тогда многие вещи будут понятны сразу. В конце концов Вы кодом описываете именно схему.
  9. 1. В синтезируемом коде кнструкция "after 1 ns;" лишена смысла. Лишь только загромождает код. 2. if( reg_load ='1' ) then reg_shift <= data after 1 ns; - Это асинхронная загрузка данных в регистры. По сути такая загрузка данных несет в себе опасности столько же сколько и асинхронный сброс. В FPGA так делать неправильно, и опасно. Тем более у Вас обычный SPI, который не требует таких выкрутасов. 3. falling_edge - почему задний фронт ? Не каждая FPGA имеет "железячне" триггеры, которые работают по заднему фронту. Да и мне сложно представить задачу, где нужен действительно задний фронт. DDR интерфейсы не в счет. 3. elsif( falling_edge( spi_clk ) ) then Для очень быстрой FPGA форма меленного SPI клока - это фактически пила. Вопрос ! Как будет работать триггер, который тактируется пилой ? Удалите этот код от греха подальше. И сделайте сами по всем правилам синхронного проектирования.
  10. Очень хорошая книга, которая может Вам помочь: Уэйкерли Дж.Ф. Проектирование цифровых устройств.
  11. Вроде должно быть так: -- Text Draw Stack ----------------- for i in drawElementArray'range loop -- от 0 и до конца массива drawElementArray (просматриваем весь массив) if drawElementArray(i).pixelOn then -- Если значение pixelOn в просматириваемом массиве равно единичке rgbDrawColor := drawElementArray(i).rgb; -- То будем рисовать цветом из масива, который имеет набольший старший бит. end if; end loop; -- Иными словами у нас есть какой-то тип Record который выглядит как-то так type my_type is record pixelOn : std_logic; -- бит(признак) включенного цвета rgb : std_logic_vector(7 downto 0); -- Хранимый цвет end record; -- Зтаем из этого типа мы создаем массив type drawElementArray is array (0 to 3) of my_type; -- условием for i in drawElementArray'range loop мы просматриваем весь наш массива -- Условием if drawElementArray(i).pixelOn then мы смотрим конкретно на бит pixelOn. -- Каждый раз как pixelOn = 1 мы переменной rgbDrawColor присваиваем то значение, которыое записано в rgb в индексе данного масива. -- Иными словами у нас в переменную rgbDrawColor запишется значение из массива с максимальным индексом, где pixelOn = 1
  12. Не правильно поняли. Значение на которое каждый такт инкрементируется счетчик не зависит от длительности сигнала разрешения. Сигнал разрешения лишь говорит о том сколько времени (тактов) считать счетчику. Попробуйте счетчик описывать отдельным компонентом. А автомат управляет счетчиком только формируя сигнал разрешения. Сразу найдете где проблема.
  13. Интересно. А что говорит стандарт на язык ? Не должны разные среды разработки по-разному понимать один стандарт.
  14. 1. Не буду спорить с Вами. Но только-что лично проверял в Quartus 13.1 VHDL2008: Error (10327): VHDL error at can't determine definition of operator ""&"" -- found 4 possible definitions Но для bit_vector данная операция разрешена. Может у Вас какой-то другой софт ? 2. Лично я за то, чтобы применять только стандартные VHDL библиотеки. К ним IEEE.STD_LOGIC_ARITH.ALL, IEEE.STD_LOGIC_UNSIGNED.ALL не относятся. Но тут пусть каждый решает сам.
  15. 1. В VHDL нельзя делать конкатенацию в условии выбора case. Вводите переменную для промежуточной операции объединения: variable my_signal : bit_vector(....); ... my_signal := (vADDR(6) & vADDR(1)); ... case my_signal is 2. Не советую применять IEEE.STD_LOGIC_UNSIGNED.ALL это не соответствует стандарту на VHDL. 3. Где у Вас тут вообще преобразования типов ?