Digital System Engineering - PowerPoint PPT Presentation

Digital system engineering
Download
1 / 40

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

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

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

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