Реализация n-битного умножения на Spartan 3E Kit с использованием аппаратных умножителей
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
я синтез, постсинтезное моделирование, имплементацию (размещение и трассировку) и программирование.
.1 Синтез и постсинтезное моделирование
Синтез проводится в программе Sinplify 7.0. Для начала требуется загрузить в программу VHDL-файлы компонентов, после чего запустить процесс синтеза. В результате мы получаем следующую схему:
Для проведения постсинтезного моделирования необходимо сгенерировать файл с расширением *.vhm, содержащий описания списка соединений на VHDL (по умолчанию после выполнения синтеза генерируется файл в формате edif, однако данный формат недостаточно изучен и менее нагляден. Поэтому в Synplify предусмотрена возможность генерировать файлы со списками соединений либо в формате VHDL, либо в формате Verilog). Моделирование выполняется на тех же входных наборах, что и при досинтезной верификации. Результаты моделирования могут отличаться от полученных ранее из-за внесения системой синтеза внутренних задержек на элементах и линиях схем.
В результате была получена модель умножителя на RTL уровне, которая представлена на рисунке 5.3.
Рисунок 5.3 - RTL уровень устройства
После проведения постсинтезного моделирования можно переходить к этапу имплементации (реализации) на выбранной ПЛИС.
.2 Реализация и программирование
После программирования микросхемы, ее можно использовать как демонстрацию правильности работы устройства, совместимости его программного описания с реальной аппаратурой. Поскольку Spartan-3 E Kit дает возможность ввода только 4-х разрядного числа за раз, то будем загружать значение первого множителя и хранить его в памяти, после ввода второго операнда будет производиться умножение. _STYLE ограничение управляет имплементацией MULT18X18 примитивов. В Project Navigator (см. рисунок 5.1), значение по умолчанию - то, что Xilinx Synthesis Tool (XST) выберет лучший тип имплементации. Чтобы гарантировать, что используются встроенные умножители, необходимо установить MULT_STYLE = Block или выбрать "Block" для характеристики "Multiplier Style" в Project Navigator. MULT_STYLE ограничение может также применяться глобально в командной строке XST или добавлено к MULT18X18 примитиву. Для MULT18X18S, добавляют MULT_STYLE Ограничение к компоненту, а не к выходной шине.
Рисунок 5.1- Установка стиля умножителя в свойствах навигатора
ВЫВОДЫ
имеют существенное преимущество перед чипами цифрового обработчика сигналов общего назначения, потому что их логика может быть перестроена под определенное приложение. Некоторые функции могут работать в 100 раз быстрее, и требует намного меньше материальных расходов для FPGA. Главной особенностью этого преимущества является специализированный блок умножения. Также для достижения желаемых результатов есть возможность, как автоматической оптимизации логики умножения, так и ручного управления при необходимости. Система CORE Generator может создавать простые умножители или объединять их в более сложные функции типа MAC.
В работе было реализовано аппаратное умножение двух 4-х разрядных чисел на Spartan-3 E Kit с использованием специализированного встроенного блока умножителя, листинг кода программы представлен в приложении А.
В целом, поставленная задача успешно выполнена.
ПЕРЕЧЕНЬ ССЫЛОК
1. Лобода В.Г. и др. Проектирование встроенных устройств на микропроцессорах: Учеб. пособие. - К.: УМК ВО, 1988. - 128 с.
. Бибило П.Н. Основы языка VHDL. - М.: Солон-Р, 2000. - 200 с.
3.
. Методические указания к курсовому проектированию по курсу „Параллельные и распределенные счисления для студентов дневной формы обучения /Упор. Аксак Н.Г. - Харьков: ХТУРЭ, 2008.
5. XAPP636 Optimal Pipelining of the I/O Ports of Virtex-II Multipliers
ПРИЛОЖЕНИЕ А
Листинг кода реализации 4-х разрядного умножения чисел со знаком с использованием специализированного встроенного блока умножителя.
Sorce.vhd
library IEEE;IEEE.STD_LOGIC_1164.ALL;IEEE.STD_LOGIC_ARITH.ALL;IEEE.STD_LOGIC_UNSIGNED.ALL;
--- Uncomment the following library declaration if instantiating
--- any Xilinx primitives in this code.
-library UNISIM;
-use UNISIM.VComponents.all;
sorce is(
A: in std_logic_vector (3 downto 0);, rst, clk: in std_logic;: out std_logic_vector (7 downto 0)
); sorce;
Behavioral of sorce ismult4x4_s is(
A: in std_logic_vector (3 downto 0);: in std_logic_vector (3 downto 0); : out std_logic_vector (7 downto 0)
); component;
reg1: std_logic_vector (3 downto 0);sA,sB :std_logic_vector (3 downto 0);sP,sAA :std_logic_vector (7 downto 0);s :std_logic;
: mult4x4_s port map (A, reg1, sP);
(clk, rst)
begin
if rst=1 then
reg1<="0000";
elsif clk=1 and clkevent then
if load=1then
reg1<=A;
end if;
end if;
end process;
: process(clk)clk=1 and clkevent then<= sP;if;process;Behavioral;
mult4x4_s.vhd
IEEE;IEEE.std_logic_1164.all;
-
- pragma translate_offUNISIM;UNISIM.VCOMPONENTS.ALL;
- pragma translate_on
-mult4x4_s is(
A: in std_logic_vector (3 downto 0);: in std_logic_vector (3 downto 0); : out std_logic_vector (7 downto 0)
); mult4x4_s;
-mult4x4_s_arch of mult4x4_s is
-
- Components Declarations:
-MULT18X18(
A: in std_logic_vector (17 downto 0);
B: in std_logic_vector (17 downto 0);
P: out std_logic_vector (35 downto 0)
);component;
-
A_int : std_logic_vector (17 downto 0);B_int : std_logic_vector (17 downto 0);P_int : std_logic_vector (35 downto 0);
-
_int (17 downto 8) <= "0000000000";_int (7 downto 7) <= A (3 downto 3);_int (6 downto 6) <= A (3 downto 3);_int (5 downto 5) <= A (3 downto 3);_int (4 downto 4) <= A (3 downto 3);_int (3 downto 0) <= A (3 downto 0);_int (17 downto 8) <= "0000000000";_int (7 downto 7) <= B (3 downto 3);_int (6 downto 6) <= B (3 downto 3);_int (5 downto 5) <= B (3 downto 3);_int (4 downto 4) <= B (3 downto 3);
_int (3 downto 0) <= B (3 downto 0);
(7 downto 0) <= P_int (7 downto 0);
-Multiplier Instantiation_MULT18X18: MULT18X18map (
A => A_int (17 downto 0),
B => B_int (17 downto 0),
P => P_int (35 downto 0)
);
mult4x4_s_arch;
ucf.ucf
NET "clk" LOC = "C9"|IOSTANDARD = LVCMOS33;
"P" LOC = "E9" | IOSTANDARD