CprE / ComS 583 Reconfigurable Computing Prof. Joseph Zambreno Department of Electrical and Computer Engineering Iowa State University Lecture #19 –VHDL.

Slides:



Advertisements
Similar presentations
Fundamentals of Digital Signal Processing יהודה אפק, נתן אינטרטור אוניברסיטת תל אביב.
Advertisements

ELEN 468 Lecture 191 ELEN 468 Advanced Logic Design Lecture 19 VHDL.
Topics of Lecture Structural Model Procedures Functions Overloading.
CSCI 660 EEGN-CSCI 660 Introduction to VLSI Design Lecture 3 Khurram Kazi Some of the slides were taken from K Gaj ’ s lecture slides from GMU ’ s VHDL.
VHDL And Synthesis Review. VHDL In Detail Things that we will look at: –Port and Types –Arithmetic Operators –Design styles for Synthesis.
Kazi Fall 2006 EEGN 4941 EEGN-494 HDL Design Principles for VLSI/FPGAs Khurram Kazi Some of the slides were taken from K Gaj’s lecture slides from GMU’s.
George Mason University ECE 448 – FPGA and ASIC Design with VHDL Finite State Machines State Diagrams, State Tables, Algorithmic State Machine (ASM) Charts,
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
George Mason University ECE 448 – FPGA and ASIC Design with VHDL Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448.
Simple Testbenches Behavioral Modeling of Combinational Logic
George Mason University Modeling of Arithmetic Circuits ECE 545 Lecture 7.
1 Part V: VHDL CODING. 2 Design StructureData TypesOperators and AttributesConcurrent DesignSequential DesignSignals and VariablesState Machines A VHDL.
Data Flow Modeling of Combinational Logic Simple Testbenches
A.7 Concurrent Assignment Statements Used to assign a value to a signal in an architecture body. Four types of concurrent assignment statements –Simple.
CprE / ComS 583 Reconfigurable Computing Prof. Joseph Zambreno Department of Electrical and Computer Engineering Iowa State University Lecture #17 – Introduction.
VHDL Introduction. V- VHSIC Very High Speed Integrated Circuit H- Hardware D- Description L- Language.
George Mason University ECE 545 – Introduction to VHDL ECE 545 Lecture 5 Finite State Machines.
George Mason University ECE 545 – Introduction to VHDL Memories: RAM, ROM Advanced Testbenches ECE 545 Lecture 9.
CprE / ComS 583 Reconfigurable Computing
7/10/2007DSD,USIT,GGSIPU1 Basic concept of Sequential Design.
George Mason University Design of Controllers Finite State Machines and Algorithmic State Machine (ASM) Charts ECE 545 Lecture 14.
George Mason University ECE 545 – Introduction to VHDL Variables, Functions, Memory, File I/O ECE 545 Lecture 7.
1 ECE 545 – Introduction to VHDL Dataflow Modeling of Combinational Logic Simple Testbenches ECE 656. Lecture 2.
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.
George Mason University Finite State Machines State Diagrams, State Tables, Algorithmic State Machine (ASM) Charts, and VHDL Code ECE 448 Lecture 6.
ECE 332 Digital Electronics and Logic Design Lab Lab 6 Concurrent Statements & Adders.
George Mason University ECE 448 – FPGA and ASIC Design with VHDL ECE 448 Lecture 10 Memories: RAM, ROM.
16/11/2006DSD,USIT,GGSIPU1 Packages The primary purpose of a package is to encapsulate elements that can be shared (globally) among two or more design.
George Mason University Data Flow Modeling in VHDL ECE 545 Lecture 7.
VHDL Discussion Sequential Sytems. Memory Elements. Registers. Counters IAY 0600 Digital Systems Design Alexander Sudnitson Tallinn University of Technology.
1 Part III: VHDL CODING. 2 Design StructureData TypesOperators and AttributesConcurrent DesignSequential DesignSignals and VariablesState Machines A VHDL.
CS/EE 3700 : Fundamentals of Digital System Design
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
Data Storage VHDL ET062G & ET063G Lecture 4 Najeem Lawal 2012.
BASIC VHDL LANGUAGE ELEMENTS Digital Design for Instrumentation with VHDL 1.
VHDL Discussion Subprograms IAY 0600 Digital Systems Design Alexander Sudnitson Tallinn University of Technology 1.
Data Flow Modeling in VHDL
George Mason University ECE 448 – FPGA and ASIC Design with VHDL VHDL Coding for Synthesis ECE 448 Lecture 12.
Hao Zheng Comp Sci & Eng USF CDA 4253 FPGA System Design Chapter 5 Finite State Machines.
George Mason University Behavioral Modeling of Sequential-Circuit Building Blocks ECE 545 Lecture 8.
Case Study: Xilinx Synthesis Tool (XST). Arrays & Records 2.
EGRE 6311 LHO 04 - Subprograms, Packages, and Libraries EGRE 631 1/26/09.
ECE 448 – FPGA and ASIC Design with VHDL George Mason University ECE 448 Lab 2 Implementing Combinational Logic in VHDL.
Combinational logic circuit
ECE 448 Lecture 6 Finite State Machines State Diagrams, State Tables, Algorithmic State Machine (ASM) Charts, and VHDL Code.
Introduction Introduction to VHDL Entities Signals Data & Scalar Types
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
Hao Zheng Comp Sci & Eng USF
ECE 4110–5110 Digital System Design
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
Sequential-Circuit Building Blocks
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
RTL Style در RTL مدار ترتيبي به دو بخش (تركيبي و عناصر حافظه) تقسيم مي شود. مي توان براي هر بخش يك پروسس نوشت يا براي هر دو فقط يك پروسس نوشت. مرتضي صاحب.
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
VHDL (VHSIC Hardware Description Language)
VHDL Discussion Subprograms
ECE 545 Lecture 12 Design of Controllers Finite State Machines and Algorithmic State Machine (ASM) Charts.
CprE / ComS 583 Reconfigurable Computing
Behavioral Modeling of Sequential-Circuit Building Blocks
Sequntial-Circuit Building Blocks
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
VHDL Discussion Subprograms
Data Flow Description of Combinational-Circuit Building Blocks
Figure 8.1. The general form of a sequential circuit.
Data Flow Description of Combinational-Circuit Building Blocks
ECE 448 Lecture 6 Finite State Machines State Diagrams, State Tables, Algorithmic State Machine (ASM) Charts, and VHDL Code.
ECE 448 Lecture 6 Finite State Machines State Diagrams, State Tables, Algorithmic State Machine (ASM) Charts, and VHDL code ECE 448 – FPGA and ASIC Design.
CprE / ComS 583 Reconfigurable Computing
Sequntial-Circuit Building Blocks
Presentation transcript:

CprE / ComS 583 Reconfigurable Computing Prof. Joseph Zambreno Department of Electrical and Computer Engineering Iowa State University Lecture #19 –VHDL for Synthesis II

Lect-19.2CprE 583 – Reconfigurable ComputingOctober 25, 2007 Recap – Moore FSM Example Moore FSM that recognizes sequence “10” S0 / 0S1 / 0S2 / reset Meaning of states: S0: No elements of the sequence observed S1: “1” observed S2: “10” observed

Lect-19.3CprE 583 – Reconfigurable ComputingOctober 25, 2007 Recap – Mealy FSM Example Mealy FSM that recognizes sequence “10” S0S1 0 / 0 1 / 0 0 / 1 reset Meaning of states: S0: No elements of the sequence observed S1: “1” observed

Lect-19.4CprE 583 – Reconfigurable ComputingOctober 25, 2007 Moore FSM Example – VHDL TYPE state IS (S0, S1, S2); SIGNAL Moore_state: state; U_Moore: PROCESS (clock, reset) BEGIN 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; ELSE Moore_state <= S0; END IF;

Lect-19.5CprE 583 – Reconfigurable ComputingOctober 25, 2007 Moore FSM Example – VHDL (cont.) WHEN S1 => IF input = ‘0’ THEN Moore_state <= S2; ELSE Moore_state <= S1; END IF; WHEN S2 => IF input = ‘0’ THEN Moore_state <= S0; ELSE Moore_state <= S1; END IF; END CASE; END IF; END PROCESS; Output <= ‘1’ WHEN Moore_state = S2 ELSE ‘0’;

Lect-19.6CprE 583 – Reconfigurable ComputingOctober 25, 2007 Mealy FSM Example – VHDL TYPE state IS (S0, S1); SIGNAL Mealy_state: state; U_Mealy: PROCESS(clock, reset) BEGIN 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; ELSE Mealy_state <= S0; END IF;

Lect-19.7CprE 583 – Reconfigurable ComputingOctober 25, 2007 Mealy FSM Example – VHDL (cont.) WHEN S1 => IF input = ‘0’ THEN Mealy_state <= S0; ELSE Mealy_state <= S1; END IF; END CASE; END IF; END PROCESS; Output <= ‘1’ WHEN (Mealy_state = S1 AND input = ‘0’) ELSE ‘0’;

Lect-19.8CprE 583 – Reconfigurable ComputingOctober 25, 2007 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 Idle 000 1xx Reset gnt1g 1  1= x1x gnt2g 2  1= xx1 gnt3g 3  1= 0xx1xx 01xx0x 001xx0

Lect-19.9CprE 583 – Reconfigurable ComputingOctober 25, 2007 Outline Recap Memories Modeling RAM Modeling ROM Writing Synthesizable Code Additional VHDL Features Functions Procedures Attributes Variables Constants

Lect-19.10CprE 583 – Reconfigurable ComputingOctober 25, 2007 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.11CprE 583 – Reconfigurable ComputingOctober 25, 2007 Generic RAM (cont.) 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; BEGIN PROCESS(clk) BEGIN IF(wr_ena=‘1’) THEN IF (clk’EVENT AND clk=‘1’) THEN memory(addr) <= data_in; END_IF; END IF; END PROCESS; data_out <= memory(addr); END ram;

Lect-19.12CprE 583 – Reconfigurable ComputingOctober 25, 2007 Generic ROM 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.13CprE 583 – Reconfigurable ComputingOctober 25, 2007 Syntax: CONSTANT name : type := value; Examples: CONSTANT high : STD_LOGIC := ‘1’; CONSTANT datamemory : memory := ((X"00", X"02"); Constants

Lect-19.14CprE 583 – Reconfigurable ComputingOctober 25, 2007 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 Constants – Features

Lect-19.15CprE 583 – Reconfigurable ComputingOctober 25, 2007 Generic ROM (cont.) 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"); BEGIN data <= memory(addr); END rom;

Lect-19.16CprE 583 – Reconfigurable ComputingOctober 25, 2007 RAM16X1S O D WE WCLK A0 A1 A2 A3 RAM32X1S O D WE WCLK A0 A1 A2 A3 A4 RAM16X2S O1 D0 WE WCLK A0 A1 A2 A3 D1 O0 = = LUT or LUT RAM16X1D SPO D WE WCLK A0 A1 A2 A3 DPRA0DPO DPRA1 DPRA2 DPRA3 or Distributed RAM 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

Lect-19.17CprE 583 – Reconfigurable ComputingOctober 25, 2007 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;

Lect-19.18CprE 583 – Reconfigurable ComputingOctober 25, 2007 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.19CprE 583 – Reconfigurable ComputingOctober 25, 2007 RAM 16x1 (cont.) 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;

Lect-19.20CprE 583 – Reconfigurable ComputingOctober 25, 2007 Writing Synthesizable Code For combinational logic, use only concurrent statements Concurrent signal assignment (  ) Conditional concurrent signal assignment (when-else) Selected concurrent signal assignment (with- select-when) Generate scheme for equations (for-generate)

Lect-19.21CprE 583 – Reconfigurable ComputingOctober 25, 2007 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 (  )

Lect-19.22CprE 583 – Reconfigurable ComputingOctober 25, 2007 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 (with- select-when)

Lect-19.23CprE 583 – Reconfigurable ComputingOctober 25, 2007 Internal signals (defined in a given architecture) Ports of the mode - out - inout - buffer Expressions including: Internal signals (defined in a given architecture) Ports of the mode - in - inout - buffer Left-Side v. Right-Side of Assignment <= <= when-else with-select <= Left side Right side

Lect-19.24CprE 583 – Reconfigurable ComputingOctober 25, 2007 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.25CprE 583 – Reconfigurable ComputingOctober 25, 2007 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)

Lect-19.26CprE 583 – Reconfigurable ComputingOctober 25, 2007 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.27CprE 583 – Reconfigurable ComputingOctober 25, 2007 Representing Integers Operations on signals (variables) of the integer types (INTEGER, NATURAL) and their sybtypes are synthesizable in the range: [-( ) ] for INTEGERs and their subtypes [ ] 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

Lect-19.28CprE 583 – Reconfigurable ComputingOctober 25, 2007 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) ; BEGIN 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.29CprE 583 – Reconfigurable ComputingOctober 25, 2007 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) ; BEGIN 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.30CprE 583 – Reconfigurable ComputingOctober 25, 2007 Addition of Signed Numbers (cont.) ENTITY adder16 IS PORT (X, Y: ININTEGER RANGE TO ; S : OUT INTEGER RANGE TO ) ; END adder16 ; ARCHITECTURE Behavior OF adder16 IS BEGIN S <= X + Y ; END Behavior ;

Lect-19.31CprE 583 – Reconfigurable ComputingOctober 25, 2007 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 Combinational Logic using Processes

Lect-19.32CprE 583 – Reconfigurable ComputingOctober 25, 2007 Using ELSE Using default values AeqB <= '0' ; IF A = B THEN AeqB <= '1' ; IF A = B THEN AeqB <= '1' ; ELSE AeqB <= '0' ; Covering the IF Statement

Lect-19.33CprE 583 – Reconfigurable ComputingOctober 25, 2007 Using WHEN OTHERS Using default values CASE y IS WHEN S1 => Z <= "10"; WHEN S2 => Z <= "01"; WHEN OTHERS => Z <= "00"; END CASE; Z <= "00"; CASE y IS WHEN S1 => Z <= "10"; WHEN S2 => Z <= "10"; END CASE; CASE y IS WHEN S1 => Z <= "10"; WHEN S2 => Z <= "01"; WHEN S3 => Z <= "00"; WHEN OTHERS => Z <= “--”; END CASE; Covering the CASE Statement

Lect-19.34CprE 583 – Reconfigurable ComputingOctober 25, 2007 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.35CprE 583 – Reconfigurable ComputingOctober 25, 2007 Variables – Example 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 ;

Lect-19.36CprE 583 – Reconfigurable ComputingOctober 25, 2007 Variable – Example (cont.) ARCHITECTURE Behavior OF Numbits IS BEGIN PROCESS(X) – count the number of bits in X equal to 1 VARIABLE Tmp: INTEGER; BEGIN Tmp := 0; FOR i IN 1 TO 3 LOOP IF X(i) = ‘1’ THEN Tmp := Tmp + 1; END IF; END LOOP; Count <= Tmp; END PROCESS; END Behavior ;

Lect-19.37CprE 583 – Reconfigurable ComputingOctober 25, 2007 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

Lect-19.38CprE 583 – Reconfigurable ComputingOctober 25, 2007 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.39CprE 583 – Reconfigurable ComputingOctober 25, 2007 Variables vs. Signals (cont.) ARCHITECTURE behavioral OF test_delay IS BEGIN PROCESS(clk) IS VARIABLE var1, var2: STD_LOGIC; BEGIN if (rising_edge(clk)) THEN var1 := in1 AND in2; var2 := var1; sig1_out <= in1 AND in2; sig2_out <= sig1_out; END IF; var1_out <= var1; var2_out <= var2; END PROCESS; END behavioral;

Lect-19.40CprE 583 – Reconfigurable ComputingOctober 25, 2007 Simulation Result

Lect-19.41CprE 583 – Reconfigurable ComputingOctober 25, 2007 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

Lect-19.42CprE 583 – Reconfigurable ComputingOctober 25, 2007 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.43CprE 583 – Reconfigurable ComputingOctober 25, 2007 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

Lect-19.44CprE 583 – Reconfigurable ComputingOctober 25, 2007 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.45CprE 583 – Reconfigurable ComputingOctober 25, 2007 Function Syntax and Example FUNCTION function_name ( ) RETURN data_type IS [declarations] BEGIN (sequential statements) END function_name; FUNCTION f1 (a, b: INTEGER; SIGNAL c: STD_LOGIC_VECTOR) RETURN BOOLEAN IS BEGIN (sequential statements) END f1;

Lect-19.46CprE 583 – Reconfigurable ComputingOctober 25, 2007 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.47CprE 583 – Reconfigurable ComputingOctober 25, 2007 Procedure Syntax and Example PROCEDURE procedure_name ( ) IS [declarations] BEGIN (sequential statements) END procedure_name; PROCEDURE p1 (a, b: in INTEGER; SIGNAL c: out STD_LOGIC_VECTOR) [declarations] BEGIN (sequential statements) END p1;