在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4340|回复: 8

CPLD双向I/O口问题请教!

[复制链接]
发表于 2003-9-11 10:43:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
EPM7128S I/O口在VHDL中设置为INOUT双向口,
在作输出口时直接输出没有问题:
SDATA<='0';
切换为输入口时:
  SDATA<='Z';
  DATA_RET<=SDATA;
从外部输入数据1,发现数据线电平为低,无法输入数据!
不知是何原因!请高手指教!
从输入到输出时也好像不能实现
  COM<='Z';
  DATA<=COM;   --输入数据正确!
然后直接输出
  COM<=TEMP_DATA;
TEMP_DATA 为信号变量,但发现I/O口COM输出状态不对,不知有何不妥!
总而言之:就是一个I/O 虽然设置为INOUT,但先用作输出口后再切换为输入口,输出时正常但输入不对;反之亦然! 请高手赐教!!不胜感激!
发表于 2003-9-11 10:46:48 | 显示全部楼层

CPLD双向I/O口问题请教!

没有家io 口的oe控制
发表于 2003-9-11 12:12:06 | 显示全部楼层

CPLD双向I/O口问题请教!

module bidirec (oe, clk, inp, outp, bidir);
// Port Declaration
input   oe;
input   clk;
input   [7:0] inp;
output  [7:0] outp;
inout   [7:0] bidir;
reg     [7:0] a;
reg     [7:0] b;
assign bidir = oe ? a : 8'bZ ;
assign outp  = b;
// Always Construct
always @ (posedge clk)
begin
b <= bidir;
a <= inp;
end
endmodule
 楼主| 发表于 2003-9-11 15:01:46 | 显示全部楼层

CPLD双向I/O口问题请教!

但是我的每个I/O口都必需单独控制,而oe引脚是否必需是全局使能信号,如果这样那OE引脚不够用!
程序如下:
      CASE clk_count IS
WHEN 0 =>sclk<='0';
sden<='1';
sdata<='0';
WHEN 1 => sclk<='0';
   sden<='1';--Enable Serial Communication Signal
sdata<=com_cpu(0);
WHEN 2 =>sclk<='1';--1
WHEN 3=> sclk<='0';
  sdata<=com_cpu(1);
WHEN 4=> sclk<='1';--2
WHEN 5 => SCLK<='0';
  sdata<=com_cpu(2);
WHEN 6 => sclk<='1';--3
WHEN 7 => sclk<='0';
  sdata<=com_cpu(3);
WHEN 8 => sclk<='1';--4
WHEN 9 => sclk<='0';
  sdata<=com_cpu(4);
WHEN 10=>sclk<='1';--5
WHEN 11=> SCLK<='0';
  sdata<=com_cpu(5);
WHEN 12=> sclk<='1';--6
WHEN 13=> sclk<='0';
  sdata<=com_cpu(6);
WHEN 14=> sclk<='1';--7
WHEN 15=> sclk<='0';
  sdata<=com_cpu(7);
WHEN 16=> sclk<='1';--8
sdata<=com_cpu(7);
sdata<='Z';
WHEN 17=> sclk<='0';
data_ret(0)<=sdata;
WHEN 18=> sclk<='1';--9
WHEN 19=> sclk<='0';
data_ret(1)<=sdata;
WHEN 20 => sclk<='1';--10
WHEN 21=> sclk<='0';
data_ret(2)<=sdata;
WHEN 22=> sclk<='1';--11
WHEN 23=> sclk<='0';
data_ret(3)<=sdata;
WHEN 24=> sclk<='1';--12
WHEN 25=> sclk<='0';
data_ret(4)<=sdata;
WHEN 26=> sclk<='1';--13
WHEN 27=> sclk<='0';
data_ret(5)<=sdata;
WHEN 28=> sclk<='1';--14
WHEN 29=> sclk<='0';
data_ret(6)<=sdata;
WHEN 30=> sclk<='1';--15
WHEN 31=> sclk<='0';
data_ret(7)<=sdata;
WHEN 32=> sclk<='1';--16
WHEN 33 TO 34=>sclk<='0';
sdata<='0';
WHEN 35=>sclk<='0';
sdata<='0';
sden<='0';
WHEN others=>sclk<='0';
sdata<='0';
END CASE;
 楼主| 发表于 2003-9-11 15:14:07 | 显示全部楼层

CPLD双向I/O口问题请教!

IF(start_ser='0') THEN --Count Gclk
clk_count:=-1;
ELSIF(gclk'EVENT AND gclk='1')THEN
IF(clk_count/=35) THEN
clk_count:=clk_count+1;
END IF;
发表于 2003-9-11 15:23:05 | 显示全部楼层

CPLD双向I/O口问题请教!

如果你每个端口要单独控制,必须每个都有oe,但是如果管脚不都可以考虑用译码电路啊,只用4个端口可以译码出内部的16条oe线。
 楼主| 发表于 2003-9-11 15:28:57 | 显示全部楼层

CPLD双向I/O口问题请教!

   gclk为100时钟信号
  SCLK为分频输出的50M串行时钟信号,串行通信命令的帧格式为每16个SCLK周期为
一帧,前8个周期的上升沿外部芯片采样SDATA输出信号,后8个周期SCLK的下降沿外部芯片返回数据,现在输出没有问题,但返回数据无法收到。
  假如要用外部OE信号切换SDATA到输入模式,因为接口芯片的时序必需满足50的频率
在第八个周期后无法提供给CPLD  OE信号。
  现在不知有什么办法可以实现该功能!!
发表于 2003-9-11 16:13:24 | 显示全部楼层

CPLD双向I/O口问题请教!

oe可以用内部逻辑产生
发表于 2003-9-11 16:30:07 | 显示全部楼层

CPLD双向I/O口问题请教!

[这个贴子最后由zhoujj在 2003/09/11 04:38pm 第 1 次编辑]

建议自己写个bidir来测试某位数据(bit),看看行不行,一位解决了其他的也就能解决
做之前,请仔细想想bidir的电路
当然实际开发的时候你直接把那几个引脚射成   inout,然后加已控制就行了
我也是这样,代码写啊写的就觉得是在搞软件,可是我总是提醒自己
   vhdl是用来描述电路的并且是建立在硬件的基础上的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 19:14 , Processed in 0.035527 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表