Alex77 4 18 апреля, 2019 Опубликовано 18 апреля, 2019 (изменено) · Жалоба однажды стертый блок (состояние все "FF") можно сколь угодно записывать информацией до состояния (состояние все "00") (Пример: было после стирания FF, записали первый раз 0x0f, и можно потом записать 0x00, апосля только стирание ). время стирания всего блока обычно равно времени полного программирования оного (точное время зависит от расположения звёзд). ПС: и запись не 1.2 микро а милисекунды. Изменено 18 апреля, 2019 пользователем Alex77 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 1 19 апреля, 2019 Опубликовано 19 апреля, 2019 · Жалоба 21 hours ago, Alex77 said: ПС: и запись не 1.2 микро а милисекунды. Да, опечатался Про объяснение понял, но как воспользоваться этим - не понятно - я же не храню информацию о том что после стирания (выставили 0xFF) я записал 0x0F, а следовательно могу записать 0x0A например. Но спасибо за информацию, я этого не знал. Я экспериментировал с указанным кодом и если выставить стирание не 256кбайт, а 1024, то пишет он все равно первые 256, а дальше зависает. Но скорее всего это опять моя невнимательность и где-то допущена ошибка. Хотя мне хватает режима стирания 256 и его записи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 19 апреля, 2019 Опубликовано 19 апреля, 2019 · Жалоба процесс программирования это есть запись 0 на позицию 1. те каждый байт можно "шить" до восьми раз. как стирается именно эта микросхема я не знаю. аналогичные стираются только блоками по 64-256кб за раз или вся микросхема. процесс программирования обычно это запись во внутренний буфер микросхемы (256-512 байт) с последующим программированием соответствующих ячеек памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 19 апреля, 2019 Опубликовано 19 апреля, 2019 · Жалоба Quote можно сколь угодно записывать информацией до состояния (состояние все "00") Теперь буду знать, почему я не могу перезаписать байты в своей epcq256, спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 19 апреля, 2019 Опубликовано 19 апреля, 2019 (изменено) · Жалоба On 4/17/2019 at 6:25 PM, Lutovid said: Я понимаю, что скорость не будет высокой, но через джтаг пишется-то прошива во флеш быстрее, а учитывая что я хочу записывать 32 мегабайта - я поседею, пока это все писаться будет. чисто ради интереса. Я свою epcq256 (32 мегабайта тоже) стираю полностью ровно по даташиду ~240сек. А пишу в нее через pcie. Выходит чуть быстрее, чем через jtag. Процесс стирания не подконтрольный, там никак не ускорить. Где то и выходит на круг все 4.5мин Изменено 19 апреля, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 1 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба Всем спасибо, запись заработала нормально! Правда есть еще 1 вопрос. Решил попробоватьь сконфигурировать флешку с двумя прошивами. Настройки выставил следующие: Размеры прошив 12.3 МБ и 29.7 МБ соответственно. то есть во флешке по адресу 0x1080000 (c учетом удвоения адреса) будет лежать вторая прошива - это в хексредакторе я и наблюдал. Общий размер итоговой прошивы 47МБ Флешка 128МБ так что все вроде бы ок. Но в результате заливки через джтаг если делать верификацию - она фэйлится: Performing Erase Operation... Erase Operation successful. Performing Program and Verify Operations... Program/Verify Operation failed. Byte 16777216 does not match (FF != 20) ERROR: [Labtools 27-3144] Invalid option: Byte 16777216 does not match (FF != 20) program_hw_cfgmem: Time (s): cpu = 00:00:16 ; elapsed = 00:06:06 . Memory (MB): peak = 7032.930 ; gain = 0.000 ; free physical = 13965 ; free virtual = 55011 ERROR: [Common 17-39] 'program_hw_cfgmem' failed due to earlier errors. В чем может быть проблема? Подскажите пожалуйста Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 1 hour ago, Lutovid said: В чем может быть проблема? Подскажите пожалуйста Посмотрите в мануале на плату особенности подключения линий A24 и A25 флеш. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 1 7 мая, 2019 Опубликовано 7 мая, 2019 · Жалоба 15 hours ago, aaarrr said: Посмотрите в мануале на плату особенности подключения линий A24 и A25 флеш. Извините за мою непонятливость, я уже читал про них в мануале. Написано: Multiple bitstreams can be stored in the linear BPI flash memory. The two most significant address bits (A25, A24) of the flash memory are connected to DIP switch SW16 positions 1 and 2, respectively, and to the bank 65 RS1 and RS0 pins of the FPGA. By placing valid bitstreams at different offset addresses in the flash memory, various bitstreams can be selected to configure the FPGA by appropriately setting the DIP switch SW16. Я не хочу переключать свичами адрес старта, я хочу запустить вторую прошивку через hwicap по адресу, который задам. Поэтому я выставил свич в 0 позицию(те переключатели, которые отвечают за адрес). А M вектор выставил в мастер BPI Видимо я опять чего-то не учел... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 7 мая, 2019 Опубликовано 7 мая, 2019 · Жалоба 4 minutes ago, Lutovid said: bank 65 RS1 and RS0 pins of the FPGA Эти пины надо задействовать: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 1 7 мая, 2019 Опубликовано 7 мая, 2019 · Жалоба 14 minutes ago, aaarrr said: Эти пины надо задействовать: Большое спасибо! Действительно дело в этом, надо будет почитать что это за пины и зачем их отдельно задавать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 1 17 апреля, 2020 Опубликовано 17 апреля, 2020 · Жалоба Возникла старая проблема, которую пока накак не получается решить. Вставил emc в дизайн согласно примеру.(картинка) Код rtl блока просто выдран из примера(у них он вставлен во враппер, я вынес отдельно) library IEEE; use IEEE.STD_LOGIC_1164.ALL; library UNISIM; use UNISIM.VCOMPONENTS.ALL; use unisim.vcomponents.STARTUPE3; entity Linear_flash_interface is port ( Clk_out: in STD_LOGIC; Linear_Flash_address_in : in STD_LOGIC_VECTOR ( 25 downto 0 ); Linear_Flash_address : out STD_LOGIC_VECTOR ( 25 downto 0 ); Linear_Flash_adv_ldn_in : in STD_LOGIC; Linear_Flash_adv_ldn : out STD_LOGIC; Linear_Flash_ce_n : in std_logic_vector (0 downto 0); Linear_Flash_wait : in STD_LOGIC_VECTOR ( 0 to 0 ); Linear_Flash_wait_out : out STD_LOGIC_VECTOR ( 0 to 0 ); Linear_Flash_oe_n_in : in STD_LOGIC_VECTOR ( 0 to 0 ); Linear_Flash_oe_n : out STD_LOGIC_VECTOR ( 0 to 0 ); Linear_Flash_we_n_in : in STD_LOGIC; Linear_Flash_we_n : out STD_LOGIC; RESET : in STD_LOGIC; mem_dq_io : inout STD_LOGIC_VECTOR ( 0 to 11 ); mem_dq_t : in STD_LOGIC_VECTOR ( 15 downto 0 ); mem_dq_i : out STD_LOGIC_VECTOR ( 0 to 15 ); mem_dq_o : in STD_LOGIC_VECTOR ( 15 downto 0 ) ); end Linear_flash_interface; architecture STRUCTURE of Linear_flash_interface is signal dq_o : std_logic_vector (3 downto 0); signal dq_o_e, dq_i_e_int : std_logic_vector (15 downto 0); signal dq_t : std_logic_vector (3 downto 0); signal dq_t_e : std_logic_vector (15 downto 0); signal dq_i : std_logic_vector (3 downto 0); signal dq_i_e : std_logic_vector (0 to 11); --------------------------------------------- constant ADD_PIPELINTE : integer := 8; signal pipe_signal : std_logic_vector(ADD_PIPELINTE-1 downto 0); signal PREQ_int : std_logic; signal PACK_int : std_logic; signal cnt : integer := 0; signal div_temp : std_logic := '0'; signal startupe3_eos : std_logic; signal GPIO_LED_0_LS: STD_LOGIC; signal GPIO_LED_1_LS: STD_LOGIC; signal GPIO_LED_2_LS: STD_LOGIC; signal GPIO_LED_3_LS: STD_LOGIC; signal GPIO_LED_4_LS: STD_LOGIC; signal GPIO_LED_5_LS: STD_LOGIC; signal GPIO_LED_6_LS: STD_LOGIC; signal GPIO_LED_7_LS: STD_LOGIC; --------------------------------------------- begin PREQ_REG_P:process(Clk_out)is begin if(Clk_out'event and Clk_out = '1') then if(reset = '1')then pipe_signal(0) <= '0'; elsif(PREQ_int = '1')then pipe_signal(0) <= '1'; end if; end if; end process PREQ_REG_P; PIPE_PACK_P:process(Clk_out)is begin if(Clk_out'event and Clk_out = '1') then if(reset = '1')then pipe_signal(ADD_PIPELINTE-1 downto 1) <= (others => '0'); else pipe_signal(1) <= pipe_signal(0); pipe_signal(2) <= pipe_signal(1); pipe_signal(3) <= pipe_signal(2); pipe_signal(4) <= pipe_signal(3); pipe_signal(5) <= pipe_signal(4); pipe_signal(6) <= pipe_signal(5); pipe_signal(7) <= pipe_signal(6); if (cnt >= 50000000) then div_temp <= not(div_temp); cnt <= 0; else cnt <= (cnt + 1); end if; GPIO_LED_0_LS <= not(div_temp); GPIO_LED_1_LS <= '0'; GPIO_LED_2_LS <= '0'; GPIO_LED_3_LS <= '0'; GPIO_LED_4_LS <= '0'; --startupe3_eos; GPIO_LED_5_LS <= '0'; GPIO_LED_6_LS <= '0'; GPIO_LED_7_LS <= not (startupe3_eos); end if; end if; end process PIPE_PACK_P; PACK_int <= pipe_signal(7); Linear_Flash_address(25 downto 0) <= Linear_Flash_address_in(25 downto 0); Linear_Flash_adv_ldn <= Linear_Flash_adv_ldn_in; Linear_Flash_oe_n(0) <= Linear_Flash_oe_n_in(0); Linear_Flash_we_n <= Linear_Flash_we_n_in; Linear_Flash_wait_out(0) <= Linear_Flash_wait(0); dq_t_e(15 downto 0) <= mem_dq_t(15 downto 0); mem_dq_i <= dq_i_e( 0 to 11) & dq_i; dq_o_e(15 downto 0) <= mem_dq_o; STARTUPE3_inst : component STARTUPE3 ----------------------- generic map ( PROG_USR => "FALSE", -- Activate program event security feature. SIM_CCLK_FREQ => 0.0 -- Set the Configuration Clock Frequency(ns) for simulation. ) port map ( CFGCLK => open, -- 1-bit output: Configuration main clock output CFGMCLK => open, -- 1-bit output: Configuration internal oscillator clock output DI => dq_i, -- 4-bit output: Allow receiving on the D input pin EOS => startupe3_eos, -- 1-bit output: Active-High output signal indicating the End Of Startup PREQ => open, -- 1-bit output: PROGRAM request to fabric output DO => dq_o_e(3 downto 0), -- 4-bit input: Allows control of the D pin output DTS => dq_t_e(3 downto 0), -- 4-bit input: Allows tristate of the D pin FCSBO => Linear_Flash_ce_n(0), -- 1-bit input: Contols the FCS_B pin for flash access FCSBTS => '0', -- 1-bit input: Tristate the FCS_B pin GSR => '0', -- 1-bit input: Global Set/Reset input (GSR cannot be used for the port) GTS => '0', -- 1-bit input: Global 3-state input (GTS cannot be used for the port name) KEYCLEARB => '1', -- 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM) PACK => PACK_int, -- 1-bit input: PROGRAM acknowledge input USRCCLKO => Clk_out, -- 1-bit input: User CCLK input USRCCLKTS => '0', -- 1-bit input: User CCLK 3-state enable input USRDONEO => '1', -- 1-bit input: User DONE pin output control USRDONETS => '1' -- 1-bit input: User DONE 3-state enable output ); mem_dq_iobuf_4 : IOBUF port map ( I => dq_o_e(4), IO => mem_dq_io(0), O => dq_i_e(11), T => dq_t_e(4) ); mem_dq_iobuf_5 : IOBUF port map ( I => dq_o_e(5), IO => mem_dq_io(1), O => dq_i_e(10), T => dq_t_e(5) ); mem_dq_iobuf_6 : IOBUF port map ( I => dq_o_e(6), IO => mem_dq_io(2), O => dq_i_e(9), T => dq_t_e(6) ); mem_dq_iobuf_7 : IOBUF port map ( I => dq_o_e(7), IO => mem_dq_io(3), O => dq_i_e(8), T => dq_t_e(7) ); mem_dq_iobuf_8 : IOBUF port map ( I => dq_o_e(8), IO => mem_dq_io(4), O => dq_i_e(7), T => dq_t_e(8) ); mem_dq_iobuf_9 : IOBUF port map ( I => dq_o_e(9), IO => mem_dq_io(5), O => dq_i_e(6), T => dq_t_e(9) ); mem_dq_iobuf_10 : IOBUF port map ( I => dq_o_e(10), IO => mem_dq_io(6), O => dq_i_e(5), T => dq_t_e(10) ); mem_dq_iobuf_11 : IOBUF port map ( I => dq_o_e(11), IO => mem_dq_io(7), O => dq_i_e(4), T => dq_t_e(11) ); mem_dq_iobuf_12 : IOBUF port map ( I => dq_o_e(12), IO => mem_dq_io(8), O => dq_i_e(3), T => dq_t_e(12) ); mem_dq_iobuf_13 : IOBUF port map ( I => dq_o_e(13), IO => mem_dq_io(9), O => dq_i_e(2), T => dq_t_e(13) ); mem_dq_iobuf_14 : IOBUF port map ( I => dq_o_e(14), IO => mem_dq_io(10), O => dq_i_e(1), T => dq_t_e(14) ); mem_dq_iobuf_15 : IOBUF port map ( I => dq_o_e(15), IO => mem_dq_io(11), O => dq_i_e(0), T => dq_t_e(15) ); end STRUCTURE; Дальше ноги идут непосредственно на выход. В такой конфигурации все работает хорошо, но как только я убираю ila читаться из флешки перестает... В превую очередь я грешил на констрэйнты, но они заданы согласно даташиту #### Max Tco -- Clock to input delay for flash set tco_max 5.5 set tco_min 5.5 #### Trace delays for VCU108 board set tdata_trace_delay_max 0.25 set tdata_trace_delay_min 0.25 set tclk_trace_delay_max 0.2 set tclk_trace_delay_min 0.2 set startup_delay_max 7.000 set startup_delay_min 1.350 set board_del_max 1.000 set board_del_min 0.500 set_input_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tco_max + $tdata_trace_delay_max+ $tclk_trace_delay_max + $startup_delay_max + $board_del_max] [get_ports {mem_dq_io[*]}] set_input_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tco_min + $tdata_trace_delay_min+ $tclk_trace_delay_min + $startup_delay_min + $board_del_min] [get_ports {mem_dq_io[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $startup_delay_max + $board_del_max] [get_ports {mem_dq_io[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $startup_delay_min + $board_del_min] [get_ports {mem_dq_io[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $board_del_max] [get_ports {Linear_Flash_address[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $board_del_min] [get_ports {Linear_Flash_address[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $board_del_max] [get_ports {Linear_Flash_oe_n[0]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $board_del_min] [get_ports {Linear_Flash_oe_n[0]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $board_del_max] [get_ports Linear_Flash_we_n] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $board_del_min] [get_ports Linear_Flash_we_n] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $board_del_max] [get_ports Linear_Flash_adv_ldn] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $board_del_min] [get_ports Linear_Flash_adv_ldn] #### Input delay constraints (max/min) for Linear_flash_wait[0] set_input_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tco_max + $tdata_trace_delay_max + $tclk_trace_delay_max + $board_del_max] [get_ports {Linear_Flash_wait[0]}] set_input_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tco_min + $tdata_trace_delay_min + $tclk_trace_delay_min + $board_del_min] [get_ports {Linear_Flash_wait[0]}] set_input_delay -max [expr $tdata_trace_delay_max + $tclk_trace_delay_max + $board_del_max] [get_ports RESET] set_input_delay -min [expr $tdata_trace_delay_min - $tclk_trace_delay_max + $board_del_min] [get_ports RESET] Так же я с такими проблемами сталкивался когда есть кривые комбинационные схемы или есть тайминг игнор на некоторые цепи и он некорректен. Но в данном случае этого нет. Попробовал зафиксировать положение блока в констрейнтах - это так же результата не дало. Так же попробовал перейти на более новую вивадо - тоже без результата. Частоты выставил как в примере - так что тут тоже проблем вроде не должно быть. Подскажите пожалуйста, где может быть проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться