Реализация 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