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

Maverick_

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

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

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


  1. используй library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; тогда все будет ок) (я использую vhdl2008)
  2. возможно 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; такую конструкцию имели ввиду
  3. я все время использую для описания мультиплексора (VHDL) ptr_read_next <= ptr_read + 1 when rd_en_int = '1' else ptr_read; или под клоком в процессе с помощью if else
  4. если посмотреть его репозиторий много плюшек можно найти... )))
  5. к BSACPLD рекомендую к использованию корки I2C по ссылке
  6. привет, у тебя нет переделанного модуля I2C для 7 битной адресации - просто микросхема не поддерживает 10 битную адресацию отбой - разобрался... все работает работает в связке с stm32 логика мастер <=> процессор слейв
  7. 1200 мне кажется только для сериализатора/десериализатора в MIPI (схема которая превращает паралельные данные в последовательные для передачи по LVDS) а не для всей схемы Если прочитать примечание то частота для данных 1200/8=150 600 тоже довольно высокая частота - проверьте точно необходима?
  8. смотрели дизайн-пример https://www.gowinsemi.com/en/support/ip_detail/4/ и https://www.gowinsemi.com/en/support/database/2056/? пусть даже на другой плис... к каждой IP core среда должна генерировать файл констрейнов... во всяком случае у Intel, Xilinx так происходит... сгенерируйте пример и посмотрите что да как PS я с GOWIN не работал...
  9. применение IP core двухклоковое фифо между SDRAM и логикой - как решение проблеми IP core само пропишет ограничения для CDC в sdc файл
  10. 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;
  11. Вам надо сгенерировать билиотеку для моделирования для IP core и в do файле подключить или запускать симуляцию из под Вашей студии
  12. тогда работа с описаниями по ссилкам https://github.com/tirfil/VhdI2CSlave https://github.com/murattcan/FPGA-I2C-Slave можно поискать еще и включить в поиск модули на verilog кроме vhdl - уверен их много, просто я потратил на поиск 2 мин PS возможна дополнительная работа напильником
  13. Возьмите плату на stm32 и организуйте обмен для отладки
  14. https://ru.scribd.com/document/78090253/Carrier-Recovery-and-Automatic-Gain-Control-on-FPGA-s-based-platform-IEEE-802-15-3c-mm-Wave-PHY-Application
  15. можете просто скомпилировать и посмотреть тактовую частоту для конвеерного счетчика - просто любопытство в описании модуля для создания паузы - проблема ж частоты именно в "большой" разрядности счетчика например 64 бита и/или 32 бита и/или 24 бита менять разрядность в строке width_g: natural := 64; -- Must be divisible by parts_g. в некоторых памятях например в DDR есть так называемый burst режим -когда данные пишутся в память непрерывно по 16/32/64 слова/байта вот можно использовать например если тактовая отличается в разы - в DDR3/4 используется также при работе с трансиверами например 10G - 64 bit данные
  16. в IP core есть модуль DMA или VDMA (для видео) если есть может стоит попробовать его? пакетная передача в видео - ставиться фифо на размер строки видео и таким образом формируется так называемый пакет как avalon или axi stream интерфейсе таким образом можно считать пакеты - формировать кадры использование стандарных интерфейсов увеличивает читабельность описания - avalon или axi stream
  17. не пробовали pipelineCounter для повышения частоты для задания паузы?
  18. variable mem : mem_type := (others => (others => '0')); у меня строка используется для инициализации памяти - после того как плис будет запрограммипрвана, что должно быть в памяти и все ... с коркой MIPI я бы работал через двухклоковое фифо 1 частота работы модуля чаще она будет высокой 2 частота MIPI И смотрел (на логике) за сигналами фифо full/empty - для старта можно вывел их на светодиоды/лог анализатор - убедиться что нет потерь данных возможно лучше сделал бы пакетное фифо - мое на форуме как пример
  19. что значит "Когда они готовы генерит сигнал Cam1_Mipi_Data_Read_Clk " ? счетчики cam1_data_buffer(cam1_write_ptr) <= Cam1_Mipi_Data_Out0 & Cam1_Mipi_Data_Out1; cam1_write_ptr <= rMod(cam1_write_ptr + 1, MAX_BUF_CNT); работают паралельно т.е. одновременно - пишиут и читают из одной ячейки памяти, судя по Вашему процессу Тактовая частота на модулях должна быть постоянно - работает модуль в данный момент времени или нет определяет сигнал разрешения valid для данных или enable для модуля - например library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity modulo_cnt is port ( clk : in std_logic; rst : in std_logic; -- inputs max_cnt : in std_logic_vector; en : in std_logic; -- outputs zero : out std_logic ); end modulo_cnt; architecture rtl of modulo_cnt is -- normalize the unconstrained input alias max_cnt_norm : std_logic_vector(max_cnt'length - 1 downto 0) is max_cnt; -- normalized unconstrained input signal cnt : unsigned(max_cnt_norm'left downto 0); begin counter_pr : process (clk) begin if (rising_edge(clk)) then if (rst = '1') then cnt <= unsigned(max_cnt_norm) - 1; zero <= '0'; elsif (en = '1') then -- is counting enabled? if (cnt = 1) then -- use pipeline to assert zero zero <= '1'; -- together with cnt=0 else zero <= '0'; end if; if (zero = '1') then -- check if counter reached zero cnt <= unsigned(max_cnt_norm) - 1; -- reload with modulo_value-1 else cnt <= cnt - 1; -- decrement counter end if; end if; end if; end process counter_pr; end rtl; попробуйте промоделировать - разберитесь с enable для модуля valid/ready для данных модуль принимает данные по valid выдает модуль обработанные данные по сигналу ready Для следующего модуля ready превращается в сигнал valid промоделируйте двухклоковое фифо ... чаще всего FSM работает с сигналами valid/ready - т.е. дает разрешения работы или запрещает модуля или процесса
×
×
  • Создать...