การออกแบบ VLSI - บทนำ VHDL

VHDL ย่อมาจากภาษาอธิบายฮาร์ดแวร์วงจรรวมความเร็วสูงมาก เป็นภาษาโปรแกรมที่ใช้ในการสร้างแบบจำลองระบบดิจิทัลโดยกระแสข้อมูลรูปแบบพฤติกรรมและโครงสร้างของการสร้างแบบจำลอง ภาษานี้เปิดตัวครั้งแรกในปี 1981 สำหรับกระทรวงกลาโหม (DoD) ภายใต้โครงการ VHSIC

อธิบายการออกแบบ

ใน VHDL เอนทิตีถูกใช้เพื่ออธิบายโมดูลฮาร์ดแวร์ สามารถอธิบายเอนทิตีได้โดยใช้

  • การประกาศเอนทิตี
  • Architecture
  • Configuration
  • การประกาศแพ็กเกจ
  • ตัวบรรจุภัณฑ์

มาดูกันว่ามีอะไรบ้าง?

การประกาศเอนทิตี

กำหนดชื่อสัญญาณอินพุตเอาต์พุตและโหมดของโมดูลฮาร์ดแวร์

Syntax -

entity entity_name is
   Port declaration;
end entity_name;

การประกาศเอนทิตีควรเริ่มต้นด้วย "เอนทิตี" และลงท้ายด้วยคีย์เวิร์ด "end" ทิศทางจะเป็นอินพุตเอาต์พุตหรืออินพุต

ใน พอร์ตสามารถอ่านได้
ออก สามารถเขียนพอร์ตได้
Inout พอร์ตสามารถอ่านและเขียนได้
กันชน พอร์ตสามารถอ่านและเขียนได้เพียงแหล่งเดียว

Architecture -

สถาปัตยกรรมสามารถอธิบายได้โดยใช้รูปแบบโครงสร้างกระแสข้อมูลพฤติกรรมหรือแบบผสม

Syntax -

architecture architecture_name of entity_name 
architecture_declarative_part;

begin
   Statements;
end architecture_name;

ที่นี่เราควรระบุชื่อเอนทิตีที่เรากำลังเขียนเนื้อหาสถาปัตยกรรม คำสั่งสถาปัตยกรรมควรอยู่ในคีย์เวิร์ด "begin" และ "énd" ส่วนประกาศสถาปัตยกรรมอาจมีตัวแปรค่าคงที่หรือการประกาศส่วนประกอบ

การสร้างแบบจำลองกระแสข้อมูล

ในรูปแบบการสร้างแบบจำลองนี้การไหลของข้อมูลผ่านเอนทิตีจะแสดงโดยใช้สัญญาณพร้อมกัน (ขนาน) คำสั่งพร้อมกันใน VHDL คือ WHEN และ GENERATE

นอกจากนี้ยังสามารถใช้การกำหนดโดยใช้ตัวดำเนินการเท่านั้น (AND, NOT, +, *, sll และอื่น ๆ ) เพื่อสร้างโค้ด

สุดท้ายการมอบหมายแบบพิเศษที่เรียกว่า BLOCK สามารถใช้ในรหัสประเภทนี้ได้เช่นกัน

ในรหัสพร้อมกันสามารถใช้สิ่งต่อไปนี้ได้ -

  • Operators
  • คำสั่ง WHEN (WHEN / ELSE หรือ WITH / SELECT / WHEN);
  • สร้างคำสั่ง;
  • คำสั่ง BLOCK

การสร้างแบบจำลองพฤติกรรม

ในรูปแบบการสร้างแบบจำลองนี้ลักษณะการทำงานของเอนทิตีเป็นชุดคำสั่งจะดำเนินการตามลำดับตามลำดับที่ระบุ เฉพาะคำสั่งที่อยู่ใน PROCESS, FUNCTION หรือ PROCEDURE เท่านั้นที่เป็นลำดับ

กระบวนการฟังก์ชั่นและกระบวนการเป็นส่วนเดียวของโค้ดที่ดำเนินการตามลำดับ

อย่างไรก็ตามโดยรวมแล้วบล็อกใด ๆ เหล่านี้ยังคงเกิดขึ้นพร้อมกับข้อความอื่น ๆ ที่วางไว้ภายนอก

สิ่งสำคัญอย่างหนึ่งของรหัสพฤติกรรมคือไม่ จำกัด เฉพาะตรรกะแบบลำดับ อันที่จริงด้วยมันเราสามารถสร้างวงจรต่อเนื่องและวงจรรวมได้

ข้อความแสดงพฤติกรรมคือ IF, WAIT, CASE และ LOOP VARIABLES ถูก จำกัด ด้วยและควรใช้ในโค้ดต่อเนื่องเท่านั้น VARIABLE ไม่สามารถเป็น global ได้ดังนั้นจึงไม่สามารถส่งผ่านค่าได้โดยตรง

การสร้างแบบจำลองโครงสร้าง

ในการสร้างแบบจำลองนี้เอนทิตีถูกอธิบายว่าเป็นชุดของส่วนประกอบที่เชื่อมต่อกัน คำสั่งสร้างอินสแตนซ์คอมโพเนนต์เป็นคำสั่งที่เกิดขึ้นพร้อมกัน ดังนั้นลำดับของข้อความเหล่านี้จึงไม่สำคัญ รูปแบบโครงสร้างของการสร้างแบบจำลองอธิบายเฉพาะการเชื่อมต่อโครงข่ายของส่วนประกอบ (ดูเป็นกล่องดำ) โดยไม่ได้หมายความถึงพฤติกรรมใด ๆ ของส่วนประกอบเองหรือของเอนทิตีที่รวมกันเป็นตัวแทน

ในการสร้างแบบจำลองโครงสร้างเนื้อหาของสถาปัตยกรรมประกอบด้วยสองส่วนคือส่วนที่ประกาศ (ก่อนที่คำหลักจะเริ่มต้น) และส่วนของคำสั่ง (หลังจากคำหลักเริ่มต้น)

การดำเนินการลอจิก - และประตู

X Z
0 0 0
0 1 0
1 0 0
1 1 1

VHDL Code:
Library ieee;
use ieee.std_logic_1164.all;

entity and1 is
   port(x,y:in bit ; z:out bit);
end and1;

architecture virat of and1 is
begin
   z<=x and y; 
end virat;

รูปคลื่น

Logic Operation - หรือ Gate

X Z
0 0 0
0 1 1
1 0 1
1 1 1

VHDL Code: 
Library ieee; 
use ieee.std_logic_1164.all;  

entity or1 is
   port(x,y:in bit ; z:out bit); 
end or1; 
 
architecture virat of or1 is
begin
   z<=x or y; 
end virat;

รูปคลื่น

Logic Operation - ไม่ใช่ประตู

X
0 1
1 0

VHDL Code:
  
Library ieee; 
use ieee.std_logic_1164.all; 
 
entity not1 is
   port(x:in bit ; y:out bit); 
end not1; 
 
architecture virat of not1 is
begin
   y<=not x;
end virat;

รูปคลื่น

Logic Operation - NAND Gate

X z
0 0 1
0 1 1
1 0 1
1 1 0

VHDL Code:
  
Library ieee; 
use ieee.std_logic_1164.all; 

entity nand1 is
   port(a,b:in bit ; c:out bit); 
end nand1; 
 
architecture virat of nand1 is
begin
   c<=a nand b; 
end virat;

รูปคลื่น

Logic Operation - NOR Gate

X z
0 0 1
0 1 0
1 0 0
1 1 0

VHDL Code: 
 
Library ieee; 
use ieee.std_logic_1164.all; 
 
entity nor1 is
   port(a,b:in bit ; c:out bit); 
end nor1; 
 
architecture virat of nor1 is
begin
   c<=a nor b;
end virat;

รูปคลื่น

Logic Operation - XOR Gate

X Z
0 0 1
0 1 1
1 0 1
1 1 0

VHDL Code: 
 
Library ieee; 
use ieee.std_logic_1164.all;
  
entity xor1 is
   port(a,b:in bit ; c:out bit); 
end xor1;
  
architecture virat of xor1 is
begin
   c<=a xor b; 
end virat;

รูปคลื่น

การทำงานลอจิก - ประตู X-NOR

X Z
0 0 1
0 1 1
1 0 1
1 1 0

VHDL Code: 
 
Library ieee; 
use ieee.std_logic_1164.all; 

entity xnor1 is
   port(a,b:in bit ; c:out bit); 
end xnor1; 
 
architecture virat of xnor1 is
begin
   c<=not(a xor b); 
end virat;

รูปคลื่น