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

Pitonbl4

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Pitonbl4

  • Звание
    Участник
    Участник

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

1 056 просмотров профиля
  1. Еще раз попробовал удалить блок дма, перезапустить вивадо, создать блок дма, нажать validate design. Все сработало. Автоматом выставило правильную ширину
  2. Перезапустил vivado. В итоге вроде бы могу менять stream data width Если выставляю 64, то в tcl set_property -dict [list CONFIG.c_s_axis_s2mm_tdata_width {64}] [get_bd_cells axi_dma] Нажимаю validate WARNING: [BD 41-702] Propagation TCL tries to overwrite USER strength parameter C_M_AXI_S2MM_DATA_WIDTH(64) on '/axi_dma' with propagated value(32). Command ignored
  3. Выдает startgroup set_property -dict [list CONFIG.c_s_axis_s2mm_tdata_width {64}] [get_bd_cells axi_dma] CRITICAL WARNING: [BD 41-737] Cannot set the parameter c_s_axis_s2mm_tdata_width on /axi_dma. It is read-only. endgroup WARNING: [BD 41-702] Propagation TCL tries to overwrite USER strength parameter C_M_AXI_S2MM_DATA_WIDTH(64) on '/axi_dma' with propagated value(32). Command ignored
  4. В block design вставляю блок AXI DMA. Пытаюсь его конфигурировать. s_axis_s2mm_tdata_width должно быть 64. Но оно упорно отображает 32 бита. Как это изменить не могу понять. 1. tcl пробовал startgroup set_property -dict [list CONFIG.c_s_axis_s2mm_tdata_width.VALUE_SRC USER] [get_bd_cells axi_dma] set_property -dict [list CONFIG.c_s_axis_s2mm_tdata_width {64}] [get_bd_cells axi_dma] endgroup Но вылетает CRITICAL WARNING: [BD 41-737] Cannot set the parameter c_s_axis_s2mm_tdata_width on /axi_dma_tus. It is read-only. 2. На форуме xilinx вроде бы говорят, что необходимо все соединить в bd и нажать validate design. Ничего не изменилось. Естественно приходит сообщение: Ничего удивительного, ведь на блок дма приходит 64 бита. 3. Пытался удалить блок дма и заново создать. Не помогло. 32 бита на входе не меняются. Vivado 2017.1 Помогите пожалуйста решить проблему
  5. Добрый день! Есть два массива, скорее даже вектора размером 1024 * 16 signal arrayData : std_logic_vector((1024 * 16) - 1 downto 0) := (others => '0'); signal arrayC : std_logic_vector((length * 16) - 1 downto 0) := (others => '0'); По сути, происходит заполнение массивов 16-битными числами, а затем происходит свертка. Ничего особенного. В результате "задействованных" ресурсов fpga ~45000 LUT и 9 DSP. Деление делал через обратное умножение. Возведение в квадраты, тоже через умножение. Это столько ресурсов выжирают массивы? Сейчас хочу понять куда копать, чтобы ресурсы раза в 2 уменьшить. Спасибо)
  6. Меня особо не удивляло, что в PL должен быть статический набор переферии Так и думал. Надеялся что может есть более изящный вариант
  7. Добрый день! Есть код вида library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_arith.all; library UNISIM; use UNISIM.vcomponents.all; entity top_trigger is generic( NumOfChannel : integer := 6 --! ); port( clk_100MHz : in STD_LOGIC; --! start : in STD_LOGIC; --! data : in STD_LOGIC_VECTOR(255 downto 0); --! sig : out STD_LOGIC --! ); end top_trigger; architecture Behavioral of top_trigger is COMPONENT trigger is generic( n : integer := 64; --! param param : integer := 1; --! param length : integer := 1024 --! param ); port( clk_100MHz : in STD_LOGIC; start : in STD_LOGIC; dataIn : in STD_LOGIC_VECTOR(15 downto 0); sig : out STD_LOGIC ); END COMPONENT; signal dataOut : std_logic_vector(31 downto 0) := (others => '0'); signal start_d1 : std_logic := '0'; signal start_d2 : std_logic := '0'; begin inst_fd0: fd port map(start_d1, clk_100MHz, start); inst_fd1: fd port map(start_d2, clk_100MHz, start_d1); inst_channels_gen : for i in NumOfChannel to NumOfChannel generate inst_trigger : trigger generic map( n => 64, param => 1, length => 1024 ) port map( clk_100MHz => clk_100MHz, start => start_d2, dataIn => data(((i + 1) * 16) - 1 downto i * 16), sig => sig ); end generate; end Behavioral; Это PL часть. Сейчас хочу это все прокинуть в PS часть. В будущем, хотелось бы менять NumOfChannel из PS части. Для этого необходимо NumOfChannel убрать из generic и сделать портом. Пытаюсь так сделать, но появляются ошибки вида: actual for formal port is neither a static name nor a globally static expression; range for generate must be a static vhdl. Подскажите как это можно сделать?
  8. Добрый день! Не нашел решение такой проблемы. При чтении из файла in.txt вылетает ошибка: Error: STD_LOGIC_1164.READ(STD_ULOGIC_VECTOR) Error: Character '1' read, expected STD_ULOGIC literal. Error: STD_LOGIC_1164.READ(STD_ULOGIC_VECTOR) Error: Character '2' read, expected STD_ULOGIC literal. и т.д. Файл in.txt: 1 2 3 read.vhd use IEEE.std_logic_textio.all; use STD.textio.all; ... file in_file : text; ... read_file : process variable v_ILINE : line; variable v_data : std_logic_vector(15 downto 0); --variable v_data : integer; variable v_SPACE : character; begin file_open(in_file, "in.txt", read_mode); while(not endfile(in_file)) loop readline(in_file, v_ILINE); read(v_ILINE, v_data); --dataIn <= CONV_STD_LOGIC_VECTOR(v_data, 16); dataIn <= v_data; wait for 1 us; end loop; file_close(in_file); wait; end process; ... Если вместо variable v_data : std_logic_vector(15 downto 0); использовать variable v_data : integer; , то все работает. Хотя даже на этом форуме упоминали, что при включении use IEEE.std_logic_textio.all; все должно нормально работать. Пример брал здесь: https://www.nandland.com/vhdl/examples/example-file-io.html
  9. Оранжевым выделена линия, по которой приходят данные с pad. В самих модулях есть IDDR вида: IDDR_inst_data_hv_control : IDDR generic map ( DDR_CLK_EDGE => "OPPOSITE_EDGE", --! "OPPOSITE_EDGE", "SAME_EDGE" or "SAME_EDGE_PIPELINED" INIT_Q1 => '0', --! Initial value of Q1: '0' or '1' INIT_Q2 => '0', --! Initial value of Q2: '0' or '1' SRTYPE => "SYNC") --! Set/Reset type: "SYNC" or "ASYNC" port map ( Q1 => data_art2_odd(i), --! 1-bit output for positive edge of clock Q2 => data_art2_even(i), --! 1-bit output for negative edge of clock C => clk_art2_x1, --! 1-bit clock input CE => '1', --! 1-bit clock enable input D => data_art2(i), --! 1-bit DDR data input R => '0', --! 1-bit reset S => '0' --! 1-bit set ); Если все использовать в таком виде, то вылетит ошибка вида: [Place 30-457] The instance 'data_art2[5]_IBUF_inst' part of an IOB is driving multiple IDDR instances. One IOB can drive only one IDDR which can be packed into ILOGIC. The IDDR instances involved are: design_1_i/axi_data_provider_0/U0/Inst_data_provider/IDDR_inst_data_gen[5].IDDR_inst_data_art2 design_1_i/axi_hv_control_0/U0/Inst_form_hv/IDDR_inst_data_gen_hv_control[5].IDDR_inst_data_hv_control Думал поставить перед IDDR буфер IBUF, но это тоже не помогает. Понял, спасибо
  10. Столкнулся с такой штукой. Есть два модуля, которые на вход получают одни и те же данные и дальше их пакуют соответствующим образом. Вся система работает на 100 МГц, а данные надо принимать на 200 МГц => необходимо ставить IDDR. Т.к. один IOB может управлять одним IDDR, то решил для этого внутри каждого модуля поставить IBUF. Но проблема не решается. Все это реализовано в ZYNQ. Подскажите как можно избавиться от этой проблемы. Свести все в один модуль не вариант.
  11. Добрый день! Начал тестить mig7 c ddr3 (sdram) и получаю бред. ddr3 контроллер написан xilinx. Запись и чтение в burst режиме. Софт Vivado 2017.2 Параметры mig: PHY to Controller clock ratio: 4:1 Number of Bank machines: 4 Memory Type: components memory part: MT41j256m16xx - 107 Ordering: normal Memory address maping selection: bak-row-column ------------------------------------------------------------ Собственно по картинкам. Запись Видно, что по адресу 0x000..c0 пишется 6, по адресу 0x000..e0 - 7, по адресу 0x000..100 - 8 Чтение 0x000..c0 - 6, 0x000..e0 - 7, 0x000..100 - 7, 0x000..120 - 8 ------------------------------------------------------------- Кто сталкивался и как без костылей обходится такая проблема?
×
×
  • Создать...