Ciro Santilli OurBigBook.com  Sponsor 中国独裁统治 China Dictatorship 新疆改造中心、六四事件、法轮功、郝海东、709大抓捕、2015巴拿马文件 邓家贵、低端人口、西藏骚乱
vhdl/procedure_tb.vhdl
library std;
use std.textio.all;

entity procedure_tb is
end procedure_tb;

architecture behav of procedure_tb is

    signal s0 : integer;

    procedure print_integer (
        i : in integer
    ) is
        variable my_line : line;
    begin
        write(my_line, i);
        writeline(output, my_line);
    end print_integer;

    -- Modify a signal.
    procedure add_to_s0 (
        i1 : in integer;
        i2 : in integer;
        signal s0 : out integer
    ) is
    begin
        s0 <= i1 + i2;
        wait for 1 ns;
    end add_to_s0;

    -- Procedures can be overloaded.

        procedure overload (
            i1 : in bit;
            signal s0 : out integer
        ) is
        begin
            s0 <= 0;
            wait for 1 ns;
        end overload;

        procedure overload (
            i1 : in integer;
            signal s0 : out integer
        ) is
        begin
            s0 <= 1;
            wait for 1 ns;
        end overload;

    -- No args.

        -- Possible to define, but can it do anything useful?
        procedure no_args
        is
        begin
            --s0 <= 1;
            wait for 1 ns;
        end no_args;


begin
    process is
    begin
        print_integer(1);
        print_integer(2);

        add_to_s0(1, 2, s0);
        assert s0 = 3;

        -- Overloading

            overload(bit'('1'), s0);
            assert s0 = 0;

            overload(integer'(1), s0);
            assert s0 = 1;

        wait;
    end process;
end behav;