Перейти к содержанию
    

Генерация в Vivado файла с внутренними задержками корпуса ПЛИС

Коллеги, возникла небольшая проблема с трассировкой DRAM для Zynq-a. Мне надо учесть задержки в корпусе для правильного выравнивания линий в шинах, а достать эти задержки можно только из Vivado. Проблема в том, что чип XC7Z045 не поддерживается в бесплатной версии Vivado и сгенерить на него файл с задержками не получается. На XC7Z030 и ниже получается, а на XC7Z045 и выше - нет. Может кто-нибудь у кого нет таких глупых ограничений сгенерировать и запостить такой файл? Вот инструкции с форума Xilinx, как это сделать в гуи и в TCL консоле:
 

1) Open any design in Vivado, either RTL, Netlist or Implemented. Then select Export > I/O Ports > CSV. 

You will see all of the min and max package delays for each pin.

The min/max trace delays are also displayed in the Package Pins window for every package pin within two separate columns.

Similarly you can select File->Export I/O ports to get a CSV type spreadsheet with the delays included.

2) If there is no project you can use the following Tcl commands:

link_design -part <part_number>
write_csv <file_name>

 

Для моего случая это по идее будет:

link_design -part xc7z045ffg900-2
write_csv flight_time

Спасибо за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, Ezhen said:

Спасибо за помощь!

Держите. Вроде бы раньше на сайте Xilinx выкладывали эти файлы с задержками, видимо для новых серий отказались от такой практики.

flight_time.csv

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, 10ff said:

Держите. Вроде бы раньше на сайте Xilinx выкладывали эти файлы с задержками, видимо для новых серий отказались от такой практики.

flight_time.csv

На сайте нашел раздел с package files, в них есть название цепей, пины, принадлежность к банкам и т.д., но нет колонок с задержками, к сожалению. 

Спасибо за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 10/2/2018 at 8:41 PM, Ezhen said:

Спасибо за помощь!

 

Если вам нужно на постоянной основе - можно поставить полную версию вивады. Она содержит встроенную лицензию на все web-девайсы, а для вызова link_design лицензия не требуется.

 

PS Опа, это некропост оказывается. Но сам рецепт, тем не менее работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, в результирующем файле есть столбцы Max Delay и Min Delay. Я не нашел описания, откуда берется разбор. Видимо, эти значения получены из моделирования?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если кому-нибудь интересно, поделюсь своими скриптами для упрощения жизни с пинделеями.

Для вытаскивания пинаута с задержками в csv под линуксом:

export_pinout_csv.sh

#!/bin/sh

VIVADO_VER=2018.3
. /opt/Xilinx/Vivado/$VIVADO_VER/settings64.sh
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

PART_NO="xc7k70tfbg484-2"

echo "link_design -part \"$PART_NO\"" > pindelay.tcl
echo "write_csv \"${PART_NO}.csv\"" >> pindelay.tcl
echo "exit" >> pindelay.tcl
vivado -nojournal -mode batch -source pindelay.tcl -log pindelay.log

В переменную VIVADO_VER ставите свою версию, а в следующую строку - свой путь к установленному Vivado.

В переменной PART_NO - соответственно, партномер в точном формате, как упоминается Vivado.

 

Второй скрипт - для формирования из такого пинаута псевдо-csv файла для Allegro:

convert_vivado_pindelay.py

#!/usr/bin/env python
import csv, sys
pin_delay = []
with open( sys.argv[1] ) as f:
    r = csv.reader(f)
    for l in r:
        if l == [] or l[0] == '' or l[0][0] == '#':
            continue
        d = [l[i] for i in (1,4,5)]
        if d[1] == d[2] == '':
            continue
        try:
            t1 = float(d[1])
            t2 = float(d[2])
        except ValueError:
            continue
        pin_delay.append( [d[0], (t1+t2)/2.] )

print 'PIN DELAY\nREF DES U1\nDEVICE BGA...\nUNITS ps'
for l in pin_delay:
    print '{0}\t{1:0.2f}'.format(l[0], l[1])

Написан на Python 2. Результат выдается в стандартный вывод, его можно перенаправить в нужный вам файл. Если для какого-то пина не указаны задержки - он в выходной файл не попадает.

REF DES и DEVICE - поставить вручную какие надо. Т.к. я не совсем понимаю, откуда берутся Min delay / Max delay, в этом скрипте берется их среднее значение, точность в пикосекундах обрезается при печати до двух знаков после запятой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На bash не проще? Что-то вроде этого:

cat file |sed 's/#.*//'' |grep -v '^ *$' |awk -F, '{printf "%s\t%0.2f\n", $1, ($4+$5)/2.0}'

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

42 минуты назад, dvlwork сказал:

На bash не проще? Что-то вроде этого:

cat file |sed 's/#.*//'' |grep -v '^ *$' |awk -F, '{printf "%s\t%0.2f\n", $1, ($4+$5)/2.0}'

Проще, но у меня сходу это заклинание не сработало :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...