Ethereal
Свой-
Постов
113 -
Зарегистрирован
-
Посещение
-
Quartus на Linux
Ethereal ответил mezarecord тема в Среды разработки - обсуждаем САПРы
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="09fb", ATTR{idProduct}="6001", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", SYMLINK+="usbblaster", GROUP="usbblaster", RUN+="/bin/chmod 0666 %c" SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}="6002", MODE="0666", SYMLINK+="usbblaster", GROUP="usbblaster" SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}="6003", MODE="0666", SYMLINK+="usbblaster", GROUP="usbblaster" SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}="6010", MODE="0666", SYMLINK+="usbblaster", GROUP="usbblaster" SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}="6810", MODE="0666", SYMLINK+="usbblaster", GROUP="usbblaster" Тот, которым я пользуюсь, 6001. Попробовал. Так как появились сомнения для чего это было, то отвечу сразу несколькими тестами. 1. quartus_pgm из SAP 16.1 продолжает падать. Дополнительно проверил. Он падает в том числе, если к программатору подключена ПЛИС, а я пытаюсь влить туда pof для EPC. 2. При использовании jtagd Q 9.1 quartus_pgm 9.1 продолжает не видеть устройство. sudo /opt/altera/9.1/quartus/quartus/bin/jtagd --debug --foreground rpm: Command not found. JTAG daemon started Using config file /etc/jtagd/jtagd.conf Remote JTAG permitted when password set USB-Blaster bulk queueing implied, async mode /opt/altera/9.1/quartus/quartus/bin/jtagconfig rpm: Command not found. No JTAG hardware available 3. При использовании jtagd SAP 16.1 и quartus_pgm 9.1 sudo /opt/altera/intelFPGA/16.1/qprogrammer/bin/jtagd --foreground --debug JTAG daemon started Using config file /etc/jtagd/jtagd.conf Remote JTAG permitted when password set USB-Blaster "USB-Blaster" firmware version 4.00 USB-Blaster endpoints out=02(64), in=81(64); urb size=1024 USB-Blaster added "USB-Blaster [1-7.3]" USB-Blaster port (/dev/bus/usb/001/003) opened USB-Blaster "USB-Blaster" firmware version 4.00 USB-Blaster endpoints out=02(64), in=81(64); urb size=1024 USB-Blaster reports JTAG protocol version 0, using version 0 USB-Blaster closed /opt/altera/9.1/quartus/quartus/bin/jtagconfig rpm: Command not found. 1) USB-Blaster [1-7.3] 120930DD EP2S60 /opt/altera/9.1/quartus/quartus/bin/quartus_pgm --cable=USB-Blaster --mode=JTAG --operation="pv;test.pof" rpm: Command not found. Info: ******************************************************************* Info: Running Quartus II Programmer Info: Version 9.1 Build 350 03/24/2010 Service Pack 2 SJ Full Version Info: Copyright © 1991-2010 Altera Corporation. All rights reserved. Info: Your use of Altera Corporation's design tools, logic functions Info: and other software and tools, and its AMPP partner logic Info: functions, and any output files from any of the foregoing Info: (including device programming or simulation files), and any Info: associated documentation or information are expressly subject Info: to the terms and conditions of the Altera Program License Info: Subscription Agreement, Altera MegaCore Function License Info: Agreement, or other applicable license agreement, including, Info: without limitation, that your use is for the sole purpose of Info: programming logic devices manufactured by Altera and sold by Info: Altera or its authorized distributors. Please refer to the Info: applicable agreement for further details. Info: Processing started: Wed Dec 6 15:44:56 2017 Info: Command: quartus_pgm --cable=USB-Blaster --mode=JTAG --operation=pv;test.pof Info: Using programming cable "USB-Blaster [1-7.3]" Info: Started Programmer operation at Wed Dec 6 15:44:57 2017 Error: Can't configure device. Expected JTAG ID code 0x0100A0DD for device 1, but found JTAG ID code 0x120930DD. Error: Operation failed Info: Ended Programmer operation at Wed Dec 6 15:44:57 2017 Error: Quartus II Programmer was unsuccessful. 2 errors, 0 warnings Error: Peak virtual memory: 69 megabytes Error: Processing ended: Wed Dec 6 15:44:57 2017 Error: Elapsed time: 00:00:01 Error: Total CPU time (on all processors): 00:00:00 -
Quartus на Linux
Ethereal ответил mezarecord тема в Среды разработки - обсуждаем САПРы
Update: Квартус 9.1 прошивает с jtagd от SAP 16.1. -
Quartus на Linux
Ethereal ответил mezarecord тема в Среды разработки - обсуждаем САПРы
Добрый день. Поставил под убунту 16.04 LTS Altera Standalone Programmer. Поставил две версии - 16.1 и 15.1. Настроил jtagd по многочисленным мануалам в сети. jtagconfig работает нормально. /opt/altera/intelFPGA/16.1/qprogrammer/bin/jtagconfig 1) USB-Blaster [1-7.3] 0100A0DD EPC(16|4|8|E16|E4|E8) При запуске pgmt программа валится с ошибкой /opt/altera/intelFPGA/16.1/qprogrammer/bin/qpgmt *** Fatal Error: Illegal Instruction Module: qpgmt Stack Trace: 0xca9d8: std::vector<DEV_PART_DESC*, std::allocator<DEV_PART_DESC*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<DEV_PART_DESC**, std::vector<DEV_PART_DESC*, std::allocator<DEV_PART_DESC*> > >, unsigned long, DEV_PART_DESC* const&) + 0x148 (ddb_dev) 0xf08a2: DEV_FAMILY_INFO_MGR_BODY::DEV_FAMILY_INFO_MGR_BODY() + 0x1e2 (ddb_dev) 0xca3d1: DEV_FAMILY_INFO_MGR_BODY::get_instance() + 0x21 (ddb_dev) 0xbb319: DEV_FAMILY_MANAGER::DEV_FAMILY_MANAGER() + 0x9 (ddb_dev) End-trace При запуске quartus_pgm вcе ок пока он работает в режиме поиска устройств. /opt/altera/intelFPGA/16.1/qprogrammer/bin/quartus_pgm -l Info: ******************************************************************* Info: Running Quartus Prime Programmer Info: Version 16.1.0 Build 196 10/24/2016 SJ Standard Edition Info: Copyright © 2016 Intel Corporation. All rights reserved. Info: Your use of Intel Corporation's design tools, logic functions Info: and other software and tools, and its AMPP partner logic Info: functions, and any output files from any of the foregoing Info: (including device programming or simulation files), and any Info: associated documentation or information are expressly subject Info: to the terms and conditions of the Intel Program License Info: Subscription Agreement, the Intel Quartus Prime License Agreement, Info: the Intel MegaCore Function License Agreement, or other Info: applicable license agreement, including, without limitation, Info: that your use is for the sole purpose of programming logic Info: devices manufactured by Intel and sold by Intel or its Info: authorized distributors. Please refer to the applicable Info: agreement for further details. Info: Processing started: Wed Dec 6 13:07:21 2017 Info: Command: quartus_pgm -l 1) USB-Blaster [1-7.3] Info: Quartus Prime Programmer was successful. 0 errors, 0 warnings Info: Peak virtual memory: 419 megabytes Info: Processing ended: Wed Dec 6 13:07:21 2017 Info: Elapsed time: 00:00:00 Info: Total CPU time (on all processors): 00:00:00 /opt/altera/intelFPGA/16.1/qprogrammer/bin/quartus_pgm --cable=USB-Blaster -a Info: ******************************************************************* Info: Running Quartus Prime Programmer Info: Version 16.1.0 Build 196 10/24/2016 SJ Standard Edition Info: Copyright © 2016 Intel Corporation. All rights reserved. Info: Your use of Intel Corporation's design tools, logic functions Info: and other software and tools, and its AMPP partner logic Info: functions, and any output files from any of the foregoing Info: (including device programming or simulation files), and any Info: associated documentation or information are expressly subject Info: to the terms and conditions of the Intel Program License Info: Subscription Agreement, the Intel Quartus Prime License Agreement, Info: the Intel MegaCore Function License Agreement, or other Info: applicable license agreement, including, without limitation, Info: that your use is for the sole purpose of programming logic Info: devices manufactured by Intel and sold by Intel or its Info: authorized distributors. Please refer to the applicable Info: agreement for further details. Info: Processing started: Wed Dec 6 13:07:57 2017 Info: Command: quartus_pgm --cable=USB-Blaster -a Info (213045): Using programming cable "USB-Blaster [1-7.3]" 1) USB-Blaster [1-7.3] 0100A0DD EPC(16|4|8|E16|E4|E8) Info: Quartus Prime Programmer was successful. 0 errors, 0 warnings Info: Peak virtual memory: 419 megabytes Info: Processing ended: Wed Dec 6 13:07:57 2017 Info: Elapsed time: 00:00:00 Info: Total CPU time (on all processors): 00:00:00 При попытке что-то зашить. /opt/altera/intelFPGA/16.1/qprogrammer/bin/quartus_pgm --cable=USB-Blaster --mode=JTAG --operation="pv;test.pof" *** Fatal Error: Illegal Instruction Module: quartus_pgm Stack Trace: 0xca9d8: std::vector<DEV_PART_DESC*, std::allocator<DEV_PART_DESC*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<DEV_PART_DESC**, std::vector<DEV_PART_DESC*, std::allocator<DEV_PART_DESC*> > >, unsigned long, DEV_PART_DESC* const&) + 0x148 (ddb_dev) 0xf08a2: DEV_FAMILY_INFO_MGR_BODY::DEV_FAMILY_INFO_MGR_BODY() + 0x1e2 (ddb_dev) 0xca3d1: DEV_FAMILY_INFO_MGR_BODY::get_instance() + 0x21 (ddb_dev) 0xc2a79: DEV_PART_MANAGER::DEV_PART_MANAGER() + 0x9 (ddb_dev) 0x28695d: PGM_CHAIN_ELEMENT::create_chain_element(PGM_CHAIN_ELEMENT*, bool, FIO_PATH*, bool, PGMIO_CONFIG_SCHEME, bool) + 0xc1d (pgm_pgmio) 0x2327f: PGME_PROGRAMMER::lookup_device(PGM_CHAIN_ELEMENT*, PGMIO_CONFIG_SCHEME, bool, bool) + 0x21 (pgm_pgme) 0x2121b: QPGM_FRAMEWORK::create_element(std::string, std::string, unsigned int, unsigned int) + 0x5fb (quartus_pgm) 0x23ab1: QPGM_FRAMEWORK::process_operation(std::string*) + 0x1e93 (quartus_pgm) 0x24bfe: QPGM_FRAMEWORK::post_check_arguments() + 0x2d6 (quartus_pgm) 0x1c08f: qexe_standard_main(QEXE_FRAMEWORK*, QEXE_OPTION_DEFINITION const**, int, char const**) + 0x1bc (comp_qexe) 0x1fccc: qpgm_main(int, char const**) + 0x5e (quartus_pgm) 0x407e0: msg_main_thread(void*) + 0x10 (ccl_msg) 0x602c: thr_final_wrapper + 0xc (ccl_thr) 0x4089f: msg_thread_wrapper(void* (*)(void*), void*) + 0x62 (ccl_msg) 0xa559: mem_thread_wrapper(void* (*)(void*), void*) + 0x99 (ccl_mem) 0x8f92: err_thread_wrapper(void* (*)(void*), void*) + 0x27 (ccl_err) 0x63f2: thr_thread_wrapper + 0x15 (ccl_thr) 0x42c37: msg_exe_main(int, char const**, int (*)(int, char const**)) + 0xa3 (ccl_msg) 0x1fd56: main + 0x26 (quartus_pgm) 0x20830: __libc_start_main + 0xf0 (c.so.6) End-trace Я нагуглил похожую проблему у другого человека, но он ставил квартус, а не стэндалон, и он написал, что у него все решилось откатом к 15.1 версии квартуса. Но у меня с ней возникают те же проблемы с иллегал инструкциями. Программатор работает, из винды все прошивается. Прошивка собрана квартусом 9.1. Проверить квартусом пока не смог, потому что jtagconfig квартуса 9.1 не видит программатор (подозреваю, что я там что-то недонастроил, но пока не могу понять, что именно). Кто-нибудь сталкивался с подобными проблемами, и если да, то как решили? Заранее спасибо за помощь. -
Спасибо, попробую этот же код на 13. На 11 забавно :) Info: Running Quartus II 64-Bit Analysis & Synthesis Info: Version 11.1 Build 173 11/01/2011 SJ Full Version Info: Processing started: Tue Mar 29 18:31:38 2016 Info: Command: quartus_map --read_settings_files=on --write_settings_files=off test_bits -c test_bits Info (20030): Parallel compilation is enabled and will use 2 of the 2 processors detected Info (12021): Found 1 design units, including 1 entities, in source file tst_bit_struct.v Info (12023): Found entity 1: tst_bit_struct Info (12127): Elaborating entity "tst_bit_struct" for the top level hierarchy Info (10648): Verilog HDL Display System Task info at tst_bit_struct.v(34): lp_message_bit_size = 8 Info (10648): Verilog HDL Display System Task info at tst_bit_struct.v(35): lp_message_byte_size = 1
-
Добрый день. Возник такой вопрос. Есть файл project_types.v, в котором описана структура: typedef struct packed { bit [ 7: 0]test_01; bit [ 7: 0]test_02; bit [ 7: 0]test_03; bit [ 7: 0]test_04; bit [ 7: 0]test_05; bit [ 7: 0]test_06; bit [ 7: 0]test_07; bit [ 7: 0]test_08; bit [ 7: 0]test_09; bit [ 7: 0]test_10; bit [ 7: 0]test_11; bit [ 7: 0]test_12; bit [ 7: 0]test_13; bit [ 7: 0]test_14; bit [ 7: 0]test_15; } message_not_alligned; typedef struct packed { message_not_alligned data; bit [7: 0]some_var; } message_alligned; Файл инклюдится в другом файле "retranslate.v" module retranslator(...); `include "project_types.v" localparam lp_message_bit_size = $bits(message_alligned); localparam lp_message_byte_size = lp_message_bit_size / 8; localparam lp_byte_count = lp_message_byte_size * lp_max_message_count; ... Модуль сохраняет приходящие друг за другом message в память побайтно. Проблема в том, что в данном случае lp_message_bit_size = 8 lp_message_byte_size = 1 А не 128 и 16, как, по идее, должно быть. Если сделать такую замену typedef struct packed { message_not_alligned data; bit [1: 0]some_var; } message_alligned; , то будет lp_message_bit_size = 2. Если some_var на части typedef struct packed { message_not_alligned data; bit some_var_high; bit [6: 0]some_var_high; } message_alligned; то будет снова 8. А вот если сделать, например, так: typedef struct packed { message_not_alligned data; bit [7: 0 * $bits(message_not_alligned)]some_var; } message_alligned; то lp_message_bit_size = 128 lp_message_byte_size = 16. Моделсим (ASE) правильно определяет размеры структур. Q II 9.1 SP2 и Q II 11.1 дают одинаково неправильные результаты. Если не затруднит, не подскажете, с чем может быть связано, как с этим бороться, и какие еще тонкости могут вылезти? Заранее спасибо.
-
А в шестых виртексах у MMCM есть режим синхронной компенсации? То что я нашел - это zero hold. Оно, конечно, позволяет сделать clock path примерно равным нулю, но data path delay при этом не компенсируется. Или нужно руками фазу подгонять?
-
BUFR. Пробовал ставить BUFIO для IDDR, и BUFR/BUFG для фифо (туда же BUFIO клок не дойдет?). Но при этом PAR вылетает с ошибкой. Спасибо, попробую.
-
А так получается с региональным клоком. Setup path: Requirement: 0.750ns Data Path Delay: 0.753ns (Levels of Logic = 1) Clock Path Delay: 3.487ns (Levels of Logic = 2) Clock Uncertainty: 0.025ns Hold path: Requirement: 0.750ns Data Path Delay: 0.877ns (Levels of Logic = 1)(Component delays alone exceeds constraint) Clock Path Delay: 6.155ns (Levels of Logic = 2) Clock Uncertainty: 0.025ns А так с региональным клоком и IODELAY на все линии, кроме самого клока. Setup: Requirement: 0.750ns Data Path Delay: 5.231ns (Levels of Logic = 2) Clock Path Delay: 5.690ns (Levels of Logic = 2) Clock Uncertainty: 0.025ns Hold: Requirement: 0.750ns Data Path Delay: 4.384ns (Levels of Logic = 2)(Component delays alone exceeds constraint) Clock Path Delay: 6.403ns (Levels of Logic = 2) Clock Uncertainty: 0.025ns
-
Пробовал руками ставить IODELAYE1 в разрыв между IBUFDS и IDDR в режиме "DEFAULT". Кроме почти восьмикратного увеличения времени компиляции получилась еще большая разбежка по времени. Вообще, я сейчас думаю, что может неправильно вставил. На схемах указано, что делей вставляется между IBUF и IDDR. Но, возможно, что для дифференциального входа порядок иной? Или вообще не нужно руками ставить? Еще пробовал использовать DCM и затактировать вход его выходом. В итоге получил предупреждение, что клок ничего не тактирует и игнор всех констреинтов в .ucf.
-
Здравствуйте. Имеется проект на шестом виртексе с параллельными АЦП на 400 МГц. Выходная шина АЦП 10 бит, сопровождаются тактом 200 МГц с привязкой к центру UI. Сигналы дифференциальные. Передача идет с удвоенной скоростью. tsu, th относительно переднего фронта синхросигнала 1нс В проекте, соответственно реализован приемник. Дифференциальная шина пропускается сначала через IBUFDS. С выхода IBUFDS она идет на IDDR и далее на синхронизатор на FIFO. Клок от АЦП пропускается через IBUFDS и далее идет на клок IDDR, на котором защелкивается входная шина. В .ucf описаны констрейны: NET InputAdcClockPos TNM_NET = TnmAdcClockPos; TIMESPEC TsAdcClockPos = PERIOD TnmAdcClockPos 200 Mhz HIGH 50%; TIMEGRP GrpRiseAdcClockPos = RISING TnmAdcClockPos; TIMEGRP GrpFallAdcClockPos = FALLING TnmAdcClockPos; OFFSET = IN 750 ps VALID 1500 ps BEFORE InputAdcClockPos TIMEGRP GrpRiseAdcClockPos; OFFSET = IN 750 ps VALID 1500 ps BEFORE InputAdcClockPos TIMEGRP GrpFallAdcClockPos; Описал с запасом на разбег в длинах проводников, хотя он там настолько влиять не должен. При этом PAR долго разводит, а потом фейлит констрейны. После этого клок стал пропускать не через IBUFDS, а IBUFGDS, и стало намного лучше в части скорости работы, но фейл с констрейнами остался. Например. Slack (setup path): -1.144ns (requirement - (data path - clock path - clock arrival + uncertainty)) Source: InputAdcDataPos<3> (PAD) Destination: GenDdr[3].IDDR_inst (FF) Destination Clock: AdcClock rising at 0.000ns Requirement: 0.750ns Data Path Delay: 5.235ns (Levels of Logic = 1) Clock Path Delay: 3.366ns (Levels of Logic = 2) Clock Uncertainty: 0.025ns где AdcClock - это клок на выходе IBUFGDS. Tsu всей шины на переднем фронте болтается в районе 1.86нс. Th в районе минус 0.1. Не подскажете, чем можно вылечить данную проблему? Заранее спасибо.
-
TMS320C6455 HPI boot
Ethereal опубликовал тема в Сигнальные процессоры и их программирование - DSP
Добрый день. Мы используем в своем устройстве вот такой вот процессор. Для возможности удаленной загрузки и отладки (есть макетная плата, на которой можно все отдебажить через JTAG, но в устройстве JTAG недоступен) было решено добавить возможность загрузки процессора хостом через HPI (хост получает прошивку через последовательный интерфейс). Пины установлены в BOOTMODE = 0001b. COFF читается собственной утилитой и формирует бинарный файл из секций Vectors, Initialized data и Executable code с дополнительным описанием, куда именно в память должна грузиться секция. Проблема возникает непосредственно с запуском. Программа написана на сях с использованием DSP/BIOS. В документации на сборку кода (spru186w Assembly language tools UG) указано, что входной точкой программы по умолчанию является c_int00. В документации на сам процессор указано, что процессор после формирования DSP INT начинает выполнять код по адресу 0x00800000. CCS при сборке располагает точку входа по адресу 00824b40. Участок map-файла приведен ниже .sysinit 0 00824800 00000520 00824800 00000340 data_proccfg.obj (.sysinit) 00824b40 000000c0 bios.a64P : boot.o64P (.sysinit) 00824c00 000000a0 : mem_init.o64P (.sysinit) 00824ca0 00000060 : tsk_init.o64P (.sysinit) 00824d00 00000020 : obj_init.o64P (.sysinit) Правильно ли я понимаю, что надо отмапать подсекцию boot.o64P по адресу 800000? Что-то вроде SECTIONS { .text: { bios.a64P(.boot.o64P) *(.text) } } или SECTIONS { boot_section: { bios.a64P(.boot.o64P) } : 0x00800000 } Заранее спасибо. -
Спасибо, я почитал описание, вроде, то что нужно. Я правильно понимаю, что асми после создания инстанса само вешается на нужные ножки, не напрягая разработчика лишними телодвижениями с залезанием в пин планер и ручным назначением пинов? То есть там только юзер интерфейс для отправляемых/получаемых данных и сопутствующие сигналы, и все?
-
Добрый день. Возник такой вопрос. Можно ли получить доступ к ASDI, CS, nCS сигналам доступа к конфигурационной микросхеме последовательного типа из ПЛИС. В даташите вроде как помечено. что они работают во время загрузки, а в пользовательском режиме доступа к ним нет (и Ква, что характерно, назначать эти пины не позволяет). Вместе с тем, встречал упоминания о том, что в EPCS можно удаленно (в плане без джитага и всяких наворотов, типа микроконтроллеров, которые занимаются такой операцией) перезалить прошивку, и выделить часть области памяти под собственные нужды (конфигурационные параметры, и прочее). При этом нигде не написано, как это сделать. В юзергайдах видел, что такую возможность, вроде бы, предоставляет Ниос, но пихать процессор в проект только ради такого удовольствия мне не очень хочется. Хотелось бы воспользоваться или соответствующим ИП, или собственным велосипедом. Stratix 3. EPCS64.
-
Задание shortreal констант в QII
Ethereal опубликовал тема в Среды разработки - обсуждаем САПРы
Добрый день. Начал я тут работать с плавающей точкой, после чего неожиданно возник непредвиденный вопрос - как задать FP-константу в квартусе? Вернее, как задать FP-константу, которую FP-блоки будут воспринимать именно, как число с плавающей точкой, а не как целое, полученное из вещественного округлением? В Modelsim ASE все решается очень просто. localparam shortreal A = 1.0; localparam bit [31:0]B = $shortrealtobits(A); После этого в B оказывается битовое представление вещественного числа с плавающей точкой. Но Ква2 ругается на функцию трансляции числа. Какие существуют варианты задания константы автоматическим образом? Конечно, можно дисплеем посмотреть хекс B в моделсиме, после чего руками его вбить в Квартусе, но хотелось бы, чтобы оно делалось без лишнего участия с моей стороны. Заранее спасибо. -
Внешних (для ПЛИС) сигналов в коде быть не должно. In нужно пропустить через >=2 последовательных регистра (в качестве примера смотрите код Timmy), и уже этот сигнал использовать в логике подавления. Иначе при попадании клока на фронт входного сигнала модуль может застопориться даже при нормальном коде.