VHDL язык описания аппаратных средств

Изд ЛАТМЭС 1998, 119 с. Дано описание VHDL - языка описания сверхскоростных интегральных схем и устройств. Подробно обсу

277 41 764KB

Russian Pages [81]

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

VHDL язык описания аппаратных средств

  • Commentary
  • 327125
  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

A.C. Rцкоo+

VHDL зыко oисcaрсз aииapaхркx cpeвcхУ

ДКО 681.396.6 VHDL - зыко oисcaрсз aииapaхркx cpeвcхУ: чбeА. иocoАсe / A.C. RсПоoУ; Πoв. peв. aоaв. B.C. уypПeУa, aоaв. у.C. Mсхсрa. M. : Тыв-Уo MATТ-PЛTч "ЭATMЄC", 1998119c. ISBN 5-230-21195-8. гaрo oисcaрсe VHDL - зыкоa oисcaрсз cУepxcоopocхркx срхeлpaьмркx cxeй с ycхpoжcхУ. ΠoвpoАрo oАcyОвaeхcз cсрхaоcсc зыкоa иo cхaрвapхy ANSI/IEEE Std 10761987. OисcкУaeхcз pзв сыйeрeрсж, Урeceрркx У cхaрвapх ANSI/IEEE Std 1076-1992. ΠpсУeвeрo ырaбсхeьмрoe оoьсбecхУo иpсйepoУ сcиoьмыoУaрсз оoрcхpyоПсж зыкоa. гьз cхyвeрхoУ, oАyбaщэсxcз иpoeохсpoУaрсщ с хexрoьoлсс coывaрсз єьeохpoрркx cpeвcхУ, a хaоОe вьз paыpaАoхбсоoУ cУepxАoьмЗсx срхeлpaьмркx cxeй с єьeохpoрркx Укбсcьсхeьмркx ycхpoжcхУ с cсcхeй. усАьсoлp.: 2 рaыУ. Ть. 3. TaАь. 8 PeПeрыeрхк: фaУ. оaФ. MТЮТ вoП. Н.H. ЮeвoceeУ; ТCΠ PAH. ΠoвлoхoУоa с иeбaхм сывaрсз ocyэecхУьeрк иpс иoввepОоe 00 "MeОвyрapoврoлo Юoрвa Πoиeбсхeьeж MATТ-PЛTч сй. Ц.Є, ©сoьоoУcоoлo". ISBN 5-230-21195-4 В ТBBC PAH, 1998 В MATТ-PЛTч, 1998 В RсПоoУ A.C.

Oа aоаopa Hacхoзэee yбeАрoe иocoАсe рe зУьзeхcз Фopйaьмркй oисcaрсeй зыкоa VHDL (VHSIC (Very High Speed Integrated Circuit) Hardware Description Language) с cьyОсх рeоoхopкй иoвcиopмeй иpс eлo ocУoeрсс. Юopйaьмркж cсрхaоcсc оoрcхpyоПсж иpсУeвeр У Фopйaхe Backus-Naur Fonn (B NF). B paАoхe сcиoьмыoУaрo oисcaрсe ANSI/IEEE Std 1076-1987, сйeрyeйoe вaьee оaо VHDL'87 с йaхepсaьк Фсpйк Mentor Graphics Corporation (Mentor Graphics VHDL Reference Manual, July 1994). ТыьoОeрсe VHDL У cсрхaоcсce VHDL'87 Акьo УкАpaрo иo pзвy иpсбср: VHDL'87 Аoьee вocхyиeр с pacиpocхpaрeр У Poccсс У рacхoзэee Уpeйз; VHDL'92 (ANSI/IEEE Std 1076-1992) coУйecхсй (иoбхз) cУepxy Урсы c VHDL'87; вocхaхoбрo иoьркж aрaьсы сыйeрeрсж, Урeceрркx У VHDL'92, вocхyиeр сы [1]; Фсpйeрркe оoйисьзхopк, оaо иpaУсьo, сйeщх УoыйoОрocхм оoйисьсpoУaхм oАa oисcaрсз. HaсАoьee cyэecхУeрркe вoиoьрeрсз с oхьсбсз рoУoлo cхaрвapхa зыкоa ывecм Уce-хaос ыaхpaлсУaщхcз. OcрoУрoe Урсйaрсe Аyвeх yвeьeрo вУyй йoйeрхaй: - cхсьщ рaисcaрсз "АyоУ", "cьoУ" с "иpeвьoОeрсж", иpсбeй иpс рaисcaрсс "иpeвьoОeрсж" йк иoикхaeйcз рaиoьрсхм сx иoрзхркй срОeрepркй coвepОaрсeй; - ceйaрхсбecоoйy хoьоoУaрсщ рe oбeУсвркx, рa иepУкж Уыльзв, єьeйeрхoУ зыкоa (хсик с cУoжcхУa cслрaьoУ, oxpaрркe УкpaОeрсз, oxpaрзeйкe cслрaьк, ФyроПсс paыpeЗeрсз, иpeвoиpeвeьeрркe aхpсАyхк с вp.). Mк Аyвeй иpс сыьoОeрсс иoьмыoУaхмcз рeоoхopкйс иoрзхсзйс зыкоa вo сx Фopйaьмрoлo oиpeвeьeрсз, иoьaлaзcм рa BaЗy срхyсПсщ с рeиocpeвcхУeррocхм Уocиpсзхсз. уoьмЗсрcхУo иpocхкx иpсйepoУ вaрк Аeы иoзcрeрсж. гьз ьyбЗeлo ycУoeрсз йaхepсaьa рe иpoиycоaжхe сx paccйoхpeрсe.

COгEPъAHТE BУeвeрсe 1. OА—eохк_иpoeохсpoУaрсз 2. Tсик_вaрркx 2.1. Cоaьзpркe_хсик 2.2. CocхaУркe_хсик 2.3. чоaыaхeьс 2.4. Юaжьк 3. Цьaccк_oА—eохoУ_зыкоa 4. ТрхepФeжcркe_cисcос 5. Эeоcсоa_зыкоa 6. BкpaОeрсз 7. Тйeрa 8. Tсик 9. OА—зУьeрсз 10. AхpсАyхк 11. ΠpeвьoОeрсз 12.Πoвиpoлpaййк 13.ΠpoeохсpoУaрсe_ycхpoжcхУ 14.Цoйиoрeрхк 15.Coывaрсe_оoрФслypaПсс 16.Coывaрсe_иaоeхoУ 17.Cхpyохypa_хeоcхoУoлo_Фaжьa_рa_VHDL

BBEКEHБE Тcхopсз coывaрсз зыкоa oисcaрсз aииapaхypк VHDL рe вoисcaрa. VHDL рaxoвсхcз У paыУсхсс, бхo с зУьзeхcз oврсй сы иpсырaоoУ ОсУoлo зыкоa. CьoОрocхм Уocиpсзхсз VHDL cУзыaрa c pзвoй йoйeрхoУ: єхo yрсУepcaьмркж aьлopсхйсбecосж зыко; єхo зыко, cиocoАркж oисcкУaхм иapaььeьмрo иpoхeоaщэсe Уo Уpeйeрс иpoПeccк; єхo зыко, cиocoАркж иoввepОсУaхм йрoОecхУo cхсьeж oисcaрсз aииapaхypк с срОeрepркx иpсьoОeрсж. Ho! Bк йoОeхe вocхсбм иocхaУьeррoж Пeьс, сcиoьмыyз хoьмоo xopoЗo иoрзхркe Уaй оoрcхpyоПсс, с pacЗсpзхм УaЗс ырaрсз зыкоa иo йepe рeoАxoвсйocхс. Πoьeырo Уceлвa иoйрсхм, бхo ыa oисcaрсeй рa VHDL cхoсх хa сьс срaз cсcхeйa йoвeьсpoУaрсз, Укиoьрзщэaз УaЗe ыaвaрсe. Πoсрхepecyжхecм рe хoьмоo cхaрвapхркй вьз VHDL oоpyОeрсeй (АсАьсoхeоaйс), лвe coАpaрк хaосe cхaрвapхркe иaоeхк, оaо "standard", "textio", рo с вpyлсйс иaоeхaйс, У вocхyиркx Уaй АсАьсoхeоax ("ieee", "vital", "arithmetic" с вp.). Bк Аyвeхe иpсзхрo yвсУьeрк ыaьoОeрркйс У рсx УoыйoОрocхзйс, ocoАeррo У иьaрe paАoхк c сйeщэсйсcз oАэeиpсрзхкйс aьФaУсхaйс йoвeьсpoУaрсз, рaиpсйep, вeУзхсырaбркй aьФaУсхoй std_ulogic (IEEE_standard_1164). фaльзрсхe У хeоcхк иaоeхoУ. Єхo вacх xopoЗсж иpсйep cхсьз рaисcaрсз иpoлpaйй рa VHDL. CиocoАрocхм oисcкУaхм иapaььeьмрo иpoхeоaщэсe Уo Уpeйeрс иpoПeccк У VHDL ocрoУaрa рa рaьсбсс иapaььeьмрo Укиoьрзeйкx иpeвьoОeрсж (Concurrent Statements) с рa рaьсбсс У зыкоe Фсысбecосx (Physical) хсиoУ вaрркx, сйeщэсx paыйepрocхм, сйeррo хaо с oиpeвeьзeхcз Уpeйз (иaоeх "standard" хси "time")- Πapaььeьмрoe ФyроПсoрсpoУaрсe У cсcхeйe йoвeьсpoУaрсз ocрoУaрo иpс єхoй рa вУyx cисcоax coАкхсж. ΠepУкж cисcoо УкcхpaсУaeх coАкхсз иo Фсысбecоoйy (йoвeьмрoйy) Уpeйeрс, a Ухopoж - иo иpсбсррo-cьeвcхУeррoж cУзыс coАкхсж, иpoсcxoвзэсx У oврo с хo Оe Фсысбecоoe Уpeйз. гьз сььщcхpaПсс paccйoхpсй aАcхpaохркж иpсйep. Bocиoьмыyeйcз вУyйз oА—eохaйс зыкоa: иepeйeррoж (variable) с cслрaьoй (signal). ΠpсcУoeрсe ырaбeрсж иepeйeрркй У VHDL иpoсcxoвсх иocьeвoУaхeьмрo, оaо У oАкбркx зыкоax иpoлpaййсpoУaрсз (C, Πacоaьм с вp.), a cслрaьaй -иapaььeьмрo. ΠocьeвoУaхeьмрoe иpсcУoeрсe (:=) variable A, B: integer:=0; variable C: integer:=l; variable D: integer:=3; Уapсaрх 1 Уapсaрх 2 B:=A+C; A:=C+D; A:=C+D; B:=A+C; peыyьмхaх 1 peыyьмхaх 2 A=4, B=1 A=4, B=5 Πapaььeьмрoe иpсcУoeрсe ( out1, in2 => i2); -- cУзым иo сйeрaй begin... Ecьс йoвa срхepФeжcрoлo cслрaьa in с сcиoьмыoУaрo ыapeыepУсpoУaррoe cьoУo open (иopх oхcoeвсрeр), хo У єхoй cьyбae вoьОрo Акхм ыaвaрo ырaбeрсe иo yйoьбaрсщ. фaйeхсй, бхo хсик срхepФeжcркx oА—eохoУ йoлyх Акхм рeoлpaрсбeрркйс (unconstrained), рaиpсйep, bit_vector. гeжcхУсхeьмрaз срФopйaПсз, иepeвaУaeйaз бepeы хaосe срхepФeжcркe oА—eохк, вoьОрa сйeхм оoрeбркe paыйepк ыaвaрркж всaиaыoр срвeоcoУ, рaиpсйep, bit_vector(0 to 7). 9.6. OЦхнояeыпe фoсoяыпаeябыеx ыдeы Й сceофoыпдoо OА—зУьeрсe иceУвoрсйoУ (alias) - єхo ыaУeвeрсe aьмхepрaхсУрoлo сйeрс вьз cслрaьa, иepeйeррoж сьс оoрcхaрхк. B VHDL'92 Ук йoОeхe ыaУecхс иceУвoрсй ьщАoйy свeрхсФсоaхopy [I]. ЦoрcхpyоПсз alias_declaiation вoиycхсйa У оoрcхpyоПсзx: block_declarauve_item, entity_declarative_item, package_declarative_item, package_body_declarative_item, process_declarative_item, subprogram_declarative_item. alias_declaration ::= alias identifier: subtype indication is name ; identifier - сйз иceУвoрсйa. subtype indication - eлo иoвхси. уaыoУкe хсик сйeр вoьОрк coУиaвaхм, рo Ук йoОeхe cyысхм всaиaыoр вoиycхсйкx ырaбeрсж сьс срвeоc иceУвoрсйa (иoсйeрoУaхм coАcхУeрркй сйeрeй Укpeыоy бacхс oА—eохa). фaйeхсй, бхo иceУвoрсй рe йoОeх сйeхм хси йрoлoйepрoлo йaccсУa. name - сcxoврoe сйз oА—eохa. Πpсйep. signal bus_data: bit_vector (15 downto 0); alias data: bit_vector (7 downto 0) is bus_data (15 downto 8 ); alias address: bit_vector (7 downto 0) is bus_data (7 downto 0); 9.7. OЦхнояeыпe лoдсoыeыаoо гьз хoлo бхoАк сcиoьмыoУaхм ycхpoжcхУa, oисcaрркe Урe вaррoлo хeоcхa, рeoАxoвсйo: cвeьaхм Усвсйкйс АсАьсoхeос, сы оoхopкx Ук сx xoхсхe Уызхм; oА—зУсхм сx оaо оoйиoрeрхк co Уceйс сйeрaйс с хсиaйс срхepФeжcркx oА—eохoУ (иapaйeхpaйс рacхpoжос с cслрaьaйс иopхoУ); cиeПсФсПсpoУaхм Уce УxoОвeрсз (єоыeйиьзpк) оaОвoлo оoйиoрeрхa (cй. paывeь 14). Юopйaьмрo сйeрa oА—зУьeрркx оoйиoрeрхoУ с сйeрa срхepФeжcркx oА—eохoУ йoлyх oхьсбaхмcз oх сcxoвркx сйeр. Ecьс рeх peaьмрoж рeoАxoвсйocхс, peоoйeрвyeхcз coxpaрзхм сcxoвркe (АсАьсoхeбркe) сйeрa. ЦoрcхpyоПсз component_declaration вoиycхсйa У оoрcхpyоПсзx: declaration, block_declarative_item, package_declarative_item. фaйeхсй, бхo: architecture_declarative_part ::= { block_declarative_item }. Ha_coвepОaрсe AхpсАyхк

component_declaration ::= component identifier [ local_generic_clause ] [ local_port_clause ] end component;

Πpсйep oА—зУьeрсз оoйиoрeрхoУ У apxсхeохypрoй хeьe ycхpoжcхУa. ΠpсУeвeй ывecм иoьркж хeоcх oисcaрсз йyьмхсиьeоcopa рa вУa Уxoвa (pсc, 1), сcxoвз сы иpeвиoьoОeрсз, бхo У АсАьсoхeоe My_Gates xpaрзхcз ycхpoжcхУa and2, or2 с inverter c apxсхeохypркйс oисcaрсзйс and2_ar, oл2_aл с inverter_ar.

Pсc. 1 -- Haбaьo хeоcхa рa VHDL'87 library My_Gates; -- АсАьсoхeоa c ьoлсбecосй сйeрeй "My Gates" Усвсйa use My_Gates.all; -- Уce ee coвepОсйoe йoОрo сcиoьмыoУaхм entity mux is -- oА—зУьeрсe ycхpoжcхУa port (inl, in2, con : bit; out_mux : out bit); end mux; architecture mux_ar of mux is component and2 -- component_declaration generic (prop_delay: time := 0.3 ns); -- local_generic_clause port (a, b: in bit; z: out bit); -- local_port_clause end component; component or -- coinponent_declaration generic (prop_delay : time := 0.1 ns); -- local_generic_clause port (a, b: in bit; z: out bit); -- local_port_clause end component; component inverter -- component_declaration port (i: in bit; z: out bit); -- local_port_clause end component; -- гaьee йк вoьОрк cиeПсФсПсpoУaхм Уce УxoОвeрсз оoйиoрeрхoУ: for occ1: inverter use entity my_gates.inverter(inverter_ar); for occ2, ooc3: and2 use entity my_gates.and2(and2_ar); for occ4: or2 use entity my_gates.or(or2_ar); -- гьз coeвсрeрсз иopхoУ ывecм рeoАxoвсйo УУecхс хpс cслрaьa: signal netl, net2, net3: bit; begin occ1: inverter port map (con, net3);--occ1 - сйз УxoОвeрсз оoйиoрeрхa occ2: and2 port map (inl, con, netl); occ3: and2 port map (net3, in2, net2); occ4: or2 port map (netl, net2, out_mux); end mux_ar; ' -- ЦoрeП хeоcхa рa VHDL'87 фaйeхсй, бхo У VHDL'92 УУeвeрo oиПсoррoe yиpoэeр– paыpeЗaщэee иpзйoe coывaрсe УxoОвeрсж оoйиoрeрхoУ: -- Haбaьo хeоcхa рa VHDL'92 library My_Gates; use My_Gates.all; entity mux is Ha_coвepОaрсe AхpсАyхк

port (in1, in2, con: bit; out_mux: out bit); end mux; architecture mux_ar of mux is

signal net1, net2, net3: bit; begin occ1: entity my_gates.inverter(inverter_ar) port map (con, net3); occ2: entity my_gates.and2(and2_ar) generic map(0.3 ns) port map (in1, con, net1); occ3: entity my_gates.and2(and2_ar) port map (con, in2, net2); occ4: entity my_gates.or(or2_ar) generic map(0.3 ns) port map (net1, net2, out_mux); end mux_ar; -- ЦoрeП хeоcхa рa VHDL'92 9.8. йyыльпп лoыоepcпп апсoо Cсрхaоcсc оoрcхpyоПсс association_lists, paccйoхpeррoж У paывeьe 9.5, иoыУoьзeх У actual_part сcиoьмыoУaхм УкыoУ ФyроПсс. Єхo вaeх УoыйoОрocхм иpс иepeвaбe срФopйaПсс йeрзхм ee хси (рaиpсйep, coeвсрзхм иopхк ycхpoжcхУ, сйeщэсe paыркe хсик срхepФeжcркx cслрaьoУ). Тcиoьмыyeйкe ывecм ФyроПсс - єхo cиeПсaьмрo рaисcaрркe иoьмыoУaхeьeй ФyроПсс оoрУepcсс хсиoУ. Πpсйep. ΠpeвиoьoОсй, тmo сйeщхcз вУe ФyроПсс оoрУepcсс хсиoУ: to_integer, иepeУoвзэaз bit_vector У integer, с to_bit_vector, иepeУoвзэaз bit_vector У integer. entity a_ent is port (b : in integer; c : out integer); end a_ent; entity a_com is port (z : in bit_vector; a: out bit_vector); end a_com; architecture struct of struct_endty is signal s : bit_vector (0 to 31); signal d, y: integer; component a_ent port(b : in integer; c : out integer); end component; component a_com port(z : in bit_vector; a: out bit_vector); end component; begin u1: a_ent port map (b => to_integer(s), c => d); u2: a_com port map (a => s, z => to_bit_vector(y)); end struct; 10. ATPБЪДTП Mк yОe oАcyОвaьс УкЗe paыьсбркe acиeохк хaосx oА—eохoУ зыкоa, оaо aхpсАyхк. AхpсАyхк слpaщх У зыкоe Уecмйa УaОрyщ poьм. Bce aхpсАyхк йoОрo paывeьсхм рa вУe оaхeлopсс: aхpсАyхк, oиpeвeьeрркe иoьмыoУaхeьeй, с иpeвoиpeвeьeрркe aхpсАyхк. …epeы aхpсАyхк cУзыкУaeхcз (сыУьeоaeхcз) рeоoхopaз срФopйaПсз o paыьсбркx (сйeщэсx сйз) cyэрocхзx. Πpсйepoй иoьмыoУaхeьмcосx aхpсАyхoУ йoОeх cьyОсхм срФopйaПсз o paыйeэeрсс єоыeйиьзpoУ оoйиoрeрхoУ рa иeбaхрoж иьaхe с вpyлaз хexрoьoлсбecоaз срФopйaПсз. …epeы иoьмыoУaхeьмcосe aхpсАyхк йoОeх Акхм Ha_coвepОaрсe ΠpeвьoОeрсз

peaьсыoУaрa oАpaхрaз aррoхaПсз иpoeохa, рaиpсйep, иepeycхaрoУоa ырaбeрсж Уpeйeрркx aхpсАyхoУ-иapaйeхpoУ, иoьyбeрркx иocьe иpoУeвeрсз оoрcхpyохopcоoлo иpoeохсpoУaрсз. …хo оacaeхcз иpeвoиpeвeьeрркx aхpсАyхoУ, хo сx poьм йк иoвpoАрo oАcyвсй рсОe. Haиoйрсй, бхo ыa ырaбeрсзйс aхpсАyхoУ oАpaэaщхcз бepeы attribute_name, лвe иpeФсоc ecхм хa cyэрocхм, ыa срФopйaПсeж o оoхopoж йк oАpaэaeйcз: attribute_name ::= prefix'attribute_designator [ (expression) ] ______________ attribute_designator ::= attribute_simple_name Πpсйep. clock'delayed(51.2 ns) фвecм иpeвoиpeвeьeрркж aхpсАyх "delayed" coывacх cслрaь, сйeщэсж хaоoe Оe ырaбeрсe, оaо с cслрaь "clock" 51.2рc рaыaв, a иpeФсоcoй (prefix) зУьзeхcз cслрaь "clock".

10.1. Рpeфoсpeфeяeыыеe aаpпЦyае Πpeвoиpeвeьeрркж aхpсАyх иo cУoeж cyхс (poвy) йoОeх Акхм ФyроПсeж - aхpсАyх Укбсcьзeх иo иpeФсоcy рeоoхopoe ырaбeрсe; всaиaыoрoй - aхpсАyх иoыУoьзeх иoьyбсхм всaиaыoр ырaбeрсж вьз иpeФсоca; cслрaьoй - aхpсАyх coывaeх cслрaь; хсиoй - aхpсАyх иoыУoьзeх yырaхм Аaысcркж хси вьз иpeФсоca; Уeьсбсрoж - aхpсАyх УoыУpaэaeх рeоoхopoe ырaбeрсe, иpсcyэee иpeФсоcy. B оaбecхУe oА—eохoУ (иpeФсоcoУ) вьз иpeвoиpeвeьeрркx aхpсАyхoУ йoлyх Укcхyиaхм: хсик; oА—eохк зыкоa, хсик оoхopкx ecхм йaccсУк; cслрaьк; Аьoос. 10.1.1. AаpпЦyае фян апсoо Єхс aхpсАyхк сcиoьмыyщхcз вьз oиpeвeьeрсз лpaрсП, иoысПсж вeжcхУсхeьмркx ырaбeрсж paыьсбркx хсиoУ сьс иoвхсиoУ. B хaАьсПe вaр cисcoо иpeвoиpeвeьeрркx aхpсАyхoУ вьз хсиoУ. гьз сx вeйoрcхpaПсс (иpсйepк У хaАьсПe 3) ыaУeвeй cьeвyщэсe хсик вaрркx: type env is(cap, volt, temp, min); -- иepeбсcьсйкж хси subtype el is env range cap to temp; -- иoвхси хсиa env type adi is range 0 to 16; type ad2 is range 10 downto 1; TaАьсПa 3 Tси иpeФсоca BoыУpaэaeйaз Πpсйepк Тйз срФopйaПсз aхpсАyхa ’base ьщАoж Tси elХbase ecхм хси env el'base'right = min ’left

cоaьзp

ырaбeрсe

ad1Хleft = 0 ad2Хleft = 10

'right

cоaьзp

ырaбeрсe

ad1'right = 16 ad2'right = 1

’high

cоaьзp

ырaбeрсe

ad1Хhigh=16 ad2'high=10

'low

cоaьзp

ырaбeрсe

ad1Хlow =0 ad2Х1ow = 1

’pos(x)

Пeькж, Фсысбecосж, иepeбсcьсйкж

ырaбeрсe

evn'pos(volt) = 1 evn'pos(cap) = 0

'leftof(x)

'rightof(x)

Хsucc(x)

Хpred(x)

’vai(x)

Пeькж, Фсысбecосж, иepeбсcьсйкж

ырaбeрсe

Пeькж, ырaбeрсe Фсысбecосж, иepeбсcьсйкж Пeькж, ырaбeрсe Фсысбecосж, иepeбсcьсйкж Пeькж, ырaбeрсe Фсысбecосж, иepeбсcьсйкж Пeькж, Фсысбecосж, иepeбсcьсйкж

ырaбeрсe

env'leftof(temp)=volt ad1Хleftof(9)=8 ad2'leftof(9) = 10 env'rightol(temp)=min ad1'rightof(9)=10 ad2'rightof(9)=8 ad1'succ(9)=10 ad2'succ(9)=10 ad1'pred(9)=8 ad2'pred(9)=8 ad2'pred(l)= oЗсАоa evn'vai(l)=volt

AхpсАyх 'base Уквaeх АaыoУкж хси иpeФсоca с йoОeх Акхм сcиoьмыoУaр хoьмоo оaо иpeФсоc вьз вpyлoлo aхpсАyхa. AхpсАyх 'left Уквaeх ьeУyщ лpaрсПy иpeФсоca. AхpсАyх "right Уквaeх иpaУyщ лpaрсПy иpeФсоca. AхpсАyх 'high Уквacх Уepxрщщ лpaрсПy иpeФсоca. AхpсАyх 'low Уквaeх рсОрщщ лpaрсПy иpeФсоca. AхpсАyх 'pos(x) Уквaeх рoйep иoысПсс ырaбeрсз иapaйeхpa x вaррoлo иpeФсоca. AхpсАyх Гleftof(x) Уквaeх ырaбeрсe, cхoзэee cьeУa oх ырaбeрсз иapaйeхpa x вьз вaррoлo иpeФсоca. AхpсАyх 'rightof(x) Уквaeх ырaбeрсe, cхoзэee cиpaУa oх ырaбeрсз иapaйeхpa x вьз вaррoлo иpeФсоca. AхpсАyх 'succ(x) Уквaeх рaсАoьмЗee ырaбeрсe сы ырaбeрсж, cхoзэсx cьeУa с cиpaУa oх ырaбeрсз иapaйeхpa x вьз вaррoлo иpeФсоca. AхpсАyх 'pred(x) Уквaeх рaсйeрмЗee ырaбeрсe сы ырaбeрсж, cхoзэсx cьeУa с cиpaУa oх ырaбeрсз иapaйeхpa x вьз вaррoлo иpeФсоca. AхpсАyх 'val(x) Уквaeх ырaбeрсe, cooхУeхcхУyщэee рoйepy иoысПсс x вьз вaррoлo иpeФсоca. 10.1.2. AаpпЦyае фян oЦхeлаoо, пдeщъпx апс дaccпо Єхс aхpсАyхк сcиoьмыyщхcз вьз oиpeвeьeрсз всaиaыoрoУ, вьср| всaиaыoрoУ с лpaрсП oА—eохoУ, зУьзщэсxcз йaccсУaйс (хсик oлpaрсбeрркx йaccсУoУ, иoвхсик, оoрcхaрхк, иepeйeрркe, cслрaьм Фaжьк). B хaАьсПe 4 вaр cисcoо иpeвoиpeвeьeрркx aхpсАyхoУ вьз oА—eохoУ. гьз сx вeйoрcхpaПсс (иpсйepк У хaАьсПe 4) ыaУeвeй: type arr_1 is array (integer range , integer range ) of integer; variable mat: arr_l (1 to 3,9 downto 6); B ыaУсcсйocхс oх хoлo, оaоoж сйeррo всaиaыoр срвeоca йрoлoйepрoй йaccсУe рac срхepecyeх, сcиoьмыyeхcз иapaйeхp n, ырaбeрсe оoхopoлo ecхм иoысПсз всaиaыoрa У oА—зУьeрсс. Taо, вьз йaccсУa "mat" ырaбeрсe n, paУрoe 1, yоaыкУaeх рa всaиaыoр "1 to ф", a ырaбeрсe n, paУрoe 2, рa всaиaыoр "9 downto 6". TaАьсПa 4 BoыУpaэaeйaз Πpсйepк Тйз aххpсАyхa Tси иpeФсоca срФopйaПсз

’left[(n)]

йaccсУ

ырaбeрсe

'right[(n)]

йaccсУ

ырaбeрсe

’high[(n)]

йaccсУ

ырaбeрсe

'low[(n)]

йaccсУ

ырaбeрсe

’length[(n)]

йaccсУ

ырaбeрсe

'range[(n)] йaccсУ 'reverse_range[(n) йaccсУ ]

всaиaыoр всaиaыoр

matХleft(1)=1 mat'left(2)=9 mat'right(1)=3 mat'right(2) = 6 mat'high(1)=3 matХhigh(2) = 9 mat'low(1)=1 mat'low(2) = 6 matХlength(1)=3 mat'length(2)=4 mat'range(1) ecхм: 1 to 3 matХreverserange( 1) ecхм: 3 downto 1

AхpсАyх 'left(n) Уквaeх ьeУyщ лpaрсПy ыaвaррoлo иapaйeхpoй n всaиaыoрa. AхpсАyх 'right(n) Уквaeх иpaУyщ лpaрсПy ыaвaррoлo иapaйeхpoй n всaиaыoрa. AхpсАyх 'high(n) Уквaeх Уepxрщщ лpaрсПy ыaвaррoлo иapaйeхpoй n всaиaыoрa. AхpсАyх 'low(n) Уквaeх рсОрщщ лpaрсПy ыaвaррoлo иapaйeхpoй n всaиaыoрa. AхpсАyх 'length(n) Уквaeх вьсрy ыaвaррoлo иapaйeхpoй n всaиaыoрa. length(n) = 'high(n) - 'low(n) + 1. AхpсАyх 'range(n) Уквaeх ыaвaрркж иapaйeхpoй n всaиaыoр. Peыyьмхaх рe зУьзeхcз cхpoоoж с eлo йoОрo сcиoьмыoУaхм оaо oлpaрсбсхeьм всaиaыoрa (range_attribut_name У оoрcхpyоПсс range_costraint) сьс оaо УкpaОeрсe, cхoзэee иocьe in У cxeйe Псоьa: for test in mat'range(l) loop ... Єхo єоУсУaьeрхрo: for test in 1 to3 loop ... AхpсАyх 'reverse_range(n) Уквaeх всaиaыoр, oАpaхркж yоaыaррoйy. Peыyьмхaх хaоОe рe зУьзeхcз cхpoоoж, с eлo йoОрo сcиoьмыoУaхм оaо oлpaрсбсхeьм всaиaыoрa сьс оaо УкpaОeрсe, cхoзэee иocьe in У cxeйe Псоьa: for test in mat'reverse_range(l) loop ... Єхo єоУсУaьeрхрo: for test in 3 downto 1 loop... 10.1.3. AаpпЦyае фян Цяoлoо п apxпаeлаypыеx аeя ycаpo–cао гьз oиpeвeьeрсз, зУьзeхcз ьс Аьoо сьс apxсхeохypрoe хeьo ycхpoжcхУa бсcхo cхpyохypркй oисcaрсeй (У рeй рeх иapaььeьмрoлo иpсcУoeрсз ырaбeрсз cслрaьy) сьс бсcхo иoУeвeрбecосй (У рeй рeх oАpaэeрсз о оoйиoрeрхaй), cьyОaх вУa aхpсАyхa 'structure с 'behavior, cooхУeхcхУeррo. ΠpeФсоcoй y рсx йoОeх Акхм йeхоa Аьoоa сьс сйз ycхpoжcхУa c yоaыaрсeй сйeрс eлo apxсхeохypрoлo хeьa. фрaбeрсe єхсx aхpсАyхoУ boolean. B VHDL'92 єхс aхpсАyхк aррyьсpoУaрк сы-ыa оpaжрe Peвоoлo сx сcиoьмыoУaрсз. 10.1.4. AаpпЦyае фян cпчыaяoо Єхс aхpсАyхк сcиoьмыyщхcз вьз aрaьсыa сыйeрeрсж cслрaьoУ Уo Уpeйз йoвeьсpoУaрсз. C сx иoйoэмщ йoОрo "иoжйaхм" рyОркж Фpoрх cслрaьa, иpoоoрхpoьсpoУaхм вьсхeьмрocхм сйиyьмca с иp. ΠpeФсоcaйс y єхсx aхpсАyхoУ йoлyх Акхм хoьмоo cслрaьк. гьз иoьрoУecрoлo сcиoьмыoУaрсз єхсx aхpсАyхoУ УaОрo ырaхм рe хoьмоo оaосe хсик ырaбeрсж oрс УoыУpaэaщх, рo с сx poв, хo ecхм бхo oрс coАoж иpeвcхaУьзщх. Taо, рaиpсйep, aхpсАyх 'delayed(t) иpeвcхaУьзeх coАoж cслрaь, eлo

иapaйeхp - єхo рeoхpсПaхeьмрoe Уpeйз (type time), хси peыyьмхaхa coУиaвaeх c хсиoй иpeФсоca. BУeвeй pзв иoрзхсж вьз pacоpкхсз ceйaрхсос aхpсАyхoУ. ©соь йoвeьсpoУaрсз paАoхa cсcхeйк йoвeьсpoУaрсз У хeбeрсe Уcex схepaПсж (вeьмх ыaвepОeо) У хeоyэeж Ha_coвepОaрсe ΠpeвьoОeрсз

Уpeйeррoж хoбоe. AохсУрocхм (active) cслрaьa - Фaох иepeУкбсcьeрсз ырaбeрсз cслрaьa У хeоyэeж Уpeйeррoж хoбоe. CoАкхсe (event) - Фaох сыйeрeрсз ырaбeрсз cслрaьa У хeоyэeж Уpeйeррoж хoбоe. Cслрaь cиoоoeр (quiet) У хeбeрсe Уpeйeрс t - oхcyхcхУсe Фaохa иepeУкбсcьeрсз ырaбeрсз cслрaьa У хeбeрсe Уpeйeрс t. Cслрaь cхaАсьeр (stable) У хeбeрсe Уpeйeрс t - oхcyхcхУсe Фaохa сыйeрeрсз ырaбeрсз cслрaьa У хeбeрсe Уpeйeрс t. B хaАьсПe 5 вaр cисcoо иpeвoиpeвeьeрркx aхpсАyхoУ вьз cслрaьoУ. Paccйoхpсй хaАьсПy 5. Πycхм S - иpeФсоc aхpсАyхa; At - ырaбeрсe aхpсАyхa; Now - ырaбeрсe хeоyэeлo Уpeйeрс йoвeьсpoУaрсз; S(T) -ырaбeрсe S У йoйeрх Уpeйeрс T; Dt Уpeйeррoж Зaл йoвeьсpoУaрсз, рaиpсйep, Ifs, 0.1ns с вp. TaАьсПa 5 Тйз Poв BoыУpaэae Πpсйeбaрсe хси aхpсАyхa aхpсАyхa йкж вaрркx 'active Function Boolean At = true, ecьс S aохсУeр 'delayed[(t)] Signal Tси At = S(Now -1) иpeФсоca Хevent Function Boolean At = true, ecьс S(Now) ¹ S(Now-Dt) 'last_active Function Time At = Уpeйз, иpoЗeвЗee иocьe иocьeврeж aохсУсыaПсс S ’last_event Function Time At = Уpeйз, иpoЗeвЗee иocьe иocьeврeлo сыйeрeрсз ырaбeрсз S 'last_value Function Tси At = иpeвквyэee ырaбeрсe S, иpeФсоca oхьсбрoe oх хeоyэeлo ырaбeрсз S(Now) 'quiet[(t)] Signal Boolean At = true, ecьс S cиoоoeр 'stable[(t)] Signal Boolean At = true, ecьс S cхaАсьeр 'transaction Signal Bit At := not At оaОвкж paы, оoлвa S'active = true фрaбeрсз aхpсАyхoУ Укбсcьзщхcз У оoрПe Псоьa йoвeьсpoУaрсз, хo ecхм иocьe вocхсОeрсз ycхoжбсУoлo cocхoзрсз У хeоyэeж Уpeйeррoж хoбоe Now. Haбaьмрoe ырaбeрсe aхpсАyхa 'transaction ycхaрaУьсУaeхcз иo yйoьбaрсщ, хo ecхм У '0'. OАpaыoУaрркж У peыyьмхaхe сcиoьмыoУaрсз хaосx aхpсАyхoУ, оaо: 'delayed(t), 'quiet(t), 'stable(t), 'transaction cслрaь рe зУьзeхcз иoьрoПeрркй oА—eохoй зыкоa - eйy рeьмыз иpсcУaсУaхм (рaырaбaхм) coАcхУeрркe ырaбeрсз. фрaбeрсз єхсx cслрaьoУ йoлyх хoьмоo бсхaхмcз, рaиpсйep, иpсcyхcхУoУaхм У cисcоe бyУcхУсхeьмрocхс иpoПeccoУ с oиepaхopa wait, Уxoвсхм У УкpaОeрсз с х.в. Ecьс сйз иpeФсоca Укбсcьзeхcз бepeы УкpaОeрсз, хo Уce єхс УкpaОeрсз вoьОрк Акхм cхaхсбecосйс. Cхaхсбecосй УкpaОeрсeй вoьОeр Акхм с иapaйeхp t У aхpсАyхax 'delayed(t), 'quiet(t), 'stable(t). Πpсйep (cй. pсc. 2). entity attribut_ex is port (clk: bit; sig : out bit);

end attribut_ex; architecture arch_ex of attribut_ex is begin process (elk) -- иpoПecc aохсУсысpyeхcз иpс сыйeрeрсс cслрaьa "clk" variable x : bit :='0'; begin Ha_coвepОaрсe ΠpeвьoОeрсз

if clk='1' then x := not x; end if; sig