(1) Modeling Structure © Sudhakar Yalamanchili, Georgia Institute of Technology, 2006.

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

Simulation executable (simv)
1 Introduction to VHDL (Continued) EE19D. 2 Basic elements of a VHDL Model Package Declaration ENTITY (interface description) ARCHITECTURE (functionality)
Ring Counter Discussion D5.3 Example 32. Ring Counter if rising_edge(CLK) then for i in 0 to 2 loop s(i)
Mridula Allani Fall 2010 (Refer to the comments if required) ELEC Fall 2010, Nov 21(Adopted from Profs. Nelson and Stroud)
331 W05.1Spring :332:331 Computer Architecture and Assembly Language Spring 2006 Week 5: VHDL Programming [Adapted from Dave Patterson’s UCB CS152.
ECE 331 – Digital System Design Single-bit Adder Circuits and Adder Circuits in VHDL (Lecture #12) The slides included herein were taken from the materials.
ECE 331 – Digital System Design
(1) Modeling Digital Systems © Sudhakar Yalamanchili, Georgia Institute of Technology, 2006.
(1) Programming Mechanics © Sudhakar Yalamanchili, Georgia Institute of Technology, 2006.
1 H ardware D escription L anguages Basic Language Concepts.
ECE 332 Digital Electronics and Logic Design Lab Lab 5 VHDL Design Styles Testbenches.
IAY 0600 Digital Systems Design
DSD,USIT,GGSIPU1 Entity declaration –describes the input/output ports of a module entity reg4 is port ( d0, d1, d2, d3, en, clk : in std_logic; q0, q1,
VHDL TUTORIAL Preetha Thulasiraman ECE 223 Winter 2007.
ENG6090 Reconfigurable Computing Systems Hardware Description Languages Part 6: Configurations.
1 H ardware D escription L anguages Modeling Complex Systems.
Figure 5.1 Conversion from decimal to binary. Table 5.1 Numbers in different systems.
1 H ardware D escription L anguages Modeling Digital Systems.
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.
Language Concepts Ver 1.1, Copyright 1997 TS, Inc. VHDL L a n g u a g e C o n c e p t s Page 1.
CWRU EECS 317 EECS 317 Computer Design LECTURE 1: The VHDL Adder Instructor: Francis G. Wolff Case Western Reserve University.
1 component OR_3 port (A,B,C: in bit; Z: out bit); end component ; Reserved Words  Declarations of Components and Entities are similar  Components are.
Introduction to VLSI Design – Lec01. Chapter 1 Introduction to VLSI Systems Lecture # 6 Computer-Aided Design Technology for VLSI.
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.
CPE 626 Advanced VLSI Design Lecture 6: VHDL Synthesis Aleksandar Milenkovic
Design Methodology Based on VHDL Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
1 component OR_3 port (A,B,C: in bit; Z: out bit); end component ; Reserved Words  Declarations of Components and Entities are similar  Components are.
ECE 331 – Digital System Design Single-bit Adder Circuits and Adder Circuits in VHDL (Lecture #11) The slides included herein were taken from the materials.
M. Balakrishnan Dept of Computer Science & Engg. I.I.T. Delhi
(1) Basic Language Concepts © Sudhakar Yalamanchili, Georgia Institute of Technology, 2006.
ENG6530 RCS1 ENG6530 Reconfigurable Computing Systems Hardware Description Languages VHDL.
Introduction to VHDL Simulation … Synthesis …. The digital design process… Initial specification Block diagram Final product Circuit equations Logic design.
Hardware languages "Programming"-language for modelling of (digital) hardware 1 Two main languages: VHDL (Very High Speed Integrated Circuit Hardware Description.
1 Introduction to VHDL Part 2 Fall We will use Std_logic And, Or have same precedence See slide 8 of part 1.
Digital System Projects
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
VHDL Discussion Subprograms IAY 0600 Digital Systems Design Alexander Sudnitson Tallinn University of Technology 1.
Digital Design Using VHDL and PLDs ECOM 4311 Digital System Design Chapter 1.
Apr. 3, 2000Systems Architecture I1 Introduction to VHDL (CS 570) Jeremy R. Johnson Wed. Nov. 8, 2000.
VHDL ELEC 311 Digital Logic and Circuits Dr. Ron Hayne Images Courtesy of Cengage Learning.
May 9, 2001Systems Architecture I1 Systems Architecture I (CS ) Lab 5: Introduction to VHDL Jeremy R. Johnson May 9, 2001.
Slide 1 3.VHDL/Verilog Description Elements. Slide 2 To create a digital component, we start with…? The component’s interface signals Defined in MODULE.
Unit 4 Structural Descriptions SYLLABUS Highlights of Structural descriptions Organization of the Structural descriptions Binding State Machines Generate(HDL),Generic(VHDL),
Case Study: Xilinx Synthesis Tool (XST). Arrays & Records 2.
IAY 0600 Digital Systems Design VHDL discussion Structural style Modular design and hierarchy Part 1 Alexander Sudnitson Tallinn University of Technology.
An Introduction to V.H.D.L.. Need of a Compiler… main( ) { int x=10,y=20,z; z = x + y ; printf ( “ %d “, z ); getch( ) ; } What’s That ? Give me only.
IAY 0600 Digital Systems Design
Elements of Structural Models
Structural style Modular design and hierarchy Part 1
Basic Language Concepts
Systems Architecture Lab: Introduction to VHDL
Behavioral Style Combinational Design with VHDL
IAY 0600 Digital Systems Design
Hardware Description Languages
Module Goals Introduce structural VHDL constructs Use of components
Structural style Modular design and hierarchy Part 1
Behavioral Style Combinational Design with VHDL
ENG6530 Reconfigurable Computing Systems
VHDL VHSIC Hardware Description Language VHSIC
IAS 0600 Digital Systems Design
Structural style Modular design and hierarchy Part 1
VHDL (VHSIC Hardware Description Language)
VHDL Discussion Subprograms
IAS 0600 Digital Systems Design
Modeling Complex Behavior
Digital Systems Design 2
(Sequential-Circuit Building Blocks)
Presentation transcript:

(1) Modeling Structure © Sudhakar Yalamanchili, Georgia Institute of Technology, 2006

(2) Elements of Structural Models Structural models describe a digital system as an interconnection of components Descriptions of the behavior of the components must be independently available as structural or behavioral models –An entity/architecture for each component must be available Micro 3284 To processor microphone speakers headphones amplifier

(3) Modeling Structure Define the components used in the design Describe the interconnection of these components In1 ports sum carry a b out HA c_in In2 sum c_out s2 s3 s1 a b

(4) Modeling Structure Entity/architecture for half_adder and or_2 must exist architecture structural of full_adder is component half_adder is -- the declaration port (a, b: in std_logic; -- of components you will use sum, carry: out std_logic); end component half_adder; component or_2 is port(a, b : in std_logic; c : out std_logic); end component or_2; signal s1, s2, s3 : std_logic; begin H1: half_adder port map (a => In1, b => In2, sum=>s1, carry=>s3); H2:half_adder port map (a => s1, b => c_in, sum =>sum, carry => s2); O1: or_2 port map (a => s2, b => s3, c => c_out); end architecture structural; unique name of the components component type interconnection of the component ports component instantiation statement

(5) Example: State Machine Structural models can be easily generated from schematics Name conflicts in the association lists? The “open” attribute library IEEE; use IEEE.std_logic_1164.all; entity serial_adder is port (x, y, clk, reset : in std_logic; z : out std_logic); end entity serial_adder; architecture structural of serial_adder is declare the components that we will be using -- component comb is port (x, y, c_in : in std_logic; z, carry : out std_logic); end component comb; component dff is port (clk, reset, d : in std_logic; q, qbar : out std_logic); end component dff; signal s1, s2 :std_logic; begin describe the component interconnection -- C1: comb port map (x => x, y => y, c_in => s1, z =>z, carry => s2); D1: dff port map(clk => clk, reset =>reset, d=> s2, q=>s1, qbar => open); end architecture structural;

(6) Hierarchy and Abstraction Structural descriptions can be nested The half adder may itself be a structural model architecture structural of half_adder is component xor2 is port (a, b : in std_logic; c : out std_logic); end component xor2; component and2 is port (a, b : in std_logic; c : out std_logic); end component and2; begin EX1: xor2 port map (a => a, b => b, c => sum); AND1: and2 port map (a=> a, b=> b, c=> carry); end architecture structural;

(7) Hierarchy and Abstraction Nested structural descriptions to produce hierarchical models The hierarchy is flattened prior to simulation Behavioral models of components at the bottom level must exist -- top level -- bottom level full_adder.vhd half_adder.vhd or_2.vhd and2.vhdxor2.vhd

(8) Hierarchy and Abstraction Use of IP cores and vendor libraries Simulations can be at varying levels of abstraction for individual components

(9) Generics Enables the construction of parameterized models library IEEE; use IEEE.std_logic_1164.all; entity xor2 is generic (gate_delay : Time:= 2 ns); port(In1, In2 : in std_logic; z : out std_logic); end entity xor2; architecture behavioral of xor2 is begin z <= (In1 xor In2) after gate_delay; end architecture behavioral;

(10) Generics in Hierarchical Models Parameter values are passed through the hierarchy architecture generic_delay of half_adder is component xor2 generic (gate_delay: Time); port (a, b : in std_logic; c : out std_logic); end component; component and2 generic (gate_delay: Time); port (a, b : in std_logic; c : out std_logic); end component; begin EX1: xor2 generic map (gate_delay => 6 ns) port map(a => a, b => b, c => sum); A1: and2 generic map (gate_delay => 3 ns) port map(a=> a, b=> b, c=> carry); end architecture generic_delay;

(11) Example: Full Adder H1 H2 In1 In2 c_in sum c_out s1 s2 s3 -- top level -- bottom level full_adder.vhd half_adder.vhd or_2.vhd and2.vhdxor2.vhd

(12) Example: Full Adder... H1: half_adder generic map (gate_delay => 6 ns) port map(a => In1, b => In2, sum => s1, carry=>s2); H2: half_adder EX1: xor2 generic map (gate_delay => gate_delay)... A1: and2 generic map (gate_delay => gate_delay) EX1: xor2 generic map (gate_delay => gate_delay)... A1: and2 generic map (gate_delay => gate_delay) entity and2 is generic (gate_delay : Time:= 2 ns);... entity xor2 is generic (gate_delay :Time := 2 ns);... 6 ns

(13) Precedence of Generic Declarations Generic map takes precedence over the component declaration architecture generic_delay2 of half_adder is component xor2 generic (gate_delay: Time); port(a,b : in std_logic; c : out std_logic); end component; component and2 generic (gate_delay: Time:= 6 ns); port (a, b : in std_logic; c : out std_logic); end component; begin EX1: xor2 generic map (gate_delay => gate_delay) port map(a => a, b => b, c => sum); A1: and2 generic map (gate_delay => 4 ns) port map(a=> a, b=> b, c=> carry); end generic_delay2; takes precedence

(14) Generics: Properties signal value signal VHDL Program value Design Entity Generics are constant objects and can only be read The values of generics must be known at compile time They are a part of the interface specification but do not have a physical interpretation Use of generics is not limited to “delay like” parameters and are in fact a very powerful structuring mechanism

(15) Example: N-Input Gate Map the generics to create different size OR gates entity generic_or is generic (n: positive:=2); port (in1 : in std_logic_vector ((n-1) downto 0); z : out std_logic); end entity generic_or; architecture behavioral of generic_or is begin process (in1) is variable sum : std_logic:= ‘0’; begin sum := ‘0’; -- on an input signal transition sum must be reset for i in 0 to (n-1) loop sum := sum or in1(i); end loop; z <= sum; end process; end architecture behavioral;

(16) Example: Using the Generic N-Input OR Gate Full adder model can be modified to use the generic OR gate model via the generic map () construct Analogy with macros architecture structural of full_adder is component generic_or generic (n: positive); port (in1 : in std_logic_vector ((n-1) downto 0); z : out std_logic); end component; remainder of the declarative region from earlier example... begin H1: half_adder port map (a => In1, b => In2, sum=>s1, carry=>s3); H2:half_adder port map (a => s1, b => c_in, sum =>sum, carry => s2); O1: generic_or generic map (n => 2) port map (a => s2, b => s3, c => c_out); end structural;

(17) Example: N-bit Register This model is used in the same manner as the generic OR gate entity generic_reg is generic (n: positive:=2); port ( clk, reset, enable : in std_logic; d : in std_logic_vector (n-1 downto 0); q : out std_logic_vector (n-1 downto 0)); end entity generic_reg; architecture behavioral of generic_reg is begin reg_process: process (clk, reset) begin if reset = ‘1’ then q ‘0’); elsif (rising_edge(clk)) then if enable = ‘1’ then q <= d; end if; end process reg_process; end architecture behavioral;

(18) Component Instantiation and Synthesis Design methodology for inclusion of highly optimized components or “cores” –Optimized in the sense of placed and routed –Intellectual property cores for sale –Check out Core generators for static generation of cores –Generation of VHDL/Verilog models of placed and routed designs –Component instantiation for using cores in a design Access to special components/circuitry within the target chip

(19) Example: Using Global Resources library IEEE; use IEEE.std_logic_1164.all; entity my_clocks is port (phi1, phi2: out std_logic); end entity my_clocks; architecture behavioral of my_clocks is component OSC4 is -- on chip oscillator port (F8M : out std_logic; -- 8 Mhz clock F500k : out std_logic;-- 500Khz clock F15 : out std_logic);-- 15 hz clock end component OSC4; component BUFG is -- global buffer connection to low skew lines port (I : in std_logic; O : out std_logic); end component BUFG; signal local_F15, local_phi2 : std_logic; -- local signals begin O1: osc4 port map(F15 =>local_F15); -- instantiate the oscillator B1: bufg port map (I => local_F15, O => phi1); -- instantiate the two global buffers B2: bufg port map (I => local_phi2, O => phi2); local_phi2 <= not local_F15; -- phi2 is the complement of phi1 end architecture behavioral; Component abstractions for special support within the chip –For global signals –For shared system level components

(20) Implementing Global Set/Reset in VHDL library IEEE; use IEEE.std_logic_1164.all; entity sig_var is port ( clk, reset,x, y, z: in std_logic; w : out std_logic); end sig_var; architecture behavior of sig_var is component STARTUP is port (GSR : in std_logic); end component STARTUP; signal s1, s2 : std_logic; begin U1: STARTUP port map(GSR => reset); process begin wait until (rising_edge(clk)); if (reset = '1') then w <= '0'; s1 <= '0'; s2 <= '0'; else L1: s1 <= x xor y; L2: s2 <= s1 or z; L3: w <= s1 nor s2; end if; end process; end behavior; GSR inferencing optimization Connect your reset signal to this global net Note –improves “routability” of designs

(21) Core Generators Xilinx Logic Core utility Parameterized modules –User controlled generation of VHDL modules –Instantiation within a design –Simulaton and synthesis Third party view of the world of hardware design –Analogy with software and compilers –What is software vs. hardware anymore?

(22) The Generate Statement What if we need to instantiate a large number of components in a regular pattern? –Need conciseness of description –Iteration construct for instantiating components! The generate statement –A parameterized approach to describing the regular interconnection of components a: for i in 1 to 6 generate a1: one_bit generic map (gate_delay) port map(in1=>in1(i), in2=> in2(i), cin=>carry_vector(i-1), result=>result(i), cout=>carry_vector(i),opcode=>opcode); end generate;

(23) The Generate Statement: Example Instantiating interconnected components –Declare local signals used for the interconnect entity dregister is port ( d : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0); clk : in std_logic); end entity dregisters architecture behavioral of dregister is begin d: for i in dreg’range generate reg: dff port map( (d=>d(i), q=>q(i), clk=>clk; end generate; end architecture register; Instantiating an register

(24) The Generate Statement: Example library IEEE; use IEEE.std_logic_1164.all; entity multi_bit_generate is generic(gate_delay:time:= 1 ns; width:natural:=8); -- the default is a 8-bit ALU port( in1 : in std_logic_vector(width-1 downto 0); in2 : in std_logic_vector(width-1 downto 0); result : out std_logic_vector(width-1 downto 0); opcode : in std_logic_vector(1 downto 0); cin : in std_logic; cout : out std_logic); end entity multi_bit_generate; architecture behavioral of multi_bit_generate is component one_bit is-- declare the single bit ALU generic (gate_delay:time); port (in1, in2, cin : in std_logic; result, cout : out std_logic; opcode: in std_logic_vector (1 downto 0)); end component one_bit; signal carry_vector: std_logic_vector(width-2 downto 0); -- the set of signals for the ripple carry begin a0: one_bit generic map (gate_delay) -- instantiate ALU for bit position 0 port map (in1=>in1(0), in2=>in2(0), result=>result(0), cin=>cin, opcode=>opcode, cout=>carry_vector(0)); a2to6: for i in 1 to width-2 generate -- generate instantiations for bit positions 2-6 a1: one_bit generic map (gate_delay) port map(in1=>in1(i), in2=> in2(i), cin=>carry_vector(i-1), result=>result(i), cout=>carry_vector(i),opcode=>opcode); end generate; a7: one_bit generic map (gate_delay) -- instantiate ALU for bit position 7 port map (in1=>in1(width-1), in2=>in2(width-1), result=> result(width-1), cin=>carry_vector(width-2), opcode=>opcode, cout=>cout); end architecture behavioral;

(25) Using the Generate Statement Identify components with regular interconnect Declare local arrays of signals for the regular interconnections Write the generate statement –Analogy with loops and multidimensional arrays –Beware of unconnected signals! Instantiate remaining components of the design

(26) Configurations A design entity can have multiple alternative architectures A configuration specifies the architecture that is to be used to implement a design entity architecture-3 architecture-2 architecture-1 entity binding configuration

(27) Component Binding We are concerned with configuring the architecture and not the entity Enhances sharing of designs: simply change the configuration

(28) Default Binding Rules Search for entity with the same component name If multiple such entities exist, bind the last compiled architecture for that entity How do we get more control over binding? architecture structural of serial_adder is component comb is port (a, b, c_in : in std_logic; z, carry : out std_logic); end component comb; component dff is port (clk, reset, d :in std_logic; q, qbar :out std_logic); end component dff; signal s1, s2 : std_logic; begin C1: comb port map (a => a, b => b, c_in => s1, z =>z, carry => s2); D1: dff port map(clk => clk, reset =>reset, d=> s2, q=>s1, qbar =>open); end architecture structural;

(29) Configuration Specification We can specify any binding where ports and arguments match architecture structural of full_adder is -- --declare components here signal s1, s2, s3: std_logic; configuration specification for H1: half_adder use entity WORK.half_adder (behavioral); for H2: half_adder use entity WORK.half_adder (structural); for O1: or_2 use entity POWER.lpo2 (behavioral) generic map(gate_delay => gate_delay) port map (I1 => a, I2 => b, Z=>c); begin -- component instantiation statements H1: half_adder port map (a =>In1, b => In2, sum => s1, carry=> s2); H2: half_adder port map (a => s1, b => c_in, sum => sum, carry => s2); O1: or_2 port map(a => s2, b => s3, c => c_out); end structural; library name entity name architecture name

(30) Configuration Specification Short form where applicable for all: half_adder use entity WORK.half_adder (behavioral); Not constrained by the name space Delayed binding when a specification is not present –Will be available at a later step –Analogous to unresolved symbol references during compilation of traditional programs

(31) Configuration Declaration Written as a separate design unit Can be written to span a design hierarchy Use of the “for all” clause configuration Config_A of full_adder is -- name the configuration -- for the entity for structural -- name of the architecture being configured for H1: half_adder use entity WORK.half_adder (behavioral); end for; -- for H2: half_adder use entity WORK.half_adder (structural); end for; -- for O1: or_2 use entity POWER.lpo2 (behavioral) generic map(gate_delay => gate_delay) port map (I1 => a, I2 => b, Z=>c); end for; -- end for; end Config_A;

(32) Summary Structural models –Syntactic description of a schematic Hierarchy and abstraction –Use of IP cores –Mixing varying levels of detail across components Generics –Construct parameterized models –Use in configuring the hardware Configurations –Configuration specification –Configuration declaration