generic-map : GENERIC MAP "(" association-list ")" port-map : PORT MAP "(" association-list ")" block-header : [ generic-clause [ generic-map ";" ]] [ port-clause [ port-map ";" ]] block-declaration-item : subprogram-declaration | subprogram-prototype | type-declaration | subtype-declaration | constant-declaration | signal-declaration | file-declaration | alias-declaration | component-declaration | use-clause | attribute-declaration | attribute-specification | configuration-declaration | diconnection-specification block-statement : [ label ":" ] BLOCK [ "(" expression ")" ] block-header { block-declaration-item } BEGIN concurrent-statement-list END [ label ] ";"
The generic and port clause declare local signals that can be used within the block statement. The generic and port maps associate actual signals to the local port and generic names. The optional expression that can follow the BLOCK keyword is called a guard expression. The guard expression can be used to "guard" signals. The section on concurrent signal assignments discusses the guarded signal assignment. A guarded signal assignment may only appear within a block and the guard expression used is the guard expression of the immediately enclosing block statement. The guard expression together with a guarded statement can be used to build a latch. For example,
signal clk : bit; signal latch_data, input_data : bit_vector (7 downto 0); . . . block (clk='1' and clk'event) begin latch_data <= guarded input_data; end block;