COE 405 Design Methodology Based on VHDL Dr. Aiman H. El-Maleh Computer Engineering Department King Fahd University of Petroleum & Minerals Dr. Aiman H.

Slides:



Advertisements
Similar presentations
COE 405 VHDL Basics Dr. Aiman H. El-Maleh Computer Engineering Department King Fahd University of Petroleum & Minerals Dr. Aiman H. El-Maleh Computer Engineering.
Advertisements

Verilog Intro: Part 1.
History TTL-logic PAL (Programmable Array Logic)
VHDL ELEC 418 Advanced Digital Systems Dr. Ron Hayne Images Courtesy of Thomson Engineering.
Introduction to VHDL (Lecture #5) ECE 331 – Digital System Design The slides included herein were taken from the materials accompanying Fundamentals of.
ECE C03 Lecture 18ECE C03 Lecture 61 Lecture 18 VHDL Modeling of Sequential Machines Prith Banerjee ECE C03 Advanced Digital Design Spring 1998.
Introduction to VHDL CSCE 496/896: Embedded Systems Witawas Srisa-an.
ELEN 468 Lecture 191 ELEN 468 Advanced Logic Design Lecture 19 VHDL.
ECE C03 Lecture 141 Lecture 14 VHDL Modeling of Sequential Machines Hai Zhou ECE 303 Advanced Digital Design Spring 2002.
VHDL. What is VHDL? VHDL: VHSIC Hardware Description Language  VHSIC: Very High Speed Integrated Circuit 7/2/ R.H.Khade.
CSET 4650 Field Programmable Logic Devices Dan Solarek VHDL Behavioral & Structural.
1 H ardware D escription L anguages Basic Language Concepts.
VHDL Training ©1995 Cypress Semiconductor 1 Introduction  VHDL is used to:  document circuits  simulate circuits  synthesize design descriptions 
ECE 2372 Modern Digital System Design
1 Part I: VHDL CODING. 2 Design StructureData TypesOperators and AttributesConcurrent DesignSequential DesignSignals and VariablesState Machines A VHDL.
CprE / ComS 583 Reconfigurable Computing Prof. Joseph Zambreno Department of Electrical and Computer Engineering Iowa State University Lecture #17 – Introduction.
A VHDL Tutorial ENG2410. ENG241/VHDL Tutorial2 Goals Introduce the students to the following: –VHDL as Hardware description language. –How to describe.
ENG6090 RCS1 ENG6090 Reconfigurable Computing Systems Hardware Description Languages Part 5: Modeling Structure.
VHDL Introduction. V- VHSIC Very High Speed Integrated Circuit H- Hardware D- Description L- Language.
VHDL IE- CSE. What do you understand by VHDL??  VHDL stands for VHSIC (Very High Speed Integrated Circuits) Hardware Description Language.
1 CAD for VLSI Tutorial #1 VHDL - Very High Speed Integrated Circuit (VHSIC) Hardware Description Language.
陳慶瀚 機器智慧與自動化技術 (MIAT) 實驗室 國立中央大學資工系 2009 年 10 月 8 日 ESD-04 VHDL 硬體描述語言概論 VHDL Hardware Description Language.
CWRU EECS 317 EECS 317 Computer Design LECTURE 1: The VHDL Adder Instructor: Francis G. Wolff Case Western Reserve University.
Fall 2004EE 3563 Digital Systems Design EE 3563 VHDL – Basic Language Elements  Identifiers: –basic identifier: composed of a sequence of one or more.
COE 202 Introduction to Verilog Computer Engineering Department College of Computer Sciences and Engineering King Fahd University of Petroleum and Minerals.
Lecture #8 Page 1 Lecture #8 Agenda 1.VHDL : Operators 2.VHDL : Signal Assignments Announcements 1.HW #4 assigned ECE 4110– Digital Logic Design.
Copyright(c) 1996 W. B. Ligon III1 Getting Started with VHDL VHDL code is composed of a number of entities Entities describe the interface of the component.
Fall 2004EE 3563 Digital Systems Design EE 3563 VHSIC Hardware Description Language  Required Reading: –These Slides –VHDL Tutorial  Very High Speed.
VHDL Very High Speed Integrated Circuit Hardware Description Language Shiraz University of shiraz spring 2011.
Anurag Dwivedi. Basic Block - Gates Gates -> Flip Flops.
Design Methodology Based on VHDL Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
Electrical and Computer Engineering University of Cyprus LAB 1: VHDL.
ECE 332 Digital Electronics and Logic Design Lab Lab 6 Concurrent Statements & Adders.
Discussed in class and on Fridays n FSMs (only synchronous, with asynchronous reset) –Moore –Mealy –Rabin-Scott n Generalized register: –With D FFs, –With.
(1) Basic Language Concepts © Sudhakar Yalamanchili, Georgia Institute of Technology, 2006.
Introduction to VHDL Simulation … Synthesis …. The digital design process… Initial specification Block diagram Final product Circuit equations Logic design.
Chapter 5 Introduction to VHDL. 2 Hardware Description Language A computer language used to design circuits with text-based descriptions of the circuits.
CEC 220 Digital Circuit Design More VHDL Fri, February 27 CEC 220 Digital Circuit Design Slide 1 of 15.
CEC 220 Digital Circuit Design Introduction to VHDL Wed, February 25 CEC 220 Digital Circuit Design Slide 1 of 19.
VHDL Discussion Sequential Sytems. Memory Elements. Registers. Counters IAY 0600 Digital Systems Design Alexander Sudnitson Tallinn University of Technology.
Introduction to ASIC flow and Verilog HDL
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
Digital Design Using VHDL and PLDs ECOM 4311 Digital System Design Chapter 1.
VHDL Programming Fundamentals Presented By Dr. Pradyut Kumar Biswal Department of Electronics, IIIT Bhubaneswar.
CEC 220 Digital Circuit Design Introduction to VHDL Friday, February 21 CEC 220 Digital Circuit Design Slide 1 of 10.
George Mason University Behavioral Modeling of Sequential-Circuit Building Blocks ECE 545 Lecture 8.
Case Study: Xilinx Synthesis Tool (XST). Arrays & Records 2.
CEC 220 Digital Circuit Design Introduction to VHDL Wed, Oct 14 CEC 220 Digital Circuit Design Slide 1 of 19.
1 Introduction to Engineering Spring 2007 Lecture 19: Digital Tools 3.
Combinational logic circuit
Basic Language Concepts
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
Structural style Modular design and hierarchy Part 1
Chapter 2. Introduction To VHDL
IAS 0600 Digital Systems Design
Behavioral Modeling in Verilog
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
CHAPTER 10 Introduction to VHDL
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
VHDL VHSIC Hardware Description Language VHSIC
RTL Style در RTL مدار ترتيبي به دو بخش (تركيبي و عناصر حافظه) تقسيم مي شود. مي توان براي هر بخش يك پروسس نوشت يا براي هر دو فقط يك پروسس نوشت. مرتضي صاحب.
Structural style Modular design and hierarchy Part 1
VHDL (VHSIC Hardware Description Language)
ECE 434 Advanced Digital System L10
Figure 8.1. The general form of a sequential circuit.
CprE / ComS 583 Reconfigurable Computing
Sequntial-Circuit Building Blocks
COE 202 Introduction to Verilog
System Controller Approach
EEL4712 Digital Design (VHDL Tutorial).
Presentation transcript:

COE 405 Design Methodology Based on VHDL Dr. Aiman H. El-Maleh Computer Engineering Department King Fahd University of Petroleum & Minerals Dr. Aiman H. El-Maleh Computer Engineering Department King Fahd University of Petroleum & Minerals

2-2 OutlineOutline n Elements of VHDL n Top-Down Design n Top-Down Design with VHDL Serial Adder Design n Subprograms n Controller Description Moore sequence detector n VHDL Operators n Elements of VHDL n Top-Down Design n Top-Down Design with VHDL Serial Adder Design n Subprograms n Controller Description Moore sequence detector n VHDL Operators

2-3 Interface and Architectural Specifications Entity component_name IS input and output ports physical and other parameters END component_name; Architecture identifier of component_name IS declarations BEGIN specification of the functionality of the component in terms its inputs & influenced by physical and other parameters. END identifier;

2-4 PackagesPackages n Packages are used to encapsulate information that is to be shared among multiple design units. n A package is used by the USE clause e.g. Use work.package_name.all n Packages are used to encapsulate information that is to be shared among multiple design units. n A package is used by the USE clause e.g. Use work.package_name.all Package package_name IS component declarations sub-program parameters END package_name; Package Body package_name IS type definitions sub-programs END package_name;

2-5 Package Examples n Standard Package Defines primitive types, subtypes, and functions. e.g. Type Boolean IS (false, true); e.g. Type Bit is (‘0’, ‘1’); n TEXTIO Package Defines types, procedures, and functions for standard text I/O from ASCII files. n Standard Package Defines primitive types, subtypes, and functions. e.g. Type Boolean IS (false, true); e.g. Type Bit is (‘0’, ‘1’); n TEXTIO Package Defines types, procedures, and functions for standard text I/O from ASCII files.

2-6 Design Libraries… n VHDL supports the use of design libraries for categorizing components or utilities. n Applications of libraries include Sharing of components between designers Grouping components of standard logic families Categorizing special-purpose utilities such as subprograms or types n Exiting libraries STD Library Contains the STANDARD and TEXTIO packages Contains all the standard types & utilities Visible to all designs WORK library Root library for the user n VHDL supports the use of design libraries for categorizing components or utilities. n Applications of libraries include Sharing of components between designers Grouping components of standard logic families Categorizing special-purpose utilities such as subprograms or types n Exiting libraries STD Library Contains the STANDARD and TEXTIO packages Contains all the standard types & utilities Visible to all designs WORK library Root library for the user

2-7 …Design Libraries n IEEE library Contains VHDL-related standards Contains the std_logic_1164 (IEEE ) package Defines a nine values logic system n To make a library visible to a design LIBRARY libname; n The following statement is assumed by all designs LIBRARY WORK; n To use the std_logic_1164 package LIBRARY IEEE USE IEEE.std_logic_1164.ALL n IEEE library Contains VHDL-related standards Contains the std_logic_1164 (IEEE ) package Defines a nine values logic system n To make a library visible to a design LIBRARY libname; n The following statement is assumed by all designs LIBRARY WORK; n To use the std_logic_1164 package LIBRARY IEEE USE IEEE.std_logic_1164.ALL

2-8 Design Binding n Using Configuration, VHDL allows Binding of Entities and Architectures. binding of subcomponents of a design to elements of various libraries. n Using Configuration, VHDL allows Binding of Entities and Architectures. binding of subcomponents of a design to elements of various libraries. Configuration config_name of component_name IS binding of Entities and Architectures specifying parameters of a design binding components of a library to subcomponents END config_name;

2-9 Top-Down Design n Top-down design process uses a divide-and-conquer strategy n Top-down design involves recursive partitioning of a system into subcomponents until all subcomponents are manageable design parts n Design of a component is manageable if the component is Available as part of a library Can be implemented by modifying an already available part Can be described for a synthesis program or an automatic hardware generator. n Top-down design process uses a divide-and-conquer strategy n Top-down design involves recursive partitioning of a system into subcomponents until all subcomponents are manageable design parts n Design of a component is manageable if the component is Available as part of a library Can be implemented by modifying an already available part Can be described for a synthesis program or an automatic hardware generator.

2-10 Recursive Partitioning Procedure n Mapping to hardware, depends on target technology, available libraries, and available tools. Parition (system) IF HardwareMappingOf(system) is done Then SaveHardwareof(system) ELSE FOR EVERY Functionally-Distinct Part_I of System Partition (Part_I) END FOR; END IF; END Parition;

2-11 Top-Down Design, Bottom-Up Implementation System Under Design SSC1SSC4SSC3SSC2 SSC3nSSC31 SSC42SSC41 SSC312SSC311 SSC3n2SSC3n1 Design Implementation SSC: system sub-component

2-12 Design Verification n Initially, a behavioral description of system under design (SUD) must be simulated to verify design. n After first level of partitioning A behavioral description of each of the subcomponents must be developed A structural hardware model of the SUD is formed by wiring subcomponents behavioral descriptions Simulating the new model and comparing it with original SUD description verifies correctness of first level of partitioning n Initially, a behavioral description of system under design (SUD) must be simulated to verify design. n After first level of partitioning A behavioral description of each of the subcomponents must be developed A structural hardware model of the SUD is formed by wiring subcomponents behavioral descriptions Simulating the new model and comparing it with original SUD description verifies correctness of first level of partitioning

2-13 Verifying First Level of Partitioning System Under Design SSC1SSC4SSC3SSC2 Behavioral Model Interconnection of Behavioral Models Compare

2-14 Verifying Hardware Implementation of SSC1 and SSC2 System Under Design SSC1SSC4SSC3SSC2 Behavioral Model Mixed Level Model Compare

2-15 Verifying the Final Design System Under Design SSC1SSC4SSC3SSC2 SSC3nSSC31 SSC42SSC41 SSC312SSC311 SSC3n2SSC3n1 Behavioral Model Compare Hardware Level Model

2-16 Verifying Hardware Implementation of SSC3 SSC3 SSC3nSSC31 SSC312SSC311 SSC3n2SSC3n1 Behavioral Model Hardware Level Model Compare

2-17 Verifying the Final Design System Under Design SSC1SSC4SSC3SSC2 SSC42SSC41 Behavioral Model Compare Mixed Level Model Back Annotation: Behavioral models of subcomponents can be adjusted to mimic properties of hardware-level models.

2-18 Top Down Design of Serial Adder n Serial data is synchronized with clock and appear on a and b inputs n Valid data bits on a and b appear after a synchronous pulse on start n After eight clock pulses, the addition of a and b will appear on result n The ready output is set to 1 to indicate that the result of addition is ready and remains one until another start pulse is applied n Serial data is synchronized with clock and appear on a and b inputs n Valid data bits on a and b appear after a synchronous pulse on start n After eight clock pulses, the addition of a and b will appear on result n The ready output is set to 1 to indicate that the result of addition is ready and remains one until another start pulse is applied Serial Adder a b start clock result ready 8

2-19 Design Assumptions n Synthesis tools: Capable of synthesizing logic expressions to combinational logic blocks n Design Library: A 2x1 multiplexer with active high inputs and outputs A synchronous D-FF with synchronous active high reset input VHDL models of library elements are provided n Parts from previous designs Divide-by-8 counter (3-bit counter) Synchronous reset Single bit output remains high as long as the circuit is counting; it goes to low when reset is pressed or 8 clock edges are counted n Synthesis tools: Capable of synthesizing logic expressions to combinational logic blocks n Design Library: A 2x1 multiplexer with active high inputs and outputs A synchronous D-FF with synchronous active high reset input VHDL models of library elements are provided n Parts from previous designs Divide-by-8 counter (3-bit counter) Synchronous reset Single bit output remains high as long as the circuit is counting; it goes to low when reset is pressed or 8 clock edges are counted

2-20 VHDL Model of 2x1 Multiplexer Entity mux2_1 IS Generic (dz_delay: TIME := 6 NS); PORT (sel, data1, data0: IN BIT; z: OUT BIT); END mux2_1; Architecture dataflow OF mux2_1 IS Begin z <= data1 AFTER dz_delay WHEN sel=‘1’ ELSE data0 AFTER dz_delay; END dataflow; Entity mux2_1 IS Generic (dz_delay: TIME := 6 NS); PORT (sel, data1, data0: IN BIT; z: OUT BIT); END mux2_1; Architecture dataflow OF mux2_1 IS Begin z <= data1 AFTER dz_delay WHEN sel=‘1’ ELSE data0 AFTER dz_delay; END dataflow; 1D 0D Z S1 sel data0 data1 z

2-21 VHDL Model of D-FF Entity flop IS Generic (td_reset, td_in: TIME := 8 NS); PORT (reset, din, clk: IN BIT; qout: OUT BIT :=‘0’); END flop; Architecture behavioral OF flop IS Begin Process(clk) Begin IF (clk = ‘0’ AND clk’Event ) Then IF reset = ‘1’ Then qout <= ‘0’ AFTER td_reset ; ELSE qout <= din AFTER td_in ; END IF; END process; END behavioral ; Entity flop IS Generic (td_reset, td_in: TIME := 8 NS); PORT (reset, din, clk: IN BIT; qout: OUT BIT :=‘0’); END flop; Architecture behavioral OF flop IS Begin Process(clk) Begin IF (clk = ‘0’ AND clk’Event ) Then IF reset = ‘1’ Then qout <= ‘0’ AFTER td_reset ; ELSE qout <= din AFTER td_in ; END IF; END process; END behavioral ; 1RQ 1D 1C reset din clk qout

2-22 Divide-by-8 Counter Entity counter IS Generic (td_cnt: TIME := 8 NS); PORT (reset, clk: IN BIT; counting: OUT BIT :=‘0’); Constant limit: INTEGER :=8; END counter ; Architecture behavioral OF counter IS Begin Process(clk) Variable count: INTEGER := limit; Begin IF (clk = ‘0’ AND clk’Event ) THEN IF reset = ‘1’ THEN count := 0 ; ELSE IF count < limit THEN count:= count+1; END IF; END IF; IF count = limit Then counting <= ‘0’ AFTER td_cnt; ELSE counting <= ‘1’ AFTER td_cnt; END IF; END process; END behavioral ; Entity counter IS Generic (td_cnt: TIME := 8 NS); PORT (reset, clk: IN BIT; counting: OUT BIT :=‘0’); Constant limit: INTEGER :=8; END counter ; Architecture behavioral OF counter IS Begin Process(clk) Variable count: INTEGER := limit; Begin IF (clk = ‘0’ AND clk’Event ) THEN IF reset = ‘1’ THEN count := 0 ; ELSE IF count < limit THEN count:= count+1; END IF; END IF; IF count = limit Then counting <= ‘0’ AFTER td_cnt; ELSE counting <= ‘1’ AFTER td_cnt; END IF; END process; END behavioral ;

2-23 Serial Adder Behavioral Description Entity serial_adder IS PORT (a, b, start, clock: IN BIT; ready: OUT BIT; result: BUFFER Bit_Vector (7 downto 0)); END serial_adder ; Architecture behavioral OF serial_adder IS Begin Process(clock) Variable count: INTEGER := 8;Variable sum, carry: BIT; Begin IF (clock = ‘0’ AND clock’Event ) THEN IF start = ‘1’ THEN count := 0 ; carry:=‘0’; ELSE IF count < 8 THEN count:= count+1; sum := a XOR b XOR carry; carry := (a AND b) OR (a AND carry) OR (b AND carry); result <= sum & result(7 downto 1); END IF; IF count = 8 Then ready <= ‘1’; ELSE ready <= ‘0’; END IF; END IF; END process; END behavioral; Entity serial_adder IS PORT (a, b, start, clock: IN BIT; ready: OUT BIT; result: BUFFER Bit_Vector (7 downto 0)); END serial_adder ; Architecture behavioral OF serial_adder IS Begin Process(clock) Variable count: INTEGER := 8;Variable sum, carry: BIT; Begin IF (clock = ‘0’ AND clock’Event ) THEN IF start = ‘1’ THEN count := 0 ; carry:=‘0’; ELSE IF count < 8 THEN count:= count+1; sum := a XOR b XOR carry; carry := (a AND b) OR (a AND carry) OR (b AND carry); result <= sum & result(7 downto 1); END IF; IF count = 8 Then ready <= ‘1’; ELSE ready <= ‘0’; END IF; END IF; END process; END behavioral;

2-24 Serial Adder First Level of Partitioning Serial Adder Full_addercountershifterFlip_flop Can be synthesizedAvailable in library & previous designs

2-25 General Layout of Serial Adder Adder Shifter Counter Flop clock en si a b carry_in carry_out counting sum

2-26 Full-Adder VHDL Description Entity fulladder IS port (a, b, cin: IN bit; sum, cout: OUT bit); END fulladder; Architecture behavioral OF fulladder IS Begin sum <= a xor a xor cin; cout <= (a and b) or (b and cin) or (a and cin); END behavioral ; Entity fulladder IS port (a, b, cin: IN bit; sum, cout: OUT bit); END fulladder; Architecture behavioral OF fulladder IS Begin sum <= a xor a xor cin; cout <= (a and b) or (b and cin) or (a and cin); END behavioral ;

2-27 Shifter VHDL Description Entity shifter IS port (sin, reset, enable, clk: IN bit; parout: BUFFER Bit_Vector(7 downto 0)); END shifter ; Architecture dataflow OF shifter IS Begin sh: BLOCK (clk=‘0’ AND NOT clk’STABLE) Begin parout <= GUARDED “ ” WHEN reset=‘1’ ELSE sin & parout(7 downto 1) WHEN enable=‘1’ ELSE parout; - -could use here UNAFFECTED (VHDL’93) END BLOCK; END dataflow ; Entity shifter IS port (sin, reset, enable, clk: IN bit; parout: BUFFER Bit_Vector(7 downto 0)); END shifter ; Architecture dataflow OF shifter IS Begin sh: BLOCK (clk=‘0’ AND NOT clk’STABLE) Begin parout <= GUARDED “ ” WHEN reset=‘1’ ELSE sin & parout(7 downto 1) WHEN enable=‘1’ ELSE parout; - -could use here UNAFFECTED (VHDL’93) END BLOCK; END dataflow ;

2-28 Structural Description of Serial Adder … Entity serial_adder IS PORT (a, b, start, clock: IN BIT; ready: OUT BIT; result: OUT Bit_Vector (7 downto 0)); END serial_adder ; Architecture structural OF serial_adder IS Component counter IS Generic (td_cnt: TIME := 8 NS); PORT (reset, clk: IN BIT; counting: OUT BIT :=‘0’); END component ; Component shifter IS port (sin, reset, enable, clk: IN bit; parout: BUFFER Bit_Vector(7 downto 0)); END component ; Component fulladder IS port (a, b, cin: IN bit; sum, cout: OUT bit); END component ; Component flop IS Generic (td_reset, td_in: TIME := 8 NS); PORT (reset, din, clk: IN BIT; qout: Buffer BIT :=‘0’); END component ; Entity serial_adder IS PORT (a, b, start, clock: IN BIT; ready: OUT BIT; result: OUT Bit_Vector (7 downto 0)); END serial_adder ; Architecture structural OF serial_adder IS Component counter IS Generic (td_cnt: TIME := 8 NS); PORT (reset, clk: IN BIT; counting: OUT BIT :=‘0’); END component ; Component shifter IS port (sin, reset, enable, clk: IN bit; parout: BUFFER Bit_Vector(7 downto 0)); END component ; Component fulladder IS port (a, b, cin: IN bit; sum, cout: OUT bit); END component ; Component flop IS Generic (td_reset, td_in: TIME := 8 NS); PORT (reset, din, clk: IN BIT; qout: Buffer BIT :=‘0’); END component ;

2-29 … Structural Description of Serial Adder SIGNAL sum, carry_in, carry_out, counting: BIT; Begin u1: fulladder port map (a, b, carry_in, sum, carry_out); u2: flop port map (start, carry_out, clock, carry_in); u3: counter port map (start, clock, counting); u4: shifter port map (sum, start, counting, clock, result); u5: ready <= NOT counting; END structural ; SIGNAL sum, carry_in, carry_out, counting: BIT; Begin u1: fulladder port map (a, b, carry_in, sum, carry_out); u2: flop port map (start, carry_out, clock, carry_in); u3: counter port map (start, clock, counting); u4: shifter port map (sum, start, counting, clock, result); u5: ready <= NOT counting; END structural ;

2-30 Second Level of Partitioning: Partitioning Shifter n Shifter needs eight flip-flops with synchronous reset and clock enabling (der_flop) n der_flop cannot be directly implemented with given tools and library n Shifter needs eight flip-flops with synchronous reset and clock enabling (der_flop) n der_flop cannot be directly implemented with given tools and library Shifter der_flop

2-31 Behavioral Model of der_flop Entity der_flop IS PORT (din, reset, enable, clk: IN BIT; qout: Buffer BIT :=‘0’); END der_flop; Architecture behavioral OF der_flop IS Begin Process(clk) Begin IF (clk = ‘0’ AND clk’Event ) Then IF reset = ‘1’ Then qout <= ‘0’; ELSE IF enable=‘1’ Then qout <= din; END IF; END process; END behavioral ; Entity der_flop IS PORT (din, reset, enable, clk: IN BIT; qout: Buffer BIT :=‘0’); END der_flop; Architecture behavioral OF der_flop IS Begin Process(clk) Begin IF (clk = ‘0’ AND clk’Event ) Then IF reset = ‘1’ Then qout <= ‘0’; ELSE IF enable=‘1’ Then qout <= din; END IF; END process; END behavioral ;

2-32 Structural Description of Shifter Entity shifter IS port (sin, reset, enable, clk: IN bit; parout: BUFFER Bit_Vector(7 downto 0)); END shifter ; Architecture structural OF shifter IS Component der_flop IS PORT (din, reset, enable, clk: IN BIT; qout: Buffer BIT :=‘0’); END component; Begin b7: der_flop port map (sin, reset, enable, clk, parout(7)); b6: der_flop port map (parout(7), reset, enable, clk, parout(6)); b5: der_flop port map (parout(6), reset, enable, clk, parout(5)); b4: der_flop port map (parout(5), reset, enable, clk, parout(4)); b3: der_flop port map (parout(4), reset, enable, clk, parout(3)); b2: der_flop port map (parout(3), reset, enable, clk, parout(2)); b1: der_flop port map (parout(2), reset, enable, clk, parout(1)); b0: der_flop port map (parout(1), reset, enable, clk, parout(0)); END structural ; Entity shifter IS port (sin, reset, enable, clk: IN bit; parout: BUFFER Bit_Vector(7 downto 0)); END shifter ; Architecture structural OF shifter IS Component der_flop IS PORT (din, reset, enable, clk: IN BIT; qout: Buffer BIT :=‘0’); END component; Begin b7: der_flop port map (sin, reset, enable, clk, parout(7)); b6: der_flop port map (parout(7), reset, enable, clk, parout(6)); b5: der_flop port map (parout(6), reset, enable, clk, parout(5)); b4: der_flop port map (parout(5), reset, enable, clk, parout(4)); b3: der_flop port map (parout(4), reset, enable, clk, parout(3)); b2: der_flop port map (parout(3), reset, enable, clk, parout(2)); b1: der_flop port map (parout(2), reset, enable, clk, parout(1)); b0: der_flop port map (parout(1), reset, enable, clk, parout(0)); END structural ;

2-33 Partitioning der_flop der_flop mux2_1flop 1D 0D Z S1 enable din 1RQ 1D 1C reset clk qout dff_in

2-34 Structural Description of der_flop Entity der_flop IS PORT (din, reset, enable, clk: IN BIT; qout: Buffer BIT :=‘0’); END der_flop; Architecture structural OF der_flop IS Component flop IS Generic (td_reset, td_in: TIME := 8 NS); PORT (reset, din, clk: IN BIT; qout: Buffer BIT :=‘0’); END component ; Component mux2_1 IS Generic (dz_delay: TIME := 6 NS); PORT (sel, data1, data0: IN BIT; z: OUT BIT); END component ; Signal dff_in: BIT; Begin mx: mux2_1 port map (enable, din, qout, dff_in); ff: flop port map (reset, dff_in, clk, qout); END structural ; Entity der_flop IS PORT (din, reset, enable, clk: IN BIT; qout: Buffer BIT :=‘0’); END der_flop; Architecture structural OF der_flop IS Component flop IS Generic (td_reset, td_in: TIME := 8 NS); PORT (reset, din, clk: IN BIT; qout: Buffer BIT :=‘0’); END component ; Component mux2_1 IS Generic (dz_delay: TIME := 6 NS); PORT (sel, data1, data0: IN BIT; z: OUT BIT); END component ; Signal dff_in: BIT; Begin mx: mux2_1 port map (enable, din, qout, dff_in); ff: flop port map (reset, dff_in, clk, qout); END structural ;

2-35 Complete Design of Serial Adder Serial Adder Full_addercounterFlip_flop Shifter der_flop mux2_1flop

2-36 Synthesizable Serial Adder Entity serial_adder IS PORT (a, b, start, clock: IN BIT; ready: OUT BIT; result: BUFFER Bit_Vector (7 downto 0)); END serial_adder ; Architecture syn OF serial_adder IS Begin Process(clock) subtype CNT8 IS INTEGER Range 0 to 8; Variable count: CNT8 := 8;Variable sum, carry: BIT; Begin IF (clock = ‘0’ AND clock’Event ) THEN IF start = ‘1’ THEN count := 0 ; carry:=‘0’; ELSE IF count < 8 THEN count:= count+1; sum := a XOR b XOR carry; carry := (a AND b) OR (a AND carry) OR (b AND carry); result <= sum & result(7 downto 1); END IF; IF count = 8 Then ready <= ‘1’; ELSE ready <= ‘0’; END IF; END IF; END process; END syn; Entity serial_adder IS PORT (a, b, start, clock: IN BIT; ready: OUT BIT; result: BUFFER Bit_Vector (7 downto 0)); END serial_adder ; Architecture syn OF serial_adder IS Begin Process(clock) subtype CNT8 IS INTEGER Range 0 to 8; Variable count: CNT8 := 8;Variable sum, carry: BIT; Begin IF (clock = ‘0’ AND clock’Event ) THEN IF start = ‘1’ THEN count := 0 ; carry:=‘0’; ELSE IF count < 8 THEN count:= count+1; sum := a XOR b XOR carry; carry := (a AND b) OR (a AND carry) OR (b AND carry); result <= sum & result(7 downto 1); END IF; IF count = 8 Then ready <= ‘1’; ELSE ready <= ‘0’; END IF; END IF; END process; END syn;

2-37 SubprogramsSubprograms n VHDL allows the use of functions and procedures n Most of high-level behavioral constructs in VHDL can be used in body of functions and procedures n Subprograms can be declared, defined, and invoked as in software languages n Functions can be used to represent Boolean equations for type conversions for delay value calculations n Procedures can be used for type conversion description of counters outputting internal binary data in integer form n VHDL allows the use of functions and procedures n Most of high-level behavioral constructs in VHDL can be used in body of functions and procedures n Subprograms can be declared, defined, and invoked as in software languages n Functions can be used to represent Boolean equations for type conversions for delay value calculations n Procedures can be used for type conversion description of counters outputting internal binary data in integer form

2-38 Procedure Example Type Byte ARRAY (7 Downto 0) of BIT; Procedure byte_to_integer(ib: IN Byte; oi: OUT Integer) IS Variable result: Integer :=0; Begin For I IN 0 To 7 Loop IF ib(I) = ‘1’ Then result := result + 2**I; END IF; END Loop; oi := result; END byte_to_integer; Type Byte ARRAY (7 Downto 0) of BIT; Procedure byte_to_integer(ib: IN Byte; oi: OUT Integer) IS Variable result: Integer :=0; Begin For I IN 0 To 7 Loop IF ib(I) = ‘1’ Then result := result + 2**I; END IF; END Loop; oi := result; END byte_to_integer;

2-39 Function Example Entity fulladder IS Port (a, b, cin: IN BIT; sum, cout: OUT BIT); END fulladder; Architecture behavioral OF fulladder IS Function fadd(a, b, c : IN BIT) RETURN Bit_Vector IS variable sc: Bit_Vector(1 downto 0); Begin sc(1) := a XOR b XOR c; sc(0) := (a AND b) OR (a AND c) OR (b AND c); Return sc; END; Begin (sum, cout) <= fadd(a, b, cin); END behavioral ; Entity fulladder IS Port (a, b, cin: IN BIT; sum, cout: OUT BIT); END fulladder; Architecture behavioral OF fulladder IS Function fadd(a, b, c : IN BIT) RETURN Bit_Vector IS variable sc: Bit_Vector(1 downto 0); Begin sc(1) := a XOR b XOR c; sc(0) := (a AND b) OR (a AND c) OR (b AND c); Return sc; END; Begin (sum, cout) <= fadd(a, b, cin); END behavioral ;

2-40 Controller Description n Moore Sequence Detector Detection sequence is 110 n Moore Sequence Detector Detection sequence is 110 IF 110 found on x Then Z gets ‘1’ Else z gets ‘0’ End x clk z Reset /0 got1 /0 got11 /0 got110 /

2-41 VHDL Description of Moore 110 Sequence Detector ENTITY moore_110_detector IS PORT (x, clk : IN BIT; z : OUT BIT); END moore_110_detector; ARCHITECTURE behavioral OF moore_110_detector IS TYPE state IS (reset, got1, got11, got110); SIGNAL current : state := reset; BEGIN PROCESS(clk) BEGIN IF (clk = '1' AND CLK’Event) THEN CASE current IS WHEN reset => IF x = '1' THEN current IF x = '1' THEN current IF x = '1' THEN current IF x = '1' THEN current <= got1; ELSE current <= reset; END IF; END CASE; END IF; END PROCESS; z <='1' WHEN current = got110 ELSE '0'; END behavioral; ENTITY moore_110_detector IS PORT (x, clk : IN BIT; z : OUT BIT); END moore_110_detector; ARCHITECTURE behavioral OF moore_110_detector IS TYPE state IS (reset, got1, got11, got110); SIGNAL current : state := reset; BEGIN PROCESS(clk) BEGIN IF (clk = '1' AND CLK’Event) THEN CASE current IS WHEN reset => IF x = '1' THEN current IF x = '1' THEN current IF x = '1' THEN current IF x = '1' THEN current <= got1; ELSE current <= reset; END IF; END CASE; END IF; END PROCESS; z <='1' WHEN current = got110 ELSE '0'; END behavioral;

2-42 VHDL Predefined Operators n Logical Operators: NOT, AND, OR, NAND, NOR, XOR, XNOR Operand Type: Bit, Boolean, Bit_vector Result Type: Bit, Boolean, Bit_vector n Relational Operators: =, /=,, >= Operand Type: Any type Result Type: Boolean n Arithmetic Operators: +, -, *, / Operand Type: Integer, Real Result Type: Integer, Real n Concatenation Operator: & Operand Type: Arrays or elements of same type Result Type: Arrays n Shift Operators: SLL, SRL, SLA, SRA, ROL, ROR Operand Type: Bit or Boolean vector Result Type: same type n Logical Operators: NOT, AND, OR, NAND, NOR, XOR, XNOR Operand Type: Bit, Boolean, Bit_vector Result Type: Bit, Boolean, Bit_vector n Relational Operators: =, /=,, >= Operand Type: Any type Result Type: Boolean n Arithmetic Operators: +, -, *, / Operand Type: Integer, Real Result Type: Integer, Real n Concatenation Operator: & Operand Type: Arrays or elements of same type Result Type: Arrays n Shift Operators: SLL, SRL, SLA, SRA, ROL, ROR Operand Type: Bit or Boolean vector Result Type: same type