Digital System Engineering
-
Upload
sydnee-woodward -
Category
Documents
-
view
31 -
download
0
description
Transcript of Digital System Engineering
Digital System Engineering
บทท 4.Hardware Description Language
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• Module หมายถงบลอกของ Hardware ทม Input
และ Output• ตวอยางเชน AND gate, Multiplexer และวงจรดจตอลของบทกอนหนานเปนตน
• เราสามารถเขยนฟงกชนของ Module ได 2 วธคอ1. Behavioral Model เปนการอธบายวา Module
ทำางานอยางไร2. Structural Model เปนการอธบายวาจะสราง
Module อยางไร
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
Verilogmodule sillyfunction (input a, b, c, output y);
assign y = ~a & ~b & ~c | a & ~b & ~c | a & ~b & c;
endmodule
4.1.1 Modules• โปรแกรม VHDL ประกอบดวย 3 สวน
1. Library Clause สวนนจะอธบายในหวขอท 4.2.11
2. Entity Declaration แสดงชอของ Module รายชอของ
Input และ Output3. Architecture Body
กำาหนดการทำางานของ Module• เราจะตองกำาหนดชนดของสญญาณ input และ
output เปน STD_LOGIC
VHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity sillyfunction is
port (a, b, c: in STD_LOGIC; y: out STD_LOGIC);
end;architecture synth of sillyfunction isbegin
y <= ((not a) and (not b) and (not c)) or (a and (not b) and (not c)) or (a and (not b) and c);
end;
4.1.1 Modules• ตวแปรชนด STD_LOGIC สามารถ
มคาเปน 0 หรอ 1• และสามารถมคาเปน Float หรอ
Undefined Value ซงจะพดถงใน หวขอท 4.2.8
• ชนดตวแปรแบบ STD_LOGIC ถก กำาหนดไวใน Library
IEEE.STD_LOGIC_1164 ทำาใหเราตองประกาศใช Library นใน Library
Clause
VHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity sillyfunction is
port (a, b, c: in STD_LOGIC; y: out STD_LOGIC);
end;architecture synth of sillyfunction isbegin
y <= ((not a) and (not b) and (not c)) or (a and (not b) and (not c)) or (a and (not b) and c);
end;
4.1.1 Modules• ภาษา VHDL ไมมการกำาหนดลำาดบการ
ทำางานของ Operator ตางๆ เชนAND, NOT หรอ OR
• ทำาใหโปรแกรมไมสามารถทราบวาควรจะ ทำางานของ Operator ใดกอนหรอหลง
• ดงนนการเขยนสมการบลนในภาษาVHDL จะตองมการใสเครองหมาย
วงเลบทกครง ดงแสดงในโปรแกรมตวอยาง
VHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity sillyfunction is
port (a, b, c: in STD_LOGIC; y: out STD_LOGIC);
end;architecture synth of sillyfunction isbegin
y <= ((not a) and (not b) and (not c)) or (a and (not b) and (not c)) or (a and (not b) and c);
end;
4.1.1 Modules• Module ของ Verilog และ VHDL เปนตวอยางทด
ของหลกการ Modularity• Module ประกอบดวย Input และ Output และทำางานตามฟงกชนทกำาหนดไว
• ตราบใดท Module ยงคงทำางานถกตอง กไมจำาเปนตอง รวาโปรแกรมของ Module ถกเขยนอยางไร
• เราสามารถเขยนโปรแกรมภาษา Verilog และ VHDL เพอสราง Hardware ใดกได ดงนนการเลอกใชภาษาใด
ขนกบความตองการของลกคา หรอขนวาโปรแกรมเดมถกเขยนดวยภาษาใด
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 และSynthesis• Synthesis คอการเปลยน HDL เปน Netlistหรอการสรางโลจกเกทและสายไฟทใชเชอมตอโลจกเกทแตละตว
• การ Synthesizer อาจจะมขนตอนการทำาOptimize หรอการลดขนาดของวงจรใหเลกทสดเทาท
จะทำาได• Netlist อาจอยในรปของ Text หรอ Schematic เพอใหดงายขน
• คำาสงสวนใหญใน Verilog และ VHDL สามารถแปลง เปน Hardware ได แตกมบางคำาสงทไมสามารถแปลง เปน Hardware เชนกน
4.1.3 Simulation และSynthesis• โปรแกรม HDL สามารถแบงออกเปน 2 กลมคอ
1. Synthesizable Module คอสวนทใชกำาหนดHardware ของ Module
2. Testbench คอสวนทเพมเขาไปเพอใชตรวจสอบการ ทำางานของ Module Testbench ถกใชในการทำา
Simulation เทานน แตจะไมถก Synthesize ออกมาเปนวงจรได
4.1.3 Simulation และSynthesis• ขอผดพลาดสวนใหญของผเรมตนเขยน HDL ใหมๆ คอ
มกจะคดวาการเขยน HDL เหมอนกบการเขยนโปรแกรมคอมพวเตอร
• แตทจรงแลวการเขยน HDL เปรยบเสมอนกบการออกแบบวงจรดจตอล
• ดงนนถาผเขยน HDL ไมเขาใจการทำางานของวงจร ดจตอลทออกแบบ จะทำาให Module ทเขยนออกมา
• มการทำางานทผดพลาด• ทำาใหตองใช Hardware มากเกนจำาเปน• ได Module ทสามารถ Simulate ไดแตไมสามารถ
Synthesize ได• กอนเขยน HDL ควรเขยนบลอกของวงจร
Combination, Register และ Finite State Machine และเขยนวาแตละบลอกเชอมตอกนอยางไรในกระดาษเสยกอน
4.1.3 Simulation และSynthesis• วธทดทสดในการเรยน HDL คอการเรยนจากตวอยาง• วธทใชในการเขยนวงจรโลจกตางๆเรยกวา Idiom• ในบทนจะเรมจากการศกษาการเขยน Idiom ของแตละบลอกทถกตอง
• จากนนจงศกษาวาจะนำาเอาแตละบลอกมาเชอมตอกนอยางไร
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]
Verilogmodule inv (input [3:0] a,
output [3:0] y);assign y = ~a;
endmodule
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
VHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity inv is
port (a: in STD_LOGIC_VECTOR (3 downto 0);
y: out STD_LOGIC_VECTOR (3 downto 0));end;architecture synth of inv isbeginy <= not a;end;
4.2 Combinational Logic :4.2.1 Bitwise Operators
• เราสามารถเลอก Endian เปนแบบใดกได แตถาเลอกใชแบบใดแลวกตองใชแบบนนไปตลอด
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
Verilogmodule gates (input [3:0] a, b,
output [3:0] y1, y2,y3, y4, y5);/* Five different two-input logicgates acting on 4 bit busses */assign y1 = a & b; // ANDassign y2 = a | b; // ORassign y3 = a b; // XORassign y4 = ~(a & b); // NANDassign y5 = ~(a | b); // NORendmodule
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 Operators• Operator ของ VHDL คอ not,
xor และ or• การผสมกนระหวาง Operator และ
Operand เชน a and b เรยกวาexpression
• คำาสงในแตละบรรทดเชนy4 <= a nand b เรยกวาStatement
• Out <= in1 op in2; เรยกวาConcurrent SignalAssignment
VHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity gates is
port (a, b: in STD_LOGIC_VECTOR (3 downto 0);
y1, y2, y3, y4,y5: out STD_LOGIC_VECTOR (3 downto 0));end;architecture synth of gates isbegin
— — Five different two-input logic gates— —acting on 4 bit bussesy1 <= a and b;y2 <= a or b;y3 <= a xor b;y4 <= a nand b;y5 <= a nor b;
end;
4.2 Combinational Logic :4.2.1 Bitwise Operators• ทกครงทตวแปรดานขวามอของเครองหมาย <=
เปลยนคา ตวแปรดานซายมอจะเปลยนดวย• ดงนนเราสามารถเขยนวงจร Combination ในรปของ
Concurrent Signal Assignment
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 ถาจำานวนเปนเลขค
Verilogmodule and8 (input [7:0] a, output y);
assign y = &a;// &a is much easier to write than// assign y = a[7] & a[6] & a[5] & a[4] &// a[3] & a[2] & a[1] & a[0];
endmodule
4.2 Combinational Logic :4.2.3 Reduction Operators• ภาษา VHDL ไมม Reduction
Operator ดงนนจงตองเขยนConcurrent SignalAssignment แบบตรงๆ
VHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity and8 isport (a: in STD_LOGIC_VECTOR (7 downto 0);y: out STD_LOGIC);end;architecture synth of and8 isbegin
y <= a(7) and a(6) and a(5) and a(4) and a(3) and a(2) and a(1) and a(0);
end;
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
Verilogmodule mux2 (input [3:0] d0, d1, input s,output [3:0] y);
assign y = s ? d1 : d0;endmodule
4.2 Combinational Logic :4.2.4 Conditional Assignment• Conditional Assignment คอการเลอกๆสญญาณ
Input ทจะออกไปยง Output• ? : เปน Operator ชนด Ternary• Operator เนองจากมนม 3 Input
Verilogmodule mux2 (input [3:0] d0, d1, input s,output [3:0] y);
assign y = s ? d1 : d0;endmodule
4.2 Combinational Logic :4.2.4 Conditional Assignment
VHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity mux2 isport (d0, d1: in STD_LOGIC_VECTOR (3 downto 0);s: in STD_LOGIC;y: out STD_LOGIC_VECTOR (3 downto 0));end;architecture synth of mux2 isbegin
y <= d0 when s = ‘0’ else d1;end;
4.2 Combinational Logic :4.2.4 Conditional AssignmentVerilogmodule mux4 (input [3:0] d0, d1, d2, d3,input [1:0] s,output [3:0] y);
assign y = s[1] ? (s[0] ? d3 : d2): (s[0] ? d1 : d0);
endmodule
VHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity mux4 isport (d0, d1,d2, d3: in STD_LOGIC_VECTOR (3 downto 0);s: in STD_LOGIC_VECTOR (1 downto 0);y: out STD_LOGIC_VECTOR (3 downto 0));end;architecture synthl of mux4 isbegin
y <= d0 when s = “00” elsed1 when s = “01” elsed2 when s = “10” else d3;
end;
4.2 Combinational Logic :4.2.4 Conditional AssignmentVerilogmodule mux4 (input [3:0] d0, d1, d2, d3,input [1:0] s,output [3:0] y);
assign y = s[1] ? (s[0] ? d3 : d2): (s[0] ? d1 : d0);
endmodule
VHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity mux4 isport (d0, d1,d2, d3: in STD_LOGIC_VECTOR (3 downto 0);s: in STD_LOGIC_VECTOR (1 downto 0);y: out STD_LOGIC_VECTOR (3 downto 0));end;architecture synth2 of mux4 isbeginwith a select y <=
d0 when “00”,d1 when “01”,d2 when “10”,d3 when others;
end;
4.2 Combinational Logic :4.2.4 Conditional Assignment
4.2.5 Internal Variables• ในกรณทวงจร Combination มความซบซอนมาก เรา
นยมแบงการทำางานของวงจรออกเปนหลายๆขนตอน หรอแบงสมการบลนออกเปนหลายๆสมการ โดยใช
ตวแปรภายใน (Internal Variable) ในการเกบผลลพธการทำางานในแตละขน
• ตวอยางวงจร Full AdderS=A xor B xor Cin
Cout = AB + ACin + BCin
• เราสามารถเขยนใหมเปนP=A xor B, G = ABS=P xor Cin, Cout=G+PCin
4.2.5 Internal Variables• เราเรยก P และ G วาตวแปรภายใน• เราสามารถตงตวแปรภายในของ Verilog
โดยใชคำาสง wire
Verilogmodule fulladder(input a, b, cin,output s, cout);wire p, g;
assign p = a b;assign g = a & b;assign s = p cin;assign cout = g | (p & cin);
endmodule
4.2.5 Internal Variables• เราใชคำาสง signal ในการตงตวแปร
ภายในของ VHDLVHDLlibrary IEEE; use IEEE.STD_LOGIC_1164.all;entity fulladder isport(a, b, cin: in STD_LOGIC;s, cout: out STD_LOGIC);end;architecture synth of fulladder issignal p, g: STD_LOGIC;begin
p <= a xor b;g <= a and b;s <= p xor cin;cout <= g or (p and cin);
end;
4.2.5 Internal Variables• ขอสงเกต ในการเขยนโปรแกรมทวไปเชนภาษา C++
หรอ Java เราจะตองเขยน P=A xor B กอน จากนนจง เขยน S=P xor Cin
• แตลำาดบการเขยนคำาสงใน HDL ไมมความสำาคญ เนองจากคำาสงในแตละ Assignment จะถกคำานวณ
ใหมทกครงทตวแปรทางดานขวามอมการเปลยนแปลงคา