|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VHDL数据类型与数据类型转换' @& E& o" i* j* P8 T6 P
`" S+ E% U3 YA. 标准数据类型# y: M9 I* j% E$ ^6 J
1) 整数类型(INTEGER)
& C2 a) ^( W$ h/ m9 p VARIBLE A: INTEGER RANGE -128 TO 128
6 o* p; x; M3 \6 ?& ] 范围 -(231-1) ~ -(231-1)
' |- ], I% r1 S* i0 H/ _( m! R 2#11111111# --binary, =255D
* \, @! z; h( O$ S8 N# v! p* j 8#377#2 j, t. w* R/ {% ?* e5 Q: x% H0 z
16#FF#
6 D( q! w- E2 n8 P! z2) 实数类型和浮点类型(REAL & FLOATING)3 r3 ]5 H S: i. f7 r4 `
实数范围 -1.0E+38 ~ +1.0E+38
) u/ z' j& i, u3 L4 P/ S 大多数EDA工具不支持浮点类型
2 g+ H9 w0 r/ H: R 16#0F#E+0
" A* \3 c6 j, C2 T f4 e 16#FF.FF#E-1* n7 K4 G& V Z
3) 位类型(BIT)8 m+ k+ Y# y" C+ h6 O
TYPE BIT IS (‘0’, ‘1’)
" j& B" [/ K2 A' |4) 位矢量类型(BIT_VECTOR)# _. c/ P# h1 G5 a# H7 U' _ P( I
B”1111-1100” --长度为8
. B; L& v, B" q/ E' a8 {! C X”FBC” --长度为12, =B”1111-1011-1100”3 U& ~2 T! j+ y+ S8 t' F9 t+ W0 a
O”371” --长度为9, =B”011-111-001”% X' C; E4 n; ^ D$ D
5) 布尔类型(BOOLEAN)2 Y; x, Q% I$ W( w; e8 e
6) 字符类型(CHARACTER)( k& C9 s- n9 ?2 `
‘A’, ‘a’, ‘B’, 大小写不敏感。: B" S- X+ O& I/ t
7) 字符串类型(TRING)+ o8 |" p- r' O; \: G! k
“VHDL”, “MULTI_SCREEN”
, S& B& [4 o* g; ~6 y/ [ U8) 物理类型(physical)
- U# `5 k% `$ P8 ^# Z, \7 z; B8 e5 b--时间类型, ]% ?6 d+ [9 p
--The physics unit time is a predefined type4 t2 W! e" J4 {9 o4 o1 j
TYPE time IS RANGE -1E18 TO 1E18
, k9 p7 ~, e1 \4 Z& @5 a: d UNITS. ~3 h, r9 e1 b
fs; -- Femto-second
) i6 o" u8 Z" u* l0 u; u) h( C ps = 1000 fs;$ `' {/ A6 c4 q
ns = 1000 ps;" Q1 x% D) j8 F, K6 W9 D! ~2 P
us = 1000 ns;( U& D2 M7 \4 ~2 T' R
ms = 1000 us;( g) ]+ G1 l+ s& A: H1 F) d
sec = 1000ms;" p, \5 V. a: G5 Z, R7 W/ ]
min = 60 sec;
. S! F. d$ N8 K: W* y5 A% d: ~4 } END UNITS
4 R6 D4 O+ \" k0 {( w8 m& x& a) N* E& ~) |/ e1 W" s
--another- h; s1 K: E( L2 V0 s
--DISTANCE TYPE
) }( h& \( t5 S4 |+ P TYPE distance IS RANGE 0 TO 1E16
+ `' [& |5 L( N" p/ j) ? UNITS% E% C7 {! ~4 `$ C0 [0 ~9 ?9 l6 V
A;( J% W9 v3 Q7 J
nm = 10A;' O& D6 j [4 L2 m
um = 1000nm;
& q- G V/ n% V& Y, [) B mm = 1000um;- v* s6 u X9 i1 Q. {& l
cm = 10mm;
/ g, H. m! j$ Q, J0 E# W9 x/ ~ m = 1000 mm;
! c( J `2 J2 K km = 1000m;+ ]' ~6 R. r. i* O
END UNITS;1 U* y: a7 g4 W2 d2 ?
9) 错误类型(NOTE,WARNING,ERROR,FAILURE)8 S8 Q' v/ O2 x1 w2 `7 y
10) 自然数、正整数类型(NATURAL & POSITIVE)
( U d4 N5 C% e" u. ]ENTITY_compare IS
, h) `% w# u$ e0 M7 Q PORT (a, b: INTEGER RANGE 0 to 9:=0;
5 g. c8 C: {$ Y, l+ z5 C( b c: out Boolean);
7 M( e# K, l; t+ W0 M7 B: REND compare;
' {- i9 z4 Q3 \ \- ZB. 自定义数据类型
- y6 B: r7 i* n1) 枚举类型(ENUMERATED)) R# {7 Z5 x$ ^# r# `4 u
TYPE PCI_BUSstate IS; _( `1 Z4 S" w: Q" s2 l! u
(Idle, busbusy, write, read, Back off); --PCI总线状态机变量
9 w. g0 j8 i* _
' `; Z/ K4 D: k9 }1 A/ Z, \+ m$ W* } TYPE std_ulogic IS
% @( f1 |6 o) A' }- z8 b$ c' ?, Y8 F (’U’, ‘X’, ‘1’, ‘0’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-‘);2 V: _; i5 S" f" H" \- m% j; V$ Y' W% r
2 C( c0 j; o% y3 s/ y
TYPE boolean IS (false, true);& J! I1 T0 I, R1 L& z
+ _. j: ~* Y2 p TYPE BIT IS (‘0’, ‘1’);
$ i7 Y5 K- b! e7 R2 z9 E2) 整数类型(INTEGER). z! f/ v! A* g; @9 {7 F3 N
TYPE digit IS INTEGER RANGE -128 TO 128* X( B, }+ K" k, W
3) 实数类型和浮点类型(REAL & FLOATING)
0 R9 P# s$ v+ W- v8 S( a2 {4) 数组类型(ARRAY)- |; I- J4 m" Q& B' Y8 Y
TYPE MYARRAY IS ARRAY (INTEGER 0 TO 9) OF STD_LOGIC
# B0 X4 i, q! @, d& [0 i2 l5 N+ b8 M; C5) 存取类型(ACCESS)2 d& M. ^& g( r; j7 s
TYPE line IS ACCESS string; --Line是指向字符串的指针
5 Y( h9 q3 i* u( d6) 文件类型(FILES). x' t# y' W. {# R) \' N, [
TYPE text IS FILE OF string;; D2 A8 \& D3 Z: c; R B. @# Q) H. b
TYPE input-type IS FILE OF character;
2 K* t) R- U# u! l- P+ S7) 记录类型(RECODE)
3 X: w; ]6 e6 }2 s/ l' Z5 U --RECORD适于描写总线,通讯协议. |8 u2 t3 K, m& |! ^0 q
TYPE PCI_BUS IS RECORD
. g" C& r- |/ N2 w: I+ W U/ A ADDR: STD_LOCIG_VECTOR(31 DOWNTO 0);; ~$ h/ G0 Y0 @5 m% t5 x' Y
DATA: STD_LOGIC_VECTOR(31 DOWNTO 0);# b: u* ]4 z2 e
END RECORD;) k. Q) O- s( R* f$ c8 N, V Q
SEGINAL DECODE1, DECODE2: PCI_BUS;
9 h3 h/ t( [, p* M+ W5 j PCI_DEVICE1 <= DECODE1.ADDR;
( k! C5 v3 z" m+ U7 T# J PCI_DEVICE1RAM <= DECODE1.DATA;
c: W0 ]# J" A8) 时间类型(TIME)' h' W& F, l* K* w( h5 d: j7 S9 \
类型转换
' G9 \! c9 f" g8 ^- |/ _9 ~A. 类型标记法% |2 [' V. d6 j' F7 L, ?
Variable I: integer;
& Y/ _" Q L/ c3 KVariable R: real;2 r7 B' C5 U' v4 p) Y' F
I: = integer(r);# j# c E! _; z6 z& V# U4 j
R:= real(i);
9 J: l; F) \ R, s" i1 R" ]/ P其他还有 NUMERIC_BIT中SIGNED、UNSIGNED 同 BIT_VECTOR间的转换。& M9 W3 ]+ [5 x* y% L# y; E6 {
UNMERIC_STD 中 SIGNED、UNSIGNED 同 STD_LOGIC_VECTOR 间的转换。3 x$ H* w) r; r$ v* N
B. 函数转换法: @6 F. v2 G0 b" \3 A' z$ N+ |/ \7 q
Std_logic_arith程序包中:( O3 m1 i* i' O$ `3 t
COMV_STD_LOGIC_VECTOR(A,位长); --interger, signed, unsigned -> std_logic_vector
# S) Z8 G( l7 t CONV-INTERGER(A); --signed, unsigned -> std_logic_vector1 R' D+ K, H5 k: R
CONV-INTERGER(A); --signed, unsigned -> integer
) y: P' O8 X1 s6 w" AStd_logic_unsigned程序包中:2 I0 z; n. M2 k. T; d
CONV-INTEGER(A); --STD_LOGIC_VECTOR -> INTEGER
8 ~0 w6 ^' V. |0 e1 y) t) ]- {+ QC. 常数实现
$ S0 S5 e3 k) t9 B& {CONTSTANT TYPECONV-CON: typeconv_type := (‘0’|’L’ => ‘0’, ‘1’|’H’=>’1’);, V2 I# s B5 {( p
SIGNAL B: BIT;
9 \! Y5 E( z4 A0 }4 @4 l% QSIGNAL S: STD_LOGIC;
% S2 [: j) |3 _; e' s ^BIGIN
) A& P0 p `/ G( ^* l B <= TYPECONV-CON(S);
4 d$ K6 Y$ V: i6 I1 WEND;/ o- E% c! h. C* T5 ~# T
0 V+ l2 o9 B1 g4 A, q8 d4 R' e
数据类型的限定
' B+ k; R& W% X' Y3 h/ q, ] A<= std_logic_vector(“01101001”); --数据前加上类型名
1 A4 N, k7 h6 a# [7 V: S9 ^ SUBTYPE std3bit is STD_LOGIC_VECTOR (0 to 2);2 z" E9 I& u9 [4 M
; Q7 P! F% g3 e% h8 R( W2 r0 b
4 p5 [: [* J5 b5 R1 Z% Q) a g
6 [! Z1 g3 k; y I _
|
|