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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5390|回复: 12

[求助] 关于建立宏单元的问题

[复制链接]
发表于 2014-10-30 17:36:46 | 显示全部楼层 |阅读模式

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

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

x
如何建立一个新的单元,能够通过DC综合。这个单元库里没有,必须新建。求助,论坛没有类似的文章,有资料的求给推荐一个啊
 楼主| 发表于 2014-10-30 18:40:53 | 显示全部楼层
自己顶一个,再求
发表于 2014-10-30 18:43:01 | 显示全部楼层
ding~~~
发表于 2014-10-31 09:31:57 | 显示全部楼层
将该单元添加进入用来综合的库里
 楼主| 发表于 2014-10-31 16:05:08 | 显示全部楼层
如何建立该单元?有没有这方面的资料推荐?
发表于 2014-10-31 23:00:58 | 显示全部楼层
你的问题就是综合的时候调用其他的IP, 你需要写一个调用IP 的library, n你可以仿照工艺厂的标准来写。至于里面的时序信息需要你根据实际的电路仿真来添加
 楼主| 发表于 2014-11-3 09:10:52 | 显示全部楼层
回复 6# 教父


    恩,这几天查了资料,知道要写一个.opt的template文件,最后这一步,写Sensitization这一步过不去,这些仿真信息是有固定模式吗?如何写根据仿真结果写输入输出模式,也就是如何编写那个表格。我的单元式三输入一输出,电平触发。不甚感激!
发表于 2014-11-5 09:31:32 | 显示全部楼层
工艺厂一般提供nxn的查表模式,index_1 定义为输入信号的transition, index_2定义为输出的负载也就电容,
你仿真需要根据你的设定来做仿真,说白来就是一个nxn的阵列,比如3X3的阵列你需要做9次仿真, 不知道这样说 不明白么有。
 楼主| 发表于 2014-11-5 16:31:57 | 显示全部楼层
回复 8# 教父


    感谢您的回答,但是我的问题还是没有很好的解决。具体来说,其实是template文件不会写(.opt) 特征化的时候,这个文件大部分只需要提取,小部分改变就行,单重新建立一个宏单元,tempalte里的sensitization部分不知道怎么写,由于是新的单元,而且是时序的,所以参照已有的标准单元也不知道从何下手,我想知道一般建立新的单元(宏单元)template是怎么产生的,特别是sensitization不知道怎么写。下面附上原有库单元的一个template文件描述。文件名 denrq1.opt

* Generated by Liberty NCX vC-2009.06-SP1
cell_footprint : denrq_7 ;
area : 7.0000000 ;
scaling_factors : denrq1_factors ;
cell_leakage_power : 1428.5010000 ;
routing_track "metal1" {
  tracks : 0.0000000e+00 ;
  total_track_area : 0.0000000e+00 ;
}
routing_track "metal2" {
  tracks : 28.0000000 ;
  total_track_area : 3.5000000 ;
}
routing_track "metal3" {
  tracks : 10.0000000 ;
  total_track_area : 3.5000000 ;
}
routing_track "metal4" {
  tracks : 28.0000000 ;
  total_track_area : 3.5000000 ;
}
routing_track "metal5" {
  tracks : 10.0000000 ;
  total_track_area : 3.5000000 ;
}
routing_track "metal6" {
  tracks : 18.0000000 ;
  total_track_area : 3.5300000 ;
}
ff "IQ" "IQN" {
  clocked_on : CP ;
  next_state : ((!ENN*D))+!(!IQ+(!ENN)) ;
}
pin CP {
  direction : input ;
  fanout_load : 1.0000000 ;
  clock : true ;
  min_pulse_width_high : 0.1000000 ;
  min_pulse_width_low : 0.2400000 ;
}
pin D {
  direction : input ;
  fanout_load : 1.0000000 ;
  timing {
    *** arc id: D_CP_0000
    timing_type : setup_rising ;
    related_pin : CP ;
    ncx_setup_rising_rise_constrained_pin_transition_index : 0 ;
    ncx_setup_rising_fall_constrained_pin_transition_index : 0 ;
    ncx_setup_rising_rise_related_pin_transition_index : 0 ;
    ncx_setup_rising_fall_related_pin_transition_index : 0 ;
  }
  timing {
    *** arc id: D_CP_0001
    timing_type : hold_rising ;
    related_pin : CP ;
    ncx_hold_rising_rise_constrained_pin_transition_index : 0 ;
    ncx_hold_rising_fall_constrained_pin_transition_index : 0 ;
    ncx_hold_rising_rise_related_pin_transition_index : 0 ;
    ncx_hold_rising_fall_related_pin_transition_index : 0 ;
  }
}
pin ENN {
  direction : input ;
  fanout_load : 1.0000000 ;
  timing {
    *** arc id: ENN_CP_0000
    timing_type : setup_rising ;
    related_pin : CP ;
    ncx_setup_rising_rise_constrained_pin_transition_index : 0 ;
    ncx_setup_rising_fall_constrained_pin_transition_index : 0 ;
    ncx_setup_rising_rise_related_pin_transition_index : 0 ;
    ncx_setup_rising_fall_related_pin_transition_index : 0 ;
  }
  timing {
    *** arc id: ENN_CP_0001
    timing_type : hold_rising ;
    related_pin : CP ;
    ncx_hold_rising_rise_constrained_pin_transition_index : 0 ;
    ncx_hold_rising_fall_constrained_pin_transition_index : 0 ;
    ncx_hold_rising_rise_related_pin_transition_index : 0 ;
    ncx_hold_rising_fall_related_pin_transition_index : 0 ;
  }
}
pin Q {
  direction : output ;
  max_capacitance : 0.3000000 ;
  max_fanout : 30.0000000 ;
  max_transition : 3.0000000 ;
  function : IQ ;
  timing {
    *** arc id: Q_CP_0000
    timing_type : rising_edge ;
    related_pin : CP ;
    ncx_rising_edge_rise_input_net_transition_index : 0 ;
    ncx_rising_edge_fall_input_net_transition_index : 0 ;
    ncx_rising_edge_rise_total_output_net_capacitance_index : 1 ;
    ncx_rising_edge_fall_total_output_net_capacitance_index : 1 ;
  }
}
pg_pin VDD {
  voltage_name : VDD ;
  pg_type : primary_power ;
}
pg_pin VSS {
  voltage_name : VSS ;
  pg_type : primary_ground ;
}
sensitization {
  CP, D, ENN : Q ;
  011011, 001111, 000001 : 11 ;
  011011, 001110, 0 : 11 ;
  011010, 001111, 0 : 11 ;
  011011, 110000, 000001 : 00 ;
  011011, 110001, 0 : 00 ;
  011010, 110000, 0 : 00 ;
  0110111, 1100000, 0000010 : 00 ;
  0110111, 1100001, 0000011 : 00 ;
  0110110, 1100000, 0000011 : 00 ;
  01101111, 11000011, 00000110 : 00 ;
  01101111, 11000010, 00000111 : 00 ;
  01101110, 11000011, 00000111 : 00 ;
  01101111, 00111100, 00000110 : 11 ;
  01101111, 00111101, 00000111 : 11 ;
  01101110, 00111100, 00000111 : 11 ;
  0110111, 0011111, 0000010 : 11 ;
  0110111, 0011110, 0000011 : 11 ;
  0110110, 0011111, 0000011 : 11 ;
  0110100, 1100000, 0000001 : 00 ;
  0110100, 1100001, 0 : 00 ;
  0110101, 1100000, 0 : 00 ;
  01101100, 00111000, 00000001 : 11 ;
  01101100, 00111001, 0 : 11 ;
  01101101, 00111000, 0 : f ;
  0110111, 0011100, 0000001 : 11 ;
  0110111, 0011101, 0 : 11 ;
  0110110, 0011100, 0 : 11 ;
  01101100, 11000111, 00000001 : 00 ;
  01101100, 11000110, 0 : 00 ;
  01101101, 11000111, 0 : r ;
  0110100, 0011111, 0000001 : 11 ;
  0110100, 0011110, 0 : 11 ;
  0110101, 0011111, 0 : 11 ;
  0110111, 1100011, 0000001 : 00 ;
  0110111, 1100010, 0 : 00 ;
  0110110, 1100011, 0 : 00 ;
  01101100, 11000000, 00000110 : 00 ;
  01101100, 11000001, 00000111 : 00 ;
  01101101, 11000000, 00000111 : 00 ;
  011011100, 001111000, 000001110 : 11 ;
  011011100, 001111001, 000001111 : 11 ;
  011011101, 001111000, 000001111 : 11 ;
  011011100, 110000111, 000001110 : 00 ;
  011011100, 110000110, 000001111 : 00 ;
  011011101, 110000111, 000001111 : 00 ;
  01101100, 00111111, 00000110 : 11 ;
  01101100, 00111110, 00000111 : 11 ;
  01101101, 00111111, 00000111 : 11 ;
  violation;
  01101001, 11000011, 0 : r ;
  011010011, 110000110, 0 : r ;
  011011010, 001110000, 0 : f ;
  01101101, 00111000, 0 : f ;
  011011001, 001110000, 000000011 : 11 ;
  0110110011, 0011100000, 0000000110 : 11 ;
  011011010, 110001111, 0 : r ;
  01101101, 11000111, 0 : r ;
  011011001, 110001111, 000000011 : 00 ;
  0110110011, 1100011111, 0000000110 : 00 ;
  01101001, 00111100, 0 : f ;
  011010011, 001111001, 0 : f ;
  0110111001, 0011110000, 0000011100 : f ;
  01101110011, 00111100000, 00000111001 : f ;
  0110111001, 1100001111, 0000011100 : r ;
  01101110011, 11000011111, 00000111001 : r ;
}
 楼主| 发表于 2014-11-5 16:45:25 | 显示全部楼层
回复 8# 教父


    谢谢您的回复,但我的问题还在。建立新的单元需要一个template文件(.opt),在做重新特征化时,这个文件通过liberty ncx 从原有库(seed libery提取,但是我是设计了一个新的单元,也就是建立宏单元(macro),那么问题就来了,这个template如何产生,如果按照原有库的单元照着自己编写,对组合逻辑可能有效,但是我设计的单元是时序逻辑,时序逻辑单元在tempalte需要写一个sensitization,而这个sensitization实在是无法自己编写(下面会附上原库中一个单元的template文件,文件名 denrg1.opt) 我想着知道建立标准单元(对于新的单元,没有seed library),如何产生template文件,特别是如何产生sensitization部分。不甚感谢!
* Generated by Liberty NCX vC-2009.06-SP1
cell_footprint : denrq_7 ;
area : 7.0000000 ;
scaling_factors : denrq1_factors ;
cell_leakage_power : 1428.5010000 ;
routing_track "metal1" {
  tracks : 0.0000000e+00 ;
  total_track_area : 0.0000000e+00 ;
}
routing_track "metal2" {
  tracks : 28.0000000 ;
  total_track_area : 3.5000000 ;
}
routing_track "metal3" {
  tracks : 10.0000000 ;
  total_track_area : 3.5000000 ;
}
routing_track "metal4" {
  tracks : 28.0000000 ;
  total_track_area : 3.5000000 ;
}
routing_track "metal5" {
  tracks : 10.0000000 ;
  total_track_area : 3.5000000 ;
}
routing_track "metal6" {
  tracks : 18.0000000 ;
  total_track_area : 3.5300000 ;
}
ff "IQ" "IQN" {
  clocked_on : CP ;
  next_state : ((!ENN*D))+!(!IQ+(!ENN)) ;
}
pin CP {
  direction : input ;
  fanout_load : 1.0000000 ;
  clock : true ;
  min_pulse_width_high : 0.1000000 ;
  min_pulse_width_low : 0.2400000 ;
}
pin D {
  direction : input ;
  fanout_load : 1.0000000 ;
  timing {
    *** arc id: D_CP_0000
    timing_type : setup_rising ;
    related_pin : CP ;
    ncx_setup_rising_rise_constrained_pin_transition_index : 0 ;
    ncx_setup_rising_fall_constrained_pin_transition_index : 0 ;
    ncx_setup_rising_rise_related_pin_transition_index : 0 ;
    ncx_setup_rising_fall_related_pin_transition_index : 0 ;
  }
  timing {
    *** arc id: D_CP_0001
    timing_type : hold_rising ;
    related_pin : CP ;
    ncx_hold_rising_rise_constrained_pin_transition_index : 0 ;
    ncx_hold_rising_fall_constrained_pin_transition_index : 0 ;
    ncx_hold_rising_rise_related_pin_transition_index : 0 ;
    ncx_hold_rising_fall_related_pin_transition_index : 0 ;
  }
}
pin ENN {
  direction : input ;
  fanout_load : 1.0000000 ;
  timing {
    *** arc id: ENN_CP_0000
    timing_type : setup_rising ;
    related_pin : CP ;
    ncx_setup_rising_rise_constrained_pin_transition_index : 0 ;
    ncx_setup_rising_fall_constrained_pin_transition_index : 0 ;
    ncx_setup_rising_rise_related_pin_transition_index : 0 ;
    ncx_setup_rising_fall_related_pin_transition_index : 0 ;
  }
  timing {
    *** arc id: ENN_CP_0001
    timing_type : hold_rising ;
    related_pin : CP ;
    ncx_hold_rising_rise_constrained_pin_transition_index : 0 ;
    ncx_hold_rising_fall_constrained_pin_transition_index : 0 ;
    ncx_hold_rising_rise_related_pin_transition_index : 0 ;
    ncx_hold_rising_fall_related_pin_transition_index : 0 ;
  }
}
pin Q {
  direction : output ;
  max_capacitance : 0.3000000 ;
  max_fanout : 30.0000000 ;
  max_transition : 3.0000000 ;
  function : IQ ;
  timing {
    *** arc id: Q_CP_0000
    timing_type : rising_edge ;
    related_pin : CP ;
    ncx_rising_edge_rise_input_net_transition_index : 0 ;
    ncx_rising_edge_fall_input_net_transition_index : 0 ;
    ncx_rising_edge_rise_total_output_net_capacitance_index : 1 ;
    ncx_rising_edge_fall_total_output_net_capacitance_index : 1 ;
  }
}
pg_pin VDD {
  voltage_name : VDD ;
  pg_type : primary_power ;
}
pg_pin VSS {
  voltage_name : VSS ;
  pg_type : primary_ground ;
}
sensitization {
  CP, D, ENN : Q ;
  011011, 001111, 000001 : 11 ;
  011011, 001110, 0 : 11 ;
  011010, 001111, 0 : 11 ;
  011011, 110000, 000001 : 00 ;
  011011, 110001, 0 : 00 ;
  011010, 110000, 0 : 00 ;
  0110111, 1100000, 0000010 : 00 ;
  0110111, 1100001, 0000011 : 00 ;
  0110110, 1100000, 0000011 : 00 ;
  01101111, 11000011, 00000110 : 00 ;
  01101111, 11000010, 00000111 : 00 ;
  01101110, 11000011, 00000111 : 00 ;
  01101111, 00111100, 00000110 : 11 ;
  01101111, 00111101, 00000111 : 11 ;
  01101110, 00111100, 00000111 : 11 ;
  0110111, 0011111, 0000010 : 11 ;
  0110111, 0011110, 0000011 : 11 ;
  0110110, 0011111, 0000011 : 11 ;
  0110100, 1100000, 0000001 : 00 ;
  0110100, 1100001, 0 : 00 ;
  0110101, 1100000, 0 : 00 ;
  01101100, 00111000, 00000001 : 11 ;
  01101100, 00111001, 0 : 11 ;
  01101101, 00111000, 0 : f ;
  0110111, 0011100, 0000001 : 11 ;
  0110111, 0011101, 0 : 11 ;
  0110110, 0011100, 0 : 11 ;
  01101100, 11000111, 00000001 : 00 ;
  01101100, 11000110, 0 : 00 ;
  01101101, 11000111, 0 : r ;
  0110100, 0011111, 0000001 : 11 ;
  0110100, 0011110, 0 : 11 ;
  0110101, 0011111, 0 : 11 ;
  0110111, 1100011, 0000001 : 00 ;
  0110111, 1100010, 0 : 00 ;
  0110110, 1100011, 0 : 00 ;
  01101100, 11000000, 00000110 : 00 ;
  01101100, 11000001, 00000111 : 00 ;
  01101101, 11000000, 00000111 : 00 ;
  011011100, 001111000, 000001110 : 11 ;
  011011100, 001111001, 000001111 : 11 ;
  011011101, 001111000, 000001111 : 11 ;
  011011100, 110000111, 000001110 : 00 ;
  011011100, 110000110, 000001111 : 00 ;
  011011101, 110000111, 000001111 : 00 ;
  01101100, 00111111, 00000110 : 11 ;
  01101100, 00111110, 00000111 : 11 ;
  01101101, 00111111, 00000111 : 11 ;
  violation;
  01101001, 11000011, 0 : r ;
  011010011, 110000110, 0 : r ;
  011011010, 001110000, 0 : f ;
  01101101, 00111000, 0 : f ;
  011011001, 001110000, 000000011 : 11 ;
  0110110011, 0011100000, 0000000110 : 11 ;
  011011010, 110001111, 0 : r ;
  01101101, 11000111, 0 : r ;
  011011001, 110001111, 000000011 : 00 ;
  0110110011, 1100011111, 0000000110 : 00 ;
  01101001, 00111100, 0 : f ;
  011010011, 001111001, 0 : f ;
  0110111001, 0011110000, 0000011100 : f ;
  01101110011, 00111100000, 00000111001 : f ;
  0110111001, 1100001111, 0000011100 : r ;
  01101110011, 11000011111, 00000111001 : r ;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-28 06:18 , Processed in 0.027282 second(s), 6 queries , Gzip On, Redis On.

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