|
|
  |
Использовать програмную память. |
|
|
|
Jan 30 2018, 10:37
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
У меня FPGA (EP3C25F324I7N) подключен к памяти EPCS16SI8N в которую прописывает програму (файл jic или pof). Вопрос можно ли использовать эту память для записи своей информации и если да как получить доступ к этим пинам? Как я понимаю нужно создать SPI компонент и замапить эти пины. И потом обращаться к памяти как обычно. Вопрос как знать где заканчивается програма? Где начинается свободное место куда можно писать? Пытаюсь определить эти пины через Pin Planner. nCS (PIN_H5) - его вообще там нет. Другие видны но в поле Direction стоит Unknown и при попытке редактирования выскакивает - This is a read-only item.
Сообщение отредактировал Jenya7 - Jan 30 2018, 13:03
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 31 2018, 07:20
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(AVR @ Jan 31 2018, 13:11)  Подозреваю, что там SPI (по аналогии с Xilinx, там после загрузки ПЛИС эти выводы становились доступны пользователю), а значит можно и без ниоса, только на логике такое будет не так чтобы сложно, но придется повозиться. я делаю как написано Цитата On the Dual-purpose pins page (Assignments > Devices > Device and Pin Options), ensure that the following pins are assigned to the respective values: ■ Data[0] = Use as regular I/O ■ Data[1] = Use as regularr I/O ■ DCLK = Use as regular I/O ■ FLASH_nCE/nCS0 = Use as regular I/O но все равно доступа к пинам нет. Цитата(doom13 @ Jan 31 2018, 13:16)  Можно воспользоваться ASMI-контроллером (ALTASMI_PARALLEL) - не придется тогда на SPI наворачивать протокол обмена с EPCS. не вижу такой опции. а как его подключить к проекту? у меня пины то спиаевские подключены к памяти. ааа...да выглядит неплохо.
Сообщение отредактировал Jenya7 - Jan 31 2018, 07:25
|
|
|
|
|
Jan 31 2018, 07:54
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Jenya7 @ Jan 30 2018, 13:37)  У меня FPGA (EP3C25F324I7N) подключен к памяти EPCS16SI8N в которую прописывает програму (файл jic или pof). Вопрос можно ли использовать эту память для записи своей информации и если да как получить доступ к этим пинам?
Как я понимаю нужно создать SPI компонент и замапить эти пины. И потом обращаться к памяти как обычно. Вопрос как знать где заканчивается програма? Где начинается свободное место куда можно писать? Для своей инфы использовать конечно можно. Размер прошивки - либо в доке на Ваш девайс, либо размер rpd-файла (когда jic выгоняете можно поставить галку, чтоб rpd сформировало, это и есть прошивка, если удалённым загрузчиком грузить, только опции компрессии уберите, чтоб увидеть максимальный размер бинарника). Да, уже не помню, возможно для 3-го Циклона надо на размер rbf-файла смотреть.
|
|
|
|
|
Jan 31 2018, 08:01
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(doom13 @ Jan 31 2018, 13:54)  Для своей инфы использовать конечно можно. Размер прошивки - либо в доке на Ваш девайс, либо размер rpd-файла (когда jic выгоняете можно поставить галку, чтоб rpd сформировало, это и есть прошивка, если удалённым загрузчиком грузить, только опции компрессии уберите, чтоб увидеть максимальный размер бинарника).
Да, уже не помню, возможно для 3-го Циклона надо на размер rbf-файла смотреть. а. да. rpd это же raw data по идее размер rpd это размер занимаемой памяти.
|
|
|
|
|
Jan 31 2018, 11:34
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Мегавизард сгенерировал такой код Код LIBRARY ieee; USE ieee.std_logic_1164.all;
LIBRARY altera_mf; USE altera_mf.all;
ENTITY EPCS_CONT IS PORT ( addr : IN STD_LOGIC_VECTOR (23 DOWNTO 0); clkin : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rden : IN STD_LOGIC; read : IN STD_LOGIC; write : IN STD_LOGIC; busy : OUT STD_LOGIC; data_valid : OUT STD_LOGIC; dataout : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); illegal_write : OUT STD_LOGIC ); END EPCS_CONT;
ARCHITECTURE SYN OF epcs_cont IS
SIGNAL sub_wire0 : STD_LOGIC; SIGNAL sub_wire1 : STD_LOGIC; SIGNAL sub_wire2 : STD_LOGIC; SIGNAL sub_wire3 : STD_LOGIC_VECTOR (7 DOWNTO 0);
COMPONENT altasmi_parallel GENERIC ( data_width : STRING; epcs_type : STRING; intended_device_family : STRING; lpm_hint : STRING; lpm_type : STRING; page_size : NATURAL; port_bulk_erase : STRING; port_fast_read : STRING; port_illegal_erase : STRING; port_illegal_write : STRING; port_rdid_out : STRING; port_read_address : STRING; port_read_rdid : STRING; port_read_sid : STRING; port_read_status : STRING; port_sector_erase : STRING; port_sector_protect : STRING; port_shift_bytes : STRING; port_wren : STRING; port_write : STRING; use_eab : STRING ); PORT ( illegal_write : OUT STD_LOGIC; read : IN STD_LOGIC; addr : IN STD_LOGIC_VECTOR (23 DOWNTO 0); busy : OUT STD_LOGIC; clkin : IN STD_LOGIC; data_valid : OUT STD_LOGIC; datain : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rden : IN STD_LOGIC; write : IN STD_LOGIC; dataout : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END COMPONENT;
BEGIN illegal_write <= sub_wire0; busy <= sub_wire1; data_valid <= sub_wire2; dataout <= sub_wire3(7 DOWNTO 0);
ALTASMI_PARALLEL_component : ALTASMI_PARALLEL GENERIC MAP ( data_width => "STANDARD", epcs_type => "EPCS16", intended_device_family => "Cyclone III", lpm_hint => "UNUSED", lpm_type => "altasmi_parallel", page_size => 256, port_bulk_erase => "PORT_UNUSED", port_fast_read => "PORT_UNUSED", port_illegal_erase => "PORT_UNUSED", port_illegal_write => "PORT_USED", port_rdid_out => "PORT_UNUSED", port_read_address => "PORT_UNUSED", port_read_rdid => "PORT_UNUSED", port_read_sid => "PORT_UNUSED", port_read_status => "PORT_UNUSED", port_sector_erase => "PORT_UNUSED", port_sector_protect => "PORT_UNUSED", port_shift_bytes => "PORT_UNUSED", port_wren => "PORT_UNUSED", port_write => "PORT_USED", use_eab => "ON" ) PORT MAP ( read => read, addr => addr, clkin => clkin, datain => datain, rden => rden, write => write, illegal_write => sub_wire0, busy => sub_wire1, data_valid => sub_wire2, dataout => sub_wire3 );
END SYN; Подключаю в свой проект Код component EPCS_CONT is port ( addr : IN STD_LOGIC_VECTOR (23 DOWNTO 0); clkin : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rden : IN STD_LOGIC; read : IN STD_LOGIC; shift_bytes : IN STD_LOGIC; write : IN STD_LOGIC; busy : OUT STD_LOGIC; data_valid : OUT STD_LOGIC; dataout : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); illegal_write : OUT STD_LOGIC ); end component;
signal addr_sig : STD_LOGIC_VECTOR (23 DOWNTO 0); signal datain_sig : STD_LOGIC_VECTOR (7 DOWNTO 0); signal rden_sig : STD_LOGIC; signal read_sig : STD_LOGIC; signal shift_bytes_sig : STD_LOGIC; signal write_sig : STD_LOGIC; signal busy_sig : STD_LOGIC; signal data_valid_sig : STD_LOGIC; signal dataout_sig : STD_LOGIC_VECTOR (7 DOWNTO 0); signal illegal_write_sig : STD_LOGIC;
U_EPCS_CONT : EPCS_CONT port map ( addr => addr_sig, clkin => CLK_30MHZ, datain => datain_sig, rden => rden_sig, read => read_sig, shift_bytes => shift_bytes_sig, write => write_sig, busy => busy_sig, data_valid => data_valid_sig, dataout => dataout_sig, illegal_write => illegal_write_sig ); При компиляции получаю ошибку Error (12152): Can't elaborate user hierarchy "EPCS_CONT:U_EPCS_CONT|altasmi_parallel:ALTASMI_PARALLEL_component" Нашел проблему - должно быть page_size => 1 в Single byte write режиме. А что лучше использовать Single byte write или Page write? и вообще там кучу всяких пинов можно подключить, вопрос они нужны или нет?
Сообщение отредактировал Jenya7 - Jan 31 2018, 17:17
Эскизы прикрепленных изображений
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|