Digital system engineering
This presentation is the property of its rightful owner.
Sponsored Links
1 / 40

Digital System Engineering PowerPoint PPT Presentation


  • 107 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

Digital System Engineering

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 combinational logic 4 2 4 conditional assignment2

4.2 Combinational Logic :4.2.4 Conditional Assignment


4 2 combinational logic 4 2 4 conditional assignment3

4.2 Combinational Logic :4.2.4 Conditional Assignment


4 2 combinational logic 4 2 4 conditional assignment4

4.2 Combinational Logic :4.2.4 Conditional Assignment


4 2 combinational logic 4 2 4 conditional assignment5

4.2 Combinational Logic :4.2.4 Conditional Assignment


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เป็นการนำเอาสัญญาณหลายๆสัญญาณมารวมกันเพื่อเป็นสัญญาณบัส หรือเป็นการแยกเอาสัญญาณบางสัญญาณของบัสไปใช้งาน


  • Login