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

Maverick_

Модератор
  • Постов

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

Сообщения, опубликованные Maverick_


  1. Возьмите сохраните какую то область изображения в  блочной памяти или не несколько строк (посмотрите есть ли реакция на свет - писксели меняют значения)

    потом данные передайте на комп например через юарт например

    или посмотрите на них в внутрисхемном отладчике 

    убедитесь что принимаете с камеры правильные данные

    потом тоже самое после вычитки с ddr памяти

     

  2. On 7/8/2024 at 1:52 PM, Вадим Н. said:

    - ну да, так всё и планируется. в ближайшее время сделаю примерчик в подтверждение концепции и закину сюда. надеюсь ))

     

    Про Dual Port SRAM - красиво, но у нас пока точно будет SPI.

     

     

    Память внутри fpga с помощью нее можно правильно организовать обмен

  3. У процессора есть возможность подключения SRAM памяти?

    если есть то лучше сделать - fpga имитирует работу SRAM памяти - процессор видит fpga как внешнюю SRAM память

    тогда берете двухклоковую память один порт заводите на на логику имитирующую SRAM память второй порт на Вашу логику

    + 1-2 сигнала от процессора (GPIO) для квітірования операций (готовность данних, какие-то команди)

    В случае с SPI тоже самое процессор мастер. FPGA слейв. Есть протокол общения. Логика FPGA декодирует протокол.

    В зависимости например данние или команди пишет в блочную память (двухклоковую и двухпортовую) по определенним адресам команди/данние

    И дает сигнал квитирования дальнейшей логике для дальнейшей обработки...

    по 1-2 сигнала от процессора (GPIO) для квітірования операций - логика понимает по каким адресам надо считать 

    Для процессора наоборот - логика пишет в память и квитирует по gpio (возможно на преривание для процессора)

    Таким образом можно передавать информацию размером в несколько сотен байт/слов  

    Можно организовать даблбуффер в FPGA  для обмена...

    пришла команда с процессора дай мне такие то данние - мастер видает N байт/слов(главное клок SPI) - логика слейва видает нужную информацию

     

  4. 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)

  5. 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;

    такую конструкцию имели ввиду

  6. 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

  7. 17 hours ago, BSACPLD said:

    Немного оффтоп, но у того же человека есть весьма неплохие корки для AXI:

    https://github.com/alexforencich/verilog-axi

    https://github.com/alexforencich/verilog-axis

    Использую их вместо корок от Xilinx - проект легко переносится хоть на PangoMicro, хоть на любого другого производителя.

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

    если посмотреть его репозиторий много плюшек можно найти... )))

  8. On 3/9/2024 at 11:05 PM, BSACPLD said:

    А чем Вас готовый и отлаженный модуль не устраивает?

    Вот, например:

    https://github.com/alexforencich/verilog-i2c

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

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

    Да и документирован он довольно неплохо.

    привет, у тебя нет переделанного модуля I2C для 7 битной адресации - просто микросхема не поддерживает 10 битную адресацию

    отбой - разобрался...

    все работает

    работает в связке с stm32

    логика мастер <=> процессор слейв

  9. 1200 мне кажется только для сериализатора/десериализатора в MIPI (схема которая превращает паралельные данные в последовательные для передачи по LVDS) а не для всей схемы Если прочитать примечание то частота для данных 1200/8=150 

    600 тоже довольно высокая частота - проверьте точно необходима?

  10. смотрели дизайн-пример https://www.gowinsemi.com/en/support/ip_detail/4/   и    https://www.gowinsemi.com/en/support/database/2056/?

    пусть даже на другой плис...

    к каждой IP core среда должна генерировать файл констрейнов... во всяком случае у Intel, Xilinx так происходит...

    сгенерируйте пример и посмотрите что да как

    PS я с GOWIN не работал...

     

  11. 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;

     

  12. 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.

     

    Вам нужен

    image.thumb.png.cca82e76393b4c7e27fb2461b4ef5118.png

    как я понимаю

  13. 15 minutes ago, Xagen said:

    Всё делал по юзер гайду. Сгенерировал IP ядро, запустил его экзампл дизайн. Добавил файлы для моделирования. Через инструменты PDS скомпилировал библиотеки для всех плис и для всех типов моделирования. В настройках проекта указал пути до библиотек и до исполняемого файла моделилки. Запустил поведенческое моделирование прямо из PDS. Получившийся лог скинул выше.

    Вообще там не очень много опций для компилирования библиотек. А скрипты для запуска моделирования среда готовит сама. Поэтому не понимаю где я могу ошибиться. Разве что нужно какие-то опции для моделилки через tcl скрипт самому указывать, но я не знаю как я должен понять какие именно.

    Я могу моделировать простые проекты, которые сам пишу. Они не содержат каких-то зашифрованных файлов и используют стандартные GTP ячейки. Как только пытаюсь тоже самое проделать с их IP ядрами, в которых эти зашифрованные файлы есть, сразу ошибки. Для моделирования использовал и modelsim и questasim. результат одинаковый. Опыта с modelsim'ом у меня мало конечно, раньше всегда пользовался Aldec'ом, но тут он не поддерживается как я понял.

    P.S. тот же проект прекрасно синтезируется.

    Вам надо сгенерировать билиотеку для моделирования для IP core и в do файле подключить или запускать симуляцию из под Вашей студии

  14. 19 minutes ago, Worldmaster said:

    Стм то что тут решит. В идеале конечно и2ц слецв модель и в моделсим можно было бы покрутить. 

    тогда работа с описаниями по ссилкам

    https://github.com/tirfil/VhdI2CSlave

    https://github.com/murattcan/FPGA-I2C-Slave

    можно поискать еще и включить в поиск модули на verilog кроме vhdl - уверен их много, просто я потратил на поиск 2 мин

    PS возможна дополнительная работа напильником

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