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

ADA007

Свой
  • Постов

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

  • Посещение

Весь контент ADA007


  1. ARM от HiSilicon Hi3516D + OmniVision OV4689

    Есть камера, купленная на AliExpress-e на чипе Hi3516D с матрицей OmniVision OV4689. Основной вопрос: как получить видеопоток или снимок с матрицы в файл? Перепробовал различные варианты - но безуспешно. Установлена на камеру Sofia - через нее все и работает, а хотелось бы получить данные с матрицы непосредственно в файл. Может кто-то уже решал такую или подобную задачу? Буду рад любым советам или предложениям. P.S. Пробовал ffmpeg, скомпилил, натравил на /dev/viu - тот выругался и ничего не выдал на выходе...куда копать?
  2. А вот если подменить строку для выдачи data_out на => data_out <= to_stdlogicvector(to_bitvector(din) ror slash); то все прекрасно синтезится в ISE и quartus-e ... вроде бы то же самое написано по функционалу, но видать как-то там эти функции так написаны, что синтезатору они понятнее описаны.
  3. Проблема действительно не понятная...т.к. эта же конструкция в ISE синтезится на "УРА". так к примеру, кто ходчет попробовать код: library ieee; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity xxxx is port ( clk : in std_logic; rst : in std_logic; slash : in integer range 0 to 15; din : in std_logic_vector (15 downto 0); data_out : out std_logic_vector (15 downto 0) := X"0000" ); end xxxx; architecture rtl of xxxx is signal reg_empty : STD_LOGIC_VECTOR(3 DOWNTO 0):= (OTHERS => '0'); begin process (clk) begin if clk'event and clk = '1' then if rst = '1' then data_out <= X"0000"; else data_out <= din(slash-1 downto 0) & din(15 downto slash); end if; end if; end process; end architecture; В ISE 14.7 проверял - синтезируется, в QUARTUS 11.0 - выдает ошибку : Error (10394): VHDL error at xxxx.vhd: left bound of range must be a constant. Как объяснить Quartus-у , что эту конструкцию нужно построить на мультиплексорах...а не плеваться на нее...?! :laughing:
  4. Вот посмотрите (эту) статью. Как по мне, это практически исчерпывающие сведения о дешевых программаторах для Xilinx.
  5. Микросхему PHY использую LAN8810. Частота, на которой будет работать часть схемы приемо-передатчика 200 МГц планируется. Собственно в этом-то и суть, чтоб понять как подключить правильно. Прошу помощи в поиске вариантов...+ обоснований к ним, почему это правильно. Частоту 2,5 МГц - может и нет смысле пропускать через DCM. А вот 25 МГц и 125МГц - мне кажется, что есть смысл. Не зря ведь во всех примерах Xilinx пропускают системную частоту, на кот. работает проект, через DCM/PLL. Мне казалось, что это для того, чтоб компенсировать ppm генератора. Для PHY то же установлены пределы ppm, это ж не идеальный генератор. Или я заблуждаюсь? И можно частоту от PHY напрямую заводить, даже не через GBUF??? Да, можно Но почему тогда в указанных мной выше примерах (а может и не только в них, а еще где-то) сделано совсем наоборот и эта частота заходит на весь тракт приема, как клок? Или это они просто неправильно сделали? Или в ПЛИС этот момент вообще не принципиален?
  6. Спасибо за ответ. Про ресурс OpenCores я знаю. Просто там слишком навороченный МАС, мне и половины его функционала не нужно. Однако, основные вопросы были не по этому поводу. Возможно я не достаточно четко выразил свою мысль в вопросах. Постараюсь поянить: 1. Вопрос заключается в том, что многие делают именно так (tx_clk и rx_clk используют как тактовый сигнал для входных/выходных регистров работы с PHY, потом мучаются с клоковыми доменами). Но я не встречал еще реализации в которой бы tx_clk и rx_clk использовались только как CE для входных/выходных регистров приема/отправки данных с PHY. Собственно сам вопрос : почему реализованно именно так? может есть какие-то особенности? не лучше ли реализовать так, как я предложил? как вообще правильно клоки с PHY использовать? 2. Для реализации 10/100/1000 нужно заводить разные частоты на МАС ПЛИС 2,5МГц ; 25МГц и 125 МГц .... Вопрос: как правлиьно это сделать , если DCM/PLL ниже 5 МГц не воспринимает?
  7. Приветствую всех! Есть несколько вопросов к гуру по реализации Ethernet на FPGA. Я рассматривал несколько примеров реализации МАС-а для ПЛИС (один - от mentor-a, что на ftp лежит и другой с сайта fpga4fun) и меня смутило несколько моментов: 1- Это то, что частоты tx_clk и rx_clk, которые выходят из PHY используются для тактирования регистров, соответствующих веток ПО. Не правильнее было бы использовать для тактирования системную частоту (при условии, что она выше, чем tx_clk и rx_clk) для тактирования регистров, а уже tx_clk и rx_clk использовать в качестве сигнала разрешения? В чем подвох? или я что-то упустил? :laughing: * Плюс к выше описанному мы получаем разные клоковые домены по веткам приема и передачи в МАС. Потому, что от PHY tx_clk формируется от внешнего кварцевого резонатора, а rx_clk - из несущей частоты в линии связи. Естественно они будут немного отличаться друг от друга, что добавляет проблем. 2- Это то, что для тактирования частотами tx_clk и rx_clk было бы неплохо пропустить их предварительно через DCM или хотяб через PLL. Однако, (не знаю , как в других сериях ПЛИС), в Spartan6 на DCM нельзя подать частоту ниже 5 МГц. А для 10 Мб\с по MII надо как раз 2,5 МГц. И как тут быть , если надо реализовать 10\100 МБ\с?
  8. Программа для прошивки называется iMpact ... в ПЛИС зашивается *.bit файл, в флэш - *.mcs файл..его нужно предварительно в этой же программе сделать из bit-файла
  9. В общем так и сделал в итоге. Как-то оно работает...но фронты осциллом нет возможности пока что посмотреть, а на временной sdf модели они относительно друг друга на 6 пс разбегаются. В общем DDS вроде бы работает, но на будущее надо будет или singl-ended тактирование далать или еще лучше от отдельного генератора тактировать. Любые попытки обмануть ISE и подсунуть в банку с питанием 3,3 стандарт 2,5 LVDS или LVCMOS ... я все варианты там перебрал - ну никак не хочет он воспринимать это безобразие. Спасибо всем за помощь.
  10. Т.е. правильно будет, если я возьму с DCM CLK0 и CLK180 ...пропущу их через два триггра, тактируя их частотой 200 МГц и запихаю их в IOB? Если для выходных сигналов, кот. выходят из триггеров указать в ucf INST "signal_name" IOB = TRUE; - от это значит, что он будет запихнут в IOB, я правильно понял?
  11. тогда на PAR fail-ится ERROR:Place:864 - Incompatible IOB's are locked to the same bank 5 Conflicting IO Standards are: IO Standard 1: Name = LVDS_25, VREF = NR, VCCO = 2.50, TERM = NONE, DIR = OUTPUT, DRIVE_STR = NR List of locked IOB's: RCLK_N_50_OUTP RCLK_P_50_OUTP IO Standard 2: Name = LVCMOS33, VREF = NR, VCCO = 3.30, TERM = NONE, DIR = OUTPUT, DRIVE_STR = NR List of locked IOB's: MRST_OUTP
  12. А что нужно написать?...на LVDS_33 он тоже ругается, что не поддреживается! :rolleyes:
  13. Да...я понимаю, что плохо..но эт требование заказчика. Написал в коде = i_OBUFDS_50 : OBUFDS generic map ( CAPACITANCE => "NORMAL", -- "LOW", "NORMAL", "DONT_CARE" IOSTANDARD => "LVDS_25") -- "DEFAULT" port map ( O => RCLK_P_50_OUTP, -- Diff_p output OB => RCLK_N_50_OUTP, -- Diff_n output I => clk_50_s -- Buffer input ); При этом в UCF = NET "RCLK_P_50_OUTP" LOC = B15 | IOSTANDARD = LVCMOS33 | SLEW = FAST; NET "RCLK_N_50_OUTP" LOC = A15 | IOSTANDARD = LVCMOS33 | SLEW = FAST; Получил FAIL в MAP два аналогичных для P и N сигнала = ERROR:Pack:2907 - The I/O component "RCLK_N_50_OUTP" has an illegal IOSTANDARD value. The IOBS component is configured to use differential signaling and can not use single-ended IOSTANDARD value LVCMOS33. Two ways to rectify this issue are: 1) Change the IOSTANDARD value to a differential standard. 2) Correct the I/O connectivity by instantiating a single-ended I/O buffer. В Pin Planer-e можно выбрать стандарты только на 2,5 LVDS и др. ... а на 3.3 нет ничего подходящего. И как быть?
  14. Доброго всем времени суток. Столкнулся с задачей выдачи дифференциального тактового импульса на внешнюю микруху. Вроде бы ниечго такого, а как это сделать правильно? ПЛИС использую Virtex4 тактовая 200 МГц тактировать надо AD9854asq частотой 50 МГц двумя развернутыми относительно друг друга на 180 сигналами.... в ДШ написано 3,3 CMOS level. Банк ПЛИС, подключенный к ногам такторования питается от 3.3В. 1) Думал в начале использовать OBUFDS - который преобразовует singl ended в differential - но тут оказался облом, походу 3,3 он не поддерживает! или я что-то упустил? 2) Можно конечно же прям с DCM взять CLK0 и CLK180 и пустить их на ноги ПЛИС, но надо фронты чем-то выровнять в таком случае. Как это правильно сделать? На форуме наткнулся на подобную тему .. но у меня не получилось LVDS_25 запихать в LVCMOS33 ... Кто в курсе, подскажите, как правильно...а то я уже 2-й день ищу....
  15. Доброго времени суток, форумчане. Пытаюсь разобраться в алгоритме БПФ по бабочке...никак не дается мне понимание всего происходящего, что там заложено. Задача изначально состоит в том, чтобы как можно оптимальнее с учетом специфики ПЛИС реализовать данный алгоритм. Входными данными является уровень, принимаемый с АЦП...т.е. операции необходимо проводить с вещественными числами (дискретное преобразование). На просторах интернета реализаций под ПЛИС нашел немного... но так и не смог до конца разобраться. Вот к примеру из wiki бабочка по 2-м отсчетам записана , как И как мне из этого выудить спектр? Если входные отсчеты (данные из АЦП) это они обозначили как х0 и х1, то Х0 и Х1 - это уже отсчеты спектра или как? и как узнать дискретность этого спектра (Х0 и Х1 отстоят друг от друга на 1 Гц ... или от чего это зависит вообще)? Хорошо, теперь возьмем преобразование по 4-м отсчетам. это выглядет как-то так. Так получается что у нас для расчета каждого нового Х0 используется все 4-е отсчета...т.е. если надо будет бпф radix 256 сделать, что получится для каждого отсчета будет 256 операций? Или его можно разбить как-то (прореживание вроде)? В общем, если бы был реальный пример с числами и вычислениями, то до меня бы дошло быстрее...или я один такой тупой, что в формулах в чистом виде разобраться не могу И в догонку еще вопрос...зачем тогда использовать в ПЛИС ДСП для БПФ, если оно ограничивается сложениями и вычитаниями? или это может пригодиться, только для вычислений с комплексными числами?
  16. Мне в свое время помогла вот эта статья настроить все под stm32.
  17. Да...iosifk и Maverick помогли, за что большое и человеческое им спасибо.
  18. Статья по это теме была опубликована в журнале Компоненты и технологии №3 2014 г.. Процедура клонирования там расписана подробно, а так же в рамках статьи расписал назначение полей памяти и возможные способы ее использования. :rolleyes:
  19. Да, изготовленный мною девайс и под linux и под windows проверял - все работает. Контрольную сумму вписывал при помощи драйвера - записывал целым блоком user area.
  20. Я тут только что проверил алгоритм подсчета вот этот // calculate checksum checksum = 0xAAAA; for (i = 0; i < eeprom->size/2-1; i++) { value = output[i*2]; value += output[(i*2)+1] << 8; checksum = value^checksum; checksum = (checksum << 1) | (checksum >> 15); } output[eeprom->size-2] = checksum; output[eeprom->size-1] = checksum >> 8; Он рабочий....мне удалось с его помощью посчитать выложенный вами dump и свой тоже - все сошлось (правда пришлось немного допилить,чтобы идея суммы сохранилась)...сырцы прилагаю, если что ЗЫ: за код больно не бить....писал на скорую руку main.c.tar
  21. Да...прошивал...кабель определяется impact-ом как HS2...на днях еще попробую ChipScope
  22. Все оказалось до безобразия просто. Так и получилось...пришлось написать свой софт, который использует функцию FT_EE_UAWrite. В общем алгоритм следующий, испытанный для FT2232H, которая была у меня под рукой: 1. В FT_Prog-e настраиваем Product Description, Manufacturer, Serial Number, порты в режим 245FIFO и драйвер D2xx - записываем в EEPROM. 2. Прописываем User_Area из дампа в посте , любезно, предоставленного от rloc вписываем данные. User_Area там по адресам с 0х0010 по 0х002С в конце добавляем необходимое кол-во байт 0х00 в зависимости от типа ftdi и используемой eeprom. Контрольная сумма считается автоматически драйвером ftdi при записи eeprom. Расположение ног расписано несколькими постами выше. ADBUS0 и ADBUS4 замыкать не нужно - и так все работает! В общем можно это отдельной статьей оформить, чтоб не затерялась инфа на просторах форума, главное, чтобы Digilent не обиделись :rolleyes: ЗЫ: vid/pid нужно оставлять оригинальными, а иначе не из той области eeprom будет вычитываться.
  23. Написано же в кабеле 1029, а используется 1303 - обновляем прошивку кабеля. 1. Install latest iMPACT software 2. Connect the USB Programming cable to the USB port of the PC. 3. Open DOS window and set the following environment variable to true by typing the command on the DOS prompt: SET XIL_IMPACT_ENV_USB2_FORCE_CPLD_UPDATE=TRUE 4. Type, IMPACT on DOS prompts to invoke iMPACT software. 5. When IMPACT will open please cancel the project load windows and double click on the ”Boundary Scan” icon in Flow window. 6. Select the source of the "Platform Cable USB" cable by selecting menu -> ”output” -> Cable setup -> -> Communication mode -> Xilinx USB cable -> and press OK. 7. IMPACT software will show you the Warning message ”WARNING: iMPACT - Platform Cable USB firmware must be updated. This operation may take up to 10 seconds. Please do not stop the process or disconnect the cable prior to completion. The cable STATUS LED will be RED for the duration of the update process.” press OK and wait for the update to be completed. 8. Once the update completed, please ”Exit” iMPACT 9. Go to DOS prompt windows which is already open and SET the environment variable to false: SET XIL_IMPACT_ENV_USB2_FORCE_CPLD_UPDATE=FALSE 10. Exit the DOS window by typing exit on the dos prompt (this is very important). 11. That’s it !! the USB firmware is updated. 12. Please refer online for more information on Cable USB FAQ.
×
×
  • Создать...