risc-v中文社区

 找回密码
 立即注册
查看: 1015|回复: 0

[经验] 内部模块最好不要使用inout

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2022-4-22 16:57:27 | 显示全部楼层 |阅读模式
比如ADI代码中,inout使用如下:
module Myiobuf #(parameter DATA_WIDTH = 1)(
    input [(DATA_WIDTH-1):0] dio_t,
     input [(DATA_WIDTH-1):0] dio_i,
     output [(DATA_WIDTH-1):0] dio_o,
     inout [(DATA_WIDTH-1):0] dio_p
    );
    genvar i;
    generate
    for (i = 0; i < DATA_WIDTH; i = i +1) begin:g_iobuf
        assign dio_o = dio_p;
        assign dio_p = (dio_t == 1'b1) ? 1'bz :  dio_i;  
    end
    endgenerate
endmodule

作为一种经验,inout最好不要在内部模块中使用,如果确实需要,那么用两个port实现,到顶层的时候再用三态实现。理由是:在非顶层模块用双向口的话,该双向口必然有它的上层跟它相连。既然是双向口,则上层至少有一个输入口和一个输出口联到该双向口上,则发生两个内部输出单元连接到一起的情况出现,这样在综合时往往会出错。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-20 17:56 , Processed in 0.016591 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表