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

ISE, как оставить регистр для chipscope, чтобы синтезатор его не выкинул ?

ISE, как оставить регистр для chipscope, чтобы синтезатор его не выкинул ?

Каким атрибутом его обозвать ?

 

Сейчас пользуюсь следующим методом, все регистры, предназначенные для чипскоп по ИЛИ и на выходной пин. Но зачастую синтезатор меняет название некоторых пинов, что не удобно.

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


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

В юзергуде по XST есть такая строка:

"If an instantiated primitive has specific constraints such as RLOC attached, XST preserves it as is."

 

Может поможет.

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


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

Сейчас пользуюсь следующим методом, все регистры, предназначенные для чипскоп по ИЛИ и на выходной пин. Но зачастую синтезатор меняет название некоторых пинов, что не удобно.

Всё как всегда - RTFM: XST User Guide -> XST General Constraints -> Save (S):

When a net is absorbed into a block, or a block is optimized away, it can no longer be seen in the physical design database. Save (S) prevents this from happening.

 

Т.е. цепляем constraint S на нужные net'ы, и они будут доступны для ChipScope ILA. Но использовать его надо с умом и очень аккуратно (как и любой другой constraint).

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


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

ISE, как оставить регистр для chipscope, чтобы синтезатор его не выкинул ?

Каким атрибутом его обозвать ?

 

Сейчас пользуюсь следующим методом, все регистры, предназначенные для чипскоп по ИЛИ и на выходной пин. Но зачастую синтезатор меняет название некоторых пинов, что не удобно.

Выходы регистров никакой синтезатор никогда не выкидывает. Он может запихать этот регистр внутрь DSP или блочной памяти для улучшения таймингов либо переобозвать выход другим именем. Если же он всё-таки что-то выкинул, значит эти регистры в дизайне не нужны, ищите почему это происходит, т.к. в данном случае проблема у вас, а не у чипскопа.

Аттрибут S - это костыль. Он решит вашу конкретную проблему, но не поможет найти причину "выкидывания". Кроме того эти атрибуты ухудшают качество разводки (в частности увеличивают ресурс).

 

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


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

Если же он всё-таки что-то выкинул, значит эти регистры в дизайне не нужны, ищите почему это происходит, т.к. в данном случае проблема у вас, а не у чипскопа.

не совсем.

1. Иногда требуется промежуточный результат. Например , у меня есть два сигнала sig1 и sig2, мне нужно получить их промежуточную сумму sig1+sig2 и вывести это дело на чипскоп. ествественно синтезатор выкинет регистр, где будет хранится сумма.

2. Зачастую сложно найти сигнал, который нужен, так как синтезатор его переименовывает или инвертирует. Еще более неприянто, когда он делает это в шине данных (часть цепей переименовывает, часть инвертирует).

 

 

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

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


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

Есть атрибут keep, который предотвращает выкидывание сигналов.

в первом случае не поможет, во втором работает. Знаю про этот атрибут.

 

В общем решение следующее.

Создается отдельный модуль , куда заводятся все сигналы , нужные для чипскопа, внутри модуля по или на единственный выходной пин они идут. И обязательно атрибут о строгой сохранении иерархии (я работаю с синплифаем, xst вроде по-умолчанию его выставляет)

 

Вот тестовый пример:

//----------------------------------------
// Основной модуль
//----------------------------------------

module testScope(
    input clk,
    output [7:0] dout,
    output reg test1,
    output test2,
    output test3,
    output test4
    );
    
    wire [7:0] count/*synthesis syn_keep = 1*/;
    

     
    CountMod CntMod (
    .clk(clk), 
    .count(count)
    );     
    
    reg [7:0] dataToScope;
    
    Black BlackMod (
    .test(test4),
    .dataIn(dataToScope) 
    );    
    
    always @(posedge clk)
    begin
        test1 <= count[1];
        dataToScope <= count + 2;
    end    
    
    assign     test2 = ~count[7],
            test3 = count[2];
            
    assign dout = count;        

endmodule

//----------------------------------------
// Модуль счетчика
//----------------------------------------

module CountMod(
    input clk,
    output reg [7:0] count
    )/*synthesis syn_hier="hard"*/;

    always @(posedge clk)
        count <= count + 1;
endmodule        
        
//----------------------------------------
// Модуль Тестовый
//----------------------------------------        
module Black(
    output test,
    input [7:0] dataIn
    )/*synthesis syn_hier="hard"*/;
    
    assign test = |dataIn;


endmodule

 

Сигналы для чипскопа count и dataToScope из верхнего модуля.

 

Если есть другие предложения - пишите.

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


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

В общем решение следующее.

Создается отдельный модуль , куда заводятся все сигналы , нужные для чипскопа, внутри модуля по или на единственный выходной пин они идут. И обязательно атрибут о строгой сохранении иерархии (я работаю с синплифаем, xst вроде по-умолчанию его выставляет)

 

и чем это проще, чем втыкать модуль чипскопа (не использовать инсертер, а ручками IP)?

 

имхо, это и проще и дизайн меньше корежется, чем использование keep / сохранение иерархии и т.п.

 

также может быть полезно из чипскопа записать vcd файл, а его обработать в каком-нибудь адекватном VCD view-ере от GTKwave до NCSim-а

там операции типа Sig1+Sig2 делаются, да и вообще ничего сложного вручную (рукописной программкой) обрабатывать VCD файлы если хочется чего-то совсем необычного

 

 

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


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

и чем это проще, чем втыкать модуль чипскопа (не использовать инсертер, а ручками IP)?

а проше тем, что чипскопом иногда нужно тыкнутся в сигналы, находящиеся в разных модулях. как IP в этом случае вставлять не удобно ибо:

1. Нужно тянуть все до топ модуля

2. Вставлять несколько IP и тянуть контролы до топа

 

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


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

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

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

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

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

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

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

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

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

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