Jump to content

    

Генерация в 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

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

Share this post


Link to post
Share on other sites
13 hours ago, Ezhen said:

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

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

flight_time.csv

Share this post


Link to post
Share on other sites
17 minutes ago, 10ff said:

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

flight_time.csv

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

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

Share this post


Link to post
Share on other sites

Как вариант померить импеданс от DRAM до выходных буферов

Share this post


Link to post
Share on other sites
On 10/2/2018 at 8:41 PM, Ezhen said:

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Для вытаскивания пинаута с задержками в 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, в этом скрипте берется их среднее значение, точность в пикосекундах обрезается при печати до двух знаков после запятой.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
42 минуты назад, dvlwork сказал:

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this