Цитата(Михаил А @ Jul 6 2006, 18:39)

а чта же там на пине Е стояло ?
что это клок он распознает по этому признаку - clock
или по функции описанной на пине Q - выходе latch-a
ну и разумеется - убрав clock свойство или изменив функцию latch-a в него надо было просто вставить функцию из ячейки AND
Да в том то и дело, что ничего там не стояло. Там было описание ф-ции в виде групы latch {}, тайминги, потребление. И все. Для того, чтобы он "E" перестал анализировать как клок оказалось достаточно убрать тайминги типа "setup_falling" и "hold_falling". Что я и сделал, введя свойство "mode" и группы таймингов, зависящих от "mode".
Цитата(Михаил А @ Jul 6 2006, 18:39)

можно сюда вклюнуть header этого lacth-a и внизу описание функции на пине Q
пжалста, вот одна из них. Прям целиком из либы в нарушение NDA

. Правда ужо с добавлением моей mode_definition.
Код
cell(lanhq1) {
mode_definition(latch) {
mode_value(transparent) {}
mode_value(trigger) {}
}
cell_footprint : lanhq_4;
area : 3.66;
routing_track(metal1){
tracks : 0;
total_track_area : 0;
}
routing_track(metal2){
tracks : 11;
total_track_area : 1.57;
}
routing_track(metal3){
tracks : 9;
total_track_area : 1.83;
}
routing_track(metal4){
tracks : 8;
total_track_area : 1.90;
}
scaling_factors : lanhq1_factors;
cell_leakage_power : 516.559;
latch (IQ,IQN){
enable : "E";
data_in : "D";
}
internal_power(power_inputs_1) {
related_input : "E";
values( " 0.174 0.182 0.258");
}
pin(E) {
direction : input;
capacitance : 0.006;
fanout_load : 1;
min_pulse_width_high : 0.340;
}
internal_power(power_inputs_1) {
related_input : "D";
values( " 0.0745 0.0900 0.182");
}
pin(D) {
direction : input;
capacitance : 0.006;
fanout_load : 1;
timing() {
mode(latch,trigger);
timing_type : setup_falling;
related_pin : "E";
fall_constraint(vio_0_5_5) {
values( " 0.200, 0.300, 0.410, 0.620, 0.820",\
" 0.090, 0.200, 0.320, 0.530, 0.710",\
" 0.010, 0.100, 0.220, 0.430, 0.620",\
" -0.150, -0.050, 0.060, 0.260, 0.450",\
" -0.290, -0.200, -0.100, 0.120, 0.300");
}
rise_constraint(vio_0_5_5) {
values( " 0.040, 0.080, 0.130, 0.170, 0.180",\
" -0.060, -0.020, 0.030, 0.070, 0.080",\
" -0.160, -0.130, -0.090, -0.050, -0.030",\
" -0.360, -0.320, -0.280, -0.240, -0.230",\
" -0.500, -0.470, -0.460, -0.410, -0.400");
}
}
timing() {
mode(latch,trigger);
timing_type : hold_falling;
related_pin : "E";
fall_constraint(vio_0_5_5) {
values( " -0.180, -0.280, -0.380, -0.580, -0.750",\
" -0.080, -0.190, -0.300, -0.480, -0.650",\
" 0.010, -0.080, -0.200, -0.390, -0.560",\
" 0.170, 0.070, -0.040, -0.220, -0.390",\
" 0.320, 0.210, 0.110, -0.080, -0.240");
}
rise_constraint(vio_0_5_5) {
values( " -0.020, -0.070, -0.120, -0.150, -0.150",\
" 0.080, 0.030, -0.010, -0.050, -0.040",\
" 0.180, 0.140, 0.100, 0.070, 0.060",\
" 0.380, 0.330, 0.290, 0.260, 0.260",\
" 0.540, 0.490, 0.470, 0.430, 0.430");
}
}
}
internal_power(power_outputs_16) { /* average switching power [in pJ] for pin 'Q' */
related_outputs : "Q";
related_inputs : "D E";
values( " 0.336, 0.325, 0.316, 0.311, 0.306",\
" 0.331, 0.318, 0.309, 0.304, 0.289",\
" 0.341, 0.325, 0.312, 0.306, 0.308");
}
pin(Q) {
direction : output;
max_capacitance : 0.300;
max_fanout : 30;
max_transition : 3.0;
function : "IQ";
timing() {
mode(latch,transparent);
timing_type : rising_edge;
related_pin : "E";
cell_rise(del_16_3_5) {
values( " 0.570, 0.660, 0.810, 1.050, 1.510",\
" 0.640, 0.740, 0.890, 1.120, 1.590",\
" 0.610, 0.710, 0.860, 1.090, 1.560");
}
rise_transition(del_16_3_5) {
values( " 0.220, 0.390, 0.700, 1.240, 2.330",\
" 0.220, 0.390, 0.700, 1.240, 2.330",\
" 0.220, 0.390, 0.700, 1.240, 2.330");
}
cell_fall(del_16_3_5) {
values( " 0.510, 0.600, 0.730, 0.890, 1.160",\
" 0.590, 0.680, 0.800, 0.970, 1.240",\
" 0.570, 0.650, 0.780, 0.940, 1.210");
}
fall_transition(del_16_3_5) {
values( " 0.220, 0.320, 0.490, 0.730, 1.200",\
" 0.210, 0.320, 0.500, 0.730, 1.200",\
" 0.220, 0.330, 0.490, 0.730, 1.200");
}
}
timing() {
mode(latch,transparent);
related_pin : "D";
timing_sense : positive_unate;
cell_fall(del_16_3_5) {
values( " 0.390, 0.480, 0.600, 0.760, 1.030",\
" 0.600, 0.680, 0.810, 0.970, 1.240",\
" 0.960, 1.060, 1.190, 1.360, 1.630");
}
fall_transition(del_16_3_5) {
values( " 0.220, 0.320, 0.500, 0.730, 1.200",\
" 0.220, 0.330, 0.500, 0.730, 1.200",\
" 0.260, 0.370, 0.540, 0.770, 1.220");
}
cell_rise(del_16_3_5) {
values( " 0.360, 0.460, 0.610, 0.840, 1.310",\
" 0.450, 0.550, 0.700, 0.930, 1.400",\
" 0.480, 0.580, 0.740, 0.970, 1.430");
}
rise_transition(del_16_3_5) {
values( " 0.220, 0.390, 0.700, 1.240, 2.330",\
" 0.220, 0.400, 0.700, 1.240, 2.330",\
" 0.250, 0.420, 0.730, 1.250, 2.330");
}
}
}
}
Цитата(Михаил А @ Jul 6 2006, 18:39)

мда - большая экономия площади на 10 триггерах, замененых latch- ем
Сорри, Вы навреное не так поняли. В данном конкретном месте латч необходим. А в остальных местах - это не 10 триггеров. Это по 30-40 триггеров на каждый блок, подключенный к ядру. Причем не создающих никаких проблем при замене на латчи. В реальных цифрах это примерно 2500 NAND-ячеек по всей микрухе. Вместо которых я могу неплохой операционник например всунуть. И не один. Или еще что-нить полезное. Для сравнения умножитель 17х17 бит 2980 занимает при моих таймингах. Сорри, но каждый цент, сэкономленный на площади - мой. И просто так, ради уменьшения геморроя при разработке, терять его я не намерен. И, даже, пусть первая итерация не складется (тьфу-тьфу не дай бог). Но все равно, оно в моем случае того стоит.
P.S. А что Вы имели в виду под "ф-цией на пине Q"? Если .lib-описание, то это "latch"

А если что в проекте с ним делается, то какая разница?