This shows you the differences between two versions of the page.
|
apm:laboratoare:00:continut [2024/02/29 15:06] 127.0.0.1 external edit |
apm:laboratoare:00:continut [2026/09/23 19:33] (current) daniel.dosaru [Vivado] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ==== Vivado ==== | ==== Vivado ==== | ||
| - | Vivado Design Suite înlocuiește programul folosit la CN1: ISE Design Suite. | + | [[https://en.wikipedia.org/wiki/Xilinx_Vivado | Vivado Design Suite]] e un pachet software dezvoltat de compania Xilinx ([[https://www.amd.com/en/corporate/xilinx-acquisition.html|achiziționată]] de AMD) pentru a programa [[https://ocw.cs.pub.ro/courses/soc/laboratoare/03#fpga-uri|FPGA]]-uri. |
| - | + | ||
| - | [[https://en.wikipedia.org/wiki/Xilinx_Vivado | Vivado Design Suite]] e un pachet software dezvoltat de compania Xilinx ([[https://www.amd.com/en/corporate/xilinx-acquisition|achiziționată]] de AMD) pentru a programa [[https://ocw.cs.pub.ro/courses/cn1/laboratoare/03bis#fpga-uri|FPGA]]-uri. | + | |
| | | ||
| Vivado permite editarea, simularea și sintetizarea codului de descriere hardware ([[https://en.wikipedia.org/wiki/Hardware_description_language|HDL]]) pe plăcuța [[https://digilent.com/reference/programmable-logic/nexys-a7/reference-manual?redirect=1 | Nexys A7]] folosită în laborator. | Vivado permite editarea, simularea și sintetizarea codului de descriere hardware ([[https://en.wikipedia.org/wiki/Hardware_description_language|HDL]]) pe plăcuța [[https://digilent.com/reference/programmable-logic/nexys-a7/reference-manual?redirect=1 | Nexys A7]] folosită în laborator. | ||
| Line 17: | Line 15: | ||
| **Modulul** este unitatea de bază a limbajului Verilog. Definește interfața (intrările și ieșirile) și comportamentul unui circuit electronic. Putem descrie comportamentul unui modul în trei moduri: | **Modulul** este unitatea de bază a limbajului Verilog. Definește interfața (intrările și ieșirile) și comportamentul unui circuit electronic. Putem descrie comportamentul unui modul în trei moduri: | ||
| - | * **Descriere structurală**: specificând structura internă a modulului folosind primitive și module | + | * **Descriere structurală**: specificând structura internă a modulului folosind primitive (porți logice) și alte module |
| * **Descriere la nivel flux de date**: specificând relațiile dintre intrări și ieșiri sub forma unor expresii | * **Descriere la nivel flux de date**: specificând relațiile dintre intrări și ieșiri sub forma unor expresii | ||
| * **Descriere procedurală**: specificând funcționarea în mod algoritmic | * **Descriere procedurală**: specificând funcționarea în mod algoritmic | ||
| Line 39: | Line 37: | ||
| În Verilog putem folosi două tipuri de date: | În Verilog putem folosi două tipuri de date: | ||
| - | * ''**wire**'': reprezintă conexiuni fizice între componentele, se folosesc pentru transmisia semnalelor și nu au capacitate de reținere a informației | + | * ''**wire**'': reprezintă conexiuni fizice între componente, se folosesc pentru transmisia semnalelor și nu au capacitate de reținere a informației |
| * ''**reg**'': folosite pentru a stoca date, care persistă chiar dacă registrul este deconectat | * ''**reg**'': folosite pentru a stoca date, care persistă chiar dacă registrul este deconectat | ||
| Line 74: | Line 72: | ||
| </code> | </code> | ||
| - | Dacă alegem descrierea procedurală avem la dispoziție doua blocuri speciale: | + | Dacă alegem descrierea procedurală avem la dispoziție două blocuri speciale: |
| * ''**initial**'': va fi executat o singură dată și se folosește în simulări pentru inițializarea circuitului. Acest bloc nu ajunge să fie sintetizat în circuitul propriu-zis. | * ''**initial**'': va fi executat o singură dată și se folosește în simulări pentru inițializarea circuitului. Acest bloc nu ajunge să fie sintetizat în circuitul propriu-zis. | ||
| * ''**always**'': va fi executat de fiecare dată la apariția unui eveniment. Este similar funcției de tratare a unei întreruperi - când întreruperea apare în sistem, funcția se execută. ''@(*)'' este echivalent cu ''orice eveniment''. | * ''**always**'': va fi executat de fiecare dată la apariția unui eveniment. Este similar funcției de tratare a unei întreruperi - când întreruperea apare în sistem, funcția se execută. ''@(*)'' este echivalent cu ''orice eveniment''. | ||
| - | + | <note> | |
| - | Vă recomandăm și acest curs de la CN1: [[https://ocw.cs.pub.ro/courses/cn1/cursuri/03|Cursul 3. Introducere în Verilog]] | + | Pentru o listă completă a blocurilor procedurale ce pot fi folosite în limbajul verilog, consultați [[https://ocw.cs.pub.ro/courses/soc/laboratoare/02#descrierea_la_nivel_procedural|laboratorul 2 de la SOC]]. |
| + | </note> | ||
| ==== Logică combinațională și secvențială ==== | ==== Logică combinațională și secvențială ==== | ||
| Line 91: | Line 90: | ||
| {{ :apm:laboratoare:00:circuit_secvential.png?500 |Circuit Secvențial}} | {{ :apm:laboratoare:00:circuit_secvential.png?500 |Circuit Secvențial}} | ||
| + | <note> | ||
| + | Pentru mai multe informații despre circuitele logice, consultați [[https://ocw.cs.pub.ro/courses/soc/laboratoare/00#circuite_logice_combinationale|laboratorul 0 de SOC]]. | ||
| + | </note> | ||
| ==== Automate cu stări finite (FSM) ==== | ==== Automate cu stări finite (FSM) ==== | ||
| Line 104: | Line 106: | ||
| <note tip> | <note tip> | ||
| - | [[https://ocw.cs.pub.ro/courses/cn1/laboratoare/04#pasii_pentru_realizarea_unui_fsm_in_verilog|Cum implementez un automat cu stări finite în Verilog?]] | + | [[https://ocw.cs.pub.ro/courses/soc/laboratoare/04#pasii_pentru_realizarea_unui_fsm_in_verilog|Cum implementez un automat cu stări finite în Verilog?]] |
| + | </note> | ||
| + | |||
| + | <note> | ||
| + | Pentru mai multe informații despre FSM, consultați [[https://ocw.cs.pub.ro/courses/soc/laboratoare/04|laboratorul 4 de SOC]]. | ||
| </note> | </note> | ||