370 likes | 579 Views
H ardware D escription L anguages. Basic Language Concepts. Outline. VHDL Basic Constructs: Design Elements: Entity, Architecture and Configuration Object Types: Constants, Variables, Signals and Files Events, Propagation Delays and Concurrency Concurrent Signal Assignment Statements
E N D
HardwareDescriptionLanguages Basic Language Concepts
Outline • VHDL Basic Constructs: • Design Elements: Entity, Architecture and Configuration • Object Types: Constants, Variables, Signals and Files • Events, Propagation Delays and Concurrency • Concurrent Signal Assignment Statements • Signal Drivers, Shared Signals, and Resolved types • Delay Models • Inertial delay, Transport delay, Delta delay
VHDL Basic Language Concepts • For now we will focus only on basiclanguage constructs. • Our immediate objective is to become familiar only with the constructs provided for describing digital systems
sum a b carry How the design “talks” to the external world What is the internal behavior of the design Describing Digital Systems • What do we need to describe a digital system ? • Interface: how do we connect to the design • Behavior: what does it do?
sum a case insensitive b entity half_ADder is port ( a, b : inbit; sum, carry :outbit); end entity half_adder; carry VHDL 1993 Describing the Interface: the Entity • The interface is a collection of ports • Ports are special programming objects called signals • Ports have a type, e.g.,bit (Guideline: avoid the type bit !!) • Ports have a mode: in, out, inout (bidirectional)
A B N Z op C Example: Entity Descriptions entity ALU32 is port( A, B: in bit_vector(31 downto 0); C : out bit_vector (31 downto 0); Op: in bit_vector (5 downto 0); N, Z: out bit); end entity ALU32; LSB MSB R D Q entity D_ff is port( D, Clk, Rbar, Sbar: in bit; Q, Qbar: out bit); end entity D_ff; clk Q Q S
VHDL Object Types • VHDL supports four basic objects: variables, constants, signals and file types • The variable and constant types • They works as in conventional programming languages • Variable values can be changed. • Constant values cannot be changed • The signal type is a programming object specifically introduced to model the behavior of digital systems • A variable is simply a value in a location of memory. There is no association of time with the value. • A signal is a sequence of time-value pairs ! • The file type • Let’s procrastinate it
sum a b carry Describing Behavior: the Architecture entity half_adder is port (a, b : inbit; sum, carry :outbit); end entity half_adder; architecture behavioral of half_adder is begin sum <= (a xor b) after 5 ns; carry <= (a and b) after 5 ns; end architecture behavioral; • To describe behavior we need: • Signal assignment statements: events on output signals in terms of events on input signals • Specification of propagation delays • The operation of digital systems is inherently concurrent VHDL 1993
sum a b carry Describing Behavior: the Architecture use clause library IEEE; use IEEE.std_logic_1164.all; entity half_adder is port (a, b : in std_ulogic; sum, carry :out std_ulogic); end entity half_adder; architecture behavioral of half_adder is begin sum <= (a xor b) after 5 ns; carry <= (a and b) after 5 ns; end architecture behavioral; Declarations for a design entity • The typebit is not powerful enough for realistic simulation: use the IEEE 1164 value system • Use of the IEEE 1164 value system requires inclusion of the library and package declaration statements
Libraries and Packages • Libraries are logical units that are mapped to physical directories. The units of a library are called packages. • Packages are repositories for type definitions, procedures, and functions • Libraries and packages can be system defined or user defined
entity configuration architecture-3 architecture-2 architecture-1 Binding entity and architecture: the Configuration • Configurations “separate” the specification of the interface from that of the implementation • An entity may have multiple architectures • Configurations associate an entity with an architecture • Binding rules: default and explicit • More on configurationslater!
Design Units • Primary design units (not dependent on other design units) • Entity • Configuration • Package Declaration • Secondary design units • Package body • Architecture • Design units are arranged in files • Now you know the layout of a VHDL program!
Concurrent Statements • The operation of digital systems is inherently concurrent • Signals are assigned values at specific points in time using signal assignment statements • Signal assignments are denoted by the operator <= • Signals can be initialized using the operator := Initialization is not required. (Guideline: do not use signal initialization!) • There are several forms of Concurrent Signal Assignments(Guideline: do not use CSAs)
Simple CSA architecture dataflow of full_adder is signal s1, s2 : std_ulogic; Signal s3 : std_ulogic := ‘0’; constant gate_delay: Time:= 5 ns; begin L1: s1 <= (in1 xor in2) after gate_delay; L2: s2 <= (c_in and s1) after gate_delay; L3: s3 <= (in1 and in2) after gate_delay; L4: sum <= (s1 xor c_in) after gate_delay; L5: c_out <= (s2 or s3) after gate_delay; end architecture dataflow; library IEEE; use IEEE.std_logic_1164.all; entity full_adder is port (in1, in2, c_in: in std_ulogic; sum, c_out: out std_ulogic); end entity full_adder; Declarations s1 in1 sum in2 s2 c_out s3 c_in
Simple CSA • Use of signals in the architecture • Internal signals connect components • A statement is executed when an event (signal transition) takes place on a signal in the RHS of an expression • 1-1 correspondence between signal assignment statements and signals (wires) in the circuit • Order of statement execution follows propagation of events in the circuit • Textual order does not imply execution order
Implementation of Signals Transaction ® ® ® Z 0 1 1 1 0 24 23 10 Driver or projected waveform transaction = time-value pair representing the future (with respect to the current simulation time )value assigned to signal nand after s <= ( in1 in2 ) gate_delay ; value expr e ssion time expr e ssion waveform element
Implementation of Signals (cont.) • In the absence of initialization, default values are determined by signal type • Waveform elements describe time-value pairs • Transactions are internal representations of signal value assignments • Events correspond to new signal values • A transaction may lead to the same signal value
01 10 @24ns @30ns Implementation of Signals (cont.) head driver • Driver is the set of future signal values: current signal value is provided by the transaction at the head of the list • We can specify multiple waveform elements in a single assignment statement • Specifying multiple future values for a signal • Rules for maintaining the driver • Conflicting transactions 10 01 @18ns @20ns
Example: Waveform Generation signal • Multiple waveform elements can be specified in a single signal assignment statement 10 20 30 40 signal <= ‘0’,‘1’ after 10 ns,‘0’ after 20 ns,‘1’ after 40 ns;
Resolved Signal Types • At any point in time what is the value of the bus signal? • We need to “resolve” the value • Take the value at the head of all drivers • Select one of the values according to a resolution function • Predefined IEEE 1164 resolved types are std_logic and std_logic_vector
Conditional CSA note type library IEEE; use IEEE.std_logic_1164.all; entity mux4 is port ( In0, In1, In2, In3 : in std_logic_vector (7 downto 0); Sel: in std_logic_vector(1 downto 0); Z : out std_logic_vector (7 downto 0)); end entity mux4; architecture behavioral of mux4 is begin Z <= In0 after 5 ns when Sel = “00” else In1 after 5 ns when Sel = “01” else In2 after 5 ns when Sel = “10” else In3 after 5 ns when Sel = “11” else “00000000” after 5 ns; end architecture behavioral; • First true conditional expression determines the output value • Note that Sel can have more values that 0 or 1 hence we need the last statement to cover all cases Evaluation Order is important!
Unaffected Signals • Value of the signal is not changed • VHDL 1993 only! library IEEE; use IEEE.std_logic_1164.all; entity pr_encoder is port (S0, S1,S2,S3: in std_logic; Z : out std_logic_vector (1 downto 0)); end entity pr_encoder; architecture behavioral of pr_encoder is begin Z <= “00” after 5 ns when S0 = ‘1’ else “01” after 5 ns when S1 = ‘1’ else unaffected when S2 = ‘1’ else “11” after 5 ns when S3 = ‘1’ else “00” after 5 ns; end architecture behavioral;
Selected CSA library IEEE; use IEEE.std_logic_1164.all; entity mux4 is port ( In0, In1, In2, In3 : in std_logic_vector (7 downto 0); Sel: in std_logic_vector(1 downto 0); Z : out std_logic_vector (7 downto 0)); end entity mux4; architecture behavioral-2 of mux4 is begin with Sel select Z <= (In0 after 5 ns) when “00”, (In1 after 5 ns) when “01”, (In2 after 5 ns) when “10”, (In3 after 5 ns) when “11” (In3 after 5 ns) when others; end architecture behavioral; • The “when others” clause can be used to ensure that all options are covered • The “unaffected” clause may also be used here All options must be covered and only one must be true!
A VHDL Model Template Declare external libraries and visible components library library-name-1, library-name-2; use library-name-1.package-name.all; use library-name-2.package-name.all; entity entity_name is port( input signals : in type; output signals : out type); end entity entity_name; architecture arch_name of entity_name is -- declare internal signals -- you may have multiple signals of different types signalinternal-signal-1 : type := initialization; signalinternal-signal-2 : type := initialization; begin -- specify value of each signal as a function of other signals internal-signal-1 <= simple, conditional, or selected CSA; internal-signal-2 <= simple, conditional, or selected CSA; output-signal-1 <= simple, conditional, or selected CSA; output-signal-2 <= simple, conditional, or selected CSA; end architecture arch_name; Define the interface Declare signals used to connect components Definition of how & when internal signal values are computed Definition of how & when external signal values are computed
Delay Models in VHDL • Inertial delay • Default delay model • Suitable for modeling delays through devices with inertia such as gates • Transport delay • Model delays through devices with no inertia, e.g., wires • no inertia = all input events are propagated to output signals • Delta delay • What about models where no propagation delays are specified? • Infinitesimally small delay is automatically (after 0ns) inserted by the simulator to preserve correct ordering of events
Inertial Delays: Example Input input • VHDL 1993 enables specification of pulse rejection width • General form:signal <= rejecttime-expressioninertialvalue-expressionaftertime-expression; output 8 ns Out 1 2 ns Out 1: gate propagation delay 8ns Out 2: gate propagation delay 2ns Out 2 15 25 35 5 10 20 30
Transport Delays: Example architecture transport_delay of half_adder is signal s1, s2: std_logic:= ‘0’; begin s1 <= (a xor b) after 2 ns; s2 <= (a and b) after 2 ns; sum <= transport s1 after 4 ns; carry <= transport s2 after 4 ns; end architecture transport_delay; Inertial a b sum Transport carry s1 s2
Delta Delays: Example architecture behavior of combinational signal s1, s2, s3, s4: std_logic:= ‘0’; begin s1 <= not in1; s2 <= not in2; s3 <= not (s1 and in2); s4 <= not (s2 and in1); z <= not (s3 and s4); end architecture behavior; library IEEE; use IEEE.std_logic_1164.all; entity combinational is port (in1, in2: in std_logic; z : out std_logic); end entity combinational; s1 s3 In1 z In2 s4 s2
Delta Delays: Behavior IN1 In2 Delta Events IN2 S2 Z S3 S1 Z S2 3Δ 10 Δ 2Δ Internal ordering established by the simulator S3 S4 10 20 30 40 50 60 70
Delay Models: Summary • Delay models • Inertial • For devices with inertia such as gates • VHDL 1993 supports pulse rejection widths • Transport • Ensures propagation of all events • Typically used to model elements such as wires • Delta • Automatically inserted to ensure functional correctness of code that do not specify timing • Enforces the data dependencies specified in the code
Summary • Design elements: Entity, Architecture, Configuration • Object Types: Constants, Variables, Signals (and Files) • Events, propagation delays, and concurrency • Transactions and waveform elements • Signal Drivers, Shared Signals, resolved types, and resolution functions • Concurrent Signal Assignment statements • Simple CSA, Conditional CSA, Selected CSA • Modeling Delays • Inertial delay, Transport delay, Delta delay
And once more … VHDL Object Types: • Constants • Signals • Variables • Files
Constant • You can think of it just as a name for a valuereset_c := ‘0’; bus_width_c := 32; • The value assigned to a constant cannot be changed (the location of memory that stores the value cannot be modified) • Benefits: • a better documented design. • it is easier to update the design. • But do not exaggerate !!!since you have to remember all these names you defined !
Signals • It models a physical signal (you can think of it like a piece of wire) • A signal is a sequence of time-value pairs • A signal assignment takes effect only after a certain delay (the smallest possible delay is called a “delta time”).
Variables • All assignment to variables are scheduled (takes effect) immediately. • If a variable is assigned a value, the corresponding location in memory is written with the new value while destroying the old value. • This effectively happen immediately so if the next executing statement in the program uses the value of the variable, it is the new value that is used.
Signals vs. Variables • Signals assignments are scheduled after a certain delay d • Variables assignments happen immediately, there is no delay