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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3051|回复: 4

[求助] 模块例化的问题

[复制链接]
发表于 2020-2-29 19:41:41 | 显示全部楼层 |阅读模式

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

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

x




  1. module A (
  2. input a,
  3. input b,
  4. output c
  5. )
  6. ...
  7. endmodule

  8. A U0_A[1:0] (
  9. .a(a),
  10. .b(b),
  11. .c(c)
  12. );


复制代码
今日看S的代码,看到一处模块例化,很是费解,特向各位同学请教一下。模块A例化时,U0_A后面跟的数组是什么意思呢?特别费解。

发表于 2020-2-29 23:27:15 | 显示全部楼层
就是例化2个一模一样的模块而已,没什么。
例化的两个模块的port都连接到一起,相当于都挂在总线上。
 楼主| 发表于 2020-3-2 10:39:13 | 显示全部楼层


dullman 发表于 2020-2-29 23:27
就是例化2个一模一样的模块而已,没什么。
例化的两个模块的port都连接到一起,相当于都挂在总线上。
...


感谢指点~ 我再请教下,那如何确认端口的信号位宽呢?比如例化2个,clk rst或其他共享的控制信号,位宽不用两倍,而一些数据或输出信号等非共享的信号,就需要两倍位宽吗?如果不按照这个标准是会导致编译报错吗?
发表于 2020-3-2 13:56:01 | 显示全部楼层
本帖最后由 dullman 于 2020-3-2 13:57 编辑


IC.Michael 发表于 2020-3-2 10:39
感谢指点~ 我再请教下,那如何确认端口的信号位宽呢?比如例化2个,clk rst或其他共享的控制信号,位宽不 ...


实际上很少有人用这种方式例化多个模块的,通常的例化采用generate循环:
wire[1:0][M:0]  din ;
wire[1:0][N:0]  dout ;

genvar gv_i ;
generate
    for (gv_i=0; gv_i<2; gv_i=gv_i+1)
        A A_inst (
            .clk    (clk),
            .rst    (rst),
            .din   (dint[gv_i]),
            .dout (dout[gv_i]
            ........
        );

公共信号连接到一起,非公共信号各连各的。

你例子里的例化方式的情况,有一种可能适用场合:就是类似于多个相同的I2C设备连接到一起,这些设备信号确实都是并联到一起的:

A A_inst[1:0] (
    .scl(scl),
    .sda(sda)
);

但即便如此,这些设备中也需要有不同的地方,比如I2C设备其地址是不同的。这些参数只能通过defparam来指定了:
defparam A_inst[0].ADDR=0;
defparam A_inst[1].ADDR=1;




 楼主| 发表于 2020-3-2 14:28:02 | 显示全部楼层


dullman 发表于 2020-3-2 13:56
实际上很少有人用这种方式例化多个模块的,通常的例化采用generate循环:
wire[1:0][M:0]  din ;
wire[1:0 ...


多谢~ 一般确实都是用generate来实现的,A U_A[1:0]这种方式也是第一次见,在Synopsys PCIE Controller代码里有不少,因此心存疑惑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-28 17:34 , Processed in 0.023986 second(s), 6 queries , Gzip On, Redis On.

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