Concurrent Statement | ---- used in ----> | Architecture |
Syntax |
label: block (optional_guard_condition) declarations begin concurrent statements end block label; |
Rules and Examples |
The label is compulsory
CONTROL_LOGIC: block begin U1: CONTROLLER_A port map (CLK,X,Y,Z); U2: CONTROLLER_A port map (CLK,A,B,C); end block CONTROL_LOGIC; DATA_PATH: block begin U3: DATAPATH_A port map (BUS_A,BUS_B,BUS_C,Z); U4: DATAPATH_B port map (BUS_A,BUS_C,BUS_D,C); end block DATA_PATH; |
Without a guard condition a block is a grouping together of concurrent statements within an architecture. It may have local signals, constants etc. declared. |
Blocks may contain further blocks, implying a form of hierarchy within a single architecture. |
A Block may contain any of the declarations possible for an architecture. Items declared within a block are only visible inside it. |
IF an optional guard condition is included, the block becomes a
guarded block. the guard condition must return a boolean
value, and controls guarded signal assignments within the block.
If the guard condition evaluates to false, the drive to any guarded
signals from the block is "switched off". Such signals must be
declared to be guarded signals of a resolved type. Guarded signals can
be declared by adding the words bus or register after the
name of the type of the signal. The difference between bus and register
signals is that if all drivers to a bus signal are "switched off", it
requires a resolution function to provide a value for the signal but a
register signal retains its last driven value after all drivers to it
have been switched off.
architecture BLKS of TRISTATE is signal INT: std_logic bus; begin DRIVER_1: block (EN = '1') begin INT <= guarded DATA_1; end block DRIVER_1; end BLKS; |
Synthesis Issues |
Sequential (i.e. flip-flop and register) behaviour can be modelled using guarded blocks, but again for synthesis and readability it is better described using "clocked" processes.
Whats New in '93 |
In VHDL-93 the keyword block (or the guard condition, if there is
one), may be followed by the keyword is, for consistancy.:
label: block (optional guard_condition) is -- etc