|
Загрузка в active serial и режим user i/o для ASDO + nCSO, Квартус не дает делать user I/O при выборе загрузки с EPCS, Cyclone II |
|
|
|
Nov 21 2013, 21:24
|
Знающий
   
Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107

|
Вот какие грабли. Хотел сделать так, чтобы можно было обновлять EPCS4 прямо из EP2C5, в котором живет проект с PCI устройством. Повелся на то, что символ EP2C5 с сайта Альтеры, был нарисован так, что оба сигнала ASDO и nCSO там обозначены просто как user I/O. Когда дошло дело до программирования, то вдруг оказывается, что при выборе в качестве режима конфигурирования active serial пины двойного назначения nCSO и ASDO становятся доступными только на вход. А мне то как раз и надо там иметь выходы, причем именно с тем же смыслом, что и на этапе загрузки.
Два вопроса: 1) Отчего квартус не дает сделать мне там выходы? 2) Можно ли его обмануть? Ну, например, я скажу ему, что режим у меня вовсе не active serial, а какой-нибудь иной, чтобы он разблокировал пины, затем я сделаю sof (или даже pof), воткну его руками в проект прошивки для EPCS4 и залью в EEPROM. Это заработает?
В общем-то неохота лишние "макароны" на плату навешивать, цепляя ASDO и nCSO к резервным I/O.
еще такой вопрос. Сделал совсем простой проект счетчика светодиодом помигать, чтобы проверить первую плату. По JTAG работает, через EEPROM - нет. Причем сама EPCS4 зашивается правильно и проверяется. Сел все проверять по новой, так ничего и не обнаружил такого. От безысходности снял галку "compressed bitstream" в настройках устройства. И без нее все работает. Что это такое? Что-то я раньше не замечал, чтобы сжатие битстрима приводило к отказу загрузки. Скорость DCLK выбрана медленная.
Сообщение отредактировал Hoodwin - Nov 21 2013, 21:52
|
|
|
|
|
 |
Ответов
(1 - 12)
|
Nov 22 2013, 07:41
|
Группа: Участник
Сообщений: 11
Регистрация: 3-04-08
Пользователь №: 36 451

|
Цитата(Hoodwin @ Nov 22 2013, 01:24)  при выборе в качестве режима конфигурирования active serial пины двойного назначения nCSO и ASDO становятся доступными только на вход В настройках проекта в разделе девайс есть кнопка "Device and Pin Options..." там закладка "Dual-Purpose Pins". Именно там задаётся, как ведут себя некоторые системные пины после конфигурации. Обычно по умолчанию они отключаются в третье состояние или остаются системными, поэтому надо сначала задать режим пользовательского пина, а затем с этой опцией перекомпилировать, чтобы суметь использовать его в своём проекте.
Сообщение отредактировал Mihey yxNet - Nov 22 2013, 07:43
|
|
|
|
|
Nov 22 2013, 07:53
|
Группа: Участник
Сообщений: 11
Регистрация: 3-04-08
Пользователь №: 36 451

|
В самих настройках не даёт выбрать другой тип пинов? Или ругается при компиляции? Сама возможность выставить такие опции в указанной вкладке при выставленном активном последовательном конфигурировании (в соседней вкладке) у меня по крайней мере в 9.0 была и как опция воспринималась. Даже несмотря на директиву "As input tri-stated" для Unused Pins.
Сообщение отредактировал Mihey yxNet - Nov 22 2013, 08:03
|
|
|
|
|
Nov 22 2013, 11:48
|
Местный
  
Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056

|
Если хотите использовать ПЛИС для программирования EPCS, то Вам необходимо использовать мегафункцию ALTASMI_PARALLEL. Во вложении пример её использования. CODE EPCS_BRIDGE ( input clk_epcs, // - такт для EPCS (20 МГц) input clk_host, // - такт для управляющей логики input [7:0] ctrl_in, // - шина данных для регистра управления input wr_ctrl, // - разрешение записи в регистр управления input [23:0] address_in, // - начальный адрес адрес для чтения/записи EPCS (автоинкремент) input wr_address, // - разрешение записи начального адреса input [7:0] data_in, // - шина данных input wr_data, // - разрешение записи данных output wr_full, // - переполнение FIFO для записи input rd_data, // - строб для чтения данных (запрос, 1 байт) output [7:0] data_out, // - последний прочитанный байт output busy - // флаг занятости (1 - идёт выполнение команды) ) ; Краткая инструкция для данного модуля: Для подключения к проекту нужно добавить в проект файл EPCS_BRIDGE.qip. Для разрешения операций стирания/записи необходимо записать в регистр управления последовательность байт: 'E', 'N', 'A'. Перед тем как программировать EPCS нужно её стереть, для этого необходимо записать в регистр управления последовательность байт: 'E', 'R', 'S'. Размер записываемого блока памяти должен быть кратен 256 байтам. Для запрещения операций стирания/записи необходимо записать в регистр управления последовательность байт: 'D', 'I', 'S'. P.S. Если будете использовать мой модуль не забудьте перегенерить мегафунции под Вашу EPCS.
|
|
|
|
|
Nov 22 2013, 12:31
|
Знающий
   
Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107

|
Хм. Тут вопрос уперся в то, что для работы с EPCS через родные ножки AS нужно какой-то стандартный кор использовать, или это все же можно делать в общем виде? Я вот гляжу в Embedded Peripherals IP User Guide, там написано про необходимость каких то настроек на уровне устройства: Цитата The Altera EPCS configuration device connects to the FPGA through dedicated pins on the FPGA, not through general-purpose I/O pins. In all Altera device families except Cyclone III and Cyclone IV, the EPCS serial flash controller core does not create any I/O ports on the top-level SOPC Builder system module. If the EPCS device and the FPGA are wired together on a board for configuration using the EPCS device (in other words, active serial configuration mode), no further connection is necessary between the EPCS serial flash controller core and the EPCS device.
Perform the following tasks in the Quartus® II software to make the necessary pin assignments: ■ 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 Что-то я не наблюдаю пока никаких намеков на настроки Data[0] и DCLK. При попытке добавить их в проект, оно ругается: Error: Can't place multiple pins assigned to pin location Pin_1 (IOC_X0_Y13_N0) Info: Pin cfg_sdo is assigned to pin location Pin_1 (IOC_X0_Y13_N0) Info: Pin ~ASDO~ is assigned to pin location Pin_1 (IOC_X0_Y13_N0) Error: Can't place multiple pins assigned to pin location Pin_2 (IOC_X0_Y13_N1) Info: Pin cfg_cs is assigned to pin location Pin_2 (IOC_X0_Y13_N1) Info: Pin ~nCSO~ is assigned to pin location Pin_2 (IOC_X0_Y13_N1) Error: Can't place multiple pins assigned to pin location Pin_108 (IOC_X28_Y2_N0) Info: Pin com3_rts is assigned to pin location Pin_108 (IOC_X28_Y2_N0) Info: Pin ~LVDS41p/nCEO~ is assigned to pin location Pin_108 (IOC_X28_Y2_N0) Error: Can't place multiple pins assigned to pin location Pin_206 (IOC_X1_Y14_N1) Info: Pin prst is assigned to pin location Pin_206 (IOC_X1_Y14_N1) Info: Pin ~LVDS11n/DEV_CLRn~ is assigned to pin location Pin_206 (IOC_X1_Y14_N1)
|
|
|
|
|
Nov 22 2013, 17:55
|
Знающий
   
Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107

|
BSACPLDСпасибо большое, что ткнули носом в эту полезную функцию. Вот кстати дока по ней: http://www.altera.com/literature/ug/ug_altasmi_parallel.pdfПолучилось по-быстрому сделать простенький тест с ней, действительно все собирается и рулит ножками AS. Пока что сделал чтение silicon ID, вроде сходится. осталось прикрутить к PCI устройству. В общем, исходный вопрос отпал сам собой.
|
|
|
|
|
Oct 22 2015, 17:52
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
К каким выводам пришел. Средний размер сжатых Квартусом битстримов у меня ~200КБайт (для мелких Циклонов). Степень дополнительного сжатия zip-ом соответствует заполненности кристалла, и на выходе получается ~100КБ для ~наполовину заполненных кристаллов, и ~20КБ для почти пустых. Простые алгоритмы, основанные на сжатии нулей, проигрывают zip-у ~40КБ (на выходе получается соответственно ~140КБ и ~60КБ). Оптимизация простых алгоритмов дает непринципиальную разницу в несколько КБ. Скорость радиоканала у меня ~20КБайт/сек, выигрывать доли секунды нет никакого смысла. А в сжатии простыми алгоримами смысл есть, осталось только выбрать самый красивый из самых простых (те, что по ссылке выше, забраковал).
Сообщение отредактировал Leka - Oct 22 2015, 17:53
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|