Перейти к содержанию
    

Здравствуйте!

 

Хочу сгенерировать скан-цепочки типа multiplexed_flip_flip в DC.

Есть 2 вопросика.

 

1. У меня в дизайне есть клок CLK, он же будет использоваться для скан-цепочки.

это опция -clock_mixing no_mux?

 

2. На что влияет опция -methodology например full_scan?

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

 

Хочу сгенерировать скан-цепочки типа multiplexed_flip_flip в DC.

Есть 2 вопросика.

 

1. У меня в дизайне есть клок CLK, он же будет использоваться для скан-цепочки.

это опция -clock_mixing no_mux?

 

2. На что влияет опция -methodology например full_scan?

 

Спасибо!

 

1. У меня в дизайне есть клок CLK, он же будет использоваться для скан-цепочки.

это опция -clock_mixing no_mux?

 

-clock_mixing don't have option "no_mux" the right is no_mix.

no_mix is the default: and it means that all cells must be clocked by the same edge of the same clock. You have one clock if all triggers are working with the same egdes you have no problem.

Otherwies if you want both types of triggers (rise edge and fall edge) to be included in scan chain use "-clock_mixing mix_edges".

 

2. На что влияет опция -methodology например full_scan?

This is from user guide:

 

In the full-scan methodology, DFT Compiler replaces all sequential cells in your design with their scannable equivalents during scan insertion.

 

If a sequential cell cannot be made scannable because of test design rule violations or because you have explicitly excluded the cell from the scan chain, DFT Compiler classifies the cell as a black box sequential cell during test design rule checking. Black box sequential cells lower fault coverage results. See “Scan Design Techniques” for more information on sequential cell classifications.

 

Because it is a more predictable methodology, full scan typically provides higher fault coverage in a shorter period of time than partial scan. Full scan also provides improved diagnostic capabilities compared to partial scan.

 

Because full scan substitutes scannable equivalents for all sequential cells, however, it increases design area and decreases design performance. Integration with synthesis minimizes the area and performance impact of full scan. In most cases, performance can be maintained in a full-scan design, but at the cost of additional area.

 

Maybe it will help you.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, помогло.

 

А если в исходном верилоге заложена ручками скан-цепочка надо ли указывать синтезатору что она есть или нет?

 

Если да, то чем это чревато. :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делюсь простеньким скриптом, может кому надо:

 

#Top-level synthesis script with adding scan chain
#Reads in core and lower level designs,
#compiles, adds scan.
#read lower-level designs
remove_design -all
set TOP_LEVEL div

analyze -f verilog ./src/$TOP_LEVEL.v
elaborate $TOP_LEVEL

link
create_clock SCLK -period 60 -waveform {0 50}

#Prevent changes to pads
#set_dont_touch BDR*
#set_dont_touch IBUF*
#set scan parameters & check test rules


# Use if exist scan-chain
set test_default_scan_style multiplexed_flip_flop
set_scan_configuration -style multiplexed_flip_flop -clock_mixing no_mix -chain_count 1
set_dft_signal -view existing_dft -type ScanClock -port SCLK -timing {45 55}
set_dft_signal -view existing_dft -type reset -port RSTB -active_state 0
set_dft_signal -view existing_dft -type ScanDataIn -port SCAN_IN
set_dft_signal -view existing_dft -type ScanDataOut -port SCAN_OUT
set_dft_signal -view existing_dft -type ScanEnable -port SCAN_EN -active_state 1
create_test_protocol
dft_drc

compile_ultra -scan
preview_dft
#===============================================================================
=================================

# Use for automatic scan-chain generation
#set test_default_scan_style multiplexed_flip_flop
#set_scan_configuration -style multiplexed_flip_flop -clock_mixing no_mix -chain_count 1
#set_dft_signal -view existing_dft -type ScanClock -port SCLK -timing {45 55}
#set_dft_signal -view existing_dft -type reset -port RSTB -active_state 0
#set_dft_signal -view spec -type ScanDataIn -port SCAN_IN
#set_dft_signal -view spec -type ScanDataOut -port SCAN_OUT
#set_dft_signal -view existing_dft -type ScanEnable -port SCAN_EN -active_state 1
#create_test_protocol
#dft_drc

#compile_ultra -scan
#preview_dft
#insert_dft

change_names -rules verilog -hier
write -hier -format verilog -output ./synth/dc_$TOP_LEVEL.v

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, помогло.

 

А если в исходном верилоге заложена ручками скан-цепочка надо ли указывать синтезатору что она есть или нет?

 

Если да, то чем это чревато. :smile3046:

 

да,

чтобы скан-цепочка была опознана DFTC исползуй эти команды:

 

set_scan_state scan_existing

set_scan_path

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да,

чтобы скан-цепочка была опознана DFTC исползуй эти команды:

 

set_scan_state scan_existing

set_scan_path

Спасибо, а в каком месте их использовать.

 

У меня при попытке написать

set_dft_signal -view existing_dft -type ScanDataIn -port SCAN_IN
set_scan_path -scan_data_in  SCAN_IN my_chain

 

DFT сообщает, что порт SCAN_IN is not type of ScanDataIn в чем проблема?

при это при команде report_dft_signal он показывает табличку где этот сигнал есть и ему присвоен тип ScanDataIn

 

И можно ли до Тетрамакса оценить покрытие тестом в DC?

Изменено пользователем -=Vitaly=-

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, а в каком месте их использовать.

 

У меня при попытке написать

set_dft_signal -view existing_dft -type ScanDataIn -port SCAN_IN
set_scan_path -scan_data_in  SCAN_IN my_chain

 

DFT сообщает, что порт SCAN_IN is not type of ScanDataIn в чем проблема?

при это при команде report_dft_signal он показывает табличку где этот сигнал есть и ему присвоен тип ScanDataIn

 

И можно ли до Тетрамакса оценить покрытие тестом в DC?

 

после read_verilog, constraints

 

не нужно set_dft_signal -view existing_dft -type ScanDataIn -port SCAN_IN

попробуй так

set_scan_path my_chain \

-view existing \

-scan_data_in [get_ports SCAN_IN] \

-scan_data_out [get_ports SCAN_OUT] \

-scan_enable [get_ports SCAN_EN \

-infer_dft_signals

 

create_test_protocol -infer_clock -infer_async

report_dft_signal -view existing

 

оценить покрытие тестом в DC

dft_drc -coverage_estimate

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

после read_verilog, constraints

 

не нужно set_dft_signal -view existing_dft -type ScanDataIn -port SCAN_IN

попробуй так

set_scan_path my_chain \

-view existing \

-scan_data_in [get_ports SCAN_IN] \

-scan_data_out [get_ports SCAN_OUT] \

-scan_enable [get_ports SCAN_EN \

-infer_dft_signals

 

create_test_protocol -infer_clock -infer_async

report_dft_signal -view existing

 

оценить покрытие тестом в DC

dft_drc -coverage_estimate

Огромное спасибо! :a14:

Заработало, правда синтезит странно все обычные флопы поменяло на флопы со сканом и повесило на вход SE этих флопов логический 0 :07: , а мой скан енейбл SCAN_EN замешало на комбинационную логику. :cranky:

Это проблема в коде или в скрипте?

/*Functional description*/    
/*disabled reset in SCAN mode*/
wire rb=RSTB | SCAN_EN;    

/*Create logic finding */
always@(divisor)  
    begin 
        max=0;    
        for(i=7;i>0;i=i-1)
            if(divisor[i]==1'b1 && i>max)
                max=i;        
    end        
    
wire [7:0] tmp_div=divisor<<(7-max);     
/*Division*/
always@(negedge rb or posedge SCLK)  
begin
if(!rb)    
    begin
        cur_divident<=8'd0;
        cur_divisor<=8'd0;   
        bit_count<=3'd0; 
        result<=7'd0;
    end    
else 
    casex(SCAN_EN)
        1'b1:begin
            cur_divident<={cur_divident[7:0],SCAN_IN};  
            cur_divisor<={cur_divisor[6:0],cur_divident[8]};
            bit_count<={bit_count[1:0],cur_divisor[7]};
            result<={result[5:0],bit_count[2]};
            end 
        1'b0:if(we)
                begin
                    cur_divident<=9'd255-tmp_div;
                    cur_divisor<=tmp_div>>1;   
                    bit_count<=8-max; 
                    result<=7'd0;
                end
            else if (bit_count!=0)
                begin
                    if (cur_divident[8]==1'b0)
                        begin
                            cur_divident <= cur_divident-cur_divisor;
                            result[bit_count-1'b1]<=1'b1;    
                        end    
                    else
                        begin
                            result[bit_count-1'b1]<=1'b0;
                            cur_divident <= cur_divident+cur_divisor;
                        end
                    
                    bit_count<=bit_count-1;      
                    cur_divisor<= cur_divisor>>1; 
                end         
        default: cur_divident<={8{1'bx}};    
    endcase     
end    
assign SCAN_OUT=result[6];

endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может кто-то может выложить в закрома толковые доки по SYNOPSYS, а то у меня только UG на Physical Compiler и то 2002 года. Или подскажите где качнуть по-свеже. Я позже документов 2004 года почти ничего не встречал. Во всех остальных то уже таких комманд нету, то еще чего.

 

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мини вопрос по Formality.

 

Когда он проверяет гейтед клок я задал set verification_clock_gate_hold_mode low. Он при матчинге выдает 1 точку несовпадения - элемент гейтед-клок. А при верификации все отлично. Я так понял так и должно быть или я большой оптимист :)

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

думаю из-за этой части

 

 

casex(SCAN_EN)

1'b1:begin

cur_divident<={cur_divident[7:0],SCAN_IN};

cur_divisor<={cur_divisor[6:0],cur_divident[8]};

bit_count<={bit_count[1:0],cur_divisor[7]};

result<={result[5:0],bit_count[2]};

end

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

думаю из-за этой части

casex(SCAN_EN)

1'b1:begin

cur_divident<={cur_divident[7:0],SCAN_IN};

cur_divisor<={cur_divisor[6:0],cur_divident[8]};

bit_count<={bit_count[1:0],cur_divisor[7]};

result<={result[5:0],bit_count[2]};

end

Спасибо, так а как иначе сделать скан-цепочку вручную?

Каденсе понимает такую конструкцию, я говорю синтезировать с опцией -don't scan и он заменяет флопики на скан флопики, правда почему-то все кроме 2х (мистика)...

Изменено пользователем -=Vitaly=-

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, так а как иначе сделать скан-цепочку вручную?

Каденсе понимает такую конструкцию, я говорю синтезировать с опцией -don't scan и он заменяет флопики на скан флопики, правда почему-то все кроме 2х (мистика)...

Пардон ошибнулся, он тоже не понимает, просто меняет флопы на флопы со сканом а Скан_енейбл заводит на логику. :01:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все вроде разобрался для дизайна который выше я сделал 2 скрипта

 

#Top-level synthesis script with adding scan chain
remove_design -all
set TOP_LEVEL div

analyze -f verilog ./src/$TOP_LEVEL.v
elaborate $TOP_LEVEL

link
create_clock SCLK -period 60 -waveform {0 50}

# Use if exist scan-chain
set_dft_signal -view existing_dft -type ScanClock -port SCLK -timing {45 55}
set_dft_signal -view existing_dft -type reset -port RSTB -active_state 0
set_dft_signal -view existing_dft -type ScanEnable -port SCAN_EN -active_state 1
set_scan_parh my_chain -view existing  -scan_master_clock SCLK -scan_enable SCAN_EN /
                                     -scan_data_in SCAN_IN -scan_data_out -SCAN_OUT -infer_dft_signals
create_test_protocol -infer_clock -infer_async

report_dft_signal -view existing
dft_drc

compile_ultra 
preview_dft

dft_drc -coverage estimate
report_scan_path

Этот для случая когда у вас ручная скан-цепочка, например как в моем примере.

При синтезе у меня получились обычные флопы и логика которая реализует скан-цепочку, зато порядок регистров в скан-цепочке свой - это плюс, но зато больше площади занимает. Главное не написать сompile_ultra -scan, т.к синтезатор заменяет все флопы на скан-флопы и вешает на входа SE этих регистров 0, т.е использует их как обычные регистры.

 

Теперь второй скрипт для автоматической генерации из обычного верилога без всяких заморочек.

Когда в тексте отсутсвует ручное задание скан-цепочек.

casex(SCAN_EN)
        1'b1:begin
            cur_divident<={cur_divident[7:0],SCAN_IN};  
            cur_divisor<={cur_divisor[6:0],cur_divident[8]};
            bit_count<={bit_count[1:0],cur_divisor[7]};
            result<={result[5:0],bit_count[2]};
            end

 

#Top-level synthesis script with adding scan chain
remove_design -all
set TOP_LEVEL div

analyze -f verilog ./src/$TOP_LEVEL.v
elaborate $TOP_LEVEL

link
create_clock SCLK -period 60 -waveform {0 50}

#===============================================================================
=================================

# Use for automatic scan-chain generation
set test_default_scan_style multiplexed_flip_flop
set_scan_configuration -style multiplexed_flip_flop -clock_mixing no_mix -chain_count 1
set_dft_signal -view existing_dft -type ScanClock -port SCLK -timing {45 55}
set_dft_signal -view existing_dft -type reset -port RSTB -active_state 0
set_dft_signal -view spec -type ScanDataIn -port SCAN_IN
set_dft_signal -view spec -type ScanDataOut -port SCAN_OUT
set_dft_signal -view existing_dft -type ScanEnable -port SCAN_EN -active_state 1
create_test_protocol
dft_drc

compile_ultra -scan
preview_dft
insert_dft

dft_drc -coverage estimate
report_scan_path

В этом случае синтезатор автоматически заменяет все флопики на флопики со сканом, на входа всех скан-флопов SE вешает сигнал SCAN_EN. Причем больше этот сигнал никуда не заходит в отличие от предыдущего варианта где он был замешан с логикой. Порядок в скан-цепочке такой как синтезатору угодно. Схема получается меньше по размеру и покрытие тестом немного выше.

 

Огромное спасибо grigorik :a14: .

Единственное что так и осталось загадкой это как написать верилог и скрипт, чтобы был свой порядок в скан-цепочке и скан-флопы в одно и то же время.

И еще может кто-то знает как посадить порт TE гейтед-клок елемента на SCAN_EN.

Изменено пользователем -=Vitaly=-

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Огромное спасибо grigorik :a14: .

Единственное что так и осталось загадкой это как написать верилог и скрипт, чтобы был свой порядок в скан-цепочке и скан-флопы в одно и то же время.

И еще может кто-то знает как посадить порт TE гейтед-клок елемента на SCAN_EN.

 

 

пожалуйста! :beer:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...