|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VHDL数据类型与数据类型转换
% R- X5 w0 \+ V$ z0 |+ J
" U9 m0 u- S$ s; C- @/ iA. 标准数据类型
' ?2 f' O/ i" ] l1 e6 I1) 整数类型(INTEGER)
' o7 I* ]9 S: F VARIBLE A: INTEGER RANGE -128 TO 128
/ M0 \. B( D9 A% E) d 范围 -(231-1) ~ -(231-1)( m% E9 m# T) |
2#11111111# --binary, =255D
3 p- e. S. X) o% U 8#377#5 b) Q: j, @% `, a1 S9 X$ s
16#FF#
, S, W9 j/ ^$ S$ h6 i* {2) 实数类型和浮点类型(REAL & FLOATING), {* r3 A0 C" u" j% e! n3 h1 }
实数范围 -1.0E+38 ~ +1.0E+384 K/ v4 { @. T" h$ o
大多数EDA工具不支持浮点类型 {6 Z* I' |+ X- m
16#0F#E+0
l( s8 c) j/ e9 @) i) c 16#FF.FF#E-1
. L1 [$ [6 i; h3 G4 i9 X9 T/ P3) 位类型(BIT)
0 Q* k7 h `% s5 A* j/ H( a4 k) N TYPE BIT IS (‘0’, ‘1’)
, Y2 ?: l( i. k" L% k4) 位矢量类型(BIT_VECTOR)1 m! _3 P6 \* ]" K
B”1111-1100” --长度为8, G2 t4 \7 |7 Y( a" a1 W
X”FBC” --长度为12, =B”1111-1011-1100”
* |. d( l. W! n( l: r4 l( x O”371” --长度为9, =B”011-111-001”0 g3 U# S6 K7 P! A3 n- v2 q# Y! m
5) 布尔类型(BOOLEAN)$ n1 @4 W1 e, L( B( g
6) 字符类型(CHARACTER)) a- H( y- y" w
‘A’, ‘a’, ‘B’, 大小写不敏感。
+ L3 I8 g8 b4 P3 x( l7) 字符串类型(TRING)0 ^) X2 m: d* n# d4 g9 m3 I2 g
“VHDL”, “MULTI_SCREEN”
5 M5 F- C- `- R& _/ M& R- P3 [( H8) 物理类型(physical)
! e1 U8 ^, S! S+ _0 K! r--时间类型
: [" M" b W8 @( [0 P. T--The physics unit time is a predefined type
+ k) E1 I- D+ t& M/ k. Y TYPE time IS RANGE -1E18 TO 1E18+ b5 j' h0 O. H, H0 w
UNITS
/ `! L, R9 z: ]& d$ l+ p/ h7 a, B; g: e fs; -- Femto-second/ R8 m: a0 o( ]- v7 L4 m. B
ps = 1000 fs;) ]8 z7 R, l: G; p' }! V
ns = 1000 ps;9 [3 v" e/ f3 ]( b4 A, O
us = 1000 ns; Z3 s, A: _0 S* L' O: D* k
ms = 1000 us;( j( _" V2 Z) h( x$ M
sec = 1000ms;; H( \7 }# C0 w! [8 x
min = 60 sec;, s3 b2 m2 B% w- \9 z
END UNITS
4 e' @% z! ^4 d' I
6 b/ w6 t K: q: i+ {+ t; ]0 e--another4 i u6 n* B5 y% ?- [; g1 Z
--DISTANCE TYPE
/ Q0 A; m5 W* ^ TYPE distance IS RANGE 0 TO 1E16
3 u9 r+ o! b8 \$ \# T# e UNITS
8 I- s7 Z L" l; y A;. `& n: l9 i1 y3 s- `
nm = 10A;
6 f4 V- F* T* [5 s um = 1000nm;/ R" }9 Z" b8 [" y% q
mm = 1000um;, ~# `' k, g$ Z
cm = 10mm;
( `' q# K2 o. A m: j m = 1000 mm;
: T( Y0 l4 x" _: s0 E: u! A km = 1000m;
( [% |7 A- l" F+ _* b; N, ] END UNITS;
5 }1 d( y" p+ @% ^9) 错误类型(NOTE,WARNING,ERROR,FAILURE)
$ F- H0 Q1 Y9 C, H e10) 自然数、正整数类型(NATURAL & POSITIVE)
+ b' ]8 a7 |+ g5 jENTITY_compare IS
4 s: R+ S' f; b% W3 U; ^+ i PORT (a, b: INTEGER RANGE 0 to 9:=0;
* J" g5 C. v1 W+ h. l( p c: out Boolean);- j2 J1 ~, O/ ?% B T
END compare;
# e- g( w! f$ OB. 自定义数据类型
x0 p- ?4 ?' D8 O" R1) 枚举类型(ENUMERATED)! K4 p; \1 n( S2 o+ w, p
TYPE PCI_BUSstate IS) d+ j; W. W5 [2 n( t* m7 L r
(Idle, busbusy, write, read, Back off); --PCI总线状态机变量
$ E) w5 R' C. T2 |# k; o& ~! J0 o4 R% J3 Z% {( a F! d+ x, m
TYPE std_ulogic IS
; V& U& `5 q: @8 t. E2 y (’U’, ‘X’, ‘1’, ‘0’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-‘);9 a4 T# B) B* m( I, ]
" v- z4 v' `3 U, M TYPE boolean IS (false, true);! }- f1 D. L! Q; {- R
6 [) t& v( B* b6 J4 Q. W
TYPE BIT IS (‘0’, ‘1’);" M3 W" {# K' u N% q( n, ?
2) 整数类型(INTEGER)
( o, ]) m! G8 r; ~8 u/ a TYPE digit IS INTEGER RANGE -128 TO 128$ m5 b+ p9 r( T: G9 l0 q/ O+ ~; Z
3) 实数类型和浮点类型(REAL & FLOATING)
`; l: {0 j, `7 n4) 数组类型(ARRAY)
& Q5 ~1 L8 b W/ S TYPE MYARRAY IS ARRAY (INTEGER 0 TO 9) OF STD_LOGIC
: z3 I2 T" Q, u4 |: V5) 存取类型(ACCESS)
) B1 N1 M. u* _1 \) k5 w8 j' b8 k TYPE line IS ACCESS string; --Line是指向字符串的指针
3 y( C" b+ Q1 E5 I* |6) 文件类型(FILES)+ Z3 ^6 }. B5 P v
TYPE text IS FILE OF string;8 B6 e' K! U* x; F$ M F' _
TYPE input-type IS FILE OF character;1 w, Z) l' V' w( d0 l( l j
7) 记录类型(RECODE); Y/ {2 O/ p& O
--RECORD适于描写总线,通讯协议+ C3 r9 p L/ ?* M0 w8 I- P
TYPE PCI_BUS IS RECORD
2 I! W1 L% [1 m# K4 D! d$ { ADDR: STD_LOCIG_VECTOR(31 DOWNTO 0);, } T" m- @" J2 Q6 H/ z3 ?( I2 G ?
DATA: STD_LOGIC_VECTOR(31 DOWNTO 0);
# T7 o ]0 ~* z) I' b; J4 C& r END RECORD;# E/ N9 {4 U3 ^# L
SEGINAL DECODE1, DECODE2: PCI_BUS;
( `8 |/ ]# [' z; M; A8 O" [ PCI_DEVICE1 <= DECODE1.ADDR;
" d: C; C& M# b$ k( @! _ PCI_DEVICE1RAM <= DECODE1.DATA;/ p h* B8 Y- ~+ T( h) ?' @
8) 时间类型(TIME)
5 Y) O; N( ?1 q2 [类型转换/ @# J$ C6 l' o. s O- p% g. ?
A. 类型标记法
/ Y# H* r0 u/ R9 M- I$ SVariable I: integer;% `( ?- V4 t; J9 W) k6 E8 ]
Variable R: real;
+ I, j# l7 `/ k4 fI: = integer(r);
& Z1 ]1 z# i" L" n& \/ dR:= real(i);
* N5 M/ @' O8 [2 g其他还有 NUMERIC_BIT中SIGNED、UNSIGNED 同 BIT_VECTOR间的转换。
3 ^" _& n% l& s9 T$ |UNMERIC_STD 中 SIGNED、UNSIGNED 同 STD_LOGIC_VECTOR 间的转换。
1 R' v% X$ `/ v( \; |8 M w6 I% wB. 函数转换法" Q% V4 `' q0 e' k1 n$ _
Std_logic_arith程序包中:
- n3 M/ Y, [* i# M COMV_STD_LOGIC_VECTOR(A,位长); --interger, signed, unsigned -> std_logic_vector5 s8 C& H6 b! m( |7 o
CONV-INTERGER(A); --signed, unsigned -> std_logic_vector
, R( P) V7 l) `* C' v CONV-INTERGER(A); --signed, unsigned -> integer
0 g0 X4 ?0 f8 B# yStd_logic_unsigned程序包中:, F6 z1 N- O; J2 P* Z
CONV-INTEGER(A); --STD_LOGIC_VECTOR -> INTEGER
- [8 A; o$ g9 tC. 常数实现
2 V5 ]+ S; n& n- o8 R! Y' @CONTSTANT TYPECONV-CON: typeconv_type := (‘0’|’L’ => ‘0’, ‘1’|’H’=>’1’);
( q0 u& ^8 n. k% t' JSIGNAL B: BIT;
, Q( J! L+ o; W1 I1 M7 rSIGNAL S: STD_LOGIC;/ Q, P6 _8 M4 r, E$ i' t
BIGIN
A E t, Q" k- d3 F% @1 t B <= TYPECONV-CON(S);* u' R" y1 A7 h" e
END;/ N: r1 B O! [0 f, G* B
, R5 ^; O. y# p2 B4 B3 q/ {+ e
数据类型的限定+ R$ E# ^0 ~7 {/ c9 {: B6 }1 A5 C
A<= std_logic_vector(“01101001”); --数据前加上类型名* w- @% w: I9 v) o
SUBTYPE std3bit is STD_LOGIC_VECTOR (0 to 2);
$ U, g7 @; |/ z/ k; W0 c0 [4 ?6 |' W2 x! D
1 K7 I: c/ E, n7 r5 T' G! z2 c& ~: Q' c& X; e) _/ j& b
|
|