EE 3563 VHDL – Basic Language Elements Identifiers: – basic identifier: composed of a sequence of one or more characters • • • • upper case, lower case, digit, underscore first character must be a letter, last character must NOT be an underscore Two underscores cannot occur concurrently case insensitive: COUNT, count, Count, counT are all the same – extended identifier: sequence of characters written between two backslashes • • • Any printable characters can be used including %, $, *, etc. lower case and upper case are distinct examples: \2FOR$\, \countNow!\, \&#$(@#&!!!\ – Keywords can not be used as basic identifiers Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Basic Language Elements Data Objects – hold a value of a specified type – constant: holds a single value of a specified type and cannot be changed throughout the simulation – constant declaration: • constant RESULT: BIT:=1; constant FALL_TIME: TIME:=10ns – variable: holds a single value of a specified type but can be changed throughout the simulation • variable ABAR:BIT; variable STATUS:BIT_VECTOR(3 downto 0); – signal: holds a list of values including current value and a list of possible future values • • typically used to model wires and flip-flops signal DATA_BUS:BIT_VECTOR(0 to 31) – file: same as with any computer file, contains data Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Basic Language Elements Not all objects are created using the declarations Ports of an entity are automatically signal objects Generics of an entity are constant objects Formal parameters of functions and procedures are objects A “for” loop variable is an object for COUNT in 1 to 8 loop SUM:=SUM+COUNT; end loop; Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Basic Language Elements Data Types – specifies the constraints on values held by an object and the kind of value it is There are pre-defined types such as: – INTEGER (231 –1 to –231) – BOOLEAN (true, false) – BIT (0, 1) There can also be user-defined types and subtypes There are several categories of types including scalar, composite, access, and file types – We’ll focus on the scalar and composite A subtype is a type with a (possibly) added constraint – subtype SPC_INTEGER is INTEGER range 5 to 15; – subtype HALF_BIT is BIT range 0 to 0; – subtype NUMBER is INTEGER; -- no extra constraints here Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Basic Language Elements Scalar types – Enumeration – defines a type that has a set of user-defined values • • • type MY_VAL is (‘0’, ‘1’, ‘2’, ‘3’); type LOGIC is (AND, OR, NOT, XOR); Example declaration: variable AIN:LOGIC; – Integer – values fall within the specified integer range • • type REG_SIZE is range 0 to 31 subtype WORD is REG_SIZE range 0 to 15 – Floating Point – decimal types – Physical – represent measurement of some physical quantity like time, voltage, or current Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Basic Language Elements Composite Types – a collection of values – Array Types – collection of values all belonging to a single type • • • BIT_VECTOR and STRING are pre-defined one-dimensional array types type DATA_BYTE is array (0 to 7) of BIT; type MEMORY is array (0 to 127) of DATA_BYTE; – Record Types – collection of values that may belong to different types – Similar to a “struct” declaration in C type MODULE is record SUM:BIT_VECTOR(0 to 7); COUT:BIT; end record Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Basic Language Elements Operators – logical operators • and, or, nand, nor, xor, xnor, not – relational operators • <, >, =, <=, >=, /= -- /= means not equal to – shift operators • • logical shift left, logical shift right, arithmetic shift left, arithmetic shift right, rotate left, rotate right sll, srl, sla, sra, rol, ror – adding operators • +, -, & -- & is concatenation – multiplying operators • *, /, mod, rem – miscellaneous operators • Fall 2004 abs, ** -- ** is exponentiation EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling Entity declarations specify the entity name, the names of the interface ports, their mode (direction), and the type of ports There are several modes, we’ve seen two so far – – – – in – can only be read within entity model out – can only be written within entity model inout – can be read and written within entity model buffer – can be read and updated, it cannot have more than one source, can also be connected to another buffer • we will not need it – linkage – can be read and updated – used to interface with foreign language models • Fall 2004 we will not need it EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling The architecture body describes the internal view of the entity Concurrent statements describe internal composition of entity Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling The process statement contains sequential statements that describe the functionality of an entity in sequential terms The sensitivity list is a set of signals which will cause the process to execute in sequential order when an event occurs Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling The process then suspends and waits for another event to occur The process statement itself can execute concurrently with other concurrent statements, but internally, it executes sequentially The variable gets initialized to –1, then incremented to zero Any time an event occurs on A, this process is executed process(A) variable EVENTS_ON_A:INTEGER:=-1; begin EVENTS_ON_A:= EVENTS_ON_A+1; end process Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling Another example Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling A signal assignment statement can appear within or outside of a process – If outside a process, it is concurrent with the process statement – Within the process, it is sequential When executed, the expression on the right side of the assignment is evaluated at that time, not after any specified delay, then assigned to the signal after any specified delay Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling Wait Statement – a alternate way to suspend a process 3 forms of the wait statement Can be done in a single wait statement Examples Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling Another example using the wait statement, this time in a process without a sensitivity list Must have a sensitivity list or a wait statement, but NOT both Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling if statement – selects statements for execution based upon a condition Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling 2-input NOR gate done with if statements Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling case statement – selects one branch of execution from a list of many based upon expression Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling case statement Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling Null statement – it does nothing, sometimes may need to specify that nothing is to be done Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling loop statement – used to iterate through a set of sequential statements Several types of loops used in examples below Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling exit statement – used to jump out of a loop, cannot be used except inside a loop Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling next statement – can only be used inside a loop and begins execution back at the beginning of the loop Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling assertion statement – used for modeling constraints of an entity Fall 2004 EE 3563 Digital Systems Design EE 3563 VHDL – Behavioral Modeling report statement – can be used to generate a message Example: – report “This circuit does not work” Fall 2004 EE 3563 Digital Systems Design