บทที่ 8 โปรแกรม...

19
เอกสารคาสอนรายวิชา 2301274 ระบบคอมพิวเตอร์ คณะวิทยาศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย | 66 บทที่ 8 โปรแกรม LogicWorks วัตถุประสงค์ของการเรียนในบทนี ใช้โปรแกรม LogicWorks เพื ่อออกแบบและจาลองการทางานของวงจรเชิงผสมและวงจรเชิงลาดับ จาลองการทางานของวงจรบวก (adder) การออกแบบโดยแยกเป็นมอดูล (module) เลือกใช้ไอซี (Integrated Circuit: IC) ในตระกูล TTL ใช้อุปกรณ์อินพุตเอาต์พุต เช่น สวิตช์ ปุ ่ มกด LED 7-segment จาลองการทางานของวงจรควบคุมปั ๊มน้า (water pump controller) ใช้แผนภาพเวลา (timing diagram) ใช้ภาษา VHDL เพื ่อสร้างเครื ่องสถานะจากัด (Finite-State Machine: FSM) ใช้พร็อม (Programmable Read-Only Memory: PROM) และแรม (Random Accessed Memory: RAM) มัดสายไฟหลายๆ เส้นรวมกัน ในบทนี ้เราจะมาดูการออกแบบวงจรโดยใช ้โปรแกรม LogicWorks ผมคัดมาเฉพาะตัวอย่างที ่นิสิตจาเป็นต้องใช้ ในการทาโครงงาน และใช้ทาความเข้าใจการทางานไมโครโพรเซสเซอร์ การใช้งานโปรแกรม LogicWorks ที นอกเหนือจากนี ้ นิสิตสามารถศึกษาได ้จากคู ่มือการใช้งานโปรแกรม วงจรบวก (Adder) ตัวอย่างแรกลองทาวงจรบวกแบบง่ายๆ ก่อน ขั ้นแรกก็ทาวงจรบวกเต็มอัตรา (full adder) สาหรับบวกเลข 1 บิต ก่อน หลังจากนั ้นใส่สวิตช์สาหรับป ้ อนอินพุตเข้าไปทดสอบ ใส่ LED หรือ probe สาหรับดูเอาต์พุต ดูรูปที 8.1 รูปที 8.1 วงจรบวกเต็มอัตรา (full adder)

Transcript of บทที่ 8 โปรแกรม...

Page 1: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 66

บทท 8 โปรแกรม LogicWorks

วตถประสงคของการเรยนในบทน

ใชโปรแกรม LogicWorks เพอออกแบบและจ าลองการท างานของวงจรเชงผสมและวงจรเชงล าดบ

จ าลองการท างานของวงจรบวก (adder)

การออกแบบโดยแยกเปนมอดล (module)

เลอกใชไอซ (Integrated Circuit: IC) ในตระกล TTL

ใชอปกรณอนพตเอาตพต เชน สวตช ปมกด LED 7-segment

จ าลองการท างานของวงจรควบคมปมน า (water pump controller)

ใชแผนภาพเวลา (timing diagram)

ใชภาษา VHDL เพอสรางเครองสถานะจ ากด (Finite-State Machine: FSM)

ใชพรอม (Programmable Read-Only Memory: PROM) และแรม (Random Accessed Memory: RAM)

มดสายไฟหลายๆ เสนรวมกน

ในบทน เราจะมาดการออกแบบวงจรโดยใชโปรแกรม LogicWorks ผมคดมาเฉพาะตวอยางทนสตจ าเปนตองใช

ในการท าโครงงาน และใชท าความเขาใจการท างานไมโครโพรเซสเซอร การใชงานโปรแกรม LogicWorks ท

นอกเหนอจากน นสตสามารถศกษาไดจากคมอการใชงานโปรแกรม

วงจรบวก (Adder)

ตวอยางแรกลองท าวงจรบวกแบบงายๆ กอน ขนแรกกท าวงจรบวกเตมอตรา (full adder) ส าหรบบวกเลข 1 บต

กอน หลงจากนนใสสวตชส าหรบปอนอนพตเขาไปทดสอบ ใส LED หรอ probe ส าหรบดเอาตพต ดรปท 8.1

รปท 8.1 วงจรบวกเตมอตรา (full adder)

Page 2: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 67

ตอไปถาเราจะท าวงจรบวกขนาด 4 บต กเอาวงจรบวกเตมอตรา 4 ตวมาตอขนานกน อาจจะใชวธ copy & paste

แตเรามวธทดกวานนคอ สรางมอดลวงจรบวกเตมอตราขนมากอน แลวใชมอดลน ซ าไดหลายๆ ครง การสราง

มอด ล เร มจาก New -> Model Wizard -> Create a new, empty model และ Open the new model as an

independent design -> Structural circuit และปอนช อมอดล เชน FullAdder ขนตอไปใสขาอนพต A, B,

Carry-in และขาเอาตพต Sum, Carry-out จากนนออกแบบมอดลตามทตองการ แลวก save เกบไว เวลาจะ

เรยกใชก New -> Model Wizard -> Select an existing file และ Create a new symbol with the specified

model attached -> Pin locations (กด next) -> ตงชอส าหรบ new part เชน FullAdder -> New Lib (ตงชอ

เชน MyLib จะไดไมไปปนกบ library อน) -> กด Finish เสรจแลวจะม FullAdder ใหเลอกจากใน View ->

Parts Palette ทอยทางขวามอ

รปท 8.2 วงจรบวกขนาด 4 บต ทสรางจากมอดล FullAdder

เราอาจจะท าวงจรบวกขนาด 4 บตเกบไวเปนอกมอดลหนง ส าหรบท าวงจรบวกขนาดใหญขน เชน 8, 16, 32 บต

จะไดไมตองเอาวงจรบวกเตมอตรามาตอกนทละบต

Page 3: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 68

การเลอกใชไอซ (IC) ในตระกล TTL

ไอซยอมาจาก Integrated Circuit (IC) หรอเรยกวา “วงจรรวม” สวน TTL ยอมาจากชอเทคโนโลยทใชท าวงจร

รวมคอ “Transistor Transistor Logic” มไอซส าเรจรปในตระกล TTL ใหเลอกใชมากมาย เชน 74LS83 ในรปท

8.3 เวลาคนหาใน parts palette ใหใชคยเวรด “74_83”

รปท 8.3 วงจรรวม TTL เบอร 74LS83 หรอ 4-bit binary full adder with fast carry (ซาย)

และสญลกษณในโปรแกรม LogicWorks (ขวา)

ปมกด

โดยปกตปมกดแบบทเมอปลอยแลวจะเดงขนเองอตโนมต ขณะกดจะใหคา 0 เมอปลอยจะใหคา 1 ดรปท 8.4

เมอน าหลายๆ ปมมาประกอบกนกเปนคยบอรด

รปท 8.4 ปมกด SPDT Pushbutton (ซาย) คยบอรดทสรางขนจากปมกดหลายๆ อน (ขวา)

Page 4: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 69

7-Segment

7-Segment คอหลอดไฟ 7 ดวง ส าหรบแสดงคา 0 – 9 (ฐานสบ) หรอ 0 – F (ฐานสบหก) หลอดไฟดวงท

แปดเอาไวแสดงจดทศนยม รปท 8.5

รปท 8.5 7-Segment

วงจรควบคมปมน า

ผมเอาวงจรปมน าในบทท 5 รปท 5.14 มาท าในโปรแกรม LogicWorks กจะไดดงรปท 8.6 ดฟลปฟลอปทใชใน

โปรแกรม LogicWorks คอ “D Flip Flop wo/SQ/” ซงจะท างาน (Q = D) ทขอบขาข น และรเซต (Q = 0)

ทนทท R มคาเปน 0 นสตอาจจะใช binary switch แทนสญญาณนาฬกาแลวใชเมาสคลกเพอสรางสญญาณ

นาฬกาเอง จะไดสงเกตดการเปลยนแปลงของคาตางๆ ไดทน

รปท 8.6 วงจรควบคมปมน าในโปรแกรม LogicWorks (แบบ schematic)

Page 5: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 70

ใหต งช อสายไฟเปน Reset, Clock, State, Sensor_up, Sensor_dn, Pump เม อจ าลองการท างานของวงจร

สญญาณเหลาน จะไปปรากฏในแผนภาพเวลาทอยดานลางของจอภาพดงรปท 8.7 (ปรบ Timing Options เปน

Retain forever)

รปท 8.7 แผนภาพเวลาของวงจรควบคมปมน าในโปรแกรม LogicWorks

VHDL

VHDL ย อ ม า จ า ก VHSIC Hardware Description Language (VHIC ค อ Very High Speed Integrated

Circuits) เปนภาษาทใชอธบายฮารดแวร ดงนนการออกแบบฮารดแวรสามารถท าไดในลกษณะคลายๆ กบการ

เขยนโปรแกรม จากประสบการณสอนของผม ยงไมควรใหนสตใช VHDL เพราะ VHDL มทงสวนทคอมไพลเปน

ฮารดแวรไดจรง และสวนทคอมไพลเปนฮารดแวรไมได เชน if-else, for-loop, while-loop ค าสงเหลาน ใชเพอ

ทดสอบการท างานของวงจรเทานน แตนสตมกจะใชค าสงในสวนทคอมไพลเปนฮารดแวรไมไดเพอท างานสง

อาจารย ผมอนโลมใหใช VHDL ไดเฉพาะกบ FSM ทมขนาดใหญ เพอลดความยงยากในการออกแบบ FSM

วธการสรางมอดลแบบ VHDL มขนตอนเหมอนการสรางมอดลแบบปกต ขนแรกเลอก Model Wizard ในขน

ตอไปเปลยนตวเลอกจาก Structural circuit เปน VHDL เมอเขยน VHDL เสรจแลวกลองเลอก VHDL ->

Compile ดวามขอผดพลาด (error) หรอไม

เปรยบเทยบการออกแบบวงจรดวยเครองมอแบบ schematic (ซาย) และ hardware description language (ขวา)

Wire a, b, c, d, e;

And(a, b, d)

Or(d, c, e)

ในบทน ผมจะแสดงภาษา VHDL เฉพาะสวนทจ าเปนส าหรบการท า FSM สวนทนอกเหนอจากน นสตสามารถ

ศกษาเพมเตมไดจากหนงสอ “ภาษา VHDL ส าหรบการออกแบบวงจรดจตอล” ดในรายการอางองทายบท

Page 6: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 71

FSM ของปมน าเขยนแบบน

library IEEE;

use IEEE.std_logic_1164.all;

entity Water_pump_VHDL is

port (

reset : in std_logic;

clock : in std_logic;

sensor : in std_logic_vector(1 downto 0);

pump : out std_logic

);

end Water_pump_VHDL;

architecture arch1 of Water_pump_VHDL is

type state_type is (s0, s1);

signal state : state_type;

begin

state_p: process(clock, reset)

begin

if reset = '0' then

state <= s0;

elsif clock'event and clock = '1' then -- positive edge

case state is

when s0 =>

if sensor(1 downto 0) = "00" then state <= s0; end if;

if sensor(1 downto 0) = "01" then state <= s0; end if;

if sensor(1 downto 0) = "10" then state <= s1; end if;

if sensor(1 downto 0) = "11" then state <= s1; end if;

when s1 =>

if sensor(1 downto 0) = "00" then state <= s0; end if;

if sensor(1 downto 0) = "01" then state <= s1; end if;

if sensor(1 downto 0) = "10" then state <= s1; end if;

if sensor(1 downto 0) = "11" then state <= s1; end if;

end case;

end if;

end process state_p;

output_p: PROCESS(state,sensor)

begin

case state is

when s0 =>

if sensor(1 downto 0) = "00" then pump <= '1'; end if;

if sensor(1 downto 0) = "01" then pump <= '1'; end if;

if sensor(1 downto 0) = "10" then pump <= '0'; end if;

if sensor(1 downto 0) = "11" then pump <= '0'; end if;

when s1 =>

if sensor(1 downto 0) = "00" then pump <= '1'; end if;

if sensor(1 downto 0) = "01" then pump <= '0'; end if;

if sensor(1 downto 0) = "10" then pump <= '0'; end if;

if sensor(1 downto 0) = "11" then pump <= '0'; end if;

end case;

end process output_p;

end arch1;

เวลาท าโครงงานนสตอาจจะลากสายไฟ state ออกมาแสดงเปนเอาตพตดวย จะไดร วา FSM ท างานไปถง state

ไหนแลว เรยกใชมอดลทสรางจาก VHDL ไดเหมอนมอดลปกต ดรปท 8.8

Page 7: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 72

รปท 8.8 วงจรควบคมปมน าในโปรแกรม LogicWorks (แบบ VHDL)

พรอม (PROM) และแรม (RAM)

วธการสรางมอดลประเภทหนวยความจ าใน LogicWorks ใหไปท Simulation -> PROM/RAM/PLA Wizard

จะมใหเลอก 3 ประเภทคอ PLA, PROM และ RAM ในทน จะขออธบายเฉพาะสองประเภทหลง

PROM คอ programmable read-only memory เปนหนวยความจ าแบบลบเลอนไมได (non-volatile) คอเมอ

ไฟดบขอมลกยงอย ปกตจะเขยนคาลงในพรอมไดเพยงครงเดยว เหมอนแผน CD/DVD การเขยนตองใช

อปกรณพเศษตางหาก เมอเขยนแลวถงจะน ามาใชเปน ROM แบบ read-only ได พรอมหลายชนดสามารถน า

กลบมาเขยนใหมได เชน EEPROM หรอ electronically erasable PROM

แรม (RAM) ในทน หมายถงเอสแรม (RAM) เปนหนวยความจ าแบบลบเลอนได คอเมอไฟดบขอมลจะหาย

หมด การอานและเขยนขอมลท าไดงาย ลองสรางแรมทม Address lines = 3, Bits per word = 2 และ Enter hex

data manually จะไดแรมขนาด 23 = 8 ชอง แตละชองเกบขอมลได 2 บต ก าหนดคาในแรมเปน 1 1 2 2 1 2 2

2 ตอนนสงทบรรจอยในแรมคอตารางคาความจรงส าหรบสถานะถดไป (next state) และเอาตพต (output) ของ

วงจรปมน า ดงน (A2A1A0 คอ สถานะปจจบน ตวรบรตวบนและตวลาง D1D0 คอ สถานะถดไปและเอาตพต ใน

วงเลบคอเลขฐานสบของ D1D0)

A2A1A0 D1D0

000 01 (1)

001 01 (1)

010 10 (2)

011 10 (2)

100 01 (1)

101 10 (2)

110 10 (2)

111 10 (2)

รปท 8.9 แสดงวงจรควบคมปมน าแบบใชพรอม ทจรงแลวพรอมกคอตารางทใชเกบคาคงท จะน าไปประยกต

เพอเกบคาอะไรกได เชน ตารางคา sine, cos, tan หรอ logarithm เปนตน หรอจะใชแทนวงจรเชงผสมโดยเกบ

ตารางคาความจรงกได แตในทางปฏบตไมคอยท ากนเพราะใชจ านวนทรานซสเตอรมากกวาการออกแบบดวยเกต

Page 8: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 73

รปท 8.9 วงจรควบคมปมน าในโปรแกรม LogicWorks (แบบใช PROM)

ตอไปลองสรางแรมทม Address lines = 4, Chip enables = 1, Bits per word = 8, Common I/O pins จะได

ตารางเกบคาขนาด 24 = 16 ชอง แตละชองเกบขอมลได 8 บต ดงรปท 8.10 ขา A 4 บตใชระบเลขทอย

(address) ทตองการอานหรอเขยน ขา DIO 8 บตคอพอรตเขาออกไดสองทาง (bi-directional port) ทใชทงอาน

และเขยน แผนภาพเวลาการอานและเขยนแรมแสดงในรปท 8.11 แรมจะท างานได CE ตองเปน 0 เสมอ เวลา

อานคาจากแรมให WE = 1, A = address ทเราตองการ คาจะออกมาทาง DIO หลงจาก AA (address access)

time สวนเวลาเขยนคาลงแรมให WE = negative pulse, A = address ทเราตองการ การเขยนจะเสรจทขอบขาขน

ของ WE ตองใหเลขทอยมากอนขอบขาข นอยางนอย AW (address valid to end of write) time และตองให

ขอมลมากอนกอนขอบขาขนอยางนอย DW (data to write time overlap) time แผนภาพเวลาของไอซจรงๆ จะม

เงอนไขทางเวลาทซบซอนกวาน มาก ทอธบายมาเปนเพยงสวนหนงเทานน ในโปรแกรม LogicWorks จะไมม

เงอนไขทางเวลา เชน สมมตไดวา AA, AW, DW time มคาเปนศนย (หรอจะก าหนดใหมคากได)

ถา CE = 1 ขา DIO ทงหมดจะเปนคา z ใชในกรณทตองการตดแรมออกจากบสขอมลทมอปกรณหลายตวเกาะ

อย

รปท 8.10 แรมขนาด 24 x 8 บต

Page 9: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 74

รปท 8.11 แผนภาพเวลา (ซาย) การอานและ (ขวา) เขยนแรม

การมดสายไฟหลายๆ เสนรวมกน

โดยปกตบสขอมลทใชเชอมตออปกรณหลายๆ ชนมกจะมสายไฟจ านวนมาก เชน 8, 16, 32, 64 เราสามารถใช

ค าสง Schematic -> New Breakout -> เตม D0..7 เพอมดสายไฟ 8 เสนรวมกน เวลายายต าแหนงจะไดไมตอง

ยายสายไฟทละเสน ดตวอยางในรปท 8.12 เวลาจะดงแคบางเสนจากมดออกมาใชก New Breakout แค D6..7

แลวเอาไปแปะไวกบมดเดม

รปท 8.12 การมดสายไฟหลายๆ เสนรวมกน

หนวยควบคม (Control Unit)

ธรรมชาตของฮารดแวรคอ มนออกแบบยากกวาการเขยนโปรแกรม เชน จะออกแบบวงจรคณยงไง? แตเราทราบ

วา m x n คอ m บวกกน n ครง ดงนนแทนทเราจะออกแบบวงจรคณ เรากใชวงจรบวกซงออกแบบงายกวามาก

และใชวงจรบวกเพยงตวเดยวกพอ แตใชซ า n ครง โดยมหนวยควบคมซงกคอ FSM เปนตวก าหนดจงหวะการ

ท างาน ผมออกแบบเครองคดเลขงายๆ ทท าการคณไดโดยใชวงจรบวกเพยงสองตวในรปท 8.13 ในขนน ยงไมม

ตวควบคม สญญาณทมาจากตวควบคม ผมใส binary switch ไว เพอใหนสตทดลองเลนดได อยากใหสญญาณ

ควบคมยงกโยกสวตชเอาเอง

Page 10: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 75

รปท 8.13 วงจรคณทใชวงจรบวกสองตว (ไมม FSM)

สวนประกอบของวงจรในรปท 8.13 มดงน

Shift Register เปน shift register ขนาด 4 บต (74_95) ใชเกบตวถกด าเนนการ (operand) ท ผใช

ปอนเขามาทางคยบอรด โดยเลอน (shift) เขาไปเกบทละ 1 บต ถา MODE = 0 จะเปนเลอนซายคอ

เมอไดขอบขาลงท CLK1 จะเลอนซายไป 1 บต โดย SER IN (serial in) จะเขาไปแทนท LSB (MSB

จะหายไป) ถา MODE = 1 เปนการโหลดคาจากขา D, C, B, A เขาไปเกบในเรจสเตอร ขา QD, QC,

QB, QA เอาตพตคาปจจบนของเรจสเตอรอยตลอดเวลา

Register A และ B เปนเรจสเตอรขนาด 4 บต (Reg-4 inv CLR) ถาเกดขอบขาขนท CLK จะเปนการ

โหลดคาจากขา D3, D2, D1, D0 เขาไปเกบในเรจสเตอร ขา Q3, Q2, Q1, Q0 เอาตพตคาปจจบน

ของเรจสเตอรอยตลอดเวลา ขา CLR ใชรเซตคาในเรจสเตอรใหเปนศนย โดยให CLR = 0 จะรเซต

ทนท ไมตองรอใหเกดขอบขาขนหรอขอบขาลงท CLK

Page 11: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 76

บฟเฟอรสามสถานะ (tri-state buffer) ขนาด 4 บต (Buffer-4 T.S.) สงเกตวาขาเอาตพตของเรจส

เตอรทกตวจะตอกบบฟเฟอรสามสถานะกอนลงบสขอมล (data bus) ถา OE = 0 จะน าคา D3, D2,

D1, D0 ลงบสขอมล แตถา OE = 1 จะใหคา z (ตดออกจากบสขอมล)

คยบอรด อยทางซายมปม 0, 1, Reset (เมอกดจะรเซตคาใน shift register ใหเปน 0), x, = นอกจาก

การรเซตคาใน shift register แลวผมตองการใหโหลดคาลงไปไดดวย เพราะการคณ ShiftReg = RegA

x RegB จะท าดงน

RegA = operand 1 (คาบวก)

RegB = operand 2 (คาบวก)

ShiftReg = 0 // reset

while RegB > 0 do

ShiftReg = ShiftReg + RegA // load

RegB = RegB – 1

end while

ดงนนปม Reset จงท างานไดทงเปน reset หรอ load ข นอยกบวา multiplexor (Mux-2x4 T.S.) จะ

เลอกคาอะไร ระหวางคาศนยกบคาจากบสขอมลเพอโหลดลง shift register ถา S0 = 0 จะเลอกคาศนย

ถา S0 = 1 จะเลอกคาจากบสขอมล

วงจรบวก 2 ตว (74_83) ตวซายใชค านวณ ShiftReg + RegA ตวขวาใชค านวณ RegB – 1

การคณมขนตอนดงน

1. กดปม Reset เพอท าให Shift Register มคาเปนศนย

2. ปอนคาตวถกด าเนนการ (operand) ตวแรก โดยกดปม 0 หรอ 1

3. กดปม Multiply (x) เปนการสนสดการปอนคา

4. ให OE ของ Buffer 1 มคาเปน 0 เพอเอาคาใน Shift Register ลง Data Bus

5. ใหขอบขาขนท CLK ของ Register A เพอเขยนคาจาก Data Bus ลง Register A

6. รเซตคาใน Shift Register ใหเปน 0

7. ปอนคาตวถกด าเนนการ (operand) ตวทสอง โดยกดปม 0 หรอ 1

8. กดปม Equal (=) เปนการสนสดการปอนคา (OE ของ Buffer 1 ยงมคาเปน 0)

9. ใหขอบขาขนท CLK ของ Register B เพอเขยนคาจาก Data Bus ลง Register B (และในเวลา

เดยวกนให OE ของ Buffer 1 มคากลบเปน 1)

10. รเซตคาใน Shift Register ใหเปน 0 และใหขา S0 (select) ของ MUX มคา 1 เพราะตอไปเรา

จะเขยนคาจาก Data Bus ลง Shift Register เทานน (จะไมรเซตแลว)

11. เรมท าการคณโดยให OE ของ Buffer 2 มคาเปน 0 เพอเอาคา Shift Register + Register A

ลง Data Bus

12. กดปม Reset (Load) เพอเขยนคาจาก Data Bus ลง Shift Register (และในเวลาเดยวกนให

OE ของ Buffer 2 มคากลบเปน 1)

13. ให OE ของ Buffer 3 มคาเปน 0 เพอเอาคา Register B – 1 ลง Data Bus

Page 12: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 77

14. ใหขอบขาขนท CLK ของ Register B เพอเขยนคาจาก Data Bus ลง Register B (และในเวลา

เดยวกนให OE ของ Buffer 3 มคากลบเปน 1)

15. ตรวจสอบดสญญาณ Terminate วาเปน 1 หรอไม ถา Terminate = 0 ใหกลบไปท าขอท 11 ถา

Terminate = 1 แสดงวาการคณเสรจแลว ผลลพธอยใน Shift Register

จากขนตอนขางตน นสตจะตองโยกสวตชเพอควบคมการท างานของวงจรเพอท าการคณ แตทจรงแลวเราสามารถ

สราง FSM เพอใหควบคมการท างานใหเปนไปตามขนตอนทเราตองการได กอนอนมาดกอนวา FSM ตองม

อนพตและเอาตพตอะไรบาง

อนพต:

clock สญญาณนาฬกา

reset ใชรเซต FSM ใหเรมท างานท initial state

mul มคาเปน 0 เมอมการกดปม Multiply (x)

eq มคาเปน 0 เมอมการกดปม Equal (=)

term มคาเปน 1 เมอ Register B มคาเทากบศนย

เอาตพต:

sel สงไปควบคมขา select ของ MUX

oe1 สงไปควบคม Buffer 1

oe2 สงไปควบคม Buffer 2

oe3 สงไปควบคม Buffer 3

we1 สงไปควบคมการเขยน Shift Register

(ท างานทขอบขาขน)

we2 สงไปควบคมการเขยน Register A

(ท างานทขอบขาขน)

we3 สงไปควบคมการเขยน Register B

(ท างานทขอบขาขน)

Page 13: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 78

สราง FSM ทมขาอนพตเอาตพตตามทก าหนด แลวเชอมเขากบวงจรเดมทออกแบบไวจะไดดงรปท 8.14

รปท 8.14 วงจรคณทใชวงจรบวกสองตว (ม FSM)

เรมตนใชงานใหกดปม Reset FSM แลวกใชงานเหมอนเครองคดเลขปกต ปอนตวถกด าเนนการตวแรก

กดปม Multiply (x) ปอนตวถกด าเนนการตวทสอง กดปม Equal (=) ผลลพธของการคณจะอยใน Shift

Register

Page 14: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 79

โคด VHDL ทใชสราง FSM เปนดงน

library IEEE;

use IEEE.std_logic_1164.all;

entity Multiplier_FSM is

port(

clock : in std_logic;

reset : in std_logic;

mul : in std_logic;

eq : in std_logic;

term : in std_logic;

sel : out std_logic;

oe1 : out std_logic;

oe2 : out std_logic;

oe3 : out std_logic;

we1 : out std_logic;

we2 : out std_logic;

we3 : out std_logic

);

end Multiplier_FSM;

architecture arch1 of Multiplier_FSM is

type state_type is (s0,s1,s2,s3,s4,s5,s6,s7,s8);

signal state : state_type;

begin

state_p: process(clock, reset)

begin

if reset = '0' then

state <= s0;

elsif clock'event and clock = '1' then -- positive edge

case state is

when s0 => -- load default values

state <= s1;

when s1 => -- ShiftReg = 0

state <= s2;

when s2 => -- wait for oper1

if mul = '0' then state <= s3; end if;

when s3 => -- RegA = ShiftReg, ShiftReg = 0

state <= s4;

when s4 => -- wait for oper2

if eq = '0' then state <= s5; end if;

when s5 => -- RegB = ShifReg, ShifReg = 0

state <= s6;

when s6 => -- Start multiplication

state <= s7;

when s7 =>

state <= s8;

when s8 =>

if term = '0' then state <= s6; end if; end case;

end if;

end process state_p;

Page 15: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 80

output_p: PROCESS(state,mul,eq,term)

begin

case state is

when s0 =>

sel <= '0'; -- default

oe1 <= '1'; oe2 <= '1'; oe3 <= '1';

we1 <= '1'; we2 <= '0'; we3 <= '0';

when s1 =>

we1 <= '0'; -- ShiftReg = 0

when s2 =>

we1 <= '1'; -- restore

oe1 <= '0'; -- DataBus = ShiftReg

when s3 =>

we2 <= '1'; -- RegA = DataBus (ShiftReg)

we1 <= '0'; -- ShiftReg = 0

when s4 =>

we2 <= '0'; -- restore

we1 <= '1'; -- restore

when s5 =>

we3 <= '1'; -- RegB = DataBus (ShiftReg)

we1 <= '0'; -- ShiftReg = 0

when s6 =>

we3 <= '0'; -- restore

we1 <= '1'; -- restore

sel <= '1'; -- Mux = DataBus

oe1 <= '1'; -- restore

oe2 <= '0'; -- DataBus = ShiftReg + RegA

when s7 =>

we1 <= '0'; -- ShiftReg = DataBus (ShiftReg + RegA)

oe2 <= '1'; -- restore

oe3 <= '0'; -- DataBus = RegB - 1

when s8 =>

we1 <= '1'; -- restore

we3 <= '1'; -- RegB = DataBus (RegB - 1)

oe3 <= '1'; -- restore

end case;

end process output_p;

end arch1;

Page 16: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 81

วงจรคณเชงผสม

ในการออกแบบฮารดแวร เราสามารถประนประนอม (tradeoff) ระหวาง “ขนาดของวงจร” (นบเปนจ านวน

ทรานซสเตอร) กบ “เวลาทตองใช” (นบเปนจ านวนรอบของสญญาณนาฬกา) ในตวอยางทแลว เราท าการคณ

โดยใชวงจรบวกเทานน แตตองใชจ านวนรอบของสญญาณนาฬกามาก ตวอยางน จะแสดงใหเหนวาเราออกแบบ

วงจรคณใหเปนวงจรเชงผสม (combinational circuit) ไดเลย ซงไมตองใชสญญาณนาฬกา แตวงจรจะมขนาด

ใหญมาก

ถาเราเขยน m x n หมายถง m คณ n หรอ m + … + m จ านวน n ตว เราเรยกวา m วาตวตงคณ (multiplicand)

และเรยก n วาตวคณ (multiplier) การออกแบบวงจรคณกใชหลกการเดยวกบท เราคณเลขในกระดาษทด

ตวอยาง เชน การคณเลขขนาด 4 บต 0101 x 1100 ท าไดดงน

จะเหนวาตองหาผลบวกรวมของทงสแถว (ตวตงคณทเลอนไปทางซาย) ถงจะไดผลคณ ในการน ตองใชวงจรบวก

ขนาด 4 บตจ านวน 3 ตว ลกศรหมายถง ใหเอาตวทด (ถาม) ไปใสตรง MSB ของวงจรบวกตวถดไป สงเกตวา

ผลลพธของการคณเลขขนาด 4 บตจะมขนาดไมเกน 8 บต รปท 8.15 แสดงการออกแบบวงจรคณดวยวธทกลาว

มาขางตน

Page 17: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 82

รปท 8.15 วงจรคณเชงผสม

Page 18: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 83

ในรปท 8.15 ถาจะขยายขนาดวงจรคณใหท าไดมากกวา 4 บต จะตองใชสายไฟและวงจรบวกมากขน นสตควร

มดสายไฟรวมกน (ใชค าสง breakout) และสรางมอดลส าหรบการบวกทมากกวา 4 บต หรออาจจะยบเกต and

หลายๆ ตวใหเปนมอดลเดยว พยายามวางสายไฟและมอดลใหเปนระเบยบ เพอใหงายตอการท าความเขาใจและ

ตรวจสอบหากมขอผดพลาดเกดขน

สงเกตวาวงจรทผมออกแบบมลกษณะทซ าซอนกน ท าใหใชวธ copy & paste ได ซงจะชวยลดเวลาทตองใชเมาส

ท างานลงไปไดมาก

Page 19: บทที่ 8 โปรแกรม LogicWorkspioneer.netserv.chula.ac.th/.../MyBook_08_LogicWorks.pdf · 2017-03-08 · เลือกใช้ไอซี (Integrated Circuit:

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 84

เอกสารประกอบ (ส าหรบอานเพมเตม)

ทจรงแลวมวงจรคณทดกวาตวอยางทท าใหดในบทนมาก เปนการคณโดยใชอลกอรทม Booth’s multiplication

ซงมความหนวง (delay) นอยและใชจ านวนเกตไมมาก

http://en.wikipedia.org/wiki/Booth's_multiplication_algorithm

บทท 3 Multiplication with Partially Redundant Multiples ในหนงสอ Michael J. Flynn, Stuart F.

Oberman, Advanced Computer Arithmetic Design, Wiley-Interscience, 2001.

แบบฝกหด

1. จงทดลองใชงานวงจรตวอยางในบทน บนโปรแกรม LogicWorks นกเรยนสามารถดาวนโหลดไฟลวงจร

ตวอยางไดจากเวบไซตของรายวชา

2. การค านวณแฟกทอเรยล (factorial) ของ n เมอ n > 0 อธบายดวยรหสเทยม (pseudocode) ดงน

Line 01: s = 1;

Line 02: while (n > 0) {

Line 03: s = s * n;

Line 04: n = n – 1;

Line 05: }

จงตอบค าถามตอไปนพรอมทงใหเหตผลประกอบ

2.1 วถขอมล (data path) ตอไปนสามารถค านวณแฟกทอเรยลไดหรอไม

2.2 ถา ALU ไมสามารถท าค าสง s * n ได ตองเอา s บวกกน n ครง (เปลยน Multiplier เปน Adder)

วถขอมลนจะยงค านวณแฟคทอเรยลไดหรอไม

3. จงแกไขวถขอมลในขอ 2 เพอใหค านวณ Line 03: s = s * n และ Line 04: n = n – 1 ไดพรอมๆ กน ให

จดวางมอดลตางๆ และสายไฟใหม แตหามเพมมอดลใหมลงไป (Hint: เลกใช MUX)

4. เรมท าโครงงานไดแลว ดรายละเอยดในบทท 14 โครงงานเครองคดเลข

รายการอางอง

[1] LogicWorks LogicWorks 5 Interactive Software, Prentice Hall, 2003.

[2] ช านาญ ปญญาใส, วชรากร หนทอง, ภาษา VHDL ส าหรบการออกแบบวงจรดจตอล, ซเอดยเคชน, 2547.