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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3636|回复: 9

[求助] mux的时序

[复制链接]
发表于 2021-7-11 17:37:29 | 显示全部楼层 |阅读模式

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

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

x
项目中遇到个奇怪的问题,  set_multicycle_path -from  [get_cell  A]  -to [get_cells B] -setup 5 ,用多周期的的约束。发现逻辑上存在mux 的sel到z端口的delay。我自己理解mux 的sel段到z端口 ,应该没有timing arc啊。 哪位大神遇过这个费解的问题,请教啊
发表于 2021-7-11 22:20:07 | 显示全部楼层
MUX select输入到MUX输出是有delay的。 不妨打开 .lib,看一下MUX的timing。下面是一个例子,输出Y和选择输入S0是有timing关系的。

cell (MX2X1) {
...
    pin (Y) {
      direction : "output";
      function : "((S0 B) + (!S0 A))";
      related_ground_pin : VSS;
      related_power_pin : VDD;
      max_capacitance : 0.25;

      timing () {
        related_pin : "S0";
        timing_sense : positive_unate;
        timing_type : combinational;
        cell_rise (delay_template_2x2) {
          index_1 ("0.008, 0.28");
          index_2 ("0.01, 0.25");
          values ( \
            "0.238067, 2.98287", \
            "0.369968, 3.11451" \
          );
        }
        rise_transition (delay_template_2x2) {
          index_1 ("0.008, 0.28");
          index_2 ("0.01, 0.25");
          values ( \
            "0.223337, 5.14359", \
            "0.225482, 5.14358" \
          );
        }
        cell_fall (delay_template_2x2) {
          index_1 ("0.008, 0.28");
          index_2 ("0.01, 0.25");
          values ( \
            "0.237351, 3.46114", \
            "0.357855, 3.58212" \
          );
        }
        fall_transition (delay_template_2x2) {
          index_1 ("0.008, 0.28");
          index_2 ("0.01, 0.25");
          values ( \
            "0.265017, 6.18618", \
            "0.266053, 6.18618" \
          );
        }
      }
      timing () {
        related_pin : "S0";
        timing_sense : negative_unate;
        timing_type : combinational;
        cell_rise (delay_template_2x2) {
          index_1 ("0.008, 0.28");
          index_2 ("0.01, 0.25");
          values ( \
            "0.264244, 3.00917", \
            "0.371618, 3.11709" \
          );
        }
        rise_transition (delay_template_2x2) {
          index_1 ("0.008, 0.28");
          index_2 ("0.01, 0.25");
          values ( \
            "0.22328, 5.14359", \
            "0.223667, 5.1437" \
          );
        }
        cell_fall (delay_template_2x2) {
          index_1 ("0.008, 0.28");
          index_2 ("0.01, 0.25");
          values ( \
            "0.266554, 3.49045", \
            "0.388082, 3.61224" \
          );
        }
        fall_transition (delay_template_2x2) {
          index_1 ("0.008, 0.28");
          index_2 ("0.01, 0.25");
          values ( \
            "0.265037, 6.18618", \
            "0.265222, 6.18623" \
          );
        }
      }

 楼主| 发表于 2021-7-12 09:29:08 | 显示全部楼层


jake 发表于 2021-7-11 22:20
MUX select输入到MUX输出是有delay的。 不妨打开 .lib,看一下MUX的timing。下面是一个例子,输出Y和选择输 ...


谢谢 jake哥,  受教了
 楼主| 发表于 2023-3-9 10:49:59 | 显示全部楼层


jake 发表于 2021-7-11 22:20
MUX select输入到MUX输出是有delay的。 不妨打开 .lib,看一下MUX的timing。下面是一个例子,输出Y和选择输 ...


jake哥 ,我还是有点不太明白。这个S到Z端的时序弧存在的意义是什么。我自己的理解是S端口只是用来切I0和I1的。S到Z端往后传,没有啥意义啊
发表于 2023-3-9 11:04:25 | 显示全部楼层


fangwang85 发表于 2023-3-8 20:49
jake哥 ,我还是有点不太明白。这个S到Z端的时序弧存在的意义是什么。我自己的理解是S端口只是用来切I0和 ...




MUX的S可以是一个flop控制的,如果MUX的Z进到一个flop D input逻辑,这样MUX S->Z就成了timing path的一部分,S->Z的timing arc就必须要计算。
画了个图,可能讲得明白一些

                               
登录/注册后可看大图

发表于 2023-3-10 09:23:09 | 显示全部楼层


fangwang85 发表于 2023-3-8 20:49
jake哥 ,我还是有点不太明白。这个S到Z端的时序弧存在的意义是什么。我自己的理解是S端口只是用来切I0和 ...


昨天附图的回复好像没有通过审核,只能文字描述。

假设reg1/Q->MUX/S, MUX/Z->reg2/D,reg1/CK, reg2/CK是同一个clock。这样reg1/CK->reg1/Q->MUX/S->MUX/Z->reg2/D形成一条完整的timing path。这种情况下MUX/S不是固定值,MUX/S->MUX/Z的timing arc是有意义的,需要要算出delay的。

实际电路中MUX/S由reg1控制在不同时间选择不同输入给到reg2是很常见的,例如reg的feedback电路,MUX/A=reg/Q, MUX/B=something else。 S=0, reg/D=reg/Q,reg保持原来的值; S=1, reg/D=something else, reg锁存新的值。

发表于 2023-3-10 11:08:56 | 显示全部楼层
mux端口一个是0一个是1,当s端改变时,mux的输出会产生变化,这个当然是要去检查timing的
 楼主| 发表于 2023-5-18 17:15:27 | 显示全部楼层


jake 发表于 2021-7-11 22:20
MUX select输入到MUX输出是有delay的。 不妨打开 .lib,看一下MUX的timing。下面是一个例子,输出Y和选择输 ...


jake哥 ,我还是有点不太明白。这个S到Z端的时序弧存在的意义是什么。我自己的理解是S端口只是用来切I0和I1的。S到Z端往后传,没有啥意义啊
发表于 2023-5-18 21:14:25 | 显示全部楼层


fangwang85 发表于 2023-5-18 03:15
jake哥 ,我还是有点不太明白。这个S到Z端的时序弧存在的意义是什么。我自己的理解是S端口只是用来切I0和 ...


假设设计中有一个简单的动态选择,有这样一条timing path

reg1/CP->reg1/Q->MUX/S->MUX/Z->reg2/D
这个场景S->Z的timing arc是有意义的

发表于 2023-5-19 09:38:39 | 显示全部楼层


fangwang85 发表于 2023-5-18 03:15
jake哥 ,我还是有点不太明白。这个S到Z端的时序弧存在的意义是什么。我自己的理解是S端口只是用来切I0和 ...


这样,假设设计中有一个简单的动态选择,有这样一条timing path
reg1/CP->reg1/Q->MUX/S->MUX/Z->reg2/D
这个场景S->Z的timing arc是有意义的
当然,到reg2/D的还有至少其他两条timing path工具也要check
regS0/CP->regS0/Q->MUX/A->MUX/Z->reg2/D
regS1/CP->regS1/Q->MUX/B->MUX/Z->reg2/D


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

本版积分规则

关闭

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

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

GMT+8, 2025-6-8 02:07 , Processed in 0.023376 second(s), 6 queries , Gzip On, MemCached On.

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