TA的每日心情 | 开心 2019-11-20 15:00 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ ~+ t4 j9 T& W2 Q9 k. M$ Q, q' \
1. 关于端口
# I! x. U% b/ x! }+ ~- O5 r8 JVHDL 共定义了 5 种类型的端口,分别是 In, Out,Inout, Buffer 及 Linkage,实际设计时只会用 到前四种。In 和 Out 端口的使用相对简单。这里,我们主要讲述关于 buffer 和 inout 使用时的注意 事项。
. G+ g9 | ?( r9 l+ Kinout 和 buffer 区别
0 D5 U2 y) S9 E" ]INOUT 为输入输出双向端口,即从端口内部看,可以对端口进行赋值,即输出数据。也可以从 此端口读入数据,即输入;
9 t* s! Y e! y F. t3 eBUFFER 为缓冲端口,功能与 INOUT 类似,区别在于当需要读入数据时,只允许内部回读内 部产生的输出信号,即反馈。举个例子,设计一个计数器的时候可以将输出的计数信号定义为 BUFFER,这样回读输出信号可以做下一计数值的初始值。
4 D, s) r& V# n% Rbuffer 顾名思义就是缓存,它是作为输出使用的,因为在模块内,是不可以将输出赋值给其他 信号的,例如定义 b: out std_logic;我们现在要将 b 赋值给信号 a,就会出错,但是如果 b 的类型为 buffer 就可以执行操作; . I4 k% q, J6 c2 v% J, R( y+ v
inout是双向端口,即可以作为输入也可以作为输出,跟buffer的作用完全不同,要注意的是inout 类型的数据在不作为输入使用时必须被置为高阻“Z”状态,否则它作为输出的功能将不能正确执行。 2 J7 I# q1 H% t+ G
与 Out 端口比,Buffer 端口具有回读功能,也即内部反馈,但在设计时好不要使用 buffer, 因为 buffer 类型的端口不能连接到其他类型的端口上,无法把包含该类型端口的设计作为子模块元 件例化,不利于大型设计和程序的可读性。若设计时需要实现某个输出的回读功能,可以通过增加 中间信号作为缓冲,由该信号完成回读功能。 8 R' K2 `9 J( U
双向端口 Inout 是四种端口类型中为特殊的一种,难以学习和掌握,为此专门提供一个简 单程序进行阐述,部分程序如下: 8 u& D) z: d: V: b/ T" k7 W$ `
... … ① DataB<=Din when CE=’1’ and Rd=’0’ else ② (others=>’Z’); ③ Dout<=DataB when CE=’1’ and Rd=’1’ else ④ ( others=>’1’ ); … … 程序中 DataB 为双向端口,编程时应注意的是,当 DataB 作为输出且空闲时,必须将其设为高 阻态挂起,即有类似第②行的语句,否则实现后会造成端口死锁。而当 DataB 作为有效输入时, DataB 输出必须处于高阻态,对于该例子中即,当 CE=’1’ and Rd=’1’时,输出 DataB 应处于高阻 态。 : ]- f( t0 f$ ?! ?; S: B
. z5 ?+ x/ b: E7 j B" } t( q; g J0 u7 F# X, {- f: |
|
|