«Бог не меняет того, что (происходит) с людьми, пока они сами не изменят своих помыслов.» Коран, Сура 12:13

ПЦУСБ/Лабораторная работа 4 — различия между версиями

Материал из Wiki
Перейти к: навигация, поиск
(Новая страница: «{{ПЦУСБ TOC}} == Варианты заданий == # Преобразователь из кода Грея в двоичный код 8-разрядног…»)
 
м (Порядок выполнения работы)
 
(не показаны 17 промежуточных версий 1 участника)
Строка 1: Строка 1:
 
{{ПЦУСБ TOC}}
 
{{ПЦУСБ TOC}}
 +
 +
== Цель работы ==
 +
 +
Получить базовые навыки работы в программе ISE (создание проекта, подключение файла конфигурации, синтез схемы, сохранение синтезированной схемы в VHDL формате, программирование ПЛИС) и освоить моделирование VHDL-нетлиста схемы с учетом задержек после синтеза и размещения в ПЛИС.
 +
 +
== Задание ==
 +
 +
Реализовать заданный VHDL-моделью цифровой блок в ПЛИС, используя отладочную плату [http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,799&Prod=S3BOARD Spartan-3 Starter Kit], общий вид которой представлен на рисунке 1 и провести моделирование исходного VHDL-описания и синтезированной схемы с учетом задержек, подключаемых из SDF-файла.
 +
 +
== Порядок выполнения работы ==
 +
 +
# Подготовка к работе
 +
#* Программы необходимые в работе:
 +
#** файловый менеджер TotalCommander;
 +
#** текстовый редактор Emacs;
 +
#** ISE;
 +
#** графический редактор для обработки скриншотов;
 +
#** ModelSim.
 +
#* Создать в файловой системе каталог для проекта (например, lab04_var01), в котором создать следующие подкатологи: vhd, work, ise, lib.
 +
#** В папку vhd скопировать VHDL-модели заданного компонента, компонента верхнего уровня (top.vhd), файл конфигурации (top.ucf).
 +
#** В папку lib распаковать архив библиотеки ([http://simhard.com/ftp/files/pcusb/simprim.zip simprim.zip]) логических элементов ПЛИС, необходимый для моделирования синтезированной схемы в программе ModelSim.
 +
#** В папке work будут созданы библиотеки ModelSim.
 +
#** В папке ise будет размещаться проект программы ISE.
 +
# Используя программу Emacs, вставить заданный компонент в модуль верхнего уровня, используя операторы ''component'' и ''port map''.
 +
# Создать новый проект в программе ISE (иконка для запуска программы на рабочем столе).
 +
#* Добавить в проект VHDL-модули (VHDL-файлы):
 +
#** модифицированный модуль верхнего уровня (подключить через port map компонент из задания)
 +
#** модель блока из заданного варианта задания.
 +
#* Добавить в проект описание конфигурации выводов (UCF-файл)
 +
# Провести все этапы синтеза до генерации прошивки ПЛИС включительно
 +
#* <s>Задать временное ограничение: частоту синхросигнала</s>
 +
#* запрограммировать полученную прошивку в ПЛИС
 +
# Просмотреть
 +
#* синтезированную схему (RTL описание и реализацию в базисе ПЛИС) ''(скриншоты вставить в отчет)''
 +
#* отчет о синтезе схемы ''(вставить в отчет)''
 +
# Сохранить синтезированное описание схемы в формате VHDL
 +
#* Сгенерировать VHDL-нетлист синтезированной схемы и SDF-файл задержек
 +
# Провести моделирование исходной VHDL-модели и синтезированной схемы с учетом задержек распространения сигнала, полученных после размещения схемы в ПЛИС
 +
#* Написать тестбенч, включающий синтезированную схему и исходную VHDL-модель
 +
#* Провести моделирование тесбенча с подключением SDF-файла для синтезированной схемы (библиотека [http://simhard.com/ftp/files/pcusb/simprim.zip simprim])
 +
# Подготовить отчет, включающий:
 +
#* Описание задания
 +
#* Исходные коды заданного компонента, модифицированного модуля верхнего уровня, тесбенч.
 +
#* Скриншот синетезированной схемы (RTL и в базисе ПЛИС)
 +
#* Отчет о синтезе
 +
#* Временные диаграммы моделирования тесбенча
 +
 +
== Описание доступных ресурсов ПЛИС ==
 +
 +
[[Файл:S3BOARD-top-400.gif|frame|right|Рисунок 1 — [http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,799&Prod=S3BOARD Spartan-3 Starter Kit] ]]
 +
 +
[[Файл:S3BOARD-block-400.gif|frame|right|Рисунок 2 — [http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,799&Prod=S3BOARD Spartan-3 Starter Kit] ]]
 +
 +
На рисунке 1 представлен внешний вид отладочной платы [http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,799&Prod=S3BOARD Spartan-3 Starter Kit], включающей ПЛИС фирмы Xilinx Spartan-3 ([http://www.chipfind.ru/datasheet/pdf/xilinx/xc3s1xxx.pdf документация по микросхеме XC3S1000]). В таблице 1 представлены основные параметры, характеризующие ПЛИС XC3S1000. На рисунке 2 показаны основные компоненты и интерфейсы размещённые на отладочной плате:
 +
* генератор синхросигнала на 50 МГц;
 +
* вход внешней синхронизации;
 +
* внешняя память инициализации ПЛИС (Flash PROM XCF04S)
 +
* внешнее ОЗУ (512К × 16 бит)
 +
* три 40-выводных разъёма, на которые выведены пользовательские выводы ПЛИС
 +
* полоска из 8 светодиодов
 +
* четыре семисегментных индикатора
 +
* 4 кнопки
 +
* 8 переключателей
 +
* порты
 +
** PS/2
 +
** VGA
 +
** RS232 (COM-порт)
 +
 +
 +
{| align=center cellspacing="0" cellpadding="5" border="1"
 +
|+ Таблица 1 – Параметры ПЛИС XC3S1000
 +
!rowspan=2| Device
 +
!rowspan=2| System  <br /> Gates
 +
!rowspan=2| Logic <br />  Cells
 +
!colspan=3| CLB Array (One CLB = Four Slices)
 +
!rowspan=2| Distributed <br /> RAM (bits1)
 +
!rowspan=2| Block RAM <br /> (bits 1)
 +
!rowspan=2| Dedicated <br /> Multipliers
 +
!rowspan=2| DCMs
 +
!rowspan=2| Maximum <br /> User I/O
 +
!rowspan=2| Maximum <br />Differential <br /> I/O Pairs
 +
|-
 +
! Rows || Columns || Total CLBs
 +
|-
 +
! XC3S1000
 +
| 1M
 +
| 17,280
 +
| 48
 +
| 40
 +
| 1,920
 +
| 120K
 +
| 432K
 +
| 24
 +
| 4
 +
| 391
 +
| 175
 +
|}
 +
 +
 +
=== Описание интерфейса блока верхнего уровня (TOP-модуль) ===
 +
 +
 +
{|
 +
| <div style="border: 2px solid #AEA; padding: 0.4em; border-bottom: none; border-right: none; background: HoneyDew">
 +
'''Листинг 1''' — VHDL-описание компонента верхнего уровня ([{{SERVER}}/ftp/files/pcusb/lab04/top.vhd top.vhd])
 +
----
 +
<big><source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 +
entity top is
 +
  port(
 +
    CLK  : in    std_logic;            -- синхросигнал 50 МГц (T9)
 +
    BTN  : in    std_logic_vector(3 downto 0);  -- кнопки (L14 L13 M14 M13)
 +
    SW  : in    std_logic_vector(7 downto 0);  -- переключатели (K13 K14 J13 J14 H13 H14 G12 F12)
 +
    -- полоска светодиодов
 +
    LED  : out  std_logic_vector(7 downto 0);  -- P11 P12 N12 P13 N14 L12 P14 K12
 +
    -- семисегментный индикатор
 +
    SEG  : out  std_logic_vector(7 downto 0);  -- P16 N16 F13 R16 P15 N15 G13 E14
 +
    AN  : out  std_logic_vector(3 downto 0);  -- E13 F14 G14 D14
 +
    -- выводы интерфейса RS232
 +
    RXD  : in    std_logic_vector(1 downto 0);  -- N10 T13
 +
    TXD  : out  std_logic_vector(1 downto 0);  -- T14 R13
 +
    -- выводы интерфейса VGA
 +
    GRB  : out  std_logic_vector(2 downto 0);  -- T12 R12 R11
 +
    VH  : out  std_logic_vector(1 downto 0);  -- T10 R9
 +
    -- выводы интерфейса PS2
 +
    PS2  : inout std_logic_vector(1 downto 0);  -- M16 M15
 +
    -- выводы подключения внешнего ОЗУ
 +
    ADDR : out  std_logic_vector(17 downto 0);  -- L3 K5 K3 J3 J4 H4 H3 G5 E4 E3 F4 F3 G4 L4 M3 M4 N3 L5
 +
    DATA : inout std_logic_vector(31 downto 0);  -- N1 M1 K2 C3 F5 G1 E2 D2 D1 E1 G2 J1 K1 M2 N2 P2 R1 P1
 +
                                                -- L2 J2 H1 F2 P8 D3 B1 C1 C2 R5 T5 R6 T8 N7
 +
    CE  : out  std_logic_vector(1 downto 0);  -- N5 P7
 +
    OE  : out  std_logic;            -- K4
 +
    WE  : out  std_logic;            -- G3
 +
    BSEL : out  std_logic_vector(3 downto 0));  -- R4 P5 T4 P6
 +
end;
 +
 +
architecture beh of top is
 +
begin
 +
  -- отключение неиспользуемых выводов
 +
  ADDR <= "000000000000000000";
 +
  DATA <= "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
 +
  CE  <= "11";
 +
  OE  <= '1';
 +
  WE  <= '1';
 +
  BSEL <= x"0";
 +
 +
  TXD <= "11";
 +
  PS2 <= "ZZ";
 +
 +
  GRB <= "000";
 +
  VH  <= "00";
 +
 +
  LED <= x"00";
 +
  SEG <= x"00";
 +
  AN  <= x"F";
 +
 +
end architecture beh;
 +
</source>
 +
</big>
 +
</div>
 +
|}
 +
 +
 +
{| width=500px
 +
|{{Hider|Листинг файла конфигурации выводов ПЛИС (([{{SERVER}}/ftp/files/pcusb/lab04/top.ucf top.ucf]))}}
 +
{{Файл|top.ucf|<big><source lang="text">
 +
NET "CLK" LOC = "T9" | IOSTANDARD = LVCMOS33 ;
 +
 +
NET "SEG(0)" LOC = "E14" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "SEG(1)" LOC = "G13" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "SEG(2)" LOC = "N15" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "SEG(3)" LOC = "P15" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "SEG(4)" LOC = "R16" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "SEG(5)" LOC = "F13" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "SEG(6)" LOC = "N16" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "SEG(7)" LOC = "P16" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
 +
NET "AN(3)" LOC = "E13" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
 +
NET "AN(2)" LOC = "F14" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
 +
NET "AN(1)" LOC = "G14" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
 +
NET "AN(0)" LOC = "D14" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
 +
 +
NET "LED(7)" LOC = "P11" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "LED(6)" LOC = "P12" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "LED(5)" LOC = "N12" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "LED(4)" LOC = "P13" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "LED(3)" LOC = "N14" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "LED(2)" LOC = "L12" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "LED(1)" LOC = "P14" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
NET "LED(0)" LOC = "K12" | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = SLOW ;
 +
 +
NET "RXD(0)" LOC = "T13" | IOSTANDARD = LVCMOS33 ;
 +
NET "TXD(0)" LOC = "R13" | IOSTANDARD = LVCMOS33 | DRIVE = 2 | SLEW = SLOW ;
 +
NET "RXD(1)" LOC = "N10" | IOSTANDARD = LVCMOS33 ;
 +
NET "TXD(1)" LOC = "T14" | IOSTANDARD = LVCMOS33 | DRIVE = 2 | SLEW = SLOW ;
 +
 +
NET "PS2(0)" LOC = "M15" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "PS2(1)" LOC = "M16" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
 +
NET "BTN(3)" LOC = "L14" | IOSTANDARD = LVCMOS33 ;
 +
NET "BTN(2)" LOC = "L13" | IOSTANDARD = LVCMOS33 ;
 +
NET "BTN(1)" LOC = "M14" | IOSTANDARD = LVCMOS33 ;
 +
NET "BTN(0)" LOC = "M13" | IOSTANDARD = LVCMOS33 ;
 +
 +
NET "SW(7)" LOC = "K13" | IOSTANDARD = LVCMOS33 ;
 +
NET "SW(6)" LOC = "K14" | IOSTANDARD = LVCMOS33 ;
 +
NET "SW(5)" LOC = "J13" | IOSTANDARD = LVCMOS33 ;
 +
NET "SW(4)" LOC = "J14" | IOSTANDARD = LVCMOS33 ;
 +
NET "SW(3)" LOC = "H13" | IOSTANDARD = LVCMOS33 ;
 +
NET "SW(2)" LOC = "H14" | IOSTANDARD = LVCMOS33 ;
 +
NET "SW(1)" LOC = "G12" | IOSTANDARD = LVCMOS33 ;
 +
NET "SW(0)" LOC = "F12" | IOSTANDARD = LVCMOS33 ;
 +
 +
NET "GRB(0)" LOC = "R11" | IOSTANDARD = LVCMOS33 | DRIVE = 24 | SLEW = FAST ;
 +
NET "GRB(1)" LOC = "R12" | IOSTANDARD = LVCMOS33 | DRIVE = 24 | SLEW = FAST ;
 +
NET "GRB(2)" LOC = "T12" | IOSTANDARD = LVCMOS33 | DRIVE = 24 | SLEW = FAST ;
 +
NET "VH(0)" LOC = "R9" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
 +
NET "VH(1)" LOC = "T10" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
 +
 +
NET "ADDR(17)" LOC = "L3" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(16)" LOC = "K5" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(15)" LOC = "K3" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(14)" LOC = "J3" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(13)" LOC = "J4" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(12)" LOC = "H4" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(11)" LOC = "H3" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(10)" LOC = "G5" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(9)" LOC = "E4" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(8)" LOC = "E3" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(7)" LOC = "F4" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(6)" LOC = "F3" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(5)" LOC = "G4" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(4)" LOC = "L4" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(3)" LOC = "M3" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(2)" LOC = "M4" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(1)" LOC = "N3" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "ADDR(0)" LOC = "L5" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
 +
NET "OE" LOC = "K4" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
NET "WE" LOC = "G3" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ;
 +
 +
NET "DATA(15)" LOC = "R1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(14)" LOC = "P1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(13)" LOC = "L2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(12)" LOC = "J2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(11)" LOC = "H1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(10)" LOC = "F2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(9)" LOC = "P8" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(8)" LOC = "D3" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(7)" LOC = "B1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(6)" LOC = "C1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(5)" LOC = "C2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(4)" LOC = "R5" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(3)" LOC = "T5" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(2)" LOC = "R6" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(1)" LOC = "T8" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(0)" LOC = "N7" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
 +
NET "CE(0)" LOC = "P7" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST ;
 +
NET "BSEL(1)" LOC = "T4" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST ;
 +
NET "BSEL(0)" LOC = "P6" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST ;
 +
 +
NET "DATA(31)" LOC = "N1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(30)" LOC = "M1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(29)" LOC = "K2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(28)" LOC = "C3" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(27)" LOC = "F5" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(26)" LOC = "G1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(25)" LOC = "E2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(24)" LOC = "D2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(23)" LOC = "D1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(22)" LOC = "E1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(21)" LOC = "G2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(20)" LOC = "J1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(19)" LOC = "K1" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(18)" LOC = "M2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(17)" LOC = "N2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
NET "DATA(16)" LOC = "P2" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST | PULLUP ;
 +
 +
NET "CE(1)" LOC = "N5" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST ;
 +
NET "BSEL(3)" LOC = "R4" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST ;
 +
NET "BSEL(2)" LOC = "P5" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = FAST ;
 +
</source></big>}}{{Hider|end}}
 +
|}
  
 
== Варианты заданий ==
 
== Варианты заданий ==
 +
 +
=== 1. Преобразователь из кода Грея в двоичный код 8-разрядного числа ===
 +
 +
* входы подключить к переключателям (SW)
 +
* выходы подключить к линейке светодиодов (LED)
 +
 +
{| width=400px
 +
|{{Hider|Листинг VHDL-модели ([{{SERVER}}/ftp/files/pcusb/lab04/gray_to_binary.vhd gray_to_binary.vhd])}}{{Файл|gray_to_binary.vhd|<big><source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 +
entity gray_to_binary is
 +
 +
  port (
 +
    x : in  std_logic_vector(7 downto 0);
 +
    y : out std_logic_vector(7 downto 0));
 +
 +
end entity gray_to_binary;
 +
 +
architecture beh of gray_to_binary is
 +
  signal a : std_logic_vector (7 downto 0);
 +
begin
 +
  a(7) <= X(7);
 +
  a(6) <= X(6) xor X(7);
 +
  gen : for i in 6 downto 1 generate
 +
    a(i-1) <= a(i) xor X(i-1);
 +
  end generate;
 +
  y <= a;
 +
 +
end beh;
 +
</source>
 +
</big>}}{{Hider|end}}
 +
|}
 +
 +
 +
=== 2. Преобразователь из двоичного кода в код Грея 8-разрядного числа===
 +
 +
* входы подключить к переключателям (SW)
 +
* выходы подключить к линейке светодиодов (LED)
 +
 +
{| width=400px
 +
|{{Hider|Листинг VHDL-модели ([{{SERVER}}/ftp/files/pcusb/lab04/binary_to_gray.vhd binary_to_gray.vhd])}}{{Файл|binary_to_gray.vhd|<big><source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 +
entity binary_to_gray is
 +
 +
  port(
 +
    x : in  std_logic_vector(7 downto 0);
 +
    y : out std_logic_vector(7 downto 0));
 +
 +
end binary_to_gray;
 +
 +
architecture beh of binary_to_gray is
 +
 +
begin  -- beh
 +
 +
  y(7) <= x(7);
 +
  y(6) <= x(7) xor x(6);
 +
  y(5) <= x(6) xor x(5);
 +
  y(4) <= x(5) xor x(4);
 +
  y(3) <= x(4) xor x(3);
 +
  y(2) <= x(3) xor x(2);
 +
  y(1) <= x(2) xor x(1);
 +
  y(0) <= x(1) xor x(0);
 +
 +
end beh;
 +
</source>
 +
</big>}}{{Hider|end}}
 +
|}
 +
 +
 +
<!--
 +
=== 3. Счетчик числа единиц и определение четности N-разрядного числа===
 +
 +
{| width=400px
 +
|{{Hider|Листинг VHDL-модели}}{{Файл|Имя файла|<big><source lang="vhdl">
 +
 +
</source>
 +
</big>}}{{Hider|end}}
 +
|}-->
 +
 +
=== 3. Умножитель (4-разрядное число × 4-разрядное число)===
 +
 +
* входы подключить к переключателям (SW)
 +
* выходы подключить к линейке светодиодов (LED)
 +
 +
{| width=400px
 +
|{{Hider|Листинг VHDL-модели ([{{SERVER}}/ftp/files/pcusb/lab04/mult_4_4.vhd mult_4_4.vhd])}}{{Файл|Имя файла|<big><source lang="vhdl">
 +
library ieee;
 +
use ieee.numeric_std.all;
 +
use ieee.std_logic_1164.all;
 +
 +
entity mult_4_4 is
 +
 
 +
  port (
 +
    a : in  std_logic_vector(3 downto 0);
 +
    b : in  std_logic_vector(3 downto 0);
 +
    c : out std_logic_vector(7 downto 0));
 +
 +
end entity mult_4_4;
 +
 +
architecture beh of mult_4_4 is
 +
 +
begin  -- architecture beh
 +
 +
  c <= std_logic_vector(unsigned(a) * unsigned(b));
 +
 +
end architecture beh;
 +
</source>
 +
</big>}}{{Hider|end}}
 +
|}
 +
 +
 +
=== 4. Сумматор (4-разрядное число + 4-разрядное число)===
 +
 +
* входы подключить к переключателям (SW)
 +
* выходы подключить к линейке светодиодов (LED)
 +
 +
{| width=400px
 +
|{{Hider|Листинг VHDL-модели ([{{SERVER}}/ftp/files/pcusb/lab04/sum_4_4.vhd sum_4_4.vhd])}}{{Файл|Имя файла|<big><source lang="vhdl">
 +
library ieee;
 +
use ieee.numeric_std.all;
 +
use ieee.std_logic_1164.all;
 +
 +
entity sum_4_4 is
 +
 
 +
  port (
 +
    a : in  std_logic_vector(3 downto 0);
 +
    b : in  std_logic_vector(3 downto 0);
 +
    c : out std_logic_vector(4 downto 0));
 +
 +
end entity sum_4_4;
 +
 +
architecture beh of sum_4_4 is
 +
 +
begin  -- architecture beh
 +
 +
  c <= std_logic_vector(unsigned(a) + ('0' & unsigned(b)));
 +
 +
end architecture beh;
 +
</source>
 +
</big>}}{{Hider|end}}
 +
|}
 +
 +
 +
=== 5. Дешифратор из 3 в 8 ===
 +
 +
* входы подключить к кнопкам (BTN)
 +
* выходы подключить к линейке светодиодов (LED)
 +
 +
{| width=400px
 +
|{{Hider|Листинг VHDL-модели ([{{SERVER}}/ftp/files/pcusb/lab04/decoder_3_in_8.vhd decoder_3_in_8.vhd])}}{{Файл|decoder_3_in_8.vhd|<big><source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
use ieee.numeric_std.all;
 +
 +
entity decoder_3_in_8 is
 +
  port (
 +
    x : in  std_logic_vector(2 downto 0);
 +
    y : out std_logic_vector(7 downto 0));
 +
end decoder_3_in_8;
 +
 +
architecture beh of decoder_3_in_8 is
 +
begin
 +
  gen : for i in 0 to 7 generate
 +
    Y(i) <= '1' when i = unsigned(x) else '0';
 +
  end generate;
 +
end beh;
 +
</source>
 +
</big>}}{{Hider|end}}
 +
|}
 +
 +
<!--
 
# Преобразователь из кода Грея в двоичный код 8-разрядного числа
 
# Преобразователь из кода Грея в двоичный код 8-разрядного числа
 
# Преобразователь из двоичного кода в код Грея 8-разрядного числа  
 
# Преобразователь из двоичного кода в код Грея 8-разрядного числа  
Строка 11: Строка 471:
 
#* выходной код отображается на линейке светодиодов  
 
#* выходной код отображается на линейке светодиодов  
 
# Двойной приоритетный шифратор 8 в 3
 
# Двойной приоритетный шифратор 8 в 3
 +
-->

Текущая версия на 10:44, 6 декабря 2013

Лекции ПЦУСБ

Лекции

Практические
Тесты

Лабораторные

Доп. материалы

Содержание

Цель работы

Получить базовые навыки работы в программе ISE (создание проекта, подключение файла конфигурации, синтез схемы, сохранение синтезированной схемы в VHDL формате, программирование ПЛИС) и освоить моделирование VHDL-нетлиста схемы с учетом задержек после синтеза и размещения в ПЛИС.

Задание

Реализовать заданный VHDL-моделью цифровой блок в ПЛИС, используя отладочную плату Spartan-3 Starter Kit, общий вид которой представлен на рисунке 1 и провести моделирование исходного VHDL-описания и синтезированной схемы с учетом задержек, подключаемых из SDF-файла.

Порядок выполнения работы

  1. Подготовка к работе
    • Программы необходимые в работе:
      • файловый менеджер TotalCommander;
      • текстовый редактор Emacs;
      • ISE;
      • графический редактор для обработки скриншотов;
      • ModelSim.
    • Создать в файловой системе каталог для проекта (например, lab04_var01), в котором создать следующие подкатологи: vhd, work, ise, lib.
      • В папку vhd скопировать VHDL-модели заданного компонента, компонента верхнего уровня (top.vhd), файл конфигурации (top.ucf).
      • В папку lib распаковать архив библиотеки (simprim.zip) логических элементов ПЛИС, необходимый для моделирования синтезированной схемы в программе ModelSim.
      • В папке work будут созданы библиотеки ModelSim.
      • В папке ise будет размещаться проект программы ISE.
  2. Используя программу Emacs, вставить заданный компонент в модуль верхнего уровня, используя операторы component и port map.
  3. Создать новый проект в программе ISE (иконка для запуска программы на рабочем столе).
    • Добавить в проект VHDL-модули (VHDL-файлы):
      • модифицированный модуль верхнего уровня (подключить через port map компонент из задания)
      • модель блока из заданного варианта задания.
    • Добавить в проект описание конфигурации выводов (UCF-файл)
  4. Провести все этапы синтеза до генерации прошивки ПЛИС включительно
    • Задать временное ограничение: частоту синхросигнала
    • запрограммировать полученную прошивку в ПЛИС
  5. Просмотреть
    • синтезированную схему (RTL описание и реализацию в базисе ПЛИС) (скриншоты вставить в отчет)
    • отчет о синтезе схемы (вставить в отчет)
  6. Сохранить синтезированное описание схемы в формате VHDL
    • Сгенерировать VHDL-нетлист синтезированной схемы и SDF-файл задержек
  7. Провести моделирование исходной VHDL-модели и синтезированной схемы с учетом задержек распространения сигнала, полученных после размещения схемы в ПЛИС
    • Написать тестбенч, включающий синтезированную схему и исходную VHDL-модель
    • Провести моделирование тесбенча с подключением SDF-файла для синтезированной схемы (библиотека simprim)
  8. Подготовить отчет, включающий:
    • Описание задания
    • Исходные коды заданного компонента, модифицированного модуля верхнего уровня, тесбенч.
    • Скриншот синетезированной схемы (RTL и в базисе ПЛИС)
    • Отчет о синтезе
    • Временные диаграммы моделирования тесбенча

Описание доступных ресурсов ПЛИС

Рисунок 1 — Spartan-3 Starter Kit
Рисунок 2 — Spartan-3 Starter Kit

На рисунке 1 представлен внешний вид отладочной платы Spartan-3 Starter Kit, включающей ПЛИС фирмы Xilinx Spartan-3 (документация по микросхеме XC3S1000). В таблице 1 представлены основные параметры, характеризующие ПЛИС XC3S1000. На рисунке 2 показаны основные компоненты и интерфейсы размещённые на отладочной плате:

  • генератор синхросигнала на 50 МГц;
  • вход внешней синхронизации;
  • внешняя память инициализации ПЛИС (Flash PROM XCF04S)
  • внешнее ОЗУ (512К × 16 бит)
  • три 40-выводных разъёма, на которые выведены пользовательские выводы ПЛИС
  • полоска из 8 светодиодов
  • четыре семисегментных индикатора
  • 4 кнопки
  • 8 переключателей
  • порты
    • PS/2
    • VGA
    • RS232 (COM-порт)


Таблица 1 – Параметры ПЛИС XC3S1000
Device System
Gates
Logic
Cells
CLB Array (One CLB = Four Slices) Distributed
RAM (bits1)
Block RAM
(bits 1)
Dedicated
Multipliers
DCMs Maximum
User I/O
Maximum
Differential
I/O Pairs
Rows Columns Total CLBs
XC3S1000 1M 17,280 48 40 1,920 120K 432K 24 4 391 175


Описание интерфейса блока верхнего уровня (TOP-модуль)

Листинг 1 — VHDL-описание компонента верхнего уровня (top.vhd)


library ieee;
use ieee.std_logic_1164.all;
 
entity top is
  port(
    CLK  : in    std_logic;             -- синхросигнал 50 МГц (T9)
    BTN  : in    std_logic_vector(3 downto 0);  -- кнопки (L14 L13 M14 M13)
    SW   : in    std_logic_vector(7 downto 0);  -- переключатели (K13 K14 J13 J14 H13 H14 G12 F12)
    -- полоска светодиодов
    LED  : out   std_logic_vector(7 downto 0);  -- P11 P12 N12 P13 N14 L12 P14 K12
    -- семисегментный индикатор
    SEG  : out   std_logic_vector(7 downto 0);  -- P16 N16 F13 R16 P15 N15 G13 E14
    AN   : out   std_logic_vector(3 downto 0);  -- E13 F14 G14 D14
    -- выводы интерфейса RS232
    RXD  : in    std_logic_vector(1 downto 0);  -- N10 T13
    TXD  : out   std_logic_vector(1 downto 0);  -- T14 R13
    -- выводы интерфейса VGA
    GRB  : out   std_logic_vector(2 downto 0);  -- T12 R12 R11
    VH   : out   std_logic_vector(1 downto 0);  -- T10 R9
    -- выводы интерфейса PS2
    PS2  : inout std_logic_vector(1 downto 0);  -- M16 M15
    -- выводы подключения внешнего ОЗУ
    ADDR : out   std_logic_vector(17 downto 0);  -- L3 K5 K3 J3 J4 H4 H3 G5 E4 E3 F4 F3 G4 L4 M3 M4 N3 L5
    DATA : inout std_logic_vector(31 downto 0);  -- N1 M1 K2 C3 F5 G1 E2 D2 D1 E1 G2 J1 K1 M2 N2 P2 R1 P1
                                                 -- L2 J2 H1 F2 P8 D3 B1 C1 C2 R5 T5 R6 T8 N7
    CE   : out   std_logic_vector(1 downto 0);  -- N5 P7
    OE   : out   std_logic;             -- K4
    WE   : out   std_logic;             -- G3
    BSEL : out   std_logic_vector(3 downto 0));  -- R4 P5 T4 P6
end;
 
architecture beh of top is
begin
  -- отключение неиспользуемых выводов
  ADDR <= "000000000000000000";
  DATA <= "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
  CE   <= "11";
  OE   <= '1';
  WE   <= '1';
  BSEL <= x"0";
 
  TXD <= "11";
  PS2 <= "ZZ";
 
  GRB <= "000";
  VH  <= "00";
 
  LED <= x"00";
  SEG <= x"00";
  AN  <= x"F";
 
end architecture beh;


Варианты заданий

1. Преобразователь из кода Грея в двоичный код 8-разрядного числа

  • входы подключить к переключателям (SW)
  • выходы подключить к линейке светодиодов (LED)


2. Преобразователь из двоичного кода в код Грея 8-разрядного числа

  • входы подключить к переключателям (SW)
  • выходы подключить к линейке светодиодов (LED)


3. Умножитель (4-разрядное число × 4-разрядное число)

  • входы подключить к переключателям (SW)
  • выходы подключить к линейке светодиодов (LED)


4. Сумматор (4-разрядное число + 4-разрядное число)

  • входы подключить к переключателям (SW)
  • выходы подключить к линейке светодиодов (LED)


5. Дешифратор из 3 в 8

  • входы подключить к кнопкам (BTN)
  • выходы подключить к линейке светодиодов (LED)