CprE 583 Reconfigurable Computing

Similar documents
CprE 583 Reconfigurable Computing

ECE 545 Lecture 8. Data Flow Description of Combinational-Circuit Building Blocks. George Mason University

ECE 545 Lecture 12. Datapath vs. Controller. Structure of a Typical Digital System Data Inputs. Required reading. Design of Controllers

ECEU530. Last Few Lectures. ECE U530 Digital Hardware Synthesis. What is on Quiz 2. Projects. Today:

ECE 448 Lecture 3. Combinational-Circuit Building Blocks. Data Flow Modeling of Combinational Logic

Lecture 1: VHDL Quick Start. Digital Systems Design. Fall 10, Dec 17 Lecture 1 1

ECE 448 Lecture 3. Combinational-Circuit Building Blocks. Data Flow Modeling of Combinational Logic

The University of Alabama in Huntsville ECE Department CPE Midterm Exam February 26, 2003

VHDL Modeling Behavior from Synthesis Perspective -Part B - EL 310 Erkay Savaş Sabancı University

Lecture 7. Standard ICs FPGA (Field Programmable Gate Array) VHDL (Very-high-speed integrated circuits. Hardware Description Language)

Chapter 6 Combinational-Circuit Building Blocks

310/ ICTP-INFN Advanced Tranining Course on FPGA and VHDL for Hardware Simulation and Synthesis 27 November - 22 December 2006

COE 405, Term 062. Design & Modeling of Digital Systems. HW# 1 Solution. Due date: Wednesday, March. 14

Writing VHDL for RTL Synthesis

Advanced Training Course on FPGA Design and VHDL for Hardware Simulation and Synthesis. 26 October - 20 November, 2009

Lecture 12 VHDL Synthesis

VHDL And Synthesis Review

Digital Systems Design

Lab # 5. Subprograms. Introduction

Summary of FPGA & VHDL

Hardware Description Language VHDL (1) Introduction

FSM Components. FSM Description. HDL Coding Methods. Chapter 7: HDL Coding Techniques

Lecture 4: Modeling in VHDL (Continued ) EE 3610 Digital Systems

ELE432. ADVANCED DIGITAL DESIGN HACETTEPE UNIVERSITY ROUTING and FPGA MEMORY. In part from ECE 448 FPGA and ASIC Design with VHDL

Introduction to VHDL. Yvonne Avilés Colaboration: Irvin Ortiz Flores Rapid System Prototyping Laboratory (RASP) University of Puerto Rico at Mayaguez

ECEU530. Project Presentations. ECE U530 Digital Hardware Synthesis. Rest of Semester. Memory Structures

Part 4: VHDL for sequential circuits. Introduction to Modeling and Verification of Digital Systems. Memory elements. Sequential circuits

Control and Datapath 8

Synthesis from VHDL. Krzysztof Kuchcinski Department of Computer Science Lund Institute of Technology Sweden

VHDL for Synthesis. Course Description. Course Duration. Goals

Lattice VHDL Training

EEL 4783: HDL in Digital System Design

Sequential Logic - Module 5

Assignment. Last time. Last time. ECE 4514 Digital Design II. Back to the big picture. Back to the big picture

CSE140L: Components and Design

CSCI Lab 3. VHDL Syntax. Due: Tuesday, week6 Submit to: \\fs2\csci250\lab-3\

ECE 448 Lecture 4. Sequential-Circuit Building Blocks. Mixing Description Styles

The VHDL Hardware Description Language

ECE 545 Lecture 6. Behavioral Modeling of Sequential-Circuit Building Blocks. George Mason University

3 Designing Digital Systems with Algorithmic State Machine Charts

Contents. Appendix D VHDL Summary Page 1 of 23

COE 405 Design Methodology Based on VHDL

Lecture 11 Memories in Xilinx FPGAs

CSE140L: Components and Design Techniques for Digital Systems Lab

ECOM 4311 Digital Systems Design

Lecture 10 Subprograms & Overloading

VHDL: RTL Synthesis Basics. 1 of 59

DIGITAL LOGIC WITH VHDL (Fall 2013) Unit 6

Lecture 5: State Machines, Arrays, Loops. EE 3610 Digital Systems

EEL 4783: Hardware/Software Co-design with FPGAs

ELCT 501: Digital System Design

Computer-Aided Digital System Design VHDL

Synthesis vs. Compilation Descriptions mapped to hardware Verilog design patterns for best synthesis. Spring 2007 Lec #8 -- HW Synthesis 1

Review of Digital Design with VHDL

Topics. Midterm Finish Chapter 7

ECE 545 Lecture 5. Data Flow Modeling in VHDL. George Mason University

Abi Farsoni, Department of Nuclear Engineering and Radiation Health Physics, Oregon State University

Introduction to VHDL. Main language concepts

DIGITAL LOGIC DESIGN VHDL Coding for FPGAs Unit 6

Field Programmable Gate Array

VHDL. Official Definition: VHSIC Hardware Description Language VHISC Very High Speed Integrated Circuit

Introduction to VHDL

Timing in synchronous systems

Inthis lecture we will cover the following material:

DESCRIPTION OF DIGITAL CIRCUITS USING VHDL

Introduction to VHDL #1

Sequential Statement

CS211 Digital Systems/Lab. Introduction to VHDL. Hyotaek Shim, Computer Architecture Laboratory

VHDL for Complex Designs

Logic Synthesis. EECS150 - Digital Design Lecture 6 - Synthesis

Today. Comments about assignment Max 1/T (skew = 0) Max clock skew? Comments about assignment 3 ASICs and Programmable logic Others courses

VHDL for FPGA Design. by : Mohamed Samy

VHDL: A Crash Course

[VARIABLE declaration] BEGIN. sequential statements

VHDL. ELEC 418 Advanced Digital Systems Dr. Ron Hayne. Images Courtesy of Cengage Learning

UNIT I Introduction to VHDL VHDL: - V -VHSIC, H - Hardware, D - Description, L Language Fundamental section of a basic VHDL code Library :

VHDL Essentials Simulation & Synthesis

Two HDLs used today VHDL. Why VHDL? Introduction to Structured VLSI Design

Getting Started with VHDL

VHDL. VHDL History. Why VHDL? Introduction to Structured VLSI Design. Very High Speed Integrated Circuit (VHSIC) Hardware Description Language

ECE 545: Lecture 11. Programmable Logic Memories

ECE 545: Lecture 11. Programmable Logic Memories. Recommended reading. Memory Types. Memory Types. Memory Types specific to Xilinx FPGAs


EECS150 - Digital Design Lecture 10 Logic Synthesis

COVER SHEET: Total: Regrade Info: 5 (5 points) 2 (8 points) 6 (10 points) 7b (13 points) 7c (13 points) 7d (13 points)

JUNE, JULY 2013 Fundamentals of HDL (10EC45) PART A

Digital System Construction

HDL Coding Style Xilinx, Inc. All Rights Reserved

Building Blocks. Entity Declaration. Entity Declaration with Generics. Architecture Body. entity entity_name is. entity register8 is

ECE 545 Lecture 12. FPGA Embedded Resources 12/8/11. Resources. Recommended reading. Use of Embedded FPGA Resources in SHA-3 Candidates

ECE 699: Lecture 9. Programmable Logic Memories

CSE 260 Introduction to Digital Logic and Computer Design. Exam 1. Your name 2/13/2014

VHDL: Modeling RAM and Register Files. Textbook Chapters: 6.6.1, 8.7, 8.8, 9.5.2, 11.2

EECS150 - Digital Design Lecture 10 Logic Synthesis

FPGA Design Challenge :Techkriti 14 Digital Design using Verilog Part 1

Reconfigurable Hardware Design (coursework)

Modeling Complex Behavior

Outline. CPE/EE 422/522 Advanced Logic Design L05. Review: General Model of Moore Sequential Machine. Review: Mealy Sequential Networks.

Inferring Storage Elements

Problem Set 10 Solutions

Transcription:

Recap Moore FSM Example CprE / ComS 583 Reconfigurable Computing Moore FSM that recognizes sequence 10 0 1 0 1 S0 / 0 S1 / 0 1 S2 / 1 Prof. Joseph Zambreno Department of Electrical and Computer Engineering Iowa State University Lecture #19 VHDL for Synthesis II reset Meaning of states: S0: No elements of the sequence 0 S1: 1 S2: 10 Lect-19.2 Recap Mealy FSM Example Mealy FSM that recognizes sequence 10 reset Meaning of states: 0 / 0 1 / 0 1 / 0 S0 S0: No elements of the sequence 0 / 1 S1 S1: 1 Moore FSM Example VHDL TYPE state IS (S0, S1, S2 SIGNAL Moore_state: state; U_Moore: PROCESS (clock, reset) IF(reset = 1 ) THEN Moore_state <= S0; ELSIF (clock = 1 AND clock event) THEN CASE Moore_state IS WHEN S0 => IF input = 1 THEN Moore_state <= S1; Moore_state <= S0; Lect-19.3 Lect-19.4 Moore FSM Example VHDL (cont.) WHEN S1 => IF input = 0 THEN Moore_state <= S2; Moore_state <= S1; WHEN S2 => IF input = 0 THEN Moore_state <= S0; Moore_state <= S1; Output <= 1 WHEN Moore_state = S2 0 ; Mealy FSM Example VHDL TYPE state IS (S0, S1 SIGNAL Mealy_state: state; U_Mealy: PROCESS(clock, reset) IF(reset = 1 ) THEN Mealy_state <= S0; ELSIF (clock = 1 AND clock event) THEN CASE Mealy_state IS WHEN S0 => IF input = 1 THEN Mealy_state <= S1; Mealy_state <= S0; Lect-19.5 Lect-19.6 1

Mealy FSM Example VHDL (cont.) WHEN S1 => IF input = 0 THEN Mealy_state <= S0; Mealy_state <= S1; Output <= 1 WHEN (Mealy_state = S1 AND input = 0 ) 0 ; Finite State Machine Design A more fair bus arbiter 5 resources contending for the bus Inputs r1 -> r5, Outputs g1 -> g5 Tuesday s arbiter Resource r(i) has precedence over r(j>i) when bus is idle Once granted access, resources can hold on to the bus as long as they want to Group 1 same precedence, but now resource r(i) can only have bus for i cycles at a time Group 2 if multiple requests for bus, tie goes to least recently used resource Group 3 each resource can also interrupt the bus if necessary and gain instant access xx0 x0x Reset 0xx Idle 000 1xx gnt1 g 1 = 1 1xx gnt2 g 2 = 1 x1x gnt3 g 3 = 1 xx1 01x 001 Lect-19.7 Lect-19.8 Outline Recap Memories Modeling RAM Modeling ROM Writing Synthesizable Code Additional VHDL Features Functions Procedures Attributes Variables Constants Generic RAM LIBRARY ieee; USE ieee.std_logic_1164.all; ------------------------------------------------------------------------------------------------- ENTITY ram IS GENERIC (bits: INTEGER:=8; -- # of bits per word words: INTEGER := 16 -- # of words in the memory PORT (wr_ena, clk: IN STD_LOGIC; addr: IN INTEGER RANGE 0 to words-1; data_in: IN STD_LOGIC_VECTOR(bits -1 downto 0 data_out: OUT STD_LOGIC_VECTOR(bits 1 downto 0) END ram; Lect-19.9 Lect-19.10 Generic RAM (cont.) Generic ROM ARCHITECTURE behavioral OF ram IS TYPE vector_array IS ARRAY (0 TO words-1) OF STD_LOGIC_VECTOR(bits 1 DOWNTO 0 SIGNAL memory: vector array; PROCESS(clk) IF(wr_ena= 1 ) THEN IF (clk EVENT AND clk= 1 ) THEN memory(addr) <= data_in; END_IF; data_out <= memory(addr END ram; LIBRARY ieee; USE ieee.std_logic_1164.all; ------------------------------------------------------------------------------------------------- ENTITY rom IS GENERIC (bits: INTEGER:=8; -- # of bits per word words: INTEGER := 8 -- # of words in the memory PORT ( addr: IN INTEGER RANGE 0 to words-1; data: OUT STD_LOGIC_VECTOR(bits 1 downto 0) END rom; Lect-19.11 Lect-19.12 2

Syntax: Constants CONSTANT name : type := value; Examples: CONSTANT high : STD_LOGIC := 1 ; CONSTANT datamemory : memory := ((X"00", X"02" Constants Features Constants can be declared in a PACKAGE, ENTITY, or ARCHITECTURE When declared in a PACKAGE, the constant is truly global, for the package can be used in several entities When declared in an ARCHITECTURE, the constant is local, i.e., it is visible only within this architecture When declared in an ENTITY, the constant can be used in all architectures associated with this entity Lect-19.13 Lect-19.14 Generic ROM (cont.) Distributed RAM RAM16X1S ARCHITECTURE behavioral OF rom IS TYPE vector_array IS ARRAY (0 TO words-1) OF STD_LOGIC_VECTOR(bits 1 DOWNTO 0 CONSTANT memory: vector_array := ("0000_0000", "0000_0010", "0000_0100", "0000_1000", "0001_0000", "0010_0000", "0100_0000", "1000_0000" data <= memory(addr END rom; CLB LUT configurable as Distributed RAM A LUT equals 16x1 RAM Implements Single and Dual- Ports Cascade LUTs to increase RAM size Synchronous write Synchronous/Asynchronous read Accompanying flip-flops used for synchronous read LUT LUT LUT = RAM32X1S D WE WCLK A0 O A1 A2 A3 A4 or = RAM16X2S D0 D1 WE WCLK O0 A0 O1 A1 A2 A3 or D WE WCLK A0 O A1 A2 A3 RAM16X1D D WE WCLK A0 SPO A1 A2 A3 DPRA0 DPO DPRA1 DPRA2 DPRA3 Lect-19.15 Lect-19.16 RAM 16x1 library IEEE; use IEEE.STD_LOGIC_1164.all; library UNISIM; use UNISIM.all; entity RAM_16X1_DISTRIBUTED is port( CLK : in STD_LOGIC; WE : in STD_LOGIC; ADDR : in STD_LOGIC_VECTOR(3 downto 0 DATA_IN : in STD_LOGIC; DATA_OUT : out STD_LOGIC end RAM_16X1_DISTRIBUTED; RAM 16x1 (cont.) architecture RAM_16X1_DISTRIBUTED_STRUCTURAL of RAM_16X1_DISTRIBUTED is -- part used by the synthesis tool, Synplify Pro, only; ignored during simulation attribute INIT : string; attribute INIT of RAM16X1_S_1: label is "0000"; ------------------------------------------------------------------------ component ram16x1s generic( INIT : BIT_VECTOR(15 downto 0) := X"0000" port( O : out std_ulogic; A0 : in std_ulogic; A1 : in std_ulogic; A2 : in std_ulogic; A3 : in std_ulogic; D : in std_ulogic; WCLK : in std_ulogic; WE : in std_ulogic end component; Lect-19.17 Lect-19.18 3

RAM 16x1 (cont.) Writing Synthesizable Code begin RAM_16X1_S_1: ram16x1s generic map (INIT => X 0000") port map (O => DATA_OUT, A0 => ADDR(0), A1 => ADDR(1), A2 => ADDR(2), A3 => ADDR(3), D => DATA_IN, WCLK => CLK, WE => WE end RAM_16X1_DISTRIBUTED_STRUCTURAL; For combinational logic, use only concurrent statements Concurrent signal assignment ( ) Conditional concurrent signal assignment (when-else) Selected concurrent signal assignment (withselect-when) Generate scheme for equations (for-generate) Lect-19.19 Lect-19.20 Writing Synthesizable Code (cont.) For circuits composed of Simple logic operations (logic gates) Simple arithmetic operations (addition, subtraction, multiplication) Shifts/rotations by a constant Use concurrent signal assignment ( ) Writing Synthesizable Code (cont.) For circuits composed of Multiplexers Decoders, encoders Tri-state buffers Use Conditional concurrent signal assignment (when-else) Selected concurrent signal assignment (withselect-when) Lect-19.21 Lect-19.22 Left-Side v. Right-Side of Assignment Left side Internal signals (defined in a given architecture) Ports of the mode - out - inout -buffer <= <= when-else with-select <= Right side Expressions including: Internal signals (defined in a given architecture) Ports of the mode -in - inout -buffer Arithmetic Operations Synthesizable arithmetic operations: Addition, + Subtraction, - Comparisons, >, >=, <, <= Multiplication, * Division by a power of 2, /2**6 (equivalent to right shift) Shifts by a constant, SHL, SHR Lect-19.23 Lect-19.24 4

Arithmetic Operations (cont.) The result of synthesis of an arithmetic operation is a Combinational circuit Without pipelining The exact internal architecture used (and thus delay and area of the circuit) may depend on the timing constraints specified during synthesis (e.g., the requested maximum clock frequency) Operations on Numbers For operations on unsigned numbers USE ieee.std_logic_unsigned.all Signals (inputs/outputs) of the type STD_LOGIC_VECTOR Or, USE ieee.std_logic_arith.all Signals (inputs/outputs) of the type UNSIGNED For operations on signed numbers USE ieee.std_logic_signed.all signals (inputs/outputs) of the type STD_LOGIC_VECTOR Or, USE ieee.std_logic_arith.all Signals (inputs/outputs) of the type SIGNED Signed / Unsigned types behave exactly like STD_LOGIC_VECTOR Also determine whether the number should be treated as a signed or unsigned number Lect-19.25 Lect-19.26 Representing Integers Operations on signals (variables) of the integer types (INTEGER, NATURAL) and their sybtypes are synthesizable in the range: [-(2 31-1)... 2 31-1] for INTEGERs and their subtypes [0... 2 31-1] for NATURALs and their subtypes Operations on the integer types are less flexible and more difficult to control than operations STD_LOGIC_VECTOR and are recommened to be avoided by beginners Addition of Signed Numbers LIBRARY ieee ; USE ieee.std_logic_1164.all ; USE ieee.std_logic_signed.all ; ENTITY adder16 IS PORT ( Cin : IN STD_LOGIC ; X, Y : IN STD_LOGIC_VECTOR(15 DOWNTO 0) ; S : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ; Cout, Overflow : OUT STD_LOGIC ) ; END adder16 ; ARCHITECTURE Behavior OF adder16 IS SIGNAL Sum : STD_LOGIC_VECTOR(16 DOWNTO 0) ; Sum <= ('0' & X) + Y + Cin ; S <= Sum(15 DOWNTO 0) ; Cout <= Sum(16) ; Overflow <= Sum(16) XOR X(15) XOR Y(15) XOR Sum(15) ; END Behavior ; Lect-19.27 Lect-19.28 Addition of Signed Numbers (cont.) Addition of Signed Numbers (cont.) LIBRARY ieee ; USE ieee.std_logic_1164.all ; USE ieee.std_logic_arith.all ; ENTITY adder16 IS PORT ( Cin : IN STD_LOGIC ; X, Y : IN SIGNED(15 DOWNTO 0) ; S : OUT SIGNED(15 DOWNTO 0) ; Cout, Overflow : OUT STD_LOGIC ) ; END adder16 ; ARCHITECTURE Behavior OF adder16 IS SIGNAL Sum : SIGNED(16 DOWNTO 0) ; Sum <= ('0' & X) + Y + Cin ; S <= Sum(15 DOWNTO 0) ; Cout <= Sum(16) ; Overflow <= Sum(16) XOR X(15) XOR Y(15) XOR Sum(15) ; END Behavior ; ENTITY adder16 IS PORT ( X, Y : IN INTEGER RANGE -32768 TO 32767 ; S : OUT INTEGER RANGE -32768 TO 32767 ) ; END adder16 ; ARCHITECTURE Behavior OF adder16 IS S <= X + Y ; END Behavior ; Lect-19.29 Lect-19.30 5

Combinational Logic using Processes Rules that need to be followed: 1. All inputs to the combinational circuit should be included in the sensitivity list 2. No other signals should be included in the sensitivity list 3. None of the statements within the process should be sensitive to rising or falling edges 4. All possible cases need to be covered in the internal IF and CASE statements in order to avoid implied latches Covering the IF Statement Using Using default values IF A = B THEN AeqB <= '1' ; AeqB <= '0' ; AeqB <= '0' ; IF A = B THEN AeqB <= '1' ; Lect-19.31 Lect-19.32 Covering the CASE Statement Using WHEN OTHERS CASE y IS WHEN S1 => Z <= "10"; WHEN S2 => Z <= "01"; WHEN OTHERS => Z <= "00"; Using default values Z <= "00"; CASE y IS WHEN S1 => Z <= "10"; WHEN S2 => Z <= "10"; CASE y IS WHEN S1 => Z <= "10"; WHEN S2 => Z <= "01"; WHEN S3 => Z <= "00"; WHEN OTHERS => Z <= -- ; Initializations Declarations of signals (and variables) with initialized values, such as SIGNAL a : STD_LOGIC := 0 ; Cannot be synthesized, and thus should be avoided If present, they will be ignored by the synthesis tools Use set and reset signals instead Lect-19.33 Lect-19.34 Variables Example Variable Example (cont.) ARCHITECTURE Behavior OF Numbits IS LIBRARY ieee ; USE ieee.std_logic_1164.all ; ENTITY Numbits IS PORT ( X : IN STD_LOGIC_VECTOR(1 TO 3) ; Count : OUT INTEGER RANGE 0 TO 3) ; END Numbits ; PROCESS(X) count the number of bits in X equal to 1 VARIABLE Tmp: INTEGER; Tmp := 0; FOR i IN 1 TO 3 LOOP IF X(i) = 1 THEN Tmp:= Tmp+ 1; END LOOP; Count <= Tmp; END Behavior ; Lect-19.35 Lect-19.36 6

Variables Features Can only be declared within processes and subprograms (functions & procedures) Initial value can be explicitly specified in the declaration When assigned take an assigned value immediately Variable assignments represent the desired behavior, not the structure of the circuit Should be avoided, or at least used with caution in a synthesizable code Variables vs. Signals LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.all; ENTITY test_delay IS PORT( clk : IN STD_LOGIC; in1, in2 : IN STD_LOGIC; var1_out, var2_out : OUT STD_LOGIC; sig1_out : BUFFER STD_LOGIC; sig2_out : OUT STD_LOGIC END test_delay; Lect-19.37 Lect-19.38 Variables vs. Signals (cont.) Simulation Result ARCHITECTURE behavioral OF test_delay IS PROCESS(clk) IS VARIABLE var1, var2: STD_LOGIC; if (rising_edge(clk)) THEN var1 := in1 AND in2; var2 := var1; sig1_out <= in1 AND in2; sig2_out <= sig1_out; var1_out <= var1; var2_out <= var2; END behavioral; Lect-19.39 Lect-19.40 Assert Statements Assert is a non-synthesizable statement whose purpose is to write out messages on the screen when problems are found during simulation Depending on the severity of the problem, the simulator is instructed to continue simulation or halt Syntax: ASSERT condition [REPORT message ] [SEVERITY severity_level ]; The message is written when the condition is FALSE Severity_level can be: Note, Warning, Error (default), or Failure Array Attributes A left(n) left bound of index range of dimension N of A A right(n) right bound of index range of dimension N of A A low(n) lower bound of index range of dimension N of A A high(n) upper bound of index range of dimension N of A A range(n) index range of dimension N of A A reverse_range(n) index range of dimension N of A A length(n) length of index range of dimension N of A A ascending(n) true if index range of dimension N of A is an ascending range, false otherwise Lect-19.41 Lect-19.42 7

Subprograms Include functions and procedures Commonly used pieces of code Can be placed in a library, and then reused and shared among various projects Use only sequential statements, the same as processes Example uses: Abstract operations that are repeatedly performed Type conversions Functions Basic Features Always return a single value as a result Are called using formal and actual parameters the same way as components Never modify parameters passed to them Parameters can only be constants (including generics) and signals (including ports Variables are not allowed; the default is a CONSTANT When passing parameters, no range specification should be included (for example no RANGE for INTEGERS, or TO/DOWNTO for STD_LOGIC_VECTOR) Are always used in some expression, and not called on their own Lect-19.43 Lect-19.44 Function Syntax and Example FUNCTION function_name (<parameter_list>) RETURN data_type IS [declarations] (sequential statements) END function_name; FUNCTION f1 (a, b: INTEGER; SIGNAL c: STD_LOGIC_VECTOR) RETURN BOOLEAN IS (sequential statements) END f1; Procedures Basic Features Do not return a value Are called using formal and actual parameters the same way as components May modify parameters passed to them Each parameter must have a mode: IN, OUT, INOUT Parameters can be constants (including generics), signals (including ports), and variables The default for inputs (mode in) is a constant, the default for outputs (modes out and inout) is a variable When passing parameters, range specification should be included (for example RANGE for INTEGERS, and TO/DOWNTO for STD_LOGIC_VECTOR) Procedure calls are statements on their own Lect-19.45 Lect-19.46 Procedure Syntax and Example PROCEDURE procedure_name (<parameter_list>) IS [declarations] (sequential statements) END procedure_name; PROCEDURE p1 (a, b: in INTEGER; SIGNAL c: out STD_LOGIC_VECTOR) [declarations] (sequential statements) END p1; Lect-19.47 8