реклама на сайте
подробности

 
 
> Проблема со Spartan3, Программируется XC3S200
sergeeff
сообщение Dec 14 2006, 12:08
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Получили новую плату, на которой стоит XC3S200. Программируется от процессора в режиме Slave Parallel.
В Xilinx ISE сделали простейший проект - на одну ногу, объявленную как вход - подаем импульсы. Через инвертор транслируем этот сигнал в FPGA на выходной pin. Получаем bin file, грузим его в FPGA (по окончании загрузки получаем сигнал DONE). Смотрим на выходном pin'e - глухо висит "1".

Может есть какие мысли у знатоков Xilinx'a?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 27)
andrew_b
сообщение Dec 14 2006, 13:58
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Вы бы хоть версию ПО указали.
Почитайте errata на ваш чип. Может, чего найдете.
Go to the top of the page
 
+Quote Post
makc
сообщение Dec 14 2006, 14:39
Сообщение #3


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(sergeeff @ Dec 14 2006, 12:08) *
Получили новую плату, на которой стоит XC3S200. Программируется от процессора в режиме Slave Parallel.
В Xilinx ISE сделали простейший проект - на одну ногу, объявленную как вход - подаем импульсы. Через инвертор транслируем этот сигнал в FPGA на выходной pin. Получаем bin file, грузим его в FPGA (по окончании загрузки получаем сигнал DONE). Смотрим на выходном pin'e - глухо висит "1".

Может есть какие мысли у знатоков Xilinx'a?


Как грузите? Проблема похожа на отсуствие дополнительных тактов на CCLK, необходимых для инициализации ПЛИС. Т.е. попробуйте в прошивку процессора добавить выдачу дополнительных тактов на CCLK (сверх тех, которые необходимы для передачи данных прошивки), хотя бы в количестве 8.

Еще советую проверить настройки StartUp clock, используемые при генерации bit-файла.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 14 2006, 15:15
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Попробовал увеличить количество CCLK - ноль эффекта.

Вот наши установки в пакете:

Release 7.1i - Bitgen H.38

D:/Xilinx/bin/nt/bitgen.exe -intstyle ise -w -g DebugBitstream:No -g Binary:no -g CRC:Enable -g ConfigRate:6 -g CclkPin:PullUp -g M0Pin:PullUp -g M1Pin:PullUp -g M2Pin:PullUp -g ProgPin:PullUp -g DonePin:PullUp -g TckPin:PullUp -g TdiPin:PullUp -g TdoPin:PullUp -g TmsPin:PullUp -g UnusedPin:PullDown -g UserID:0xFFFFFFFF -g DCIUpdateMode:AsRequired -g StartUpClk:CClk -g DONE_cycle:4 -g GTS_cycle:5 -g GWE_cycle:6 -g LCK_cycle:NoWait -g Security:None -g DonePipe:No -g DriveDone:No F170001_main.ncd
Release 7.1i - Bitgen H.38

D:/Xilinx/bin/nt/bitgen.exe -intstyle ise -w -g DebugBitstream:No -g Binary:no -g CRC:Enable -g ConfigRate:6 -g CclkPin:PullUp -g M0Pin:PullUp -g M1Pin:PullUp -g M2Pin:PullUp -g ProgPin:PullUp -g DonePin:PullUp -g TckPin:PullUp -g TdiPin:PullUp -g TdoPin:PullUp -g TmsPin:PullUp -g UnusedPin:PullDown -g UserID:0xFFFFFFFF -g DCIUpdateMode:AsRequired -g StartUpClk:CClk -g DONE_cycle:4 -g GTS_cycle:5 -g GWE_cycle:6 -g LCK_cycle:NoWait -g Security:None -g DonePipe:No -g DriveDone:No F170001_main.ncd

Summary of Bitgen Options:
+----------------------+----------------------+
| Option Name | Current Setting |
+----------------------+----------------------+
| Compress | (Not Specified)* |
+----------------------+----------------------+
| Readback | (Not Specified)* |
+----------------------+----------------------+
| CRC | Enable** |
+----------------------+----------------------+
| DebugBitstream | No** |
+----------------------+----------------------+
| ConfigRate | 6** |
+----------------------+----------------------+
| StartupClk | Cclk** |
+----------------------+----------------------+
| DCMShutdown | Disable* |
+----------------------+----------------------+
| DCIUpdateMode | AsRequired** |
+----------------------+----------------------+
| CclkPin | Pullup** |
+----------------------+----------------------+
| DonePin | Pullup** |
+----------------------+----------------------+
| HswapenPin | Pullup* |
+----------------------+----------------------+
| M0Pin | Pullup** |
+----------------------+----------------------+
| M1Pin | Pullup** |
+----------------------+----------------------+
| M2Pin | Pullup** |
+----------------------+----------------------+
| ProgPin | Pullup** |
+----------------------+----------------------+
| TckPin | Pullup** |
+----------------------+----------------------+
| TdiPin | Pullup** |
+----------------------+----------------------+
| TdoPin | Pullup** |
+----------------------+----------------------+
| TmsPin | Pullup** |
+----------------------+----------------------+
| UnusedPin | Pulldown** |
+----------------------+----------------------+
| GWE_cycle | 6** |
+----------------------+----------------------+
| GTS_cycle | 5** |
+----------------------+----------------------+
| LCK_cycle | NoWait** |
+----------------------+----------------------+
| Match_cycle | Auto* |
+----------------------+----------------------+
| DONE_cycle | 4** |
+----------------------+----------------------+
| Persist | No* |
+----------------------+----------------------+
| DriveDone | No** |
+----------------------+----------------------+
| DonePipe | No** |
+----------------------+----------------------+
| Security | None** |
+----------------------+----------------------+
| UserID | 0xFFFFFFFF** |
+----------------------+----------------------+
| ActivateGclk | No* |
+----------------------+----------------------+
| ActiveReconfig | No* |
+----------------------+----------------------+
| PartialMask0 | (Not Specified)* |
+----------------------+----------------------+
| PartialMask1 | (Not Specified)* |
+----------------------+----------------------+
| PartialMask2 | (Not Specified)* |
+----------------------+----------------------+
| PartialGclk | (Not Specified)* |
+----------------------+----------------------+
| PartialLeft | (Not Specified)* |
+----------------------+----------------------+
| PartialRight | (Not Specified)* |
+----------------------+----------------------+
| IEEE1532 | No* |
+----------------------+----------------------+
| Binary | No** |
+----------------------+----------------------+
* Default setting.
** The specified setting matches the default setting.
.
[size=7]
Go to the top of the page
 
+Quote Post
Apast
сообщение Dec 14 2006, 16:11
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 22-06-04
Из: Новосибирск
Пользователь №: 87



Была у меня подобная проблема, правда на SLAVE SERIAL, тоже грузилась нормально выставляла DONE но не работала. После долгих поисков выяснил что монтажник упустил и не запоял подтягиваещий резистр на сигнале INIT_B. После исправления оплошности проблема исчезла.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 15 2006, 00:22
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



ИНтересно. Поглядим в понедельник. Да, убедились, что при заливке через JTAG все работает. Явно что-то на плате не удачно разведено.
Go to the top of the page
 
+Quote Post
makc
сообщение Dec 15 2006, 08:49
Сообщение #7


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(sergeeff @ Dec 15 2006, 00:22) *
ИНтересно. Поглядим в понедельник. Да, убедились, что при заливке через JTAG все работает. Явно что-то на плате не удачно разведено.


Если есть JTAG, то посмотрите значение статусного регистра ПЛИС после загрузки в нее прошивки процессором. Это может дать дополнительную информацию о причинах неокончившейся инициализации.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
makc
сообщение Dec 15 2006, 19:35
Сообщение #8


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Появилось еще одна подробность, которая может относиться к причине вышеописанной проблемы.
Сегодня разбирался с платой, в которой Spartan-3 также конфигурируется процессором, при этом процесс конфигурации успешно завершался, но состояние выходов ПЛИС было совершенно не то, которое определялось структурой проекта (например, вместо выхода в третьем состоянии был логический ноль и т.п.). Чтение статусного регистра ПЛИС показало, что DONE стоит в 1, а кроме того, GWE и GTS. Т.е. конфигурация вроде бы прогрузилась и ПЛИС ее восприняла, даже разрешила работу. Однако более внимательное рассмотрение показало GHIGH == 0, в то время как после успешной конфигурации он должен быть 1. Эксперименты позволили определить причину такого поведения ПЛИС: пауза между переводом сигнала PROG в неактивное состояние и начало загрузки данных (первым активным фронтом CCLK) была слишком короткой. После ее увеличения до 7 мс все встало на свои места.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 15 2006, 20:43
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Интересны дела твои Господи. Я, конечно же, ввел у себя задержку, но никак ни 7 миллисекунд (насчет миллисекунд - я правильно понял?).

Будем попробовать. В любом случае, огромное спасибо за советы. О результатах должу.
Go to the top of the page
 
+Quote Post
makc
сообщение Dec 15 2006, 21:10
Сообщение #10


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(sergeeff @ Dec 15 2006, 20:43) *
Интересны дела твои Господи. Я, конечно же, ввел у себя задержку, но никак ни 7 миллисекунд (насчет миллисекунд - я правильно понял?).


Да, именно миллисекунд (не микро). У меня тоже была задержка, но была она маленькой, в виде пустого цикла. Что интересно, иногда ее хватало. Но после всех модификаций прошивки процессора восстановить исходные условия не удалось. Окончательно решило проблему именно введение большего значения задержки.

Цитата
Будем попробовать. В любом случае, огромное спасибо за советы. О результатах должу.


Успешной ловли багов! biggrin.gif maniac.gif


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 18 2006, 12:07
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Все заработало, после того как сделал две вещи:
1. После получения сигнала DONE все управляющие pin'ы (CS, PROG, RW, INIT), выставил в "1".
2. Задержка действительно нужна. Но по моим замерам - не менее 200 мкс. Для пущей надежности установил 1 мс.

Сегодня еще погоняю с реальными FPGA проектами. Если чего обнаружу новенького - сообщу.

Большое спасибо всем за советы.
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 18 2007, 15:26
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Использую SLAVE PARALLEL режим загрузки прошивки.
У меня возникла проблема - никак не могу после окончания заливки байтов прошивки получить ни DONE=1 (успех загрузки) ни INIT_B=0 (CRC Error) вне зависимости от того что туда лью. Специально заливал мусор, дабы добиться CRC Error, но ПЛИС вроде как хавает без проблем.

Инициализируется всё на ура, BUSY опускается в ноль. Но окончания загрузки никак не добиться. Не могли бы кто нибудь поделиться исходным кодом загрузки прошивки с микроконтроллера может быть я при сравнении со своим кодом найду - что я не так делаю. help.gif
Go to the top of the page
 
+Quote Post
RKOB
сообщение Jan 18 2007, 17:42
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 172
Регистрация: 17-03-05
Пользователь №: 3 422



Недавно сам столкнулся с подобной проблемой: по окончании загрузки получаем сигнал DONE, но ПЛИС не стартует...(20 раз загрузиться нормально, а в 21 раз вот такая ерунда )

И так решение этой проблемы нашел на сайте xilinx:
Problem:
I am configuring a Spartan-3/-3E/-3A device at high speed.
The DONE pin goes High, but the device does not start up (the I/Os are still put into a 3-state condition).
Why is this occurring?

Solution:
Several problems might prevent a Spartan-3/-3E/-3A device from operating correctly after the DONE pin goes High:

1. A slow rise time on the DONE pin
2. An incorrect startup clock
3. Insufficient clock cycles to complete the startup sequence
4. Contention between DONE signals on configured vs. unconfigured devices

1. A slow rise time on the DONE pin ( наш случай )
The DONE pin must transition from Low to High within one CCLK cycle. For example, if CCLK is running at 33 MHz in slave serial mode, the rise time of the DONE pin must be less than 25 ns. The DONE pin is an open-drain driver by default, and it must be pulled High externally.

Potential Remedies:
a. Attach an external pull-up resistor to the DONE signal (the recommended value is 330 Ohms).
b. In BitGen, set "DonePipe=Yes" to delay the CFG_DONE signal. This setting adds a pipelined register stage to the DONE input (CFG_DONE) path.
c. Alternatively, set the BitGen "DriveDone=Yes" option to actively drive the DONE pin. (NOTE: This option should be used only if you are configuring one device or the device is last in a daisy chain.)

При генерации битстрима установил галочку "DriveDone=Yes" и все заработало!!!
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 18 2007, 17:58
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



У меня несколько другая ситуация. Я не могу получить сигнал DONE.
Go to the top of the page
 
+Quote Post
RKOB
сообщение Jan 18 2007, 18:17
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 172
Регистрация: 17-03-05
Пользователь №: 3 422



А что за битстрим ты грузишь ?
У меня один раз была проблема такая: загрузка шла, но никакого эффекта не было, так как загаловоке битстрима (*.bit) был указан источник тактировании JTAG (по умолчанию стоит JTAG), пока я (в опциях генерации битстрима) не заменил на CCLK...
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 18 2007, 19:46
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Цитата(RKOB @ Jan 18 2007, 18:17) *
А что за битстрим ты грузишь ?
У меня один раз была проблема такая: загрузка шла, но никакого эффекта не было, так как загаловоке битстрима (*.bit) был указан источник тактировании JTAG (по умолчанию стоит JTAG), пока я (в опциях генерации битстрима) не заменил на CCLK...

Не знаю где в заголовке битстрима указывается источник тактирования. Но в опциях компилятора стоит CCLK. А что правильно грузить: .bit или .bin?
Go to the top of the page
 
+Quote Post
BSV
сообщение Jan 19 2007, 00:03
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045



Он не в заголовке, а в самом битстриме. Если неохота разбираться со структурой заголовка bit файла - грузить нужно bin. Собственно, bin - это bit с отгрызенным заголовком.
То, что в опциях Generate Programming File стоит CCLK - это правильно, главное чтобы bit (или bin) был сгенерен при данном условии.


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 19 2007, 10:12
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Цитата(BSV @ Jan 19 2007, 00:03) *
Он не в заголовке, а в самом битстриме. Если неохота разбираться со структурой заголовка bit файла - грузить нужно bin. Собственно, bin - это bit с отгрызенным заголовком.
То, что в опциях Generate Programming File стоит CCLK - это правильно, главное чтобы bit (или bin) был сгенерен при данном условии.


Правильно, то правильно w00t.gif , только ничего это не даёт. Вообще при конфигурировании в связке МК -> ПЛИС необходимо быть уверенным в правильности обоих компонентов. Хотелось бы быть уверенным в том что программа на МК работает корректно, если да, то сосредоточится на отладке ПЛИС, поэтому было бы полезно взглянуть на чью нибудь работающую программу по заливке файла. Может есть у кого?
Go to the top of the page
 
+Quote Post
RKOB
сообщение Jan 19 2007, 10:27
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 172
Регистрация: 17-03-05
Пользователь №: 3 422



Я б поделился, но я использую slave serial mode для загрузки конфигурации... Вряд ли это тебе поможет?!
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 19 2007, 11:35
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Цитата(RKOB @ Jan 19 2007, 10:27) *
Я б поделился, но я использую slave serial mode для загрузки конфигурации... Вряд ли это тебе поможет?!


Я пробовал и serial slave mode, он у меня тоже не работает smile3046.gif , DOUT не возвращает посланные биты в DIN, согласно диаграмме в документации. Поэтому это тоже может быть полезным. Вообще появилось подозрение что ПЛИС, хоть и опускает у меня BUSY и готов принимать данные, но они до него либо не доходят, либо не определяется момент окончания подачи данных. Возможно CCLK внутри не работает. На контакте CCLK есть, проверял осциллографом, тока большого не возникает, нога цела.... но что там внутри - дальше - не понятно.
Go to the top of the page
 
+Quote Post
BSV
сообщение Jan 19 2007, 11:54
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045



Вот заготовка программы для загрузки в режиме Slave Serial из bit-файла с разбором заголовка. Программер я посредственный, так что извиняйте коль что не так blush.gif . Сам ее работоспособность не проверял.
Прикрепленные файлы
Прикрепленный файл  cfg_load.zip ( 2.43 килобайт ) Кол-во скачиваний: 79
 


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
RKOB
сообщение Jan 19 2007, 13:11
Сообщение #22


Частый гость
**

Группа: Свой
Сообщений: 172
Регистрация: 17-03-05
Пользователь №: 3 422



[/quote]
Я пробовал и serial slave mode, он у меня тоже не работает
[/quote]

Я те письмецо отправил с примером, посмотри... cheers.gif
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 19 2007, 15:07
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Вот как я реализовал Parallel Slave:

Код
        printf("init\n");
    outportb(0x311,0xFF);
    outportb(0x311,0xF7);                           // PROG_B -> 0
    while ((inportb(0x311)&0x04)==1) asm nop;             // INIT_B   -> 0 ?
    outportb(0x311,0xFF);                          // PROG_B -> 1
    while ((inportb(0x311)&0x04)==0) asm nop;            // INIT_B   -> 1 ?

    outportb(0x311,0xFD);                         // RDWR_B -> 0
    outportb(0x311,0xF9);                         //    CS_B   -> 0



    while ((inportb(0x311)&0x01)==1) {             // BUSY -> 0 ?
        outportb(0x311,0xF8);                    // CLK ->0
        outportb(0x311,0xF9);                    // CLK ->1
        printf("BUSY!\x8\x8\x8\x8\x8");
        asm nop;
    }

    printf("writing\n");
    for(i=0;i<100;i++){
        outportb(0x310,0xAA);                       //DATA
        outportb(0x311,0xF8);                       // CLK ->0
        outportb(0x311,0xF9);                       // CLK ->1

        if ((inportb(0x311)&0x4)==0) printf("CRC error!");
    }

    outportb(0x311,0xFD);                        //   CS_B -> 1
    outportb(0x311,0xFF);                         // RDWR_B -> 1
    printf("start-up\n");
    for(i=0;i<100;i++) {                        // DONE -> 1 ?
        outportb(0x311,0xFE);                       // CLK ->0
        outportb(0x311,0xFF);                    // CLK ->1
        if (inportb(0x311)&0x2) printf("DONE!\n");
        else printf("NOT DONE!!!\x8\x8\x8\x8\x8\x8\x8\x8\x8\x8\x8");
    };
    printf("\nEND\n");


А вот Serial Slave

Код
printf("init\n");
    outportb(0x311,0xFF);
    outportb(0x311,0xF7);                         // PROG_B -> 0
    while ((inportb(0x311)&0x04)==1) asm nop;    // INIT_B -> 0 ?

    outportb(0x311,0xFF);                        // PROG_B -> 1
    while ((inportb(0x311)&0x04)==0) asm nop;    // INIT_B -> 1 ?

    printf("writing\n");

    for(i=0;i<100;i++){

        outportb(0x310,0x01);                           //DIN << 1

        outportb(0x311,0xF8);                           // CLK ->0
        outportb(0x311,0xF9);                           // CLK ->1
        printf("\\%.2X\n",(inportb(0x311)&0x1)); // DOUT

        outportb(0x310,0x00);                           //DIN << 0

        outportb(0x311,0xF8);                           // CLK ->0
        outportb(0x311,0xF9);                           // CLK ->1
        printf("/%.2X\n",(inportb(0x311)&0x1));  // DOUT


        if ((inportb(0x311)&0x4)==0) printf("\nCRC error!\n");  // INIT_B -> 0 ?
    }


    printf("start-up\n");
    for(i=0;i<100;i++) {                                    // DONE -> ?
        delay(1);
        outportb(0x311,0xFE);                           // CLK ->0
        outportb(0x311,0xFF);                           // CLK ->1
        if (inportb(0x311)&0x2) printf("\n\nDONE!\n");
        else printf("NOT DONE!!!\x8\x8\x8\x8\x8\x8\x8\x8\x8\x8\x8");
    };
    printf("\nEND\n");


Оба метода, по моему предположению соответствуют описанному в документации, но они оба не работают !!!! maniac.gif
Go to the top of the page
 
+Quote Post
BSV
сообщение Jan 19 2007, 17:37
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045



Проверьте:
1) PROG в '0' нужно держать не менее 0,3 us
2) После INIT = '1' нужно подождать не менее 0,5 us
3) Частота CCLK не более 20MHz, если битстрим - с компрессией

Проверять INIT после каждого бита бессмысленно, судя по диаграмме в даташите он вообще только в конце программирования проверяется. Так что похоже, что пока Вы туда целиком битстрим не зальете INIT меняться и не будет.

В порте 0x311 можно отдельные биты настраивать на вход и выход?

Что значит - не работает? (зависает? проваливается до конца и не появляется DONE? другое...)

while ((inportb(0x311)&0x04)==1) asm nop;
Если тестируемый вход не примет нужное значение - программа здесь зависнет, желательно предусмотреть выход из этого цикла по таймеру (счетчику).


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 19 2007, 18:45
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Цитата(BSV @ Jan 19 2007, 17:37) *
Проверьте:
1) PROG в '0' нужно держать не менее 0,3 us
2) После INIT = '1' нужно подождать не менее 0,5 us
3) Частота CCLK не более 20MHz, если битстрим - с компрессией

Да, все выполняется.

Цитата(BSV @ Jan 19 2007, 17:37) *
Проверять INIT после каждого бита бессмысленно, судя по диаграмме в даташите он вообще только в конце программирования проверяется. Так что похоже, что пока Вы туда целиком битстрим не зальете INIT меняться и не будет.

Диаграмму эту я видел. Но в файле http://www.plis.ru/pic/pict/File/spartan2_rus.pdf написано, что контрольная сумма проверяется в процессе конфигурации. Отсюда и проверка INIT_B.

Цитата(BSV @ Jan 19 2007, 17:37) *
В порте 0x311 можно отдельные биты настраивать на вход и выход?

Да. Оттуда читаются DONE, INIT_B, BUSY

Цитата(BSV @ Jan 19 2007, 17:37) *
Что значит - не работает? (зависает? проваливается до конца и не появляется DONE? другое...)

Если задаю параллельный режим то после загрузки файла прошивки и установки RDWR_B и CS_B в единицу, INIT_B стоит в единице, BUSY возвращается в единицу. А DONE в единице не встает. Т.е. CRC-ошибки вроде бы нет.
Если задаю последовательный режим, то на выходе DOUT(BUSY) всегда единица. Вне зависимости от входных данных.
Начал грешить на вход CLK. Переключил в режим мастер, на CCLK есть тактовая, значит ножка жива.

Цитата(BSV @ Jan 19 2007, 17:37) *
while ((inportb(0x311)&0x04)==1) asm nop;
Если тестируемый вход не примет нужное значение - программа здесь зависнет, желательно предусмотреть выход из этого цикла по таймеру (счетчику).

Это еще отладка, а не боевой вариант программы smile.gif

Может подскажете еще такой вопрос:
В режиме slave parallel в даташите на spartan3 изображено что в микросхему загружаются N+1 байт. Что это означает?
Еще у xilinx есть xapp502. К нему прилагаются исходники для cpld на vhdl, и код на СИ для микроконтроллера. Так в VHDL-коде ножка PROG_B имеет либо Z-состояние, либо в нуле. С чем это может быть связано? Вроде бы это обычная входная нога. Там правда написано, что это для virtex и spartan2.

ps. хотел прицепить рисунок, не получилось. говорят нет прав.
Go to the top of the page
 
+Quote Post
BSV
сообщение Jan 20 2007, 01:13
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045



Цитата(disel @ Jan 19 2007, 18:45) *
написано, что контрольная сумма проверяется в процессе конфигурации. Отсюда и проверка INIT_B.

Но через каждый бит проверять - это все же чересчур...

Цитата(disel @ Jan 19 2007, 18:45) *
Если задаю параллельный режим то после загрузки файла прошивки и установки RDWR_B и CS_B в единицу, INIT_B стоит в единице, BUSY возвращается в единицу. А DONE в единице не встает. Т.е. CRC-ошибки вроде бы нет.
Если задаю последовательный режим, то на выходе DOUT(BUSY) всегда единица. Вне зависимости от входных данных.
Начал грешить на вход CLK. Переключил в режим мастер, на CCLK есть тактовая, значит ножка жива.

Давайте сначала с одним режимом разберемся - я пользовал только Slave Serial, поэтому его и предлагаю мучать. Итак, зачем Вам проверять состояние DOUT - этот выход вроде используется только при Daisy Chain.

Цитата(disel @ Jan 19 2007, 18:45) *
Может подскажете еще такой вопрос:
В режиме slave parallel в даташите на spartan3 изображено что в микросхему загружаются N+1 байт. Что это означает?

Что-то я там такого не нашел.

Цитата(disel @ Jan 19 2007, 18:45) *
Еще у xilinx есть xapp502. К нему прилагаются исходники для cpld на vhdl, и код на СИ для микроконтроллера. Так в VHDL-коде ножка PROG_B имеет либо Z-состояние, либо в нуле. С чем это может быть связано? Вроде бы это обычная входная нога. Там правда написано, что это для virtex и spartan2.

Все правильно, ставится подтягивающий резистор на питание, а нуль для PROG - активное состояние.
Обратите внимание, что INIT - двунаправленный!!! сигнал, удерживая его в нуле можно задерживать конфигурацию.

Еще про DONE - его фронт после конфигурации должен укладываться в период CCLK, иначе нужно либо уменьшать сопротивление подтягивающего резистора, либо использовать DriveDone "Yes" при генерации битстрима.


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 20 2007, 09:43
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Цитата(BSV @ Jan 20 2007, 01:13) *
Давайте сначала с одним режимом разберемся - я пользовал только Slave Serial, поэтому его и предлагаю мучать. Итак, зачем Вам проверять состояние DOUT - этот выход вроде используется только при Daisy Chain.

DOUT я проверяю чтобы определить принимает ли микросхема данные. Возможно не работает ножка CCLK на вход. Если она сдохла, как раз такая картина и будет. Т.е. микросхема перешла в режим конфигурации и ждет данных, но их нет. Как выход я ее проверял, переключил в мастер-режим.
А нужно ли включать какие либо опции при компиляции, чтобы задействовать выход DOUT при конфигурации? Или он всегда работает?

Цитата(BSV @ Jan 20 2007, 01:13) *
Цитата(disel @ Jan 19 2007, 18:45) *

Может подскажете еще такой вопрос:
В режиме slave parallel в даташите на spartan3 изображено что в микросхему загружаются N+1 байт. Что это означает?

Что-то я там такого не нашел.

Прикрепляю рисунок из даташита.


Цитата(BSV @ Jan 20 2007, 01:13) *
Цитата(disel @ Jan 19 2007, 18:45) *

Еще у xilinx есть xapp502. К нему прилагаются исходники для cpld на vhdl, и код на СИ для микроконтроллера. Так в VHDL-коде ножка PROG_B имеет либо Z-состояние, либо в нуле. С чем это может быть связано? Вроде бы это обычная входная нога. Там правда написано, что это для virtex и spartan2.

Все правильно, ставится подтягивающий резистор на питание, а нуль для PROG - активное состояние.

Я передаю не третье состояние, а просто единицу. Но это не криминал.

Цитата(BSV @ Jan 20 2007, 01:13) *
Обратите внимание, что INIT - двунаправленный!!! сигнал, удерживая его в нуле можно задерживать конфигурацию.

Да, я это уже понял. Сначала не обратил внимание. Сейчас я его только читаю.

Цитата(BSV @ Jan 20 2007, 01:13) *
Еще про DONE - его фронт после конфигурации должен укладываться в период CCLK, иначе нужно либо уменьшать сопротивление подтягивающего резистора, либо использовать DriveDone "Yes" при генерации битстрима.

Спасибо, не знал, учту на будующее. Сейчас генерация всех управляющих сигналов, включая клок выполняется по ISA шине через регистры ввода\вывода. Там такие скорости, что фронты не критичны.
Начал грешить на микросхему, может кто-то из ног барахлит. В понедельник еще одну плату спаяют, на свежей проверю.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
BSV
сообщение Jan 22 2007, 23:46
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045



Цитата(disel @ Jan 20 2007, 09:43) *
DOUT я проверяю чтобы определить принимает ли микросхема данные. Возможно не работает ножка CCLK на вход. Если она сдохла, как раз такая картина и будет. Т.е. микросхема перешла в режим конфигурации и ждет данных, но их нет. Как выход я ее проверял, переключил в мастер-режим.
А нужно ли включать какие либо опции при компиляции, чтобы задействовать выход DOUT при конфигурации? Или он всегда работает?

По моим представлениям пока микросхема свою часть данных не заглотит, на DOUT ничего не появится. Это нужно для загрузки нескольких ПЛИС в цепочке. Если бы на DOUT микросхемы что-либо появлялось до завершения ее загрузки, то во все микросхемы в цепочке загружалась бы одна и та же прошивка. При последовательных режимах DOUT должен работать всегда.

Цитата(disel @ Jan 20 2007, 09:43) *
Прикрепляю рисунок из даташита.

Ну, тогда уж N+2 байта (0 .. N+1) smile.gif . По моему, это просто чтобы показать порядок следования байт.

Цитата(disel @ Jan 20 2007, 09:43) *
Там такие скорости, что фронты не критичны.

Это для Вас они не критичны, а для микросхемы очень даже критичны - нога DOUT - тоже двунаправленная, все микросхемы в цепочке следят за ее состоянием и переходят в рабочий режим почти одновременно, когда DONE становится 1.


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 09:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01679 секунд с 7
ELECTRONIX ©2004-2016