打印
[CPLD]

CPLD双向端口问题

[复制链接]
1934|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangqijing9118|  楼主 | 2014-4-25 20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教:

问题是这样的,我使CPLD定义了一组16位的双向IO,与MCU进行数据传递。
初始化默认是设置成高阻态(Z),接收来自MCU的数据,之后调整成输出端口
将通讯校验的结果传回给MCU,如下:

连续赋值语句
assign data_io[0] = data_io_dir_reg ? data_out[0]:1'bz;
assign data_io[1] = data_io_dir_reg ? data_out[1]:1'bz;
        .
        .
        .
assign data_io[15] = data_io_dir_reg ? data_out[15]:1'bz;
               
此时data_io_dir_reg=1,io作为输出端口使用。
如果我初始化时(initial)data_out[15:0] = 16'hffff,
此时只有相应的位为0时,才会执行此语句。如果继续保持1的话,不会执行连续赋值语句,
相应的IO处于不定态,使用modelsim仿真显示z,下载实验的结果也不稳定。

我尝试了两种方法解决此问题:
1、在给data_out赋正式值之前,先全部翻转一下,但编译器优化处理了。

2、把data_io[15:0]移入always块中,因为定义的是inout,编译报错。

以上是我遇到的问题,寻求帮助,谢谢!

相关帖子

沙发
zhenjiang7412| | 2014-4-25 22:25 | 只看该作者
程序里需要对data_io_dir_reg及data_out[15:0]赋初值,initial只是仿真时赋初值了

使用特权

评论回复
板凳
zhangqijing9118|  楼主 | 2014-6-30 13:44 | 只看该作者
zhenjiang7412 发表于 2014-4-25 22:25
程序里需要对data_io_dir_reg及data_out[15:0]赋初值,initial只是仿真时赋初值了

此片CPLD作双向端口时,要么高阻输入,要么输出0,至于输出1是配置成z状态,由MCU的外部上拉电阻读取的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

23

帖子

0

粉丝