highest_level[1..0] : OUTPUT; ) BEGIN
IF high THEN highest_level[] = 3; ELSIF middle THEN highest_level[] = 2; ELSIF low THEN highest_level[] = 1; ELSE
highest_level[] = 0; END IF; END;
在本例中,high信号具有最高优先权,若三个信号high,middle和low都被VCC驱动,则只有high信号起作用,输出highest_level[] = 3。 例5:有CASE的语句的例。 SUBDESIGN decoder ( ) BEGIN
CASE code[] IS
WHEN 0 => out[] = B\WHEN 1 => out[] = B\WHEN 2 => out[] = B\WHEN 3 => out[] = B\code[1..0]
: INPUT;
out[3..0] : OUTPUT;
END CASE;
END;
例6:7段显示译码器例 7段显示器的笔划顺序 % -a- % % f| |b % % -g- % % e| |c %
129
% -d- % 该显示器可以显示如下数字和字母: % 0 1 2 3 4 5 6 7 8 9 A b C d E F % 7段译码器程序: SUBDESIGN 7segment (
i[3..0] : INPUT; a, b, c, d, e, f, g : OUTPUT; ) BEGIN TABLE
i[3..0] => a, b, c, d, e, f, g;
H\ => 1, 1, 1, 1, 1, 1, 0; H\ => 0, 1, 1, 0, 0, 0, 0; H\ => 1, 1, 0, 1, 1, 0, 1; H\ => 1, 1, 1, 1, 0, 0, 1; H\ => 0, 1, 1, 0, 0, 1, 1; H\ => 1, 0, 1, 1, 0, 1, 1; H\ => 1, 0, 1, 1, 1, 1, 1; H\ => 1, 1, 1, 0, 0, 0, 0; H\ => 1, 1, 1, 1, 1, 1, 1; H\ => 1, 1, 1, 1, 0, 1, 1; H\ => 1, 1, 1, 0, 1, 1, 1; H\ => 0, 0, 1, 1, 1, 1, 1; H\ => 1, 0, 0, 1, 1, 1, 0; H\ => 0, 1, 1, 1, 1, 0, 1; H\ => 1, 0, 0, 1, 1, 1, 1; H\ => 1, 0, 0, 0, 1, 1, 1; END TABLE; END;
例7:地址译码器例。 SUBDESIGN decode3 (
addr[15..0], m/io : INPUT;
130
rom, ram, print, sp[2..1] : OUTPUT; ) BEGIN TABLE
m/io, addr[15..0] => rom, ram, print, sp[]; 1, B\ => 1, 0, 0, B\ 1, B\ => 0, 1, 0, B\ 0, B\ => 0, 0, 1, B\ 0, B\ => 0, 0, 0, B\ 0, B\ => 0, 0, 0, B\
END TABLE; END;
例8:使用lpm译码功能译码
该译码器功能:
Enable data[LPM_WIDTH1..0] eq[LPM_DECODES-1..0] 0 X 0000...00 1 LPM_DECODES 1 1000...00 1 L _DECODES PM 2 0100...00 … … … 1 1 0000...10 1 0 0000...01
该函数的AHDL说明:
FUNCTION lpm_decode (data[LPM_WIDTH-1..0], enable, clock, aclr) WITH (LPM_WIDTH, LPM_DECODES, LPM_PIPELINE) RETURNS (eq[LPM_DECODES-1..0]); 在此例中不需要enable,clock和acir端口。 该译码器源文件:
INCLUDE \SUBDESIGN decode4 (
address[15..0] : INPUT; chip_enable : OUTPUT; ) BEGIN
chip_enable = lpm_decode(data[]=address[])
131
WITH (LPM_WIDTH=16, LPM_DECODES=2^10)
RETURNS (.eq[H\返回地址为H\位置的码% END;
(4) 变量缺省值的使用 例1:
SUBDESIGN default1 (
i[3..0] : INPUT; ascii_code[7..0] : OUTPUT; ) BEGIN DEFAULTS
ascii_code[] = B\问号的ASCII码 % END DEFAULTS; TABLE
i[3..0] => ascii_code[];
B\ B\ B\ B\ END TABLE; END;
在该例中若没有译码输出时,输出问号。 例2:
SUBDESIGN default2 (
a, b, c : INPUT; select_a, select_b, select_c : INPUT; wire_or, wire_and : OUTPUT; ) BEGIN DEFAULTS wire_or = GND; wire_and = VCC;
132
END DEFAULTS;
IF select_a THEN wire_or = a; wire_and = a; END IF;
IF select_b THEN wire_or = b; wire_and = b; END IF;
IF select_c THEN wire_or = c; wire_and = c; END IF; END;
(5) 低电平激活信号 例1:
SUBDESIGN daisy ( /local_request : INPUT; /local_grant : OUTPUT; /request_in
: INPUT;
/request_out : OUTPUT;
/grant_in : INPUT; /grant_out
: OUTPUT; ) BEGIN DEFAULTS /local_grant = VCC; /request_out = VCC;
/grant_out
= VCC;
END DEFAULTS;
133