Проектиране на Управляващо устройство за светофари като краен автомат с помощта на развойна среда (Webpack) и входно hdl – описание



страница2/3
Дата23.10.2018
Размер3.32 Mb.
#93420
1   2   3

Разгледайте генерирания CPLD - Report, който се появява след успешно изпълнение на процесите по проектиране. Той основно описва процентите на заети ресурси от различен вид в CPLD – чипа:


- Проверете като резултат от проектирането синтезираната цифрова и логическа схема на цялостното устройство, чрез двойно кликване на Synthesize -> View RTL Schematics и влизане в по-ниските нива на схемата – отново чрез двойно кликване с левия бутон, когато курсорът на мишката е върху блок от схемата:



RTL- схема с най-високо ниво на главния модул


По-подробна RTL- схема, синтезирана от главния модул, на която са показани двата блока, от които е съставено устройството
--------------------------------------------------------------------------------------------------------------------------------------



светофар от тип “в търсене на изгубеното време”

светофар от провинция Квебек, Канада

----------------------------------------------------------------------------------------------------------------------------------------



IV. Симулиране на работата на устройството
- Зададайте т.нар. входни стимули (определящи стойностите на входните сигнали във времето на симулацията). За тази цел:

- Създайте нов source - модул(файл) в проекта, който ще съхранява информацията за стимулите. За тази цел изпълнете, като започнете от главното меню на развойната среда командите: Project =>New Source…

- В отворилия се прозорец New Source задайте за тип на source – модула със стимулите Test Bench Waveform, а за име на модула - ТestGeneral :

- Преминете нататък с бутона Next.

- В следващия отворил се прозорец New Source Wizard – Associate Source трябва да потвърдите, че създаваният в момента source - модул от тип Test Bench Waveform ще бъде асоцииран (подчинен) на главния VHDL – модул на проекта - GeneralModule. Би трябвало GeneralModule да е отбелязан в прозореца и в такъв случай ще преминете нататък с бутона Next.

- В отворилия се прозорец New Source Wizard – Summary развойната среда извежда обратно информация за новосъздадения source - модул TestGeneral.tbw с цел проектантът да провери за грешки. Потвърдете тази информация с бутона Finish.

- В отворилия се прозорец Initial Timing and Clock Wizard – Initialize Timing потвърдете или въведете нови времеви параметри на управляващите симулацията входни за устройството сигнали и на тактовия му сигнал, както са показани на фигурата по – долу и след като ги коригирате, натиснете Finish:



В прозореца за редактиране на развойната среда се появява основният прозорец за въвеждане на графична информация в Test Bench Waveform – модула.

- Задайте начален установяваща импулс за входния сигнал Reset.

- Задайте стойност ‘0’ за входния управляващ сигнал Blink (за нормална работа на светофарите) – всъщност би трябвало тази стойност да бъде установена от средата по премълчаване:



- Запишете въведената от вас графична информация във файла TestGeneral.tbw чрез иконата Save File от главното меню на Project Navigator


- В прозореца Sources въведете чрез падащотото меню Sources For... режим на работа на развойната среда Post-Fit Simulation; Тя ще трябва да извърши симулация с отчитане на електрическите и времеви параметри на реално реализираното устройство върху чипа.

В прозореца Sources ще се появи новият source - модул на проекта TestGeneral.tbw :



- Стартирайте симулатора ISE Simulator и проверете резултатите от симулацията. За тази цел:

- Активирайте (ако не е вече активиран) в горния прозорец (Sources) модула със стимулите TestGeneral.tbw , управляващ симулацията ;

- Активирайте панела Processes в прозореца Processes на Project Navigator; Разширете списъка от команди към симулатора Xilinx ISE Simulator (ако не е вече разширен);

:


-Установете върху лентата с инструменти на средата интервал от време за симулация 3000 ns:

- Стартирайте с двойно кликване командата Simulate Post - Fit Model. При правилна досегашна работа ще се стартира симулаторът Xilinx ISE Simulator и неговият прозорец с времедиаграми на входните и изходни сигнали ще се изобрази на екрана.

Чрез поставяне на маркер върху получените времедиаграми ( Simulation => Markers => Single Marker...) можете да проследите в какви състояния са светофарите във всеки момент от симулацията. Например на долната диаграма в момента на маркера R1 = ‘1’, Y1 = ‘0’, G1 = ‘0’; R2 = ‘0’, Y2 = ‘0’, G2 = ‘1’ – в този момент за първи светофар свети “червено”, а за втори – “зелено”:




Можете да проследите времедиаграмите (стойностите на сигналите) и след 1000 ns, като изпълните: Simulation => Run For Specified Time...



Затворете прозореца на симулатора с времедиаграмите на сигналите и извършете симулация на работата на устройството при входен управляващ сигнал Blink = ‘1’ (задаващ с тази си стойност мигащи жълти светлини, а останалите светлини на светофарите би трябвало да са изключени):

- Затворете прозореца на симулатора с времедиаграмите на сигналите и отново преминете в режим на работа на развойната среда Sources for: Synthesis/Implementation.

------------------------------------------------------------------------------------------------------------------------------

Вляво: Странни светещи кълба, заснети от сондата Вояджър-4 над Йо, спътник на Юпитер; Вдясно: Според д-р Евгения Лопес от НАСА, това образувание най-вероятно е космически светофар, въпреки че потребителите му все още не са известни.

-----------------------------------------------------------------------------------------------------------------------------------


Въведеният в проекта VHDL код в модула ClkStretcher.vhd няма да бъде използван в този му вид при крайната реализация на проектираното устройство, тъй като времената, който за зададени в него (чрез размера на броячите и константните стойности за сравнение) са от порядъка на ns, а за практическата работа на устройството са твърде малки интервали. Това бе направено досега, за да може да се симулира и да се провери коректността на работа на устройството.

Необходими са малки корекции в VHDL кода (основно увеличаване на крайните стойност на броячите, споменати по-горе), които ще доведат до увеличаване на интервалите от време при работа на устройството до няколко секунди. За тази цел :


- Отворете прозореца с текста (VHDL- кода) на ClkStretcher.vhd чрез двойно кликване върху модула ClkStretcher.vhd в прозореца Sources на Project Navigator. Изтрийте текста в него, (който по-рано бе въведен) и въведете следния текст с увеличени крайни стойности на броячите:
library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity ClkStretcher is port(

CLK : in std_logic; -- тактовия сигнал на развойната платка

OutCLK : inout std_logic; -- продуцирания изходен сигнал

Reset : in std_logic; -- сигнал за начална инициализация

Blink : in std_logic -- сигнал за мигащата жълта светлина

);

end ClkStretcher;


architecture Behavioral of ClkStretcher is
signal enable1 : std_logic; -- стартира генерирането на дългия пулс

signal enable2 : std_logic; -- стартира генерирането на първия кратък пулс след всеки дълъг

signal enable3 : std_logic; -- стартира генерирането на втория кратък пулс след всеки дълъг

signal enable4 : std_logic; -- стартира секцията необходима за мигащата жълта светлина


signal counter1 : std_logic_vector(31 downto 0); -- определя дължината на дългия пулс

signal counter2 : std_logic_vector(24 downto 0); -- определя продължителността на първия тактов пулс

signal counter3 : std_logic_vector(24 downto 0); -- определя продължителността на втория тактов пулс

signal counter4 : std_logic_vector(24 downto 0); -- определя честотата на мигане на жълтата светлина

begin

process(Reset, CLK, Blink)



begin
if(Reset = '1') then -- при начално установяване се активира първата секция генерираща дългия пулс

enable1<='1';

enable2<='0';

enable3<='0';

enable4<='0';

counter1<=(others=>'0'); -- нулиране на всички броячи

counter2<=(others=>'0');

counter3<=(others=>'0');

counter4<=(others=>'0');

OutCLK<='0';


elsif(CLK'event and CLK='1') then

if(enable1='1') then -- секция за активиране само на първия брояч

counter1<=counter1+1;

if(counter1

elsif(counter1=x"1FFFFFFF" + 1) then

enable1<='0'; -- секцията се заключва и край на първия пулс

counter1<=(others=>'0'); -- нулиране на първия брояч

enable2<='1'; -- стартиране на следващата секция

enable3<='0'; -- секцията е непозволена

enable4<='0'; -- секцията за мигащата жълта светлина е непозволена

OutCLK<='0'; -- OutCLK пада в ниско състояние

else OutCLK<='0'; -- OutCLK пада в ниско състояние

end if;

elsif(enable2='1') then -- секция за активиране само на втория брояч



counter2<=counter2+1;

if(counter2

elsif(counter2=x"1FFFFFF") then

enable1<='0'; -- секцията е непозволена

enable2<='0'; -- секцията се заключва и край на втория пулс

counter2<=(others=>'0'); -- нулиране на втория брояч

enable3<='1'; -- стартиране на следващата секция

enable4<='0'; -- секцията за мигащата жълта светлина е непозволена

OutCLK<='0'; -- OutCLK пада в ниско състояние

else OutCLK<='0'; -- OutCLK пада в ниско състояние

end if;

elsif(enable3='1') then -- секция за активиране само на третия брояч

counter3<=counter3+1;

if(counter3

elsif(counter3=x"1FFFFFF") then

enable3<='0'; -- секцията се заключва и край на третия пулс

counter3<=(others=>'0'); -- нулиране на третия брояч

enable1<='0'; -- секцията е непозволена

enable2<='0'; -- секцията е непозволена

enable4<='1'; -- секцията за мигащата жълта светлина е позволена

OutCLK<='0'; -- OutCLK пада в ниско състояние

else OutCLK<='0'; -- OutCLK пада в ниско състояние

end if;

elsif(enable4='1') then -- секция за мигащата светлина и активиране само на четвъртия брояч


counter4<=counter4+1;

------- проверка дали сигналът, отговарящ за мигащата жълта светлина е активен

if(Blink='0') then -- Ако Blink е неактивен

OutCLK<='0'; -- OutCLK пада в ниско състояние

enable1<='1'; -- секция 1 се отключва

enable2<='0'; -- секция 2 е заключена

enable3<='0'; -- секция 3 е заключена

enable4<='0'; -- секция 4 е заключена

counter4<=(others=>'0'); -- нулиране на четвъртия брояч

elsif(Blink='1') then -- Ако Blink е активен

OutCLK<=counter4(24); -- продуцираме делител на честота

end if;
end if; -- край на секцията с enablе…

end if; -- край на секцията отговорна за Reset и CLK


end process;
end Behavioral;
- След като нанесете описаните промени, актуализирайте съдържанието на файла ClkStretcher.vhd (File => Save ...) и стартирайте наново процесите на проектиране (чрез Generate Programming File...) .
- За да можете да стартирате работата и проверите функционирането на проектираното устройство върху зададения CPLD – чип на развойна платка, задайте ограничения в работата на развойната среда при работата й при проектиране на устройството, а именно - задайте вашите изисквания за разполагане на входните и изходни сигнали на устройството върху точно определени изводи на чипа, така че тези сигнали да управляват или да бъдат управлявани от определени елементи (ключове, бутони, светодиоди) на платката. За тази цел :

- Добавете в проекта нов source - UCF – модул с име GlobalUCF, (Project => New Source… и от прозореца New Source Wizard избор за тип модул Implementation Constraints File и File name => GlobalUCF).

След това включване на модул в проекта, прозорецът Sources на развойната среда, показващ всички досега включени модули на проекта, трябва да изглежда така:


- Активирайте в горния прозорец UCF – модула, след което в прозореца Processes разширете User Constraints и от разширението кликнете двойно върху Assign Package Pins;

Стартира се програмата Pace от развойната среда, чрез която можете да присвоите изводи от чипа на входно/изходните сигнали на проектирaното устройство;

- Попълнете колоната Loc(ation) на таблицата на Pace, както е дадена по-долу; В тази таблица имената на изводите на чипа, върху които искаме да бъдат разположени сигналите, се записват в колоната Loc(ation):

Запишете тази информация в UCF – файла чрез Save...



Ако развойната среда изобрази показания по-долу прозорец, потвърдете чрез радиобутона, показан по-долу, че пречупените скоби се използват за индексиране на сигналите в таблицата:


- Активирайте главния VHDL – модул на проекта (General Module) и стартирайте до край (чрез стартиране на Generate Programming File) процесите на проектиране.

V. Имплементиране на устройството за управление на светофари върху CPLD - чип на развойна платка и проверка на работата му
Свържете развойната платка към компютъра, на който е развойната среда WebPACK, с помощта на кабела за USB – интерфейс. Но преди това е полезно да прочетете следващия абзац:
Внимание! Конфигурирането на CPLD – чиповете е енергонезависимо, тоест, то се запазва в чиповете, независимо от изключването на захранващото им напрежение.

Като свържете развойната платка с CPLD – чипа към компютъра, той по USB ще подаде към нея захранващо напрежение. При това положение, ще се стартира автоматично някакво управляващо устройство, конфигурирано от ваш колега по време на предно упражнение – и резултатите могат да бъдат изумителни и необясними! Затова включвайте внимателно, след взети всички предпазни мерки.( И още един съвет – не правете това сами, когато сте вкъщи).

----------------------------------------------------------------------------------------------------------------------------------------------

След успешното и спокойно включване на платката към компютъра:
- Заредете получения от развойната среда файл за конфигуриране (Programming File) в CPLD – чипа на развойната платка. За тази цел:
- Стартирайте програмата: Digilent => Adept => ExPort ( от списъка AllPrograms или от икона на Desktop );

- В прозореца на ExPort първоначално стартирайте Initialize Chain, и след проверката на USB - връзката между компютъра и развойната платка, която ще извърши Export, в прозореца ще се изобрази чипа от развойната платка, който може да бъде конфигуриран (програмиран):


Важно!!! За да е възможно програмирането (конфигурирането) от вас на CPLD - чипа върху развоната платка, е необходимо съответният ключ на платката да е в режим PROG. В противен случай няма и да се визуализира чипът с надпис CPLD, който е показан в горния прозорец.


- Кликнете върху изображението на CPLD - чипа XC2C256, който сте задали в началото на декларирането на проекта да бъде използван за имплементирането на устройството и в който трябва да заредите файла за конфигуриране.
- Намерете чрез бутона Browse в прозореца на CPLD - чипа XC2C256, идентификатора на файла за конфигуриране (програмиране) от папката на вашия проект (би трябвало да е с идентификатор GeneralModule.jed).
- Прехвърлете файла за конфигуриране в CPLD - чипа чрез бутона Program Chain.

- Проверете работата на имплементираното устройство върху развойната платка X-Board.


С помощта на зададеното от вас по-горе чрез програмата PACE и файла GlobalUCF.usf разполагане на входно/изходните сигнали върху изводите на чипа, работата на проектираното и имплементирано устройство за управление на светофарите на улично кръстовище (GeneralModule) ще се управлява и контролира от следните елементи на платката:





Променете комбинациите на светлините в различните фази на светофарите така, че да отговарят на използваните по кръстовищата у нас. (Например след червена светлина би трябвало да светват червена и жълта светлина, не само жълта...). За тази цел:

  • Направете промени в текста на модула TrafficLights.vhd , описващ функцията на изходите на управляващия краен автомат;

  • Запишете промените в текста на TrafficLights.vhd;

  • Стартирайте отново процесите на проектиране на устройството;

  • Конфигурирайте наново CPLD - чипа (с новото съдържание на файла за конфигуриране GeneralModule.jed и проверете новото функциониране на устройството.


-------------------------------------------------------------------------------------------------------------------------------------------



Вляво: Студентите от група 333а монтират проектираното от тях управляващо устройство за светофари на кръстовище; Вдясно: Резултат от 3 – минутната работа на устройството.

----------------------------------------------------------------------------------------------------------------------------------------------


В упражнението по-нататък ще проектираме и имплементираме върху CPLD – чип втора версия на създаденото устройство за управление на светофарна уредба на кръстовище. Тя ще управлява и индикация на седем-сегментни индикаторни елементи за оставащото време до края на основните фази на свтофара (червено/зелено). Ще реализираме и управление на светофари за пешеходците:



Нов вид и организация на светофарната уредба на улично кръстовище

VI. Проектиране на устройство за управление на светофари със седем-сегментна индикация и пешеходни светофари
Промяна на кода в главния модул на проекта – GeneralModule
- Кликнете двойно с мишката върху името на модула GeneralModule.vhd в прозореца Sources на Project Navigator - текстът му ще се изобрази върху прозореца за редактиране. Изтрийте досегашния текст и въведете следния VHDL код, описващ новата версия на проектираното устройство:
library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity GeneralModule is

port(


BoardCLK : in std_logic;

Reset : in std_logic;

Blink : inout std_logic;

R1 : out std_logic;

Y1 : out std_logic;

G1 : out std_logic;

R2 : out std_logic;

Y2 : out std_logic;

G2 : out std_logic;

OutDouble : out std_logic;

-- сигнали за управление на пешеходните светофари

R_W1 : out std_logic;

G_W1 : out std_logic;

R_W2 : out std_logic;

G_W2 : out std_logic;

-- сигнали за управление на 7-сегментните индикатори

-- (катода и анодите)

CAT: out std_logic;

AA: out std_logic;

AB: out std_logic;

AC: out std_logic;

AD: out std_logic;

AE: out std_logic;

AF: out std_logic;

AG: out std_logic

------------------------

);

end GeneralModule;


architecture Structural of GeneralModule is
component ClkStretcher

port(


CLK : in std_logic;

OutCLK : inout std_logic;

Reset : in std_logic;

Blink : inout std_logic;

-- целочислена стойност, необходима за

-- брояча за обратно отброяване на

-- продължителността на зелените/червените

--фази на светофара

Count_Int_Time : inout integer range 0 to 31

);

end component;



component TrafficLights

port(


CLK : in std_logic;

Reset : in std_logic;

Blink : in std_logic;

R1 : out std_logic;

Y1 : out std_logic;

G1 : out std_logic;

R2 : out std_logic;

Y2 : out std_logic;

G2 : out std_logic;

-- сигналите за управление на

-- пешеходните светофари се добавят

-- в крайния автомат, където става тяхното

-- управление

R_W1 : out std_logic;

G_W1 : out std_logic;

R_W2 : out std_logic;

G_W2 : out std_logic;

-- Сигнал за управление на катода на сегментите

-- При зелена фаза на единия

-- светофар ще е активен само единия сегмент,

-- на който ще се визуализира обратното отброяване.

-- При зелена фаза на другия светофар - съответно

-- другият сегмент ще е активен

CAT_Change : out std_logic;

----------------------

OutDouble : out std_logic

);

end component;


-- компонент необходим за трансформиране на

-- стойността на брояча за обратно отброяване

-- към сигналите управляващи анодите на седем-

-- сегментните индикатори за визуализация.

component HexToSevenSegment

port(


HEX: in STD_LOGIC_VECTOR (3 downto 0);

LED: out STD_LOGIC_VECTOR (6 downto 0)

);

end component;


signal Intermed : std_logic; -- вътрешен сигнал за предаване на тактовия сигнал

-------------------------------------------------------

signal Count_Int_Time_Hex : integer range 0 to 31;
signal HEX_IN : std_logic_vector(5 downto 0);
signal Seven_LED : std_logic_vector(6 downto 0);

-------------------------------------------------------


begin

in1: ClkStretcher port map(CLK=>BoardCLK,OutCLK=>Intermed,Reset=>Reset,Blink=>Blink, Count_Int_Time=>Count_Int_Time_Hex);

in2: TrafficLights port map(CLK=>Intermed,Reset=>Reset,Blink=>Blink,R1=>R1,Y1=>Y1,G1=>G1,R2=>R2,Y2=>Y2,G2=>G2,R_W1=>R_W1,G_W1=>G_W1,R_W2=>R_W2,G_W2=>G_W2,CAT_Change=>CAT,OutDouble=>OutDouble);

HEX_IN <= CONV_STD_LOGIC_VECTOR(Count_Int_Time_Hex, 6);

in3: HexToSevenSegment port map(HEX=>HEX_IN(3 downto 0), LED=>Seven_LED);

AA <= not Seven_LED(0);

AB <= not Seven_LED(1);

AC <= not Seven_LED(2);

AD <= not Seven_LED(3);

AE <= not Seven_LED(4);

AF <= not Seven_LED(5);

AG <= not Seven_LED(6);


end Structural;
- Актуализирайте съдържанието на файла чрез File => Save.
В интерфейсната декларация на главния модул GeneralModule (entity...) са декларирани допълнително още няколко входно/изходни сигнала в сравнение с първата версия на проекта: сигнали за управление на седемсегментните индикаторни елементи, както и сигнали за управление на пешеходните светофари. Въведен е допълнително и брояч (декрементиращ брояч) със съдържание от тип integer, който ще задава оставащото време до края на фазите червено/зелено на светофара.
Промяна на кода в модула за синхронизация на проекта – ClkStretcher
В този модул, както и по-рано, е описан блокът за генериране на импулси за определяне на интервалите от време за фазите на сфетофара от първия вариант на проекта, но в него сега е включена и схема за отброяване на една секунда, през която се декрементира стойността на брояча за продължителността на фазите на светофара.
- Кликнете двойно с мишката върху името на модула ClkStretcher в прозореца Sources на Project Navigator. Изтрийте текста и въведете следния VHDL- код, описващ новата версия на проектираното устройство:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ClkStretcher is

port(


CLK : in std_logic; -- тактов сигнал на развойната платка

OutCLK : inout std_logic; -- продуциран изходен сигнал за продължителността

-- на фазите на светофара

Reset : in std_logic; -- сигнал за начална инициализация

Blink : in std_logic; -- сигнал за мигащата жълта светлина

------------------

Count_Int_Time : inout integer range 0 to 31 -- сигнал за брояча, намаляващ по

-- време на фазите

);

end ClkStretcher;


architecture Behavioral of ClkStretcher is
signal enable1 : std_logic; -- стартира генерирането на дългия пулс

signal enable2 : std_logic; -- стартира генерирането на първия кратък пулс след всеки дълъг

signal enable3 : std_logic; -- стартира генерирането на втория кратък пулс след всеки дълъг

signal enable4 : std_logic; -- стартира секцията необходима за мигащата жълта светлина


signal counter1 : std_logic_vector(31 downto 0); -- определя дължината на дългия пулс

signal counter2 : std_logic_vector(24 downto 0);

-- определя продължителността на първия тактов пулс

signal counter3 : std_logic_vector(24 downto 0);

-- определя продължителността на втория тактов пулс

signal counter4 : std_logic_vector(24 downto 0);

-- определя честотата на мигане на жълтата светлина
---------------------------------------------

-- сигнал необходим за отброяване на 1 секунда, през която да

-- става декрементирането на брояча за фазата

signal time_counter : std_logic_vector(25 downto 0);

---------------------------------------------
begin

process(Reset, CLK, Blink)

begin
if(Reset = '1') then

-- при начално установяване се активира първата секция генерираща дългия пулс

enable1<='1';

enable2<='0';

enable3<='0';

enable4<='0';

counter1<=(others=>'0'); -- нулиране на всички броячи

counter2<=(others=>'0');

counter3<=(others=>'0');

counter4<=(others=>'0');

------начално установяване-----

time_counter <= (others=>'0');

Count_Int_Time <= 10;

-------------------------------

OutCLK<='0';
elsif(CLK'event and CLK='1') then

if(enable1='1') then -- секция за активиране само на първия брояч

counter1 <= counter1+1;

time_counter <= time_counter + 1; -- увеличаване на брояча за 1 секунда

-----------------------------------------------------

-- ако е отброена 1 секунда

if (time_counter = x"2D6C00" ) then

time_counter <= (others=>'0');

-- декрементираме стойността на брояча за фазата

Count_Int_Time <= Count_Int_Time - 1;

end if;

-----------------------------------------------------



if(counter1

OutCLK<='1'; -- начало/високо ниво на OutCLK

elsif(counter1=x"1FFFFFFF" + 1) then

enable1<='0'; -- секцията се заключва и край на първия пулс

counter1<=(others=>'0'); -- нулиране на първия брояч

-------------

time_counter <= (others=>'0'); -- нулиране на брояча за 1 секунда.

Count_Int_Time <= 10; -- инициализация на брояча за фазата

-------------

enable2<='1'; -- стартиране на следващата секция

enable3<='0'; -- секцията е непозволена

enable4<='0'; -- секцията за мигащата жълта светлина е непозволена

OutCLK<='0'; -- OutCLK пада в ниско състояние

else OutCLK<='0'; -- OutCLK пада в ниско състояние

end if;

elsif(enable2='1') then -- секция за активиране само на втория брояч



counter2<=counter2+1;

if (counter2

elsif(counter2=x"1FFFFFF") then

enable1<='0'; -- секцията е непозволена

enable2<='0'; -- секцията се заключва и край на втория пулс

counter2<=(others=>'0'); -- нулиране на втория брояч

enable3<='1'; -- стартиране на следващата секция

enable4<='0'; -- секцията за мигащата жълта светлина е непозволена

OutCLK<='0'; -- OutCLK пада в ниско състояние

else OutCLK<='0'; -- OutCLK пада в ниско състояние

end if;

elsif (enable3='1') then -- секция за активиране само на третия брояч

counter3<=counter3+1;

if (counter3

elsif (counter3=x"1FFFFFF") then

enable3<='0'; -- секцията се заключва и край на третия пулс

counter3<=(others=>'0'); -- нулиране на третия брояч

enable1<='0'; -- секцията е непозволена

enable2<='0'; -- секцията е непозволена

enable4<='1'; -- секцията за мигащата жълта светлина е позволена

OutCLK<='0'; -- OutCLK пада в ниско състояние

else OutCLK<='0'; -- OutCLK пада в ниско състояние

end if;

elsif(enable4='1') then -- секция за мигащата светлина и активиране само на четвъртия брояч


counter4<=counter4+1;

------- проверка дали сигнала отговарящ за мигащата жълта светлина е активен

if(Blink='0') then -- Ако Blink е неактивен

OutCLK<='0'; -- OutCLK пада в ниско състояние

enable1<='1'; -- секция 1 се отключва

enable2<='0'; -- секция 2 е заключена

enable3<='0'; -- секция 3 е заключена

enable4<='0'; -- секция 4 е заключена

counter4<=(others=>'0'); -- нулиране на четвъртия брояч

elsif(Blink='1') then -- Ако Blink е активен

OutCLK<=counter4(24); -- продуцираме делител на честота

end if;
end if; -- край на секцията с enablе…

end if; -- край на секцията отговорна за Reset и CLK


end process;
end Behavioral;
- Актуализирайте съдържанието на файла чрез File => Save.


Промяна на кода в модула на проекта ТrafficLights
В новата версия на устройството крайният автомат за управление на светлините генерира сигнали за управление на пешеходните светофари, а също и сигнали за управление на блока със седемсегментните индикаторни елементи.




Сподели с приятели:
1   2   3




©obuch.info 2024
отнасят до администрацията

    Начална страница