Kā lietot VHDL komponentus, lai izveidotu tīru hierarhisku dizainu

300 Lakes Rally 2012 (Jūlijs 2019).

$config[ads_text] not found
Anonim

Kā lietot VHDL komponentus, lai izveidotu tīru hierarhisku dizainu


Šajā rakstā ir definēti VHDL komponenti, aprakstīta komponentu deklarācija un sniegti piemēri, kā izmantot jūsu kodā VHDL komponentus. Tas attiecas arī uz "for-generate" paziņojumu un tā izmantojumu.

Šajā rakstā tiks apspriesta VHDL komponentu izmantošana. Komponenti ļauj mums sadalīt lielu dizainu mazākās un vairāk vadāmās daļās. Turklāt, ja mēs izmantosim šo iespēju, kods būs lasāmāks. Tāpat mēs apskatīsim paziņojumu "for-generate", kas dažreiz var ievērojami vienkāršot kodu.

Lai apspriestu VHDL komponentu izmantošanas priekšrocības, apsveram rakstīt VHDL kodu četrciparu papildinātājam.

Četru bitu papildinātāja shēma

Lai pievienotu divus n-bitu skaitļus, mēs pievienojam katras bitu pozīcijas ciparus no labās uz kreiso pusi. Tas dod mums summu un veic katru bitu pozīciju. Katrā slejā ražotais pārnesums jāpievieno nākamās bitu pozīcijas cipariem. Tas nozīmē, ka divkāršai pievienošanai ir vajadzīga ķēde, kas var pievienot trīs bitus.

Šai shēmai, ko sauc par pilnu papildinātāju (FA), ir šāda patiesību tabula:

Šeit $$ A_i $$ un $ $ B_i $$ ir i- as kolonnas cipari, un $$ C_i $$ ir atlikums, kas iegūts no iepriekšējās slejas. Pievienojot šos trīs bitus, tiek piešķirta summa $ $ S_i $ $ un jāveic $ $ C_ (i + 1) $ $. $$ C_ (i + 1) $ $ tiks pievienoti nākamās bitu pozīcijas cipariem. Tādējādi četrciparu papildinātājam, kas pievieno $ $ A_3A_2A_1A_0 $ $ ar $ $ B_3B_2B_1B_0 $$, mums ir šāda diagramma:

1. attēls . Četru bitu bināro papildinātāju blokshēma. Attēla pieklājīgi no digitālā dizaina.

VHDL apraksts par pilnu papildinātāju un četru bitu papildinātāju

Pamatojoties uz pilna papildinātāja patiesības tabulu, mēs iegūstam šādus izteicienus:

$ $ S_i = A_i \ oplus B_i \ oplus C_i $$

$ $ C_ (i + 1) = \ big (A_i \ oplus B_i \ big) C_i + A_iB_i $$

Tātad pilnā papildinātāja VHDL kods ir:

1. lappuse

 1 library IEEE; 2 use IEEE.STD_LOGIC_1164.ALL; 3 entity FA is 4 port(a, b, c_in : in std_logic; 5 s, c_out : out std_logic); 6 end FA; 7 architecture Behavioral of FA is 8 begin 9 s <= a xor b xor c_in; 10 c_out <= ( (a xor b) and c_in ) or (a and b); 11 end Behavioral; 

a un b ir i- as kolonnas cipari un c_in ir pilnā papildinātāja ievades padeve . Šo trīs bitu pievienošana dod summu, s un veikšanu, c_out . ISE simulācija šim kodam ir parādīta 2. attēlā.

2. attēls

Mēs varam atkārtot 9. un 10. līniju, lai paplašinātu pilnā papildinātāja VHDL kodu četrciparu papildinājuma VHDL kodā:

2. lappuse

 1 library IEEE; 2 use IEEE.STD_LOGIC_1164.ALL; 3 entity Four_Bit_Adder is 4 Port ( a : in STD_LOGIC_VECTOR (3 downto 0); 5 b : in STD_LOGIC_VECTOR (3 downto 0); 6 c0 : in STD_LOGIC; 7 s : out STD_LOGIC_VECTOR (3 downto 0); 8 c4 : out STD_LOGIC); 9 end Four_Bit_Adder; 10 architecture Behavioral of Four_Bit_Adder is 11 signal c3, c2, c1: std_logic; 12 begin 13 -- The first full adder 14 s(0) <= a(0) xor b(0) xor c0; 15 c1 <= ( (a(0) xor b(0)) and c0 ) or (a(0) and b(0)); 16 -- The second full adder 17 s(1) <= a(1) xor b(1) xor c1; 18 c2 <= ( (a(1) xor b(1)) and c1 ) or (a(1) and b(1)); 19 -- The third full adder 20 s(2) <= a(2) xor b(2) xor c2; 21 c3 <= ( (a(2) xor b(2)) and c2 ) or (a(2) and b(2)); 22 -- The fourth full adder 23 s(3) <= a(3) xor b(3) xor c3; 24 c4 <= ( (a(3) xor b(3)) and c3 ) or (a(3) and b(3)); 25 end Behavioral; 

ISE simulācija šim kodam ir parādīta 3. attēlā.

3. attēls

Tomēr pastāv alternatīva pieeja, kas var novest pie tīrākas koda izveides. Šajā gadījumā mēs definējam pilnu papildinātāju kā apakšslēgumu un četrkārtīgi to izmanto mūsu kodā. VHDL leksikons vietā "apakšsistēma" lieto vārdu "komponents".

VHDL komponentu izmantošana

Detaļas deklarācija

Lai izmantotu pilnu papildinātāja bloku kā komponentu mūsu kodā, mēs varam saglabāt saraksta kodu 1 kā atsevišķu failu, proti, FA.vhd mūsu projektā.

Tagad mums jānorāda, ka FA.vhd aprakstītā ķēde ir mūsu galvenā koda sastāvdaļa. To sauc par komponentu deklarāciju. Lai deklarētu FA komponentu mūsu galvenajā kodā, mums jāpievieno šādas rindiņas:

 component FA is port(a, b, c_in : in std_logic; s, c_out : out std_logic); end component; 

Tas norāda sintēzes programmatūru, ka FA ir komponents ar trim ievadiem ( a, b, c_in ) un diviem izejas ( s, c_out ). Tas arī precizē datu veidu šiem ieguldījumiem un rezultātiem.

Kā redzat, šīs informācijas daļas ir tieši tādas pašas kā tās, ko sniedz VHDL FA daļas apraksts "uzņēmums" (1. saraksta 1. līnija).

Būtībā komponentu deklarācija apraksta komponenta saskarni ar savu vidi (sk. 4. attēlu).

4. attēls

Component Instantiation

Tagad, kad tiek deklarēts FA komponents, mēs varam to izmantot (vai izmēģināt). Komponenta modelēšana nosaka komponenta savstarpējo savienojumu ar citām sistēmas daļām.

Piemēram, 1. attēlā aplūkojiet pareizo FA. Šajā gadījumā, kā parādīts 5. attēlā, augšējā līmeņa ķēdes A0, B0, C0, S0 un C1 jāpievieno a, b, c_in, s un c_out no labās puses FA.

5. attēls

Mēs izmantojam paziņojumu par "ostas karti", lai aprakstītu komponenta starpsavienojumus augstākā līmeņa ķēdē. Piemēram:

 u1: FA port map (a => A0, b => B0, c_in => C0, s => S0, c_out => C1); 

Šeit u1 ir patvaļīgs etiķis šim komponenta modelim, un FA norāda komponenta nosaukumu. Apzīmējums a => A0 nozīmē, ka FA sastāvdaļas ports ir savienots ar A0 no galvenās ķēdes. Tāpat mēs varam izmantot šādu kodu, lai aprakstītu kreiso FA 1. attēlā.

 u4: FA port map (a => A3, b => B3, c_in => C3, s => S3, c_out => C4); 

Mēs varam uzrakstīt četrciparu papildinātāja VHDL aprakstu šādi:

Listing 3

 1 library IEEE; 2 use IEEE.STD_LOGIC_1164.ALL; 3 entity Four_Bit_Adder is 4 Port ( a : in STD_LOGIC_VECTOR (3 downto 0); 5 b : in STD_LOGIC_VECTOR (3 downto 0); 6 cin : in STD_LOGIC; 7 s : out STD_LOGIC_VECTOR (3 downto 0); 8 cout : out STD_LOGIC); 9 end Four_Bit_Adder; 10 architecture Behavioral of Four_Bit_Adder is 11 component FA is 12 port (a, b, c_in: in std_logic; 13 s, c_out: out std_logic); 14 end component; 15 signal c: std_logic_vector(4 downto 0); 16 begin 17 u1: FA port map (a => a(0), b => b(0), c_in => c(0), s => s(0), c_out => c(1)); 18 u2: FA port map (a => a(1), b => b(1), c_in => c(1), s => s(1), c_out => c(2)); 19 u3: FA port map (a => a(2), b => b(2), c_in => c(2), s => s(2), c_out => c(3)); 20 u4: FA port map (a => a(3), b => b(3), c_in => c(3), s => s(3), c_out => c(4)); 21 c(0) <= cin; 22 cout <= c(4); 23 end Behavioral; 

Ņemiet vērā, ka detaļu deklarācija ir iekļauta "Four_Bit_Adder" arhitektūrā pirms atslēgvārda "start". Iepriekš minētā koda ISE simulācija parādīta 6. attēlā.

6. attēls

VHDL "For-Generate" paziņojums

Shematisks apraksts, kas aprakstīts 3. saraksta 17.-20. Ailē, parādīts 7. attēlā.

7. attēls

Šajā struktūrā ir noteikts modelis. Izmantojot indeksu i, sākot no 0 līdz 3, mēs varam aprakstīt visus šos elementus ar vienu paziņojumu:

 uut: FA port map (a => a(i), b => b(i), c_in => c(i), s => s(i), c_out => c(i+1)); 

kur i = 0 dod labāko FA instanciāciju (3. saraksta 17. līnija), i = 3 dod kreiso FA instanciāciju (3. saraksta 20. līnija) un tā tālāk. Lai aprakstītu šādas atkārtotas struktūras, VHDL ļauj mums izmantot "for-generate" paziņojumu. Paziņojums "for-generate", kurā aprakstīts 7. attēls, ir:

 1 gen: for i in 0 to 3 generate 2 uut: FA port map (a => a(i), b => b(i), c_in => c(i), s => s(i), c_out => c(i+1)); 3 end generate; 

Šeit gen ir patvaļīgs etiķete "for-generate" paziņojumam, un i, kas ir starp atslēgvārdiem un iekšējiem, ir identifikators, kas norāda pārrakstīšanās atkārtošanos skaitu, kas atrodas "for-generate" struktūrā.

Šajā piemērā diapazons i ir no 0 līdz 3. Tas nozīmē, ka 2. rindas ziņojums tiks izpildīts četras reizes ar i = 0, 1, 2 un 3 . Tā kā es ņemu vērtības no 0 līdz 3, tiek izveidotas 3. saraksta 17.-20. Tālāk norādītais kods izmanto "for-generate" paziņojumu, lai ieviestu četru bitu papildinājumu:

Listing 4

 1 library IEEE; 2 use IEEE.STD_LOGIC_1164.ALL; 3 entity Four_Bit_Adder is 4 Port ( a : in STD_LOGIC_VECTOR (3 downto 0); 5 b : in STD_LOGIC_VECTOR (3 downto 0); 6 cin : in STD_LOGIC; 7 s : out STD_LOGIC_VECTOR (3 downto 0); 8 cout : out STD_LOGIC); 9 end Four_Bit_Adder; 10 architecture Behavioral of Four_Bit_Adder is 11 component FA is 12 port (a, b, c_in: in std_logic; 13 s, c_out: out std_logic); 14 end component; 15 signal c: std_logic_vector(4 downto 0); 16 begin 17 gen: for i in 0 to 3 generate 18 uut: FA port map (a => a(i), b => b(i), c_in => c(i), s => s(i), c_out => c(i+1)); 19 end generate; 20 c(0) <= cin; 21 cout <= c(4); 22 end Behavioral; 

Secinājums

VHDL komponentu izmantošana ir noderīga metode, it īpaši, ja mums daudzas reizes jāīsteno tā pati funkcionalitāte vai ja apakšslēgums ir sarežģīts un tam ir garš VHDL apraksts. Turklāt, ja shēmai ir tāds pats modelis kā attēlā 7, mēs varam izmantot paziņojumu "for-generate", lai ievērojami vienkāršotu kodu.

Lai izprastu šo VHDL paziņojumu priekšrocības, tikai iedomājieties, cik koda nebūtu, ja mēs izveidotu 64 bitu papildinājumu, neizmantojot komponents un "for-generate" paziņojumus!

Lai apskatītu pilnu manu rakstu sarakstu, lūdzu, apmeklējiet šo lapu.