Часть 7: ОКРУЖЕНИЕ РАЗРАБОТКИ


plug

7-8: Технология FPGA

plug



Технология FPGA - это "программная (soft)" технология, которая создает примитивы, согласно файлу архитектуры FPGA. После переключения на FPGA технологию меню компонент выводит список команд для конфигурации технологии и программирования FPGA цепей.

Файл архитектуры FPGA содержит всю информацию, необходимую для определения специфического чипа FPGA. Он имеет три секции: определения примитивов (Primitive Definition), определения блоков (Block Definition) и архитектуры (Arcitecture). Секция определения примитивов описывает базовые блоки для чипов серии FPGA (это примитивы в технологии FPGA). Секция описания блоков строится на примитивах для создания блоков высшего уровня. И, наконец, секция архитектуры определяет блок самого верхнего уровня, который и есть FPGA.

Файл архитектуры FPGA должен иметь секцию определения примитивов, но не обязательно секции определения блоков или секцию архитектуры. Это происходит потому, что размещение примитивов может быть сохранено в библиотеке Electric, а не в файле архитектуры. Таким образом, после чтения секции определения примитивов (которая размещает примитивы для создания библиотеки чипа) и чтения секций определения блоков и архитектуры (которые размещают примитивы для создания библиотеки чипа) библиотека может быть сохранена на диске. Последующая активизация разработки может продолжить чтение только секции определения примитивов, а затем прочитать библиотеку с определением чипа. Это позволяет избежать появления больших файлов архитектуры FPGA (секция определений примитивов будет меньше, чем секции определения блоков и архитектуры).

Секция определения примитивов

Секция определения примитивов определяет блоки самого нижнего уровня, которые становятся примитивами узлов в технологии FPGA. Определение примитива выглядит подобным образом:

(primdef
  (attributes
    (name PRIMNAME)
    (size X Y)
  )
  (ports
    (port
      (name PORTNAME)
      (position X Y)
      (direction input | output | bidir)
    )
  )
  (components
    (pip
      (name PIPNAME)
      (position X Y)
      (connectivity NET1 NET2)
    )
  )
  (nets
    (net
      (name INTNAME)
      (segment FROMPART TOPART)
    )
  )
)

Секция атрибутов (attributes) определяет основную информацию о блоке. Секция порты (ports) определяет внешние соединения. Секция компоненты (components) определяет логику в блоке (в настоящее время только PIP). Секция сети (nets) определяет внутренние сети. Здесь может быть множество входящих сегментов  (segment) в сети, каждый определяет прямой провод проходящий от FROMPART к TOPART. Эти части (parts) могут быть либо портом ( port PORTNAME), либо координатами X Y (coord X Y), в зависимости от того, будет ли на концах сети порт или произвольное расположение внутри примитива.

Например, этот блок имеет две вертикальные сети и две горизонтальные. Четыре метки расположены на пересечениях. Определено шесть портов (два слева, два вверху и два внизу). Код получается следующий:

(primdef
  (attributes
    (name sampleblock)
    (size 40 60)
  )
  (ports
    (port (name inleft1) (position 0 40) (direction input) )
    (port (name inleft2) (position 0 20) (direction input) )
    (port (name outtop1) (position 10 60) (direction output) )
    (port (name outtop2) (position 30 60) (direction output) )
    (port (name outbot1) (position 10 0) (direction output) )
    (port (name outbot2) (position 30 0) (direction output) )
  )

  (components
    (pip (name pip1) (position 10 20) (connectivity intv1 inth1) )
    (pip (name pip2) (position 30 20) (connectivity intv2 inth1) )
    (pip (name pip3) (position 10 40) (connectivity intv1 inth2) )
    (pip (name pip4) (position 30 40) (connectivity intv2 inth2) )
  )

  (nets
    (net (name intv1) (segment port outbot1 port outtop1 ) )
    (net (name intv2) (segment port outbot2 port outtop2 ) )
    (net (name inth1) (segment port inleft2 coord 30 20 ) )
    (net (name inth2) (segment port inleft1 coord 30 40 ) )
  )
)

Figure 7.7

Секции определения блоков и архитектуры

Секции определения блоков и архитектуры определяют верхний уровень блоков, собранных из примитивов. Они выглядят похожими на это:

(blockdef
  (attributes
    (name CHIPNAME)
    (size X Y)
    (wirecolor COLOR)
    (repeatercolor COLOR)
  )
  (ports
    (port
      (name PORTNAME)
      (position X Y)
      (direction input | output | bidir)
    )
  )
  (components
    (instance
      (attributes ATTPAIRS)
      (type BLOCKTYPE)
      (name BLOCKNAME)
      (position X Y)
      (rotation ROT)
    )
    (repeater
      (name BLOCKNAME)
      (porta X Y)
      (portb X Y)
      (direction vertical | horizontal)
    )
  )
  (nets
    (net
      (name INTNAME)
      (segment FROMPART TOPART)
    )
  )
)

Единственная разница между секцией архитектуры и определения блоков в том, что секция архитектуры имеет ключевое слово architecture вместо blockdef. Может быть только одна секция architecture, но может быть много blockdef, определяющих сложную иерархию.

Секция attributes определяет основную информацию о блоке.

Секция ports определяет внешние соединения.

Секция components определяет логику блока (в настоящий момент образцы других блоков или повторители). Положение (rotation) образца - это число градусов против часовой стрелки с поворотом вокруг центра. Секция атрибутов (attributes) образца назначает имя/значение парам (это может использоваться при программировании FPGA).

Секция nets определяет внутренние сети. Может быть множество сегментов (segment) входов в сеть, каждый определяет прямой провод, проходящий от FROMPART к TOPART. Эти части (parts) могут быть либо компонентом (component INSTNAME PORTNAME), портом (port PORTNAME), либо координатами X Y (coord X Y), в зависимости от того, будут ли концы сети на компоненте, порте или в произвольном месте внутри блока.

Вот пример кода определения блока и его компоновки.

(blockdef
  (attributes
    (name testblock)
    (size 80 150)
  )
  (components
    (instance (type sampleblock) (name block0)
      (position 30 80) )
    (instance (type sampleblock) (name block1)
      (position 30 10) )
    (repeater (name r0) (porta 10 120)
      (portb 20 120) (direction horizontal)
    )
    (repeater (name r1) (porta 10 100)
      (portb 20 100) (direction horizontal)
    )
    (repeater (name r2) (porta 10 50)
      (portb 20 50) (direction horizontal)
    )
    (repeater (name r3) (porta 10 30)
      (portb 20 30) (direction horizontal)
    )
  )

Figure 7.8

  (ports
    (port (name top0) (position 40 150) (direction bidir) )
    (port (name top1) (position 60 150) (direction bidir) )
    (port (name left0) (position 0 120) (direction input) )
    (port (name left1) (position 0 100) (direction input) )
    (port (name left2) (position 0 50) (direction input) )
    (port (name left3) (position 0 30) (direction input) )
    (port (name bot0) (position 40 0) (direction bidir) )
    (port (name bot1) (position 60 0) (direction bidir) )
  )

  (nets
    (net (name iv0)
      (segment port top0 component block0 outtop1) )
    (net (name iv1)
      (segment port top1 component block0 outtop2) )
    (net (name iv2)
      (segment component block0 outbot1 component block1 outtop1))
    (net (name iv3)
      (segment component block0 outbot2 component block1 outtop2))
    (net (name iv4)
      (segment component block1 outbot1 port bot0) )
    (net (name iv5)
      (segment component block1 outbot2 port bot1) )
    (net (name ih0)
      (segment port left0 component r0 a) )
    (net (name ih1)
      (segment component r0 b component block0 inleft1) )
    (net (name ih2)
      (segment port left1 component r1 a) )
    (net (name ih3)
      (segment component r1 b component block0 inleft2) )
    (net (name ih4)
      (segment port left2 component r2 a) )
    (net (name ih5)
      (segment component r2 b component block1 inleft1) )
    (net (name ih6)
      (segment port left3 component r3 a) )
    (net (name ih7)
      (segment component r3 b component block1 inleft2) )
  )
)

Команды

Figure 7.9

Чтобы прочитать файл архитектуры, щелкните по элементу "Read Arch." в меню компонент. Вам будет предложено определить файл архитектуры. Для чтения только примитивов из файла архитектуры используйте элемент "Read Prims.".

Уровень отображения может управляться щелчком по элементу "Wires:". Состояние может быть установлено в "Full" (чтобы видеть все провода), "Empty" (чтобы не видеть проводов) или "Active" (чтобы видеть активные проводники внутри примитивов). Активные проводники - это те, что соединяются с PIP, которые были запрограммированы. Элемент "Text:" устанавливает отображение текста на примитивах, и может быть либо "On", либо "Off". Если вы подсвечиваете область чипа FPGA и щелкните по "See Active", тогда область будет перерисована, отображая только активные сегменты.

Когда FPGA уже создан, вы можете программировать PIP, выбирая компоненты и щелкнув по элементу "Edit Pips". При этом отобразится список активных PIP на компоненте. Например, после щелчка по одному из образцов "SampleBlock", вы можете ввести строку "pip1 pip4" для программирования двух pip в образце.


Prev

Предыдущий

   

Contents

Содержание

   

Следующий

Next