-
Постов
3 864 -
Зарегистрирован
Сообщения, опубликованные Maverick_
-
-
я не вижу предварительной буферизации перед записью в память; арбитра доступа нет...
-
Большое спасибо
-
-
On 7/8/2024 at 1:52 PM, Вадим Н. said:
- ну да, так всё и планируется. в ближайшее время сделаю примерчик в подтверждение концепции и закину сюда. надеюсь ))
Про Dual Port SRAM - красиво, но у нас пока точно будет SPI.
Память внутри fpga с помощью нее можно правильно организовать обмен
-
У процессора есть возможность подключения SRAM памяти?
если есть то лучше сделать - fpga имитирует работу SRAM памяти - процессор видит fpga как внешнюю SRAM память
тогда берете двухклоковую память один порт заводите на на логику имитирующую SRAM память второй порт на Вашу логику
+ 1-2 сигнала от процессора (GPIO) для квітірования операций (готовность данних, какие-то команди)
В случае с SPI тоже самое процессор мастер. FPGA слейв. Есть протокол общения. Логика FPGA декодирует протокол.
В зависимости например данние или команди пишет в блочную память (двухклоковую и двухпортовую) по определенним адресам команди/данние
И дает сигнал квитирования дальнейшей логике для дальнейшей обработки...
по 1-2 сигнала от процессора (GPIO) для квітірования операций - логика понимает по каким адресам надо считать
Для процессора наоборот - логика пишет в память и квитирует по gpio (возможно на преривание для процессора)
Таким образом можно передавать информацию размером в несколько сотен байт/слов
Можно организовать даблбуффер в FPGA для обмена...
пришла команда с процессора дай мне такие то данние - мастер видает N байт/слов(главное клок SPI) - логика слейва видает нужную информацию
-
Огромное спасибо
-
Интересует референсый дизайн "Serial LVDS High-Speed ADC Interface" xapp524- zip архив
https://docs.amd.com/v/u/en-US/xapp524-serial-lvds-adc-interface
Заранее благодарен
-
37 minutes ago, Beby said:
Обязательно ещё раз гляну - с прошлого раза (лет 20 назад) запомнилось только, что оно не IEEE, теперь же гляну чьё именно.
И Xilinx, и Pango функцию 'conv_integer' просто принужнает исользовать: см. эталонные описния RAM в xst.pdf и ADS_Synthesis_User_Guide.pdf.используй
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;
тогда все будет ок) (я использую vhdl2008)
-
1 hour ago, Beby said:
Но это же - статика... с заранее предопределённым количеством состояний.
А мне нужна была полная динамика: A, Mux - параметризированы (Sel под них подстраивается).
Кстати, саму конструкцию я посмотрел где-то во времена ISE 10.1/11.1 (для Virtex-5) в исходниках (или библиотеках) Xilinx или даже в xst.pdf того времени - уже не помню.
При предопределённом варианте мультиплексора использую With-Select или When-When-Else (иногда Case, и если уж совсем припрёт if-elsif-else),.. и то, если не надо описывать много состояний или нет смысла конструкцию свернуть. Ключевым требованием в моём описании является минимизации возможностей посадить опечатку, вторичным - именование сигналов, которые переживут оптимизацию и будут доступны в FPGA Editor'е (куда как приятнее видеть подходящий к BRAM сигнал xx_LRAM_WE, чем net0078352).1. conv_integer - IEEE.std_logic_unsigned, std_logic - живёт в соседнем IEEE.std_logic_1164. Соответственно теперь даже мыслей нет, что могло подразумеваться под: "написать в соответствии со стандартом языка".
2. и что-то не могу понять, где я использовал "умножения для типа std_logic_vector" ?
- cnMux_W - generic positive,
- conv_integer - даёт integer,
- на всякий случай: signal Mux: std_logic_vector(cnMux_W-1 downto 0);возможно
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity demux is generic ( SEL_W : natural := 4 ); port ( -- inputs din: in std_logic; sel: in std_logic_vector (SEL_W-1 downto 0); -- outputs data_out: out std_logic_vector (2**SEL_W-1 downto 0) ); end demux; architecture rtl of demux is begin demux_pr: process(sel, din) begin -- set all the outputs to '0' to avoid inferred latches data_out <= (others => '0'); -- Set input in correct line data_out(to_integer(unsigned(sel))) <= din; end process; end rtl;
такую конструкцию имели ввиду
-
On 4/24/2024 at 2:25 PM, Beby said:
Забыл, есть ещё одна грабля при описании мультиплексора для ADS от PDS 2023.2-SP1:
Вот так - можно:
Mux <= A( cnMux_W*conv_integer(Sel) + cnMux_W-1 downto cnMux_W*conv_integer(Sel) );
А вот так - нельзя (Error: The left bound of range is not a constant expression):
Mux <= A( cnMux_W*conv_integer(Sel+1)-1 downto cnMux_W*conv_integer(Sel) );
Но эта проблема была ещё в 2023.1 при синтезе Synplify, поэтому я не сразу вспомнил.
Как-то в ISE на такие проблемы ни разу не наступал.я все время использую для описания мультиплексора (VHDL)
ptr_read_next <= ptr_read + 1 when rd_en_int = '1' else ptr_read;
или под клоком в процессе с помощью if else
-
17 hours ago, BSACPLD said:
Немного оффтоп, но у того же человека есть весьма неплохие корки для AXI:
https://github.com/alexforencich/verilog-axi
https://github.com/alexforencich/verilog-axis
Использую их вместо корок от Xilinx - проект легко переносится хоть на PangoMicro, хоть на любого другого производителя.
Тоже рекомендую к использованию.
если посмотреть его репозиторий много плюшек можно найти... )))
-
2 hours ago, Worldmaster said:
Это кому вопрос?
к BSACPLD
рекомендую к использованию корки I2C по ссылке
-
On 3/9/2024 at 11:05 PM, BSACPLD said:
А чем Вас готовый и отлаженный модуль не устраивает?
Вот, например:
https://github.com/alexforencich/verilog-i2c
Сам я не любитель использовать чужой код, но этот модуль написан на мой взгляд весьма неплохо.
Использую его уже третий год в своих проектах - пока никаких проблем не было.
Да и документирован он довольно неплохо.
привет, у тебя нет переделанного модуля I2C для 7 битной адресации - просто микросхема не поддерживает 10 битную адресацию
отбой - разобрался...
все работает
работает в связке с stm32
логика мастер <=> процессор слейв
-
1200 мне кажется только для сериализатора/десериализатора в MIPI (схема которая превращает паралельные данные в последовательные для передачи по LVDS) а не для всей схемы Если прочитать примечание то частота для данных 1200/8=150
600 тоже довольно высокая частота - проверьте точно необходима?
-
смотрели дизайн-пример https://www.gowinsemi.com/en/support/ip_detail/4/ и https://www.gowinsemi.com/en/support/database/2056/?
пусть даже на другой плис...
к каждой IP core среда должна генерировать файл констрейнов... во всяком случае у Intel, Xilinx так происходит...
сгенерируйте пример и посмотрите что да как
PS я с GOWIN не работал...
-
-
применение IP core двухклоковое фифо между SDRAM и логикой - как решение проблеми
IP core само пропишет ограничения для CDC в sdc файл
-
1 hour ago, Worldmaster said:
Эти операторы нормально синтезируются?
Да
-
7 minutes ago, Worldmaster said:
А на vhdl есть синтезируемый блок сдвига или нужно городить что то свое?
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity shift_example is Port ( input_number : in STD_LOGIC_VECTOR (7 downto 0); shift_amount : in INTEGER; result_left : out STD_LOGIC_VECTOR (7 downto 0); result_right : out STD_LOGIC_VECTOR (7 downto 0)); end shift_example; architecture Behavioral of shift_example is begin -- Сдвиг влево для умножения result_left <= input_number sll shift_amount; -- Сдвиг вправо для деления result_right <= input_number srl shift_amount; end Behavioral;
-
8 hours ago, Worldmaster said:
Чего то не очень.
MyIODel:IODELAY GENERIC MAP (C_STATIC_DLY=>55 ) PORT MAP ( DO=>dout, DF=>df, DI=>sdram_clk, <- сюда приходим с PLL SDTAP=>'0', SETN=>setn, VALUE=>value ); MySDRAM: SDRAM_Controller_HS_Top port map ( O_sdram_clk => O_sdram_clk, O_sdram_cke => O_sdram_cke, O_sdram_cs_n => O_sdram_cs_n, O_sdram_cas_n => O_sdram_cas_n, O_sdram_ras_n => O_sdram_ras_n, O_sdram_wen_n => O_sdram_wen_n, O_sdram_dqm => O_sdram_dqm, O_sdram_addr => O_sdram_addr, O_sdram_ba => O_sdram_ba, IO_sdram_dq => IO_sdram_dq, I_sdrc_clk => sdrc_clk, I_sdram_clk => dout, <------------------------ затем вот сюда I_sdrc_rst_n => rst_n, I_sdrc_cmd_en => I_sdrc_cmd_en, I_sdrc_cmd => I_sdrc_cmd, I_sdrc_precharge_ctrl => I_sdrc_precharge_ctrl, I_sdram_power_down => I_sdram_power_down, I_sdram_selfrefresh => I_sdram_selfrefresh, I_sdrc_addr => I_sdrc_addr, I_sdrc_dqm => I_sdrc_dqm, I_sdrc_data => I_sdrc_data, I_sdrc_data_len => I_sdrc_data_len, O_sdrc_data => O_sdrc_data, O_sdrc_init_done => O_sdrc_init_done, O_sdrc_cmd_ack => O_sdrc_cmd_ack );
ERROR (CK0018) : Instance 'SDRAM/MySDRAM/MyIODel' is not connected to buffer WARN (ST0001) : Ignored static timing analysis because of the failure of circuit analysis checking
Можно конечно использовать задержку PLL но там углы слишком большие и почему то перестает работать модуль при 90 градусном сдвиге. Но зато пропадают ошибки SDRAM.
Вам нужен
как я понимаю
-
15 minutes ago, Xagen said:
Всё делал по юзер гайду. Сгенерировал IP ядро, запустил его экзампл дизайн. Добавил файлы для моделирования. Через инструменты PDS скомпилировал библиотеки для всех плис и для всех типов моделирования. В настройках проекта указал пути до библиотек и до исполняемого файла моделилки. Запустил поведенческое моделирование прямо из PDS. Получившийся лог скинул выше.
Вообще там не очень много опций для компилирования библиотек. А скрипты для запуска моделирования среда готовит сама. Поэтому не понимаю где я могу ошибиться. Разве что нужно какие-то опции для моделилки через tcl скрипт самому указывать, но я не знаю как я должен понять какие именно.
Я могу моделировать простые проекты, которые сам пишу. Они не содержат каких-то зашифрованных файлов и используют стандартные GTP ячейки. Как только пытаюсь тоже самое проделать с их IP ядрами, в которых эти зашифрованные файлы есть, сразу ошибки. Для моделирования использовал и modelsim и questasim. результат одинаковый. Опыта с modelsim'ом у меня мало конечно, раньше всегда пользовался Aldec'ом, но тут он не поддерживается как я понял.
P.S. тот же проект прекрасно синтезируется.
Вам надо сгенерировать билиотеку для моделирования для IP core и в do файле подключить или запускать симуляцию из под Вашей студии
-
19 minutes ago, Worldmaster said:
Стм то что тут решит. В идеале конечно и2ц слецв модель и в моделсим можно было бы покрутить.
тогда работа с описаниями по ссилкам
https://github.com/tirfil/VhdI2CSlave
https://github.com/murattcan/FPGA-I2C-Slave
можно поискать еще и включить в поиск модули на verilog кроме vhdl - уверен их много, просто я потратил на поиск 2 мин
PS возможна дополнительная работа напильником
-
Возьмите плату на stm32 и организуйте обмен для отладки
-
Что не так с CSI?
в Работаем с ПЛИС, области применения, выбор
Опубликовано · Пожаловаться
Возьмите сохраните какую то область изображения в блочной памяти или не несколько строк (посмотрите есть ли реакция на свет - писксели меняют значения)
потом данные передайте на комп например через юарт например
или посмотрите на них в внутрисхемном отладчике
убедитесь что принимаете с камеры правильные данные
потом тоже самое после вычитки с ddr памяти