Проектиране на СГИС Упражнение No 6
Проектиране, симулиране и изследване на конвейерни аритметични устройства върху свръхголеми FPGA - чипове
В това упражнение се създава проект, в който се проектира и имплементира върху FPGA - чип цифрово устройство с конвейерна структура, извършващо аритметичните операции Y(i) = A(i) * B(i) + C(i), където операндите и резултатът са двоични числа, едноименни членове на едномерни масиви. Структурата на устройството е показана по-долу. Проектът се допълва с устройство (краен автомат) за тестване на имплементираното устройство.
Извършете проектирането и имплементирането на управляващото устройство с помощта на развойната среда в следната последователност:
1. Създайте с помощта на Project Navigator на Xilinx ISE 9.21 нов проект с име Pipeline09 в работната папка на вашата учебна група, с параметри на проекта:
2. Създайте главен source - модул на проекта с име Pipeline, съдържащ описанието на структурата на проектираното устройство на език VHDL. За тази цел изпълнете от главното меню на Project navigator:
Project => New Source…
В отворилия се прозорец “New Source Wizard – Select Source Type” изберете тип на модула: VHDL Module , а във полето “File name” въведете името на файла , който ще съдържа този модул : Pipeline:
В следващия се отворил прозорец – “New Source Wizard – Define Module” въведете името на архитектурата на този модул - Structural
-В прозореца за редактиране на текст Project navigator извежда текстовата рамка на създадения VHDL – модул.(Pipeline.vhd).
- Изтрийте текстовата рамка и въведете от текста на упражнението VHDL – описанието на проектираното устройство:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Library UNISIM;
use UNISIM.Vcomponents.all;
entity pipeline is
port (A : in std_logic_vector (15 downto 0);
B : in std_logic_vector (15 downto 0);
C : in std_logic_vector (15 downto 0);
Y : out std_logic_vector (35 downto 0);
CLK : in std_logic;
RESET : in std_logic);
end pipeline;
architecture Structural of pipeline is
component reg16
port (DIN: in std_logic_vector (15 downto 0);
DOUT: out std_logic_vector (15 downto 0);
CLK: in std_logic;
RESET: in std_logic);
end component;
component reg36
port ( DIN: in std_logic_vector (35 downto 0);
DOUT: out std_logic_vector (35 downto 0);
CLK: in std_logic;
RESET: in std_logic);
end component;
component adder
port ( OPERAND1, OPERAND2 : in std_logic_vector (35 downto 0);
RESULT : out std_logic_vector (35 downto 0));
end component;
signal OUT_A, OUT_B, OUT_C, OUT_C_1 : std_logic_vector (15 downto 0);
signal OUT_A_1, OUT_B_1 : std_logic_vector (17 downto 0);
signal OUT_M, OUT_ADD, OUT_M_2, OUT_C_2 :
std_logic_vector (35 downto 0);
begin
reg_A: reg16 port map (DIN => A, DOUT => OUT_A, CLK => CLK, RESET => RESET);
reg_B: reg16 port map (DIN => B, DOUT => OUT_B, CLK => CLK, RESET => RESET);
reg_C: reg16 port map (DIN => C, DOUT => OUT_C, CLK => CLK, RESET => RESET);
multy: MULT18X18 port map (A => OUT_A_1, B => OUT_B_1, P => OUT_M);
reg_MUL: reg36 port map (DIN => OUT_M, DOUT => OUT_M_2, CLK => CLK, RESET => RESET);
reg_C_2: reg16 port map (DIN => OUT_C, DOUT => OUT_C_1, CLK => CLK, RESET => RESET);
add: adder port map (OPERAND1 => OUT_M_2, OPERAND2 => OUT_C_2, RESULT => OUT_ADD);
reg_out: reg36 port map (DIN => OUT_ADD, DOUT => Y, CLK => CLK, RESET => RESET);
OUT_A_1 <= "00" & OUT_A;
OUT_B_1 <= "00" & OUT_B;
OUT_C_2 <= x"00000" & OUT_C_1;
end Structural;
3.. Разгледайте текста на модула. В архитектурата са декларирани три компонента в устройството pipeline : reg16, reg36, adder, представящи типовете елементи (блокове) на структурата. Четвъртият компонент (умножител с 18- разрядни операнди MULT18X18) не е деклариран, въпреки че е използван в структурата на устройството. Той, обаче, под същото име е дефиниран в библиотеката Library UNISIM на Project Navigator.
Запишете новия текст на модула във файла pipeline.vhd (File => Save…) или:
В прозореца Sources in Project под главния модул след разширяване се появяват подсказвания за необходимо включване в проекта на описания на трите изброени по-горе компонента на структурата reg16, reg36, adder в самостоятелни модули, подчинени на главния (pipeline.vhd):
4. Създайте в проекта като нови source – модули, VHDL-модулите adder.vhd, reg16.vhd, reg36.vhd, описващи компонентите на структурата като самостоятелни устройства със същите имена и входноизходни сигнали, както в съответните декларации на компонентите в главния модул.
Модулите имат следния текст:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity adder is
port ( OPERAND1, OPERAND2 : in std_logic_vector (35 downto 0);
RESULT : out std_logic_vector (35 downto 0));
end adder;
architecture Behav0 of adder is
begin
RESULT <= OPERAND1 + OPERAND2;
end Behav0;
-На модула reg16.vhd, описващ 16- разряден регистър от структурата с архитектура Behav1:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity reg16 is
port (CLK: in std_logic;
RESET: in std_logic;
DIN: in std_logic_vector(15 downto 0);
DOUT: out std_logic_vector(15 downto 0) );
end reg16;
architecture Behav1 of reg16 is
begin
process (CLK, RESET)
begin
if RESET='1' then
DOUT <= x"0000";
elsif (CLK'event and CLK='1') then
DOUT <= DIN;
end if;
end process;
end Behav1;
-На модула reg36.vhd, описващ 36-разряден регистър от структурата с архитектура Behav2:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity reg36 is
port (CLK: in std_logic;
RESET: in std_logic;
DIN: in std_logic_vector(35 downto 0);
DOUT: out std_logic_vector(35 downto 0) );
end reg36;
architecture Behav2 of reg36 is
begin
process (CLK, RESET)
begin
if RESET='1' then
DOUT <= (others => '0');
elsif (CLK'event and CLK='1') then
DOUT <= DIN;
end if;
end process;
end Behav2;
В прозореца Sources in Project на местата на въпросителните би трябвало да се появят след имената на устройствата и имената на архитектурите им - в скоби преди горните имена на модулите.
5.. Изпълнете процесите на проектиране на устройството. За тази цел:
5.1. В прозореца Processes (при избран главен модул pipeline в прозореца Sources и в режим за този прозорец Synthezis/Implementation) двойно кликнете върху последния процес: Generate Programmilng File
Project Navigator ще изпълни всички процеси на проектиране в необходимата последователност.
5.2. Проверете като резултат от проектирането синтезираната първоначално абстрактна цифрова схема чрез двойно кликване на Synthesize -> View RTL Scematics и влизане в по-ниските нива на схемата.
5.3. Отчетете параметрите на проектираното устройство, отнасящи се до очакваното му бързодействие – минимален период на тактовия сигнал (Minimum period) , респективно максимална допустима честота (Maximum Frequency) - в Synthesize –> View Synthesis Report.
5.4. Проверете разположението на използваните блокове от FPGA-чипа чрез програмата Floor Planer - двойно кликване на Implement Design->Place&Route->View/Edit Placed Design (стартиране на програмата Floor Planner) в прозореца Processes (при избран модул pipeline в прозореца Sources ).
На схемата се отбелязва например използвания за устройството съществуващ в структурата на FPGA - чипа 18- разряден умножител и синтезирания от конфигурируеми логически блокове 36 – разряден суматор:
6. Включете в проекта нов модул (чрез командите Project => New Source…) от тип Test Bench Waveform, с име на модула например testpipe, който служи за задаване на стимули (стойности във времето на входните сигнали) за бъдещата симулация на проектираното устройство.
6.1. Укажете чрез прозореца New Source Wizard – Associate Source, че този модул трябва да бъде подчинен (асоцииран) с главния VHDL-модул , описващ архитектурата на устройството – а именно pipeline.
6.2. Задайте в прозореца Initialize Timing като параметри на симулацията период на тактовия сигнал 100ns (Clock High Time = 50 ns, Clock Low Time = 50 ns), моменти на промяна и отчитане на стойностите на сигналите спрямо нарастващия фронт на тактовия сигнал – Input Setup Time = 3 ns, Output Valid Delay = 2 ns, активен Rising Edge.
6.3. Задайте продължителността на интервала от време за симулация (чрез Initial Length of Test Bench) да бъде 1000 ns.
6.4. Преобразувайте за по-голямо удобство в показалия се прозорец с времедиаграми на testpipe стойностите на сигналите да се показват като десетични числа – чрез кликване върху времедиаграма с десен бутон и съответен избор от отворилото се контексно меню:
6.5. Задайте няколко набора от стойности на входните сигнали (А, В, С) в съседни тактови периоди и подходящи стойности на управляващия сигнал RESET, за да функционира устройството. Нова стойност на входен сигнал, който не е едноразряден, се задава крез кликване с ляв бутон в съответния периoд на таковия сигнал на времедиаграмата и въвеждане на стойността чрез прозореца Set Value:
След въвеждане на стойностите на входните сигнали, прозорецът за редактиране за модула от тип Test Bench Waveform би трябвало да изглежда по принцип така:
6.6. Изпълнете Save за съдържанието на този модул.
7. Стартирайте симулатора Xilinx ISE Simulator. За тази цел при режим на работа Post-Route Simulation в прозореца Sources и активен модул testpipe в същия прозорец изпълнете от прозореца Process командата Simulate Post-Place&Route Model.
Прозорецът с резултати от работата на симулатора би трябвало да изглежда така:
7.1. Проверете от времедиаграмите на горния прозорец дали устройството функционира правилно в конвейерен режим.
7.2. Измерете закъснението, с което се появяват новите стойности на изходните сигнали на устройството след нарастващия фронт на тактовия сигнал чрез команди Zoom+ и Simulation => Markers => Measure Marker :
7.3. Прекратете работата на симулатора.
Ще доизградим досега създадения проект, като към конвейерното аритметично устройство pipeline в проектираната система ще добавим първоначално още две устройства: testmachine и indicator.
А) Устройството testmachine представлява краен автомат за тестване на досега проектираното изчислително устройство pipeline; То подава на входовете на pipeline аргументи за изчислението, изчаква необходимия брой тактови периоди за получаване на резултата на изхода на pipeline , проверява дали полученият резултат е верен и ако е така, установява в единица тригер (вдига флаг), отчитащ резултата от тестването.
В) Устройство – схема за светлинна индикация indicator, показваща чрез примигване на светодиоди, че тестването на изчислителното устройство е извършено от крайния автомат и резултатите от тестването са валидни.
Блоковата схема на проектираната система ще изглежда така:
Включете нов главен source - модул в проекта с име fsm3.vhd, съдържащ описанието на структурата на показаната по-горе система.
8. Включете в проекта модула fsm3.vhd от папката С/Examples чрез командите Project => Add Copy of Source…). В прозореца Add Copies of existing sources намерете папката C/Examples…, в нея изберете модула fsm3 и чрез бутона Open го включете в проекта.
VHDL – текстът на модула fsm3.vhd е показан по-долу.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Library UNISIM;
use UNISIM.Vcomponents.all;
entity fsm3 is
port ( CLK, TESTMODE : in std_logic;
START : in std_logic ;
INDSTATE : out std_logic_vector (3 downto 0);
OKforCALC, OKforRESET : out std_logic;
Indy, nIndy : out std_logic ;
A : inout std_logic_vector (15 downto 0);
Y : inout std_logic_vector (35 downto 0) );
end fsm3;
architecture struct of fsm3 is
component testmachine
port ( CLK : in std_logic;
START : in std_logic;
TESTMODE : in std_logic;
INDSTATE : out std_logic_vector (3 downto 0);
Y : in std_logic_vector (35 downto 0);
A, B, C : out std_logic_vector (15 downto 0);
OKforCALC, OKforRESET : out std_logic;
ResetIndy, ResetCalc : out std_logic );
end component;
component pipeline
port ( A : in std_logic_vector (15 downto 0);
B : in std_logic_vector (15 downto 0);
C : in std_logic_vector (15 downto 0);
Y : out std_logic_vector (35 downto 0);
CLK : in std_logic;
RESET : in std_logic );
end component;
component Indicator
port ( RESET : in std_logic;
CLK_IN : in std_logic;
Indy : out std_logic;
nIndy : out std_logic );
end component;
-- signal A : std_logic_vector (15 downto 0);
signal B : std_logic_vector (15 downto 0);
signal C : std_logic_vector (15 downto 0);
signal ResetIndy : std_logic;
signal ResetCalc : std_logic;
begin
tst: testmachine port map (CLK => CLK, START => START, TESTMODE => TESTMODE,
Y => Y, INDSTATE => INDSTATE, A => A, B => B, C => C,
ResetIndy => ResetIndy, ResetCalc => ResetCalc,
OKforCALC => OKforCALC, OKforRESET => OKforRESET);
pipe: pipeline port map (A => A, B => B, C => C, Y => Y, CLK => CLK, RESET => ResetCalc );
Indic: Indicator port map (RESET => ResetIndy, CLK_IN => CLK, Indy => Indy, nIndy => nIndy);
end struct;
9. Включете в проекта нов source VHDL – модул testmachine.vhd .
За тази цел изпълнете от главното меню на Project navigator: Project => New Source… и въведете в прозореца на Project Navigator името (testmachine) и типа (VHDL module) на модула.
Този модул описва чрез поведенческа архитектура поведението на крайния автомат testmachine за тестване на работата на изчислителното устройство pipeline.
VHDL – текстът му е показан по-долу.
Графът на преходите и изходите на крайния автомат също е показан по-долу.
Накратко той функционира по следния начин:
Когато не е стартиран да извършва тестване, крайният автомат се намира в състояние s0.
След стартиране от сигнал Start = ‘1’, в зависимост от сигнала TestMode автоматът тества изчислителното устройство по два начина:
А) При TestMode =1, крайният автомат установява (в състояние s1) на входовете на изчислителното устройство сигналите за аргументи А = 3, В = 5, С = 4 , изчаква три тактови периода (в състоянията s2, s3, s4) и в състояние s9 проверява дали на изхода на изчислителното устройство се е установил резултатът 19. Ако е така, автоматът индицира (чрез изходния си сигнал OKforCALC = ‘1’), че устройството изчислява правилно и разрешава светлинната индикация чрез ResetIndy = ‘0’.
Б) При TestMode =0, крайният автомат установява (в състояние s5) сигнала ResetCALC = ‘1’, с което нулира входните регистри на изчислителното устройство , изчаква три тактови периода (в състоянията s6, s7, s8) и в състояние s9 проверява дали на изхода на изчислителното устройство се е установил резултат 0. Ако е така, автоматът индицира (чрез изходния си сигнал OKforRESET = ‘1’), че устройството работи правилно в този режим и отново разрешава светлинната индикация чрез ResetIndy = ‘0’.
Граф на преходите и изходите на крайния автомат testmachine
- Изтрийте текстовата рамка и въведете от текста на упражнението VHDL – описанието на модулa testmachine.vhd :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity testmachine is
port ( CLK : in std_logic;
START : in std_logic;
TESTMODE : in std_logic;
INDSTATE : out std_logic_vector (3 downto 0);
Y : in std_logic_vector (35 downto 0);
A, B, C : out std_logic_vector (15 downto 0);
ResetIndy, ResetCalc : out std_logic;
OKforCALC : out std_logic;
OKforRESET : out std_logic );
end testmachine;
architecture Behavioral of testmachine is
type state_type is (s0,s1,s2,s3,s4,s5, s6, s7, s8, s9);
signal state , nextstate : state_type ;
begin
process1: process (CLK,START)
begin
if (START ='0') then state <=s0;
elsif (CLK='1' and CLK'event) then
state <= nextstate;
end if;
end process process1;
process2: process (state, TESTMODE)
begin
case state is
when s0 => if TESTMODE='1' then
nextstate <= s1;
else
nextstate <= s5;
end if;
when s1 => nextstate <= s2;
when s2 => nextstate <= s3;
when s3 => nextstate <= s4;
when s4 => nextstate <= s9;
when s5 => nextstate <= s6;
when s6 => nextstate <= s7;
when s7 => nextstate <= s8;
when s8 => nextstate <= s9;
when s9 => nextstate <= s9;
end case;
end process process2;
process3 : process (state)
begin
if (CLK='1' and CLK'event) then
case state is
when s0 => INDSTATE <= "0000"; ResetCalc <= '0';OKforCALC <= '0';OKforRESET <= '0';
ResetIndy <= '1';A <= x"ffff"; B <= x"ffff"; C <= x"ffff";
when s1 => INDSTATE <= "0001";
A <= x"0003"; B <= x"0005"; C <= x"0004";
when s2 => INDSTATE <= "0010";
when s3 => INDSTATE <= "0011";
when s4 => INDSTATE <= "0100";
when s5 => INDSTATE <= "0101"; ResetCalc <= '1';
when s6 => INDSTATE <= "0110";
when s8 => INDSTATE <= "1000";
when s7 => INDSTATE <= "0111";
when s9 => INDSTATE <= "1001"; ResetIndy <= '0';
if TESTMODE = '0' then
if Y = "000000000" then OKforRESET <= '1';
end if;
else
if Y = x"000000013" then OKforCALC <= '1';
end if;
end if;
end case;
end if;
end process process3;
end Behavioral;
10. Включете в проекта нов source VHDL – модул Indicator.vhd . За тази цел изпълнете от главното меню на Project navigator: Project => New Source… и въведете в прозореца на Project Navigator името (Indicator) и типа (VHDL module) на модула.
Този модул описва чрез поведенческа архитектура поведението на схемата за светлинна индикация, показваща, че крайният автомат е завършил тестването на устройството. Схемата на практика представлява брояч – делител на честотата на входния синхросигнал за системата CLK.
- Изтрийте текстовата рамка и въведете от текста на упражнението VHDL – описанието на модулa Indicator.vhd :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Indicator is
port (RESET : in std_logic;
CLK_IN : in std_logic;
Indy : out std_logic;
nIndy : out std_logic);
end Indicator;
architecture Behavioral of Indicator is
signal Q : STD_LOGIC_VECTOR (22 DOWNTO 0);
begin
process ( RESET, CLK_IN )
begin
if RESET = '1' then Q <= (others => '0');
elsif CLK_IN'event AND CLK_IN = '1'
then Q <= Q + 1 ;
end if;
Indy <= Q(22);
nIndy <= not Q(22);
end process;
end Behavioral;
След въвеждането в проекта на новите source – модули, прозорецът Sources, отразяващ списъка и йерархията им, ще изглежда така:
11. Изпълнете процесите на проектиране на системата (от прозореца Processes ) при активен главен модул fsm3 в прозореца на source – модулите.
12. Симулирайте функционирането на проектираната система в двата режима на работа на тестващия краен автомат. За тази цел:
12.1. Добавете в проекта модул (файл) за управление на симулацията testfsm3.vhd, като изпълните команди Project => New Source … и от прозореца New Source изберете тип на модула Test Bench Waveform, въведете името на модула и укажете, че ще бъде асоцииран към главния VHDL - модул на проекта fsm3. Параметрите на синхронизиращия сигнал CLK да са както тези, представени по-горе в текста на упражнението.
12.2. В прозореца за времедиаграми на модула Test Bench Waveform въведете показаните по-долу времедиаграми на входните сигнали START и TESTMODE (в началото START = ‘0’, с което тестващият автомат застава в начално състояние s0, след това START <= ‘1’, с което тестващият автомат започва проверка на изчислителното устройство , TESTMODE = 1):
Стартирайте симулатора Xilinx ISE Simulator в режим Post-Route Simulation.
Времедиаграмите от функционирането на системата в прозореца за времедиаграми на симулатора би трябвало да изглеждат, както е показано по-долу:
При TestMode =1, крайният автомат установява (в състояние s1 => INDSTATE = 0001) на входовете на изчислителното устройство сигналите за аргументи А = 3, В = 5, С = 4 , изчаква три тактови периода (в състоянията s2, s3, s4) и в състояние s9 (INDSTATE = 1001) проверява дали на изхода на изчислителното устройство се е установил резултатът 19. Ако е така, автоматът индицира (чрез изходния си сигнал OKforCALC = ‘1’), че устройството изчислява правилно.
12.3. Прекратете работата на симулатора. Променете времедиаграмите на входните сигнали в модула Test Bench Waveform така, че да се симулира функционирането на системата при TESTMODE = 0 (както е показано по-долу). Стартирайте отново симулатора.
Времедиаграмите от функционирането на системата в този случай би трябвало да изглеждат, както е показано по-долу:
При TestMode =0, крайният автомат установява (в състояние s5) сигнала ResetCALC = ‘1’, с което нулира входните регистри на изчислителното устройство , изчаква три тактови периода (в състоянията s6, s7, s8) и в състояние s9 проверява дали на изхода на изчислителното устройство се е установил резултат 0. Ако е така, автоматът индицира (чрез изходния си сигнал OKforRESET = ‘1’), че устройството работи правилно в този режим.
13. За да се провери работата на проектираната система, реализирана върху FPGA – чип от развойна платка, включително и да се проследи смяната на състоянията на крайния автомат при тестването, трябва да се използват за синхронизация импулсите на тактовия генератор на платката и тъй като честотата им е 50Mhz, тази честота трябва да се намали значително. За тази цел ще се включи в структурата на системата брояч - делител на честотата на тези тактови импулси.
Декларацията на брояча трябва да се включи като декларация на нов компонент с име ClockDivider в декларативната част на архитектурата на главния модул fsm3.vhd:
component ClockDivider
Port ( CLK : in STD_LOGIC;
ClkDiv : out STD_LOGIC );
end component;
Сигналът с намалена честота (1-2 Hz) с име например InternalCLK, генериран от изхода на ClockDivider, ще бъде вътрешен за архитектурата на fsm3 и трябва да бъде деклариран също в декларативната й част като:
signal InternalCLK : std_logic;
В блока на архитектурата на fsm3 трябва да се включи новия компонент ClockDivider :
div : ClockDivider port map (CLK => CLK, CLKDiv => InternalCLK);
Във включванията на компонентите testmachine и pipeline трябва да се смени входния им тактов сигнал CLK, който е входен за цялата система и идва от тактовия генератор, с вътрешния сигнал с намалена честота InternalCLK :
tst: testmachine port map (CLK => InternalCLK, START => START, TESTMODE => TESTMODE,
Y => Y, INDSTATE => INDSTATE, A => A, B => B, C => C, ResetIndy => ResetIndy, ResetCalc => ResetCalc, OKforCALC => OKforCALC, OKforRESET => OKforRESET);
pipe: pipeline port map (A => A, B => B, C => C, Y => Y, CLK => InternalCLK, RESET => ResetCalc );
14. И на края е необходимо в проекта да се включи нов source – модул, описващ като самостоятелно устройство компонента ClockDivider с текст:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ClockDivider is
Port ( CLK : in STD_LOGIC;
ClkDiv : out STD_LOGIC );
end ClockDivider;
architecture Behavioral of clockDivider is
signal COUNT: STD_LOGIC_VECTOR (28 downto 0) ;
begin
process (CLK)
begin
if CLK'event and CLK = '1' then
COUNT <= COUNT + 1;
end if;
end process;
ClkDiv <= COUNT(26);
end Behavioral;
След като направите горните промени в проекта, укажете необходимо разположение на входно-изходните сигнали на системата върху изводите на чипа, така че да се използват светодиоди, ключове ,бутони и тактов генератор от платката. За тази цел:
15. Добавете в проекта нов модул с име BasicUCF от тип Implementation Constraints File, асоциирайте го с главния модул на проекта fsm3, активирайте го и стартирайте от прозореца Processes командата Assign Package Pins.
В прозореца на стартиралата се програма PACE попълнете следната таблица:
Изпълнете Save за тази информация във файла BasicUCF.ucf, след което стартирайте наново процесите на проектиране на системата върху FPGA - чипа.
Пълният списък на source – модули в проекта трябва да изглежда така:
16. Конфигурирайте FPGA - чипа върху развойната платка, като запишете в него получения от развойната среда файл за конфигуриране fsm3.bit с помощта на програмата ExPort. Проверете работата на проектираното и имплементирано върху чипа устройство.
Според въведените данни в горната таблица, стойностите на входните и изходните сигнали на имплементираната върху FPGA - чипа система се въвеждат от ключовете и се индицират от светодиодите на развойната платка Basis, както е показано на следващата схема:
Сподели с приятели: |