jenya7 0 3 апреля, 2018 Опубликовано 3 апреля, 2018 (изменено) · Жалоба Я создал Flash Update module - Tools->IP Catalog->Library->Basic Functions->On Chip Memory->Altera On-Chip Flash entity flash_update is port ( clock : in std_logic := '0'; -- clk.clk avmm_csr_addr : in std_logic := '0'; -- csr.address avmm_csr_read : in std_logic := '0'; -- .read avmm_csr_writedata : in std_logic_vector(31 downto 0) := (others => '0'); -- .writedata avmm_csr_write : in std_logic := '0'; -- .write avmm_csr_readdata : out std_logic_vector(31 downto 0); -- .readdata avmm_data_addr : in std_logic_vector(18 downto 0) := (others => '0'); -- data.address avmm_data_read : in std_logic := '0'; -- .read avmm_data_writedata : in std_logic_vector(31 downto 0) := (others => '0'); -- .writedata avmm_data_write : in std_logic := '0'; -- .write avmm_data_readdata : out std_logic_vector(31 downto 0); -- .readdata avmm_data_waitrequest : out std_logic; -- .waitrequest avmm_data_readdatavalid : out std_logic; -- .readdatavalid avmm_data_burstcount : in std_logic_vector(3 downto 0) := (others => '0'); -- .burstcount reset_n : in std_logic := '0' -- nreset.reset_n ); end entity flash_update; architecture rtl of flash_update is component altera_onchip_flash is generic ( INIT_FILENAME : string := ""; INIT_FILENAME_SIM : string := ""; DEVICE_FAMILY : string := "Unknown"; PART_NAME : string := "Unknown"; DEVICE_ID : string := "Unknown"; SECTOR1_START_ADDR : integer := 0; SECTOR1_END_ADDR : integer := 0; SECTOR2_START_ADDR : integer := 0; SECTOR2_END_ADDR : integer := 0; SECTOR3_START_ADDR : integer := 0; SECTOR3_END_ADDR : integer := 0; SECTOR4_START_ADDR : integer := 0; SECTOR4_END_ADDR : integer := 0; SECTOR5_START_ADDR : integer := 0; SECTOR5_END_ADDR : integer := 0; MIN_VALID_ADDR : integer := 0; MAX_VALID_ADDR : integer := 0; MIN_UFM_VALID_ADDR : integer := 0; MAX_UFM_VALID_ADDR : integer := 0; SECTOR1_MAP : integer := 0; SECTOR2_MAP : integer := 0; SECTOR3_MAP : integer := 0; SECTOR4_MAP : integer := 0; SECTOR5_MAP : integer := 0; ADDR_RANGE1_END_ADDR : integer := 0; ADDR_RANGE1_OFFSET : integer := 0; ADDR_RANGE2_OFFSET : integer := 0; AVMM_DATA_ADDR_WIDTH : integer := 19; AVMM_DATA_DATA_WIDTH : integer := 32; AVMM_DATA_BURSTCOUNT_WIDTH : integer := 4; SECTOR_READ_PROTECTION_MODE : integer := 31; FLASH_SEQ_READ_DATA_COUNT : integer := 2; FLASH_ADDR_ALIGNMENT_BITS : integer := 1; FLASH_READ_CYCLE_MAX_INDEX : integer := 4; FLASH_RESET_CYCLE_MAX_INDEX : integer := 29; FLASH_BUSY_TIMEOUT_CYCLE_MAX_INDEX : integer := 112; FLASH_ERASE_TIMEOUT_CYCLE_MAX_INDEX : integer := 40603248; FLASH_WRITE_TIMEOUT_CYCLE_MAX_INDEX : integer := 35382; PARALLEL_MODE : boolean := true; READ_AND_WRITE_MODE : boolean := true; WRAPPING_BURST_MODE : boolean := false; IS_DUAL_BOOT : string := "False"; IS_ERAM_SKIP : string := "False"; IS_COMPRESSED_IMAGE : string := "False" ); port ( clock : in std_logic := 'X'; -- clk reset_n : in std_logic := 'X'; -- reset_n avmm_data_addr : in std_logic_vector(18 downto 0) := (others => 'X'); -- address avmm_data_read : in std_logic := 'X'; -- read avmm_data_writedata : in std_logic_vector(31 downto 0) := (others => 'X'); -- writedata avmm_data_write : in std_logic := 'X'; -- write avmm_data_readdata : out std_logic_vector(31 downto 0); -- readdata avmm_data_waitrequest : out std_logic; -- waitrequest avmm_data_readdatavalid : out std_logic; -- readdatavalid avmm_data_burstcount : in std_logic_vector(3 downto 0) := (others => 'X'); -- burstcount avmm_csr_addr : in std_logic := 'X'; -- address avmm_csr_read : in std_logic := 'X'; -- read avmm_csr_writedata : in std_logic_vector(31 downto 0) := (others => 'X'); -- writedata avmm_csr_write : in std_logic := 'X'; -- write avmm_csr_readdata : out std_logic_vector(31 downto 0) -- readdata ); end component altera_onchip_flash; begin onchip_flash_0 : component altera_onchip_flash generic map ( INIT_FILENAME => "", INIT_FILENAME_SIM => "", DEVICE_FAMILY => "MAX 10", PART_NAME => "10M50DAF484C7G", DEVICE_ID => "50", SECTOR1_START_ADDR => 0, SECTOR1_END_ADDR => 8191, SECTOR2_START_ADDR => 8192, SECTOR2_END_ADDR => 16383, SECTOR3_START_ADDR => 16384, SECTOR3_END_ADDR => 114687, SECTOR4_START_ADDR => 114688, SECTOR4_END_ADDR => 188415, SECTOR5_START_ADDR => 188416, SECTOR5_END_ADDR => 360447, MIN_VALID_ADDR => 0, MAX_VALID_ADDR => 360447, MIN_UFM_VALID_ADDR => 0, MAX_UFM_VALID_ADDR => 16383, SECTOR1_MAP => 1, SECTOR2_MAP => 2, SECTOR3_MAP => 3, SECTOR4_MAP => 4, SECTOR5_MAP => 5, ADDR_RANGE1_END_ADDR => 360447, ADDR_RANGE1_OFFSET => 2048, ADDR_RANGE2_OFFSET => 0, AVMM_DATA_ADDR_WIDTH => 19, AVMM_DATA_DATA_WIDTH => 32, AVMM_DATA_BURSTCOUNT_WIDTH => 4, SECTOR_READ_PROTECTION_MODE => 0, FLASH_SEQ_READ_DATA_COUNT => 4, FLASH_ADDR_ALIGNMENT_BITS => 2, FLASH_READ_CYCLE_MAX_INDEX => 5, FLASH_RESET_CYCLE_MAX_INDEX => 7, FLASH_BUSY_TIMEOUT_CYCLE_MAX_INDEX => 36, FLASH_ERASE_TIMEOUT_CYCLE_MAX_INDEX => 10500000, FLASH_WRITE_TIMEOUT_CYCLE_MAX_INDEX => 9150, PARALLEL_MODE => true, READ_AND_WRITE_MODE => true, WRAPPING_BURST_MODE => false, IS_DUAL_BOOT => "False", IS_ERAM_SKIP => "True", IS_COMPRESSED_IMAGE => "True" ) port map ( clock => clock, -- clk.clk reset_n => reset_n, -- nreset.reset_n avmm_data_addr => avmm_data_addr, -- data.address avmm_data_read => avmm_data_read, -- .read avmm_data_writedata => avmm_data_writedata, -- .writedata avmm_data_write => avmm_data_write, -- .write avmm_data_readdata => avmm_data_readdata, -- .readdata avmm_data_waitrequest => avmm_data_waitrequest, -- .waitrequest avmm_data_readdatavalid => avmm_data_readdatavalid, -- .readdatavalid avmm_data_burstcount => avmm_data_burstcount, -- .burstcount avmm_csr_addr => avmm_csr_addr, -- csr.address avmm_csr_read => avmm_csr_read, -- .read avmm_csr_writedata => avmm_csr_writedata, -- .writedata avmm_csr_write => avmm_csr_write, -- .write avmm_csr_readdata => avmm_csr_readdata -- .readdata ); end architecture rtl; -- of flash_update Мне нужно два имиджа - бутлодер (CFM0) а с него я буду прожигать основную програму(CFM1-CFM2). Поэтому мне нужен Dual Compressed Images. Выставляю Assignments -> Device -> Devise and Pin Options -> Configuration -> Dual Compressed Images В генериках выставляю IS_DUAL_BOOT => "True", IS_ERAM_SKIP => "True", IS_COMPRESSED_IMAGE => "True" При компиляции получаю ошибку. Error (169130): Configuration mode specified as Remote but remote update block is not found in design Если выставляю Assignments -> Device -> Devise and Pin Options -> Configuration -> Single Compressed Image И генерики IS_DUAL_BOOT => "False", IS_ERAM_SKIP => "True", IS_COMPRESSED_IMAGE => "True" Компилируется без ошибок. Если выставляю Assignments -> Device -> Devise and Pin Options -> Configuration -> Single Compressed Image И генерики IS_DUAL_BOOT => "True", IS_ERAM_SKIP => "True", IS_COMPRESSED_IMAGE => "True" При компиляции получаю ошибку. Error (14740): Configuration mode on atom "bootloader:U_BOOTLOADER|flash_update:U_FLASH_UPDATE|altera_onchip_flash:onc hip_flash_0|altera_onchip_flash_block:altera_onchip_flash_block|ufm_block" does not match the project setting. Update and regenerate the Qsys system to match the project setting. Как бороться с этой бедой? Изменено 3 апреля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryR 0 6 апреля, 2018 Опубликовано 6 апреля, 2018 · Жалоба Configuration mode specified as Remote but remote update block is not found in design Надо сделать так, чтобы он бы found. Вставить то есть. Ибо без него вы не сможете сделать даже программную перезагрузку, и тем более не сможете сказать чипу, что он должен загрузиться из второй партиции. Блок этот правда называется не Remote Update, а Dual Configuration или Dual Boot, в этом подстава. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 10 апреля, 2018 Опубликовано 10 апреля, 2018 (изменено) · Жалоба Надо сделать так, чтобы он бы found. Вставить то есть. Ибо без него вы не сможете сделать даже программную перезагрузку, и тем более не сможете сказать чипу, что он должен загрузиться из второй партиции. Блок этот правда называется не Remote Update, а Dual Configuration или Dual Boot, в этом подстава. спасибо. вставил. entity altera_dual_config is port ( avmm_rcv_address : in std_logic_vector(2 downto 0) := (others => '0'); -- avalon.address avmm_rcv_read : in std_logic := '0'; -- .read avmm_rcv_writedata : in std_logic_vector(31 downto 0) := (others => '0'); -- .writedata avmm_rcv_write : in std_logic := '0'; -- .write avmm_rcv_readdata : out std_logic_vector(31 downto 0); -- .readdata clk : in std_logic := '0'; -- clk.clk nreset : in std_logic := '0' -- nreset.reset_n ); end entity altera_dual_config; architecture rtl of altera_dual_config is component altera_dual_boot is generic ( INTENDED_DEVICE_FAMILY : string := ""; CONFIG_CYCLE : integer := 28; RESET_TIMER_CYCLE : integer := 40 ); port ( clk : in std_logic := 'X'; -- clk nreset : in std_logic := 'X'; -- reset_n avmm_rcv_address : in std_logic_vector(2 downto 0) := (others => 'X'); -- address avmm_rcv_read : in std_logic := 'X'; -- read avmm_rcv_writedata : in std_logic_vector(31 downto 0) := (others => 'X'); -- writedata avmm_rcv_write : in std_logic := 'X'; -- write avmm_rcv_readdata : out std_logic_vector(31 downto 0) -- readdata ); end component altera_dual_boot; begin dual_boot_0 : component altera_dual_boot generic map ( INTENDED_DEVICE_FAMILY => "MAX 10", CONFIG_CYCLE => 11, RESET_TIMER_CYCLE => 16 ) port map ( clk => clk, -- clk.clk nreset => nreset, -- nreset.reset_n avmm_rcv_address => avmm_rcv_address, -- avalon.address avmm_rcv_read => avmm_rcv_read, -- .read avmm_rcv_writedata => avmm_rcv_writedata, -- .writedata avmm_rcv_write => avmm_rcv_write, -- .write avmm_rcv_readdata => avmm_rcv_readdata -- .readdata ); end architecture rtl; -- of altera_dual_config теперь проект компилируется. но непонятно как Dual Configuration мапить. component altera_dual_config is port ( avmm_rcv_address : in std_logic_vector(2 downto 0) := (others => '0'); -- avalon.address avmm_rcv_read : in std_logic := '0'; -- .read avmm_rcv_writedata : in std_logic_vector(31 downto 0) := (others => '0'); -- .writedata avmm_rcv_write : in std_logic := '0'; -- .write avmm_rcv_readdata : out std_logic_vector(31 downto 0); -- .readdata clk : in std_logic := '0'; -- clk.clk nreset : in std_logic := '0' -- nreset.reset_n ); end component; например что за адрес avmm_rcv_address и зачем все эти avmm_rcv_writedata, avmm_rcv_readdata - они есть в flash_update модуле. Изменено 10 апреля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryR 0 10 апреля, 2018 Опубликовано 10 апреля, 2018 · Жалоба А теперь почитайте документацию на все используемые блоки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 10 апреля, 2018 Опубликовано 10 апреля, 2018 (изменено) · Жалоба А теперь почитайте документацию на все используемые блоки. да читал, как же без этого. Altera On-Chip Flash расписан хорошо, все понятно, а на Dual Configuration нигде внятного описания не нашел. вот описание модуля. на странице 19 рисунок модуля и это самая емкая информация в документе. ug_m10_config.pdf Изменено 10 апреля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 29 апреля, 2018 Опубликовано 29 апреля, 2018 (изменено) · Жалоба Когда я генерировал модуль Altera On-Chip Flash в Qsys получил 5 секторов с адресами (на картинке) А в сгенерированном коде адреса совсем другие SECTOR1_START_ADDR => 0, SECTOR1_END_ADDR => 8191, SECTOR2_START_ADDR => 8192, SECTOR2_END_ADDR => 16383, SECTOR3_START_ADDR => 16384, SECTOR3_END_ADDR => 114687, SECTOR4_START_ADDR => 114688, SECTOR4_END_ADDR => 188415, SECTOR5_START_ADDR => 188416, SECTOR5_END_ADDR => 360447, Кому верить? Изменено 29 апреля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 25 сентября, 2018 Опубликовано 25 сентября, 2018 · Жалоба Такой вопрос. Судя по картинке - ID5 - это CFM0. То есть чтоб прожечь CFM1 - надо начать с ID3 (16384) по ID4 (188415) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться