реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> получил предупреждения
serg_k1
сообщение Aug 29 2013, 13:48
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Здравстуйте,помогите разобраться.
получил предупреждения
WARNING:PhysDesignRules:372 - Gated clock. Clock net
Ch_M_BC/GND_12_o_GND_12_o_AND_159_o is sourced by a combinatorial pin. This
is not good design practice. Use the CE pin to control the loading of data
into the flip-flop.
как найти причину и насколько это важно?
методом исключений из описания получил , что вроде бы это получается из следующего куска кода. таких есть несколько. получается , что нужно упрощать?
Код
//----------- 2   3   4   5-е слово  -------------------------------------            
if ( reg_nomer_slova == 8'h02 | reg_nomer_slova == 8'h03 | reg_nomer_slova == 8'h04 | reg_nomer_slova == 8'h05)
  begin
casez (nomer_bit)
        5'b00???:   begin     //0..7                                 
            reg_CM_BC <=  (reg_nomer_slova == 8'h02) ?
                ( ( reg_kod_oper  == paket_znak ) ?  reg_kolich_znakov[nomer_bit]  :
                            ( ( reg_kod_oper  == paket_linia ) ?  reg_nach_koord_linii_Y[nomer_bit]  : 1'bz  ) ) :
                    (reg_nomer_slova == 8'h03) ?          
                        ( ( reg_kod_oper  == paket_znak ) ?  reg_koord_perv_znaka_Y[nomer_bit]  :  
                            ( ( reg_kod_oper  == paket_linia )  ?  reg_nach_koord_linii_X[nomer_bit]  : 1'bz  ) ) :
                        (reg_nomer_slova == 8'h04) ?        
                            ( ( reg_kod_oper  == paket_znak ) ?  reg_koord_perv_znaka_X[nomer_bit]  :  
                                ( ( reg_kod_oper  == paket_linia )  ?  reg_proekcii_linii_Y[nomer_bit]  : 1'bz  ) ) :        
                                ( ( reg_kod_oper  == paket_znak ) ?  reg_kod_znaka_bit_ml[nomer_bit]  :  
                                    ( ( reg_kod_oper  == paket_linia )  ?  reg_proekcii_linii_X[nomer_bit]  : 1'bz  ) );
                nomer_bit <= nomer_bit + 1'b1;    
            end
    5'b0100?:   begin     //8,9
            reg_podgotovki_smeni_slova <= 1'b0;
            reg_CM_BC <=  (reg_nomer_slova == 8'h02) ?
                        ( ( reg_kod_oper  == paket_znak ) ?  reg_kolich_znakov[nomer_bit]  :
                            ( ( reg_kod_oper  == paket_linia ) ?  reg_nach_koord_linii_Y[nomer_bit]  : 1'bz  ) ) :
                        (reg_nomer_slova == 8'h03) ?          
                            ( ( reg_kod_oper  == paket_znak ) ?  reg_koord_perv_znaka_Y[nomer_bit]  :  
                                ( ( reg_kod_oper  == paket_linia )  ?  reg_nach_koord_linii_X[nomer_bit]  : 1'bz  ) ) :
                            (reg_nomer_slova == 8'h04) ?        
                                ( ( reg_kod_oper  == paket_znak ) ?  reg_koord_perv_znaka_X[nomer_bit]  :  
                                ( ( reg_kod_oper  == paket_linia )  ?  reg_proekcii_linii_Y[nomer_bit]  : 1'bz  ) ):        
                                        ( ( reg_kod_oper  == paket_znak ) ?  reg_kod_znaka_bit_st[nomer_bit-8]  :  
                                    ( ( reg_kod_oper  == paket_linia )  ?  reg_proekcii_linii_X[nomer_bit]  : 1'bz  ) );
                    nomer_bit <= nomer_bit + 1'b1;    
                end                              
        5'b0101?:   begin     //10,11
        reg_CM_BC <=  (reg_nomer_slova == 8'h02 | reg_nomer_slova == 8'h03 | reg_nomer_slova == 8'h04) ?
                        ( ( reg_kod_oper  == paket_znak ) ?   1'b0  :
                            ( ( reg_kod_oper  == paket_linia ) ?   1'b0   : 1'bz  ) ) :
                                ( ( reg_kod_oper  == paket_znak ) ?  reg_kod_znaka_bit_st[nomer_bit-8]  :  
                                    ( ( reg_kod_oper  == paket_linia )  ?   1'b0  : 1'bz  ) );
                    nomer_bit <= nomer_bit + 1'b1;    
                end    
        5'b0110?:   begin      //12,13
            reg_CM_BC <=
                                       ...
                nomer_bit <= nomer_bit + 1'b1;    
            end    
        5'b01110:   begin      //14
            reg_CM_BC <=  ...

                nomer_bit <= nomer_bit + 1'b1;    
            end    
    5'b01111:   begin      //15
            reg_CM_BC <=
                                         ...
                nomer_bit <= nomer_bit + 1'b1;    
            end
    5'b10000:   begin      
                reg_CM_BC <=  1'b0;
                nomer_bit <= nomer_bit + 1'b1;    
             end          
    5'b10001:   begin
                reg_CM_BC <=  reg_kontr_razr;
                nomer_bit <= nomer_bit + 1'b1;                                
                            ...    
                                        
            end                          
                    default :   begin
                                
                                nomer_bit <= 5'b00000;
                                end      
        endcase
end    //reg_nomer_slova == 8'h02

и еще одно предупреждение.
PhysDesignRules:372 - Gated clock. Clock net Ch_M_BC/reg_IZ_BC_CIB_BC is
sourced by a combinatorial pin. This is not good design practice. Use the CE
pin to control the loading of data into the flip-flop.
история такая.
есть два входных сигнала импульс IZ_BC и еще несколько импульсов CIB_BC. непересекающихся. под частоту в always получен общий reg_IZ_BC_CIB_BC. и далее на нем сделан свой always.
Go to the top of the page
 
+Quote Post
Corner
сообщение Aug 29 2013, 15:46
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Не вижу клока в этом блоке. Одни условия. Где always@(posedge clock) или always@(negedge clock)
Go to the top of the page
 
+Quote Post
Maverick
сообщение Aug 29 2013, 20:28
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(serg_k1 @ Aug 29 2013, 16:48) *
Здравстуйте,помогите разобраться.
получил предупреждения
WARNING:PhysDesignRules:372 - Gated clock. Clock net
Ch_M_BC/GND_12_o_GND_12_o_AND_159_o is sourced by a combinatorial pin. This
is not good design practice. Use the CE pin to control the loading of data
into the flip-flop.
как найти причину и насколько это важно?
методом исключений из описания получил , что вроде бы это получается из следующего куска кода. таких есть несколько. получается , что нужно упрощать?
и еще одно предупреждение.
PhysDesignRules:372 - Gated clock. Clock net Ch_M_BC/reg_IZ_BC_CIB_BC is
sourced by a combinatorial pin. This is not good design practice. Use the CE
pin to control the loading of data into the flip-flop.
история такая.
есть два входных сигнала импульс IZ_BC и еще несколько импульсов CIB_BC. непересекающихся. под частоту в always получен общий reg_IZ_BC_CIB_BC. и далее на нем сделан свой always.

Вы должны отталкиваться от тактовой частоты в ПЛИС. Следовательно, все входные сигналы Вы должны "привязать"(синхронизировать) с Вашей тактовой частотой в ПЛИС. Потом уже производить обработку этих сигналов на тактовой частоте в ПЛИС.
Иначе у Вас будет асинхронная логика...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
serg_k1
сообщение Aug 30 2013, 05:11
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(Maverick @ Aug 30 2013, 00:28) *
Вы должны отталкиваться от тактовой частоты в ПЛИС. Следовательно, все входные сигналы Вы должны "привязать"(синхронизировать) с Вашей тактовой частотой в ПЛИС. Потом уже производить обработку этих сигналов на тактовой частоте в ПЛИС.
Иначе у Вас будет асинхронная логика...

структура такая
Код
always @(posedge clk_100_MHz )    
begin
    if( IZ_BC ==1 )
       reg_IZ_BC <= 1'b1;        
    else        
       reg_IZ_BC <= 1'b0;        
    if( CIB_BC ==1 )    
        reg_CIB_BC <= 1'b1;        
    else
        reg_CIB_BC <= 1'b0;        
    if( IZ_BC ==1 | CIB_BC ==1)            
        reg_IZ_BC_CIB_BC <= 1'b1;        
    else        
        reg_IZ_BC_CIB_BC <= 1'b0;                
end
always @( posedge reg_CIB_BC or posedge reg_IZ_BC  )    // reg_IZ_BC  в роли сброса
   begin    
    if ( reg_IZ_BC == 1 )
        begin
...
            end
       else
            begin
...
            end
  end

always @(  negedge reg_IZ_BC_CIB_BC )
begin    
  ...
   здесь приведенный ранее код
end
Go to the top of the page
 
+Quote Post
XVR
сообщение Aug 30 2013, 09:35
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Вот это - always @(posedge clk_100_MHz ) правильно, а вот это - always @( posedge reg_CIB_BC) и есть gated clock (и следующий always тоже). У вас во всех always должен стоять только clk_100_MHz (не считая сигналов сброса)
Go to the top of the page
 
+Quote Post
Maverick
сообщение Aug 30 2013, 10:44
Сообщение #6


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(serg_k1 @ Aug 30 2013, 08:11) *
структура такая
Код
always @(posedge clk_100_MHz )    
begin
    if( IZ_BC ==1 )
       reg_IZ_BC <= 1'b1;        
    else        
       reg_IZ_BC <= 1'b0;        
    if( CIB_BC ==1 )    
        reg_CIB_BC <= 1'b1;        
    else
        reg_CIB_BC <= 1'b0;        
    if( IZ_BC ==1 | CIB_BC ==1)            
        reg_IZ_BC_CIB_BC <= 1'b1;        
    else        
        reg_IZ_BC_CIB_BC <= 1'b0;                
end
always @( posedge reg_CIB_BC or posedge reg_IZ_BC  )    // reg_IZ_BC  в роли сброса
   begin    
    if ( reg_IZ_BC == 1 )
        begin
...
            end
       else
            begin
...
            end
  end

always @(  negedge reg_IZ_BC_CIB_BC )
begin    
  ...
   здесь приведенный ранее код
end

почитайте про асинхронные частоты, пересечение клоковых доменов и синхронизацию


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
serg_k1
сообщение Sep 2 2013, 07:32
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(Maverick @ Aug 30 2013, 14:44) *
почитайте про асинхронные частоты, пересечение клоковых доменов и синхронизацию[/url]

Спасибо, почитал. добавил на входные сигналы следующий модуль синхронизации (на другие- аналогичные) , а также синхронизатор сброса
Код
module synchronizer_CIB_BC (
    input clk,
    input reset,
    input din,
    output dout,
     output dout1
);
    reg d,dout,dout1;
    always @(posedge clk, posedge reset) begin
        if (reset) begin
            d <= 0;
            dout <= 0;
        dout1 <= 0;
        end
     else
        begin
            d <= din;
            dout <= d;
        dout1 <= dout;
        end
    end
endmodule

//===============  синхронизатор сброса   ==============
module async_reset (
input clk,
input reset_in,
output rst_out
);
reg rst_out, rff1;
always @(posedge clk or posedge reset_in)
if (reset_in)
    begin
        rst_out <= 1'b1;
        rff1  <= 1'b1;
    end
else
    begin
        rff1 <= 1'b0;
        rst_out <= rff1;
    end
endmodule

dout1 для определения фронта. но осталось такое предупреждение
PhysDesignRules:372 - Gated clock. Clock net async_reset/rst_out is
sourced by a combinatorial pin. This is not good design practice. Use the CE
pin to control the loading of data into the flip-flop.
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 2 2013, 08:55
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Смотрите где используется цепь rst_out выходящая из вашего async_reset. Синтезатор посчитал, что где то она используется в качестве клока (используется в списке чувствительности в always @(...) и не гейтуется конструкцией if (...) по какому то из путей внутри этого always)
Go to the top of the page
 
+Quote Post
serg_k1
сообщение Sep 2 2013, 10:37
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(XVR @ Sep 2 2013, 12:55) *
Смотрите где используется цепь rst_out выходящая из вашего async_reset. Синтезатор посчитал, что где то она используется в качестве клока (используется в списке чувствительности в always @(...) и не гейтуется конструкцией if (...) по какому то из путей внутри этого always)

да, действительно, есть двух разных модулях в таймере под 1МГц. но такое предупреждение выдается только на один модуль. в нем переделал под 100МГц.- предупреждение ушло. а в другом такая же конструкция.там нет 100МГц. и такого же предупреждения нет.а выдается предупреждение
Line 151: Assignment to reg_AX ignored, since the identifier is never used.
получается , что его тоже нужно переделать?
2.еще есть такое.
Код
...
reg [7:0] reg_kod_znaka[61:0];
...
task paket_znak_3;
begin
    ...
    reg_kod_znaka[0] = 8'hf0;
    reg_kod_znaka[1] = 8'hf1;
    ...
    reg_kod_znaka[9] = 8'hf9;
...
end
endtask
always @(posedge clk_100_MHz )    
begin
...
paket_znak_3;
...
end

получаю множество таких.
Xst:1895 - Due to other FF/Latch trimming, FF/Latch <reg_kod_znaka_0_229> (without init value) has a constant value of 0 in block <Ch_M_BC>. This FF/Latch will be trimmed during the optimization process. как тут быть?

Сообщение отредактировал serg_k1 - Sep 2 2013, 10:49
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 2 2013, 14:04
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(serg_k1 @ Sep 2 2013, 14:37) *
а в другом такая же конструкция.там нет 100МГц. и такого же предупреждения нет.а выдается предупреждение
Line 151: Assignment to reg_AX ignored, since the identifier is never used.
Синтезатор выкинул ваш регистр reg_AX, т.к. к нему никто не подключен. Выкинул вместе с присваиванием, видимо поэтому на always и не ругалось
Цитата
получается , что его тоже нужно переделать?
Это уж вам виднее - нужен reg_AX или нет
Цитата
получаю множество таких.
Xst:1895 - Due to other FF/Latch trimming, FF/Latch <reg_kod_znaka_0_229> (without init value) has a constant value of 0 in block <Ch_M_BC>. This FF/Latch will be trimmed during the optimization process.
Синтезатор обнаружил, что в reg_kod_znaka_0_229 пишется только 0 и ничего более, так что он его выкинул и заменил константой 0
Цитата
как тут быть?
А вам нужен не 0?
Go to the top of the page
 
+Quote Post
serg_k1
сообщение Sep 3 2013, 05:53
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(XVR @ Sep 2 2013, 18:04) *
Синтезатор обнаружил, что в reg_kod_znaka_0_229 пишется только 0 и ничего более, так что он его выкинул и заменил константой 0
А вам нужен не 0?

есть массив reg [7:0] reg_kod_znaka[61:0]; в разных task им всем (!) 62 присваиваются значения. другие мне не нужны и их нет в объявлении. конечно, какие-то могут иметь одни и те же значения. а я получаю более 400 предупреждений. последнее вот такое и почему там 1. "1" довольно много.
Xst:1710 - FF/Latch <Ch_M_BC/reg_kod_znaka_0_495> (without init value) has a constant value of 1 in block <mod_kontr_monitor>. This FF/Latch will be trimmed during the optimization process.
это напрягает. когда объявлена integer count и получаю предупреждения , что старшие разряды =0, тот тут все понятно. я знаю , что так и должно быть. а тут не понятно.
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 3 2013, 09:36
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Проверьте, все ли task'и вызываются (и вообще, синтезатор task'и поддерживает?)
Или какие то биты внутри вашего reg_kod_znaka всегда имеют одни и те же значения. Судя по названию регистра, синтезатор весь ваш reg_kod_znaka рассыпал на отдельные триггера

Go to the top of the page
 
+Quote Post
serg_k1
сообщение Sep 3 2013, 11:13
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(XVR @ Sep 3 2013, 13:36) *
Проверьте, все ли task'и вызываются (и вообще, синтезатор task'и поддерживает?)
Или какие то биты внутри вашего reg_kod_znaka всегда имеют одни и те же значения. Судя по названию регистра, синтезатор весь ваш reg_kod_znaka рассыпал на отдельные триггера

сделал следующее. под сброс задал все reg_kod_znaka = 8'h00. результат синтеза - все предупреждения, где была "1" пропали.
задал в task (проверил поочередно в первом, середине и в конце) все reg_kod_znaka = 8'hff. результат синтеза -все предупреждения пропали.
значит синтезатор task'и поддерживает, но мне же нужно задавать реальные коды.такое количество предупреждений, причем они идут не подряд! замучаешься выискивать нужные. можно , конечно, проинвертировать самую длинную надпись и это задать в сброс.
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 3 2013, 11:39
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(serg_k1 @ Sep 3 2013, 15:13) *
значит синтезатор task'и поддерживает, но мне же нужно задавать реальные коды.такое количество предупреждений, причем они идут не подряд! замучаешься выискивать нужные.
Так он и записывает реальные коды. Видимо в ваших реальных кодах какие то биты всегда стоят в одном и том же состоянии (во всех присваиваниях)

Go to the top of the page
 
+Quote Post
serg_k1
сообщение Sep 3 2013, 11:51
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(XVR @ Sep 3 2013, 15:39) *
Так он и записывает реальные коды. Видимо в ваших реальных кодах какие то биты всегда стоят в одном и том же состоянии (во всех присваиваниях)

так это понятно. не понятно как быть. добавляется 400 предупреждений.на них не нужно обращать внимание. но их нужно фильтровать при работе с остальными..
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01493 секунд с 7
ELECTRONIX ©2004-2016