digital system engineering n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Digital System Engineering PowerPoint Presentation
Download Presentation
Digital System Engineering

Loading in 2 Seconds...

play fullscreen
1 / 40

Digital System Engineering - PowerPoint PPT Presentation


  • 165 Views
  • Uploaded on

Digital System Engineering. บทที่ 4. Hardware Description Language. 4.1 Introduction. การออกแบบวงจร Combinational หรือ Sequential โดยการเขียน Truth Table และลดรูป สมการบูลีน หรือใช้ Karnaugh Map เป็นวิธีการที่เสียเวลาและเกิดความผิดพลาดได้ง่าย

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Digital System Engineering' - tuwa


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
digital system engineering

Digital System Engineering

บทที่ 4.

Hardware Description Language

4 1 introduction
4.1 Introduction
  • การออกแบบวงจร Combinational หรือ Sequential โดยการเขียน Truth Table และลดรูปสมการบูลีน หรือใช้ Karnaugh Map เป็นวิธีการที่เสียเวลาและเกิดความผิดพลาดได้ง่าย
  • ต่อมาได้มีการพัฒนาโปรแกรมประเภท Computer-Aid Design (CAD) เพื่อช่วยให้การออกแบบวงจรมีประสิทธิภาพมากยิ่งขึ้น
  • โดยการเขียนฟังก์ชันการทำงานของวงจรโดยใช้ Hardware Description Language (HDL) จากนั้นจึงส่งให้ CAD ทำการออกแบบวงจรที่เหมาะสมที่สุดให้
  • ภาษา HDL ที่นิยมใช้กันมากมี 2 ภาษาคือ Verilogและ VHDL
  • Verilogและ VHDL ถูกออกแบบมาจากหลักการเดียวกันแต่มีโครงสร้างภาษาที่แตกต่างกัน ในบทนี้จะแสดงโปรแกรมของทั้ง 2 ภาษาเพื่อใช้เปรียบเทียบกัน
4 1 1 modules
4.1.1 Modules
  • Module หมายถึงบล็อกของ Hardware ที่มี Input และ Output
  • ตัวอย่างเช่น AND gate, Multiplexer และวงจรดิจิตอลของบทก่อนหน้านี้เป็นต้น
  • เราสามารถเขียนฟังก์ชันของ Module ได้ 2 วิธีคือ
    • Behavioral Model เป็นการอธิบายว่า Module ทำงานอย่างไร
    • Structural Model เป็นการอธิบายว่าจะสร้าง Module อย่างไร
4 1 1 modules1
4.1.1 Modules
  • ตัวอย่างที่ 4.1 แสดง Behavioral Description ของ

y=/a/b/c + a/b/c + a/bc

  • Verilog Module เริ่มจาก
    • ชื่อ Module
    • รายชื่อ input และ output
    • จากนั้นจึงเป็น assign ของสมการบูลีน

ของ Output

    • เครื่องหมาย ~ คือ NOT, & คือ AND และ | คือ OR
  • สัญญาณ Input และ Output เป็นตัวแปรแบบบูลีนคือมีค่า 0 หรือ 1 แต่เราสามารถกำหนดให้มีค่าเป็น Float หรือ Undefined Value ได้ซึ่งจะพูดถึงในหัวข้อที่ 4.2.8
4 1 1 modules2
4.1.1 Modules
  • โปรแกรม VHDL ประกอบด้วย 3 ส่วน
    • Library Clause

ส่วนนี้จะอธิบายในหัวข้อที่ 4.2.11

    • Entity Declaration

แสดงชื่อของ Module รายชื่อของ

Input และ Output

    • Architecture Body

กำหนดการทำงานของ Module

  • เราจะต้องกำหนดชนิดของสัญญาณ input และ output เป็น STD_LOGIC
4 1 1 modules3
4.1.1 Modules
  • ตัวแปรชนิด STD_LOGIC สามารถ

มีค่าเป็น 0 หรือ 1

  • และสามารถมีค่าเป็น Float หรือ

Undefined Value ซึ่งจะพูดถึงใน

หัวข้อที่ 4.2.8

  • ชนิดตัวแปรแบบ STD_LOGIC ถูก

กำหนดไว้ใน Library

IEEE.STD_LOGIC_1164

ทำให้เราต้องประกาศใช้ Library นี้ใน Library Clause

4 1 1 modules4
4.1.1 Modules
  • ภาษา VHDL ไม่มีการกำหนดลำดับการ

ทำงานของ Operator ต่างๆ เช่น

AND, NOT หรือ OR

  • ทำให้โปรแกรมไม่สามารถทราบว่าควรจะ

ทำงานของ Operator ใดก่อนหรือหลัง

  • ดังนั้นการเขียนสมการบูลีนในภาษา

VHDL จะต้องมีการใส่เครื่องหมาย

วงเล็บทุกครั้ง ดังแสดงในโปรแกรมตัวอย่าง

4 1 1 modules5
4.1.1 Modules
  • Module ของVerilogและ VHDL เป็นตัวอย่างที่ดีของหลักการ Modularity
  • Module ประกอบด้วย Input และ Output และทำงานตามฟังก์ชันที่กำหนดไว้
  • ตราบใดที่ Module ยังคงทำงานถูกต้อง ก็ไม่จำเป็นต้องรู้ว่าโปรแกรมของ Module ถูกเขียนอย่างไร
  • เราสามารถเขียนโปรแกรมภาษา Verilogและ VHDL เพื่อสร้าง Hardware ใดก็ได้ ดังนั้นการเลือกใช้ภาษาใด ขึ้นกับความต้องการของลูกค้า หรือขึ้นว่าโปรแกรมเดิมถูกเขียนด้วยภาษาใด
4 1 3 simulation synthesis
4.1.3 Simulation และ Synthesis
  • Simulation คือการป้อน Input ให้กับ Module และตรวจสอบ Output ของ Module เพื่อตรวจสอบความผิดพลาด
  • จากรูปแสดงการทำ Simulation ของsillyfunction
  • จะเห็นว่า y มีค่า Output เป็น True เมื่อ a, b, และ c มีค่าเป็น 000, 100 หรือ 101 ซึ่งทำงานถูกต้องตามที่ได้กำหนดไว้ในสมการบูลีน
4 1 3 simulation synthesis1
4.1.3 Simulation และ Synthesis
  • Synthesis คือการเปลี่ยน HDL เป็น Netlist

หรือการสร้างโลจิกเกทและสายไฟที่ใช้เชื่อมต่อ

โลจิกเกทแต่ละตัว

  • การ Synthesizer อาจจะมีขั้นตอนการทำ

Optimize หรือการลดขนาดของวงจรให้เล็กที่สุดเท่าที่จะทำได้

  • Netlistอาจอยู่ในรูปของ Text หรือ Schematic เพื่อให้ดูง่ายขึ้น
  • คำสั่งส่วนใหญ่ใน Verilogและ VHDL สามารถแปลงเป็น Hardware ได้ แต่ก็มีบางคำสั่งที่ไม่สามารถแปลงเป็น Hardware เช่นกัน
4 1 3 simulation synthesis2
4.1.3 Simulation และ Synthesis
  • โปรแกรม HDL สามารถแบ่งออกเป็น 2 กลุ่มคือ
    • Synthesizable Module คือส่วนที่ใช้กำหนด Hardware ของ Module
    • Testbenchคือส่วนที่เพิ่มเข้าไปเพื่อใช้ตรวจสอบการทำงานของ Module Testbenchถูกใช้ในการทำ Simulation เท่านั้น แต่จะไม่ถูก Synthesize ออกมาเป็นวงจรได้
4 1 3 simulation synthesis3
4.1.3 Simulation และ Synthesis
  • ข้อผิดพลาดส่วนใหญ่ของผู้เริ่มต้นเขียน HDL ใหม่ๆคือมักจะคิดว่าการเขียน HDL เหมือนกับการเขียนโปรแกรมคอมพิวเตอร์
  • แต่ที่จริงแล้วการเขียน HDL เปรียบเสมือนกับการออกแบบวงจรดิจิตอล
  • ดังนั้นถ้าผู้เขียน HDL ไม่เข้าใจการทำงานของวงจรดิจิตอลที่ออกแบบ จะทำให้ Module ที่เขียนออกมา
    • มีการทำงานที่ผิดพลาด
    • ทำให้ต้องใช้ Hardware มากเกินจำเป็น
    • ได้ Module ที่สามารถ Simulate ได้แต่ไม่สามารถ Synthesize ได้
  • ก่อนเขียน HDL ควรเขียนบล็อกของวงจร Combination, Register และ Finite State Machine และเขียนว่าแต่ละบล็อกเชื่อมต่อกันอย่างไร ในกระดาษเสียก่อน
4 1 3 simulation synthesis4
4.1.3 Simulation และ Synthesis
  • วิธีที่ดีที่สุดในการเรียน HDL คือการเรียนจากตัวอย่าง
  • วิธีที่ใช้ในการเขียนวงจรโลจิกต่างๆเรียกว่า Idiom
  • ในบทนี้จะเริ่มจากการศึกษาการเขียน Idiom ของแต่ละบล็อกที่ถูกต้อง
  • จากนั้นจึงศึกษาว่าจะนำเอาแต่ละบล็อกมาเชื่อมต่อกันอย่างไร
4 2 combinational logic 4 2 1 bitwise operators
4.2 Combinational Logic :4.2.1 Bitwise Operators
  • Bitwise Operator เป็นการออกแบบวงจรที่ Input 1 bit หรือหลายบิทโดยที่แต่ละบิทจะทำงานแยกจากกัน
  • ตัวอย่างที่ 4.2 วงจร Inverter สำหรับ

Bus ขนาด 4 บิท

  • a[3:0] หมายถึงบัสขนาด 4 บิท โดยเรียง

จากบิทที่สำคัญมากที่สุด (Most Significant Bit) ไปยังบิทที่มีความสำคัญน้อยที่สุ่ด(Least Significant Bit) คือ a[3], a[2], a[1] และ a[0] ตามลำดับ

  • เราเรียกการเรียงลักษณะนี้ว่า Little Endian
  • แต่ถ้าเรียง a[0], a[1], a[2], และ a[3] จะเรียกว่า Big Endianและเขียนเป็น a[0:3]
4 2 combinational logic 4 2 1 bitwise operators1
4.2 Combinational Logic :4.2.1 Bitwise Operators
  • สัญญาณบัสของ VHDL เป็นตัวแปร

ชนิด STD_LOGIC_VECTOR

  • STD_LOGIC_VECTOR

(3 downto 0) หมายถึงบัสขนาด 4

บิทแบบ Little Endian

  • แต่ถ้าเขียนเป็น (0 to 3) หมายถึง

Big endian

4 2 combinational logic 4 2 1 bitwise operators2
4.2 Combinational Logic :4.2.1 Bitwise Operators
  • เราสามารถเลือก Endianเป็นแบบใดก็ได้ แต่ถ้าเลือกใช้แบบใดแล้วก็ต้องใช้แบบนั้นไปตลอด
4 2 combinational logic 4 2 1 bitwise operators3
4.2 Combinational Logic :4.2.1 Bitwise Operators
  • ตัวอย่างที่ 4.3 วงจรตัวอย่างการใช้ Gate
  • ~, ^ และ | เป็นตัวอย่าง Operator

ของ Verilogโดยที่ a, b, และ y1

เรียกว่า Operand

  • การผสมกันระหว่าง Operator และ

Operand เช่น ~(a|b) เรียกว่า

expression

  • คำสั่งในแต่ละบรรทัดเช่น

assign y4 = ~(a|b) เรียกว่า Statement

4 2 combinational logic 4 2 1 bitwise operators4
4.2 Combinational Logic :4.2.1 Bitwise Operators
  • assign out = in1 op in2; เรียกว่า Continuous Assignment Statement
  • ทุกครั้งที่ input ด้านขวามือของเครื่องหมาย = เปลี่ยน ค่าของ Output ด้านขวามือจะเปลี่ยนด้วย
  • ดังนั้น Continuous Assignment Statement เป็นตัวกำหนการทำงานของวงจร Combination
4 2 combinational logic 4 2 1 bitwise operators5
4.2 Combinational Logic :4.2.1 Bitwise Operators
  • Operator ของ VHDL คือ not,

xorและ or

  • การผสมกันระหว่าง Operator และ

Operand เช่น a and b เรียกว่า

expression

  • คำสั่งในแต่ละบรรทัดเช่น

y4 <= a nand b เรียกว่า

Statement

  • Out <= in1 op in2; เรียกว่า

Concurrent Signal

Assignment

4 2 combinational logic 4 2 1 bitwise operators6
4.2 Combinational Logic :4.2.1 Bitwise Operators
  • ทุกครั้งที่ตัวแปรด้านขวามือของเครื่องหมาย <= เปลี่ยนค่า ตัวแปรด้านซ้ายมือจะเปลี่ยนด้วย
  • ดังนั้นเราสามารถเขียนวงจร Combination ในรูปของ Concurrent SignalAssignment
4 2 combinational logic 4 2 3 reduction operators
4.2 Combinational Logic :4.2.3 Reduction Operators
  • Reduction Operator หมายถึงการใช้เกทแบบหลาย Input เพื่อประมวลผลข้อมูลในบัส
  • ตัวอย่างที่ 4.4 แสดงตัวอย่างการใช้ and

เกท 8 input

  • เราสามารถใช้วิธีเดียวกันในการเขียน

ในการเขียน OR (|) , XOR (^),

NAND (~&) และ NOR (~|)

  • XOR จะให้ค่า TRUE ถ้าจำนวน Input ที่เป็นโลจิก 1 เป็นเลขคู่ และเป็น FALSE ถ้าจำนวนเป็นเลขคี่
4 2 combinational logic 4 2 3 reduction operators1
4.2 Combinational Logic :4.2.3 Reduction Operators
  • ภาษา VHDL ไม่มี Reduction

Operator ดังนั้นจึงต้องเขียน

Concurrent Signal

Assignment แบบตรงๆ

4 2 combinational logic 4 2 4 conditional assignment
4.2 Combinational Logic :4.2.4 Conditional Assignment
  • Conditional Assignment คือการเลือกๆสัญญาณ Input ที่จะออกไปยัง Output
  • ตัวอย่างที่ 4.5 แสดงการสร้าง

Multiplexer 2:1 โดยใช้

Conditional Assignment

  • Conditional Operator (? : ) จะเลือกสัญญาณ d1 หรือ d0 ขึ้นกับค่าของ s
    • s=1 ทำให้ y=d1
    • s=0 ทำให้ y=d0
  • ? : นิยมใช้ในการสร้าง Multiplexer เพื่อใช้เลือกสัญญาณ Input ที่จะออกไปที่ Output
4 2 combinational logic 4 2 4 conditional assignment1
4.2 Combinational Logic :4.2.4 Conditional Assignment
  • Conditional Assignment คือการเลือกๆสัญญาณ Input ที่จะออกไปยัง Output
  • ? : เป็น Operator ชนิด Ternary
  • Operator เนื่องจากมันมี 3 Input
4 2 5 internal variables
4.2.5 Internal Variables
  • ในกรณีที่วงจร Combination มีความซับซ้อนมาก เรานิยมแบ่งการทำงานของวงจรออกเป็นหลายๆขั้นตอน หรือแบ่งสมการบูลีนออกเป็นหลายๆสมการ โดยใช้ตัวแปรภายใน (Internal Variable) ในการเก็บผลลัพธ์การทำงานในแต่ละขั้น
  • ตัวอย่างวงจร Full Adder

S=A xor B xorCin

Cout = AB + ACin + BCin

  • เราสามารถเขียนใหม่เป็น

P=A xor B, G = AB

S=P xorCin, Cout=G+PCin

4 2 5 internal variables1
4.2.5 Internal Variables
  • เราเรียก P และ G ว่าตัวแปรภายใน
  • เราสามารถตั้งตัวแปรภายในของ Verilog

โดยใช้คำสั่ง wire

4 2 5 internal variables2
4.2.5 Internal Variables
  • เราใช้คำสั่ง signal ในการตั้งตัวแปร

ภายในของ VHDL

4 2 5 internal variables3
4.2.5 Internal Variables
  • ข้อสังเกต ในการเขียนโปรแกรมทั่วไปเช่นภาษา C++ หรือ Java เราจะต้องเขียน P=A xor B ก่อน จากนั้นจึงเขียน S=P xorCin
  • แต่ลำดับการเขียนคำสั่งใน HDL ไม่มีความสำคัญ เนื่องจากคำสั่งในแต่ละ Assignment จะถูกคำนวณใหม่ทุกครั้งที่ตัวแปรทางด้านขวามือมีการเปลี่ยนแปลงค่า
4 2 6 precedence
4.2.6 Precedence
  • ลำดับการทำงานของ Operator ในภาษา Verilogและ VHDL จะเรียงไม่เหมือนกันดังแสดงในตาราง (Operator ด้านบนจะทำงานก่อนด้านล่าง)
  • จากตารางของ Verilogจะเห็นว่าลำดับ

การทำงานของ AND มาก่อน OR

ดังนั้นเราสามารถที่จะเขียนสมการบูลีน

assign cout = g | p&cin;

  • ซึ่งจะจะทำงานเหมือนกับ

assign cout = g | (p&cin);

4 2 6 precedence1
4.2.6 Precedence
  • แต่คำสั่ง AND และ OR ใน VHDL อยู่ในลำดับการทำงานเดียวกัน ดังนั้นเราจำเป็นจะต้องใส่เครื่องหมายวงเล็บเข้าไปในสมการเพื่อป้องกันไม่ให้ทำงานผิดพลาดได้
  • cout <= g or (p and cin);
  • แต่ถ้าไม่ใส่เครื่องหมายวงเล็บดังเช่น

cout <= g or p and cin;

  • คำสั่งจะทำงานจากซ้ายไปขวามือ หรือ

เทียบเท่ากับสมการ

  • cout<= (g or p) and cin;
4 2 7 numbers
4.2.7 Numbers
  • รูปแบบการเขียนเลขใน Verilogคือ

N’bvalue

โดยที่ N คือจำนวนบิท

b คือเลขฐาน

Value คือค่าของตัวเลข

  • ตัวอย่างเช่น

9’h25 หมายถึงเลขฐาน 16 ขนาด 9

บิท มีค่าเท่ากับ

2516=3710=0001001012

4 2 7 numbers1
4.2.7 Numbers
  • ถ้าไม่ใส่ขนาดให้ตัวเลข Verilogจะ

กำหนดขนาดของตัวเลขให้ใหญ่เท่ากับ

ขนาดที่ถูกใช้ในสมการ

  • และ 0 จะถูกใส่เข้าไปข้างหน้าของตัวเลข

ให้เองโดยอัตโนมัติ

  • ตัวอย่างเช่นถ้าให้ w เป็นบัสขนาด 6 บิท
  • ดังนั้นคำสั่ง w=‘b11
  • w จะมีค่าเท่ากับ 0000112
4 2 7 numbers2
4.2.7 Numbers
  • ในภาษา VHDL ตัวเลขของตัวแปร

ชนิด STD_LOGIC จะเขียนเป็น

เลขฐาน 2 ขนาด 1 บิท และปิดด้วย

เครื่องหมาย ‘x’

  • เช่น ‘0’ และ ‘1’ หมายถึงโลจิก 0 หรือ 1
  • ตัวเลขของตัวแปรชนิด STD_LOGIC_VECTOR จะถูกเขียนเป็นเลขฐาน 2 หรือเลขฐาน 16 และปิดด้วยเครื่องหมาย “xxx”
4 2 8 z s x s
4.2.8 Z’s และ X’s
  • Z ใช้แสดงสถานะลอย (Float)
    • .=h
  • ตัวอย่างที่ 4.10 แสดงตัวอย่างของ

Tristate Buffer

  • ถ้า Buffer ถูก Enable จะทำให้

Output มีโลจิกตรงกับ Input

  • แต่ถ้าถูก Disable จะทำให้ Output

ลอย

4 2 8 z s x s1
4.2.8 Z’s และ X’s
  • ใน HDL จะใช้X แทน
4 2 9 bit swizzling
4.2.9 Bit Swizzling
  • Bit Swizzlingเป็นการนำเอาสัญญาณหลายๆสัญญาณมารวมกันเพื่อเป็นสัญญาณบัส หรือเป็นการแยกเอาสัญญาณบางสัญญาณของบัสไปใช้งาน