|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VHDL数据类型与数据类型转换# O3 _$ D9 k3 a8 l5 B" d
; o# J' Y+ |4 m; qA. 标准数据类型- X9 | b% I3 Z" j$ e7 L
1) 整数类型(INTEGER)! N h1 W% u, T' M4 Z; a
VARIBLE A: INTEGER RANGE -128 TO 128, w% e, A% ^/ |" N% S6 I; R
范围 -(231-1) ~ -(231-1)2 B3 b4 [1 v7 N8 x( i8 j% W
2#11111111# --binary, =255D3 _& _2 D) x7 k7 p9 r( H( N
8#377#
% F+ o' H6 ^7 v, ^ 16#FF#, L) e6 N$ c$ [/ }
2) 实数类型和浮点类型(REAL & FLOATING)
) K5 j: G6 T$ `$ s5 x9 N% c: J 实数范围 -1.0E+38 ~ +1.0E+38
# s" f ]3 y1 W" U% x+ @ 大多数EDA工具不支持浮点类型# s- l0 p$ \0 d0 s
16#0F#E+0
' M% j" ~0 F2 F$ |6 o1 ^. Q4 V 16#FF.FF#E-1+ |6 |8 U* V7 E7 D( r
3) 位类型(BIT)
% u5 W6 X, H& O& m& c0 h3 P TYPE BIT IS (‘0’, ‘1’)2 U) I M: k. `9 Y, H, Y5 L
4) 位矢量类型(BIT_VECTOR)$ }. s, u7 ]3 M( l0 W0 x
B”1111-1100” --长度为8
+ [7 \4 ]% u a$ E, o X”FBC” --长度为12, =B”1111-1011-1100”
5 p# M5 l3 a# S O”371” --长度为9, =B”011-111-001”
& K% S, y6 }3 h5) 布尔类型(BOOLEAN)1 z6 Q% h, a& d0 D" Z
6) 字符类型(CHARACTER)! z% @0 y X4 C) Y" t
‘A’, ‘a’, ‘B’, 大小写不敏感。- n1 E% ]3 }% x0 d& [5 R
7) 字符串类型(TRING)' e5 G+ y9 s1 d; @: W: J
“VHDL”, “MULTI_SCREEN”7 r# M: ]7 Y Q4 C6 |
8) 物理类型(physical)4 O$ L4 `) s! H( R2 g
--时间类型0 O! Q) \6 d. L4 w: I3 Z- `
--The physics unit time is a predefined type
& L3 N4 T& _ X( n" _1 S" r TYPE time IS RANGE -1E18 TO 1E18
* I ^- e7 q; Q0 f UNITS5 k: \" m% p8 Y9 `
fs; -- Femto-second1 Z8 W0 t* I( C4 }3 a# ^; K
ps = 1000 fs;( Z) e4 j' @. f$ J) d7 r: k
ns = 1000 ps;
( X9 C# ?6 ?8 i3 m) I+ f us = 1000 ns;1 A) U3 }8 J) q; I( ~
ms = 1000 us;
0 s" t3 O$ V$ K* \3 ^6 R+ s ^: x sec = 1000ms;
, z- Q1 [4 |0 k5 \! x2 r, U min = 60 sec;! N6 i G5 Q. }6 h/ F
END UNITS9 m3 L% m' R6 N! k: C" `
% f8 Y. s8 T8 y( x+ H( e8 d--another1 O$ k/ L: b* y2 `1 q2 q
--DISTANCE TYPE* _# e W1 x4 Y( X# j3 q
TYPE distance IS RANGE 0 TO 1E16$ j/ B" Q( C0 N& D5 G& |
UNITS
/ u/ Z3 p/ @3 y6 V' ^: d: N' M5 ? A;+ M, N3 Z! m1 h; ?) M. T
nm = 10A;
: L2 ]' {5 P4 N: \1 { um = 1000nm;* R& y# ~* O: r. M8 t) L
mm = 1000um;1 C! V, F& c6 e3 }* `
cm = 10mm;: O" V3 ?8 p0 S' `
m = 1000 mm;+ o9 B+ v; l2 l3 [ D
km = 1000m;+ o2 Z/ W2 M7 t$ U: }$ `6 W
END UNITS;
0 S0 c7 s' l3 ~8 i4 r, D9) 错误类型(NOTE,WARNING,ERROR,FAILURE)* Z5 \2 H+ z9 O, x! m. f( F
10) 自然数、正整数类型(NATURAL & POSITIVE)
/ p l. l6 x# Y2 E% GENTITY_compare IS, t: ?, Z6 Z: L: t: r; Q" y
PORT (a, b: INTEGER RANGE 0 to 9:=0;
1 y) K% l1 l; w/ @3 y } c: out Boolean);
' t# H9 L5 q# G' n; h* z$ B! v! qEND compare;( ^/ n1 Y. j# C* F- O+ k: m0 o
B. 自定义数据类型
6 O) P+ Z$ u* M1) 枚举类型(ENUMERATED)
* y7 a5 X2 v" z Q. ~( S: t5 ^7 P TYPE PCI_BUSstate IS
4 R5 j) V; c& w |$ ~; g1 P0 G% [ (Idle, busbusy, write, read, Back off); --PCI总线状态机变量8 U3 x/ M1 n/ V/ l- R' g1 n X5 s
0 s$ `/ k1 H1 ~1 V1 Z
TYPE std_ulogic IS6 |" f4 W8 F- Y
(’U’, ‘X’, ‘1’, ‘0’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-‘);
7 c N3 B4 Y0 k/ p" L8 ? a& e# G+ t
TYPE boolean IS (false, true);
7 V& i# t1 q) R: E& h) K* B- f( ^9 z/ Q4 ^' G6 W
TYPE BIT IS (‘0’, ‘1’);
) X- Z! j1 T6 n. t# n0 e2) 整数类型(INTEGER)
9 J( R( w* }7 N$ Q' v" D TYPE digit IS INTEGER RANGE -128 TO 128( d, _6 G! [7 D4 @; G
3) 实数类型和浮点类型(REAL & FLOATING)6 ^! y! M5 Y* X0 g! O" H
4) 数组类型(ARRAY)
8 n" `, d7 d* h' _1 I( W! I TYPE MYARRAY IS ARRAY (INTEGER 0 TO 9) OF STD_LOGIC1 I9 G! C1 V# [* s2 b8 \# F$ [
5) 存取类型(ACCESS)
5 a% C4 u; H2 f8 N- b TYPE line IS ACCESS string; --Line是指向字符串的指针
" S$ g9 c+ h6 G8 C7 e8 M6) 文件类型(FILES)
" }6 `: l Y8 D7 q9 b" a TYPE text IS FILE OF string;
$ Y% t) j2 W R. q TYPE input-type IS FILE OF character;
8 N# B* |) [& f( k4 v( V7) 记录类型(RECODE)* k/ i0 D: O4 W
--RECORD适于描写总线,通讯协议; I& r: G9 Z# H# M4 L2 Z
TYPE PCI_BUS IS RECORD1 c* _$ `7 p+ z1 Y% a) u
ADDR: STD_LOCIG_VECTOR(31 DOWNTO 0);
) P- E9 X* F0 \; Z" r9 b4 s8 C DATA: STD_LOGIC_VECTOR(31 DOWNTO 0);% [9 O( l, _9 j5 Y
END RECORD;
2 E" C8 m7 v6 M SEGINAL DECODE1, DECODE2: PCI_BUS;& O1 l# X% V( @4 I/ J* n/ O
PCI_DEVICE1 <= DECODE1.ADDR;
3 e. s# c7 W7 e% P+ V# H PCI_DEVICE1RAM <= DECODE1.DATA;2 `- E7 o( @" f( M
8) 时间类型(TIME)+ `& n) ]% ?3 P0 k* ~
类型转换( s C) t. u/ ?3 J! p5 I
A. 类型标记法
7 s6 N0 X5 B2 _! ?# Y Z3 _Variable I: integer;
" L6 z0 L7 m6 u Y7 \' sVariable R: real;
6 c4 ]( V" i0 O" LI: = integer(r);
- ^. z7 ]1 b3 Z: M% o# f; i8 BR:= real(i);* a% E Y( n# m. }( }0 b1 n
其他还有 NUMERIC_BIT中SIGNED、UNSIGNED 同 BIT_VECTOR间的转换。
3 c8 L" O9 p0 W U7 y* s' MUNMERIC_STD 中 SIGNED、UNSIGNED 同 STD_LOGIC_VECTOR 间的转换。
: b2 Z( B$ Z& `B. 函数转换法
: {8 t& a$ a8 k* `' z+ FStd_logic_arith程序包中:
0 [) w, i9 W5 X$ q COMV_STD_LOGIC_VECTOR(A,位长); --interger, signed, unsigned -> std_logic_vector% u* u( K$ h1 ~; L- r k% z
CONV-INTERGER(A); --signed, unsigned -> std_logic_vector, L- i, J$ K M& ^) y' c6 [
CONV-INTERGER(A); --signed, unsigned -> integer) m+ t' y4 S$ H. y
Std_logic_unsigned程序包中:
2 G0 M3 l& |5 K/ w5 ?9 w& z CONV-INTEGER(A); --STD_LOGIC_VECTOR -> INTEGER4 y0 T7 j. t* y5 w9 M7 x) \. L
C. 常数实现
( z- c* L. A+ M( ~) nCONTSTANT TYPECONV-CON: typeconv_type := (‘0’|’L’ => ‘0’, ‘1’|’H’=>’1’);) W2 ? P! R9 k3 R
SIGNAL B: BIT;( M% v, l7 m& {: N u
SIGNAL S: STD_LOGIC;
# _4 o1 W4 c3 i+ _, Q- \BIGIN
4 b) n% r+ O. g% e4 T B <= TYPECONV-CON(S);
4 n6 H* i9 t: A$ w( K! BEND;
8 B8 U$ o" y+ H
0 _/ _7 {* C% ?数据类型的限定
8 g% x& N. F1 E" I& @& G' t A<= std_logic_vector(“01101001”); --数据前加上类型名 I8 X- l' n3 k' N( }' I' K
SUBTYPE std3bit is STD_LOGIC_VECTOR (0 to 2);
6 C4 Y7 d; Q3 F/ H: [, S% S0 T3 |
( o- s( n7 U3 x- X! H
" Y8 p' u# v2 z; e6 r
|
|