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

Моделирование на уровне вентилей в Questa sim

совершенно не верно

 

RTL описаная на языке никак не синтезируется - можете описать RTL на SystemC и скомпилировать С++ - что, С++ знает что-то про вентили и триггеры :)

 

то есть HDL это обычный (но параллельного исполнения) язык, который компилируется в инструкции процессора так же как и любой процедурный (типа С)

 

Инструкции процессора и пресинтез - в моем понимании одно и то же, применительно к симуляторам. Но отличие от простого компилятора Си есть однозначно, не даром подключение С++ библиотек делается через дополнительные модули навроде PLI. Кроме того, если посмотрите внимательно, каждый симулятор сначала делает elaborate во внутреннюю библиотеку, и лишь оттуда производит моделирование. Если вам угодно, можете считать это обьектами, а я предпочитаю думать что это техн. либа )

 

если дизайн синтезирован в некую GTECH библиотеку (а покажите мне FPGA-шный струмент, который умеет выдавать GTECH подобные RTL-и)

то и берутся ячейки этой GTECH-ной библиотеки, описанные на HDL

Верилог после квартуса представляет собой нетлист на базе библиотеки мегафункций. Чем вам не GTECH либа? Мегафункции могут быть как поведенческими, так и синтезируемыми (к примеру, encrypted).

 

обычно бывает возможность провести симуляцию без анотации, то есть нетлист, описаный на тех же ячейках из библиотеки для целевой ПЛИС - LUT-ах и т.п.

но при этом задержки в нем равны 0

смысла в такой симуляции мало, но идет она значительно быстрее

есть так называемая задержка delta или delta cycle (которая не имеет никакого отношения к timescale), с которой происходят 0 задержки - то есть события происходят последовательно, но время не увеличивается - см. описание дельта цикла в той же википедии - в SV он вообще в стандарте описан, в Verilog|VHDL есть "неявное" понимание

Дельта цикл я и имел ввиду, хотя мало что знаю как он учитывается/ рассчитывается при моделировании. Но на вейвформе он выглядит как очень маленькая задержка на входах/выходах элемента; я считал ее равной 1 timescale, возможно что ошибался. Надо запустить моделирование и проверить. Но что точно - эта дельта не равна нулю в моделировании, много раз видел эту задержку на вейвформе.

 

...

смысл в цитируемой книжке в том, что навороты SV позволяют работать с другой абстракцией, не RTL, а уровнем транзакций TLM

предполагается, что TLM оно для гораздо более сложных узлов, чем RTL (ну например на TLM можно описать всю систему с какими-нибудь USB/Ethernet-ами, а RTL например, какой-нибудь арбитр шины)

симулировать такую систему на уровне гейтов бессмысленно - очень долго, состаришся, пока симулятор осушествит хоть одну транзакцию

поэтому применять эти UVM-ы к gate level-у просто бессмысленно, но можно

 

спасибо за внимание :)

И все же, в цитате явно сказано следующее: STA не осуществляется временным моделированием. TLM здесь не причем.

 

имхо

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


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

STA первая буква S означает статический, то есть ни о каком временном моделировании вообще говорить нельзя

 

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

 

а квартус помоему умеет только post-map и post-route нетлисты выдавать, технологической библиотеки нет (только для рисования RTL)

 

----------------

 

а со временем симуляции - почитайте, поэкспериментируйте, в верилоге например есть такая конструкция #0, что она означала бы если бы "время всегда шло"

у ncsim-а сделано более наглядно - там можно смотреть временную шкалу, но если хочется - то можно и событийную, которая в "мгновенная", а на временной желтыми точками помечается

 

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


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

Как моделируется нетлист? Точно также, только библиотека подключается внешняя (к примеру, альтеровская). Задержки на каждом вентиле также будут равны 1 timescale. Но! для нет листа есть еще sdf файл, подгрузив который, мы получаем не синтетические задержки (1 timescale), а реальные, экстрагированные из флорплана (quartus).

Таким образом, разницы нет - что использовать RTL, что нетлист с sdf, моделирование работает одинаково, а значит и тестбенчу должно быть без разницы.

Позволю себе немного Вас поправить....

Задержки на каждом вентиле будут равны НЕ 1 timescale, а той величине которая описана в Verilog модели гейта..

 

1) Если в этой модели нет таймингов, а просто написано напр. asign Q=A&B - то вы правы, будет 1 дельта задержка, как и в обычном RTL описании.

 

2) Если эта модель гейта более умная (что обычно и есть) то там указаны реальные задержки напр. #5; asign Q=A&B - что значит задержку Q на 5 timescale;

 

3) Verilog имеет весьма продвинутые конструкции для задания всяких задержек в модели гейта\модуля.

Вот напр. можна так в верилоге задать сетап тайм:

$setup  (posedge A[0],  posedge RD, READ_SETUP_TIME,    NOTIFY );

 

4) Чтобы сработал SDF, модель гейта должна быть правильной!

вот напр. правильная AND модель:

   
module AND2 (A, B, Q);

   input     A, B;
   output    Q;

// Function Q: (A*B)
   and       i0  (Q, A, B);

// timing section:
   specify

      (A +=> Q) = (0.02, 0.02);
      (B +=> Q) = (0.02, 0.02);

   endspecify
endmodule

 

5) Если не грузить SDF то задержки будут такие как указаны в моделях гейтов.

Если загрузить SDF, то задержки из него "перепишут" задержки из модели гейта п.4) и плюс появятся задержки в цепях межсоединений.

Если модели гейтов описаны в стиле 1-3) то задержки в гейтах (A to Q напр.) не перепишутся, а только появятся задержки в цепях.

 

 

 

-------------

STA - Static Timing Analysis

Статический Временной Анализ - фактически, проверка того что требования по setup\hold таймингам выполняются на каждом флопе.

 

Проверяются ли setup\hold таймы при симуляции нетлиста?

Да, если эти тайминги есть в Verilog модели флопов. И даже независимо от того есть ли SDF или его нет. См. выше.

 

=======================

Задержки в SDO не нулевые

Результат тот же задержек нет

 

1) почему файл имеет росширение SDO а не SDF?

2) Покажите Verilog модель вашего тригера.

3) Где нет задержки - на выходе тригера относительно клока (C to Q) или на межсоединениях гейтов (from GATE1.Q to GATE2.IN)?

 

=====================

Конечно-конечно.. непременно прочту..

 

Но вот у меня простой вопрос:

 

Есть функциональное описание модуля и testbench для его тестирования.

Я пишу sdc для модуля, где, например, описываю multi-cycle paths.

Я хочу проверить работоспособность netlist c sdf.

 

Могу ли я это сделать, если testbench использует UVM?

Смешались в кучу кони, люди.....

1) SDC - надо для STA. Тесбенчи тут непричём.

2) проверить работоспособность netlist c sdf вы можете и с помощью тесбенча писаного в среде UVM.

Только надо UVM тесбенч (впрочем, как и простой Verilog тесбенч) писать так, чтобы он был совместим именно с нетлистом, а не RTL.

Ну там пути к сигналам соответствовали нетлисту, а-то их синтезатор любит переименовывать....

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


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

Ответов много, все они прекрасные, не лишены здравого смысла и богатейшего опыта. Спасибо.

 

Теперь по поводу вот этого:

1) SDC - надо для STA. Тесбенчи тут непричём.

 

Видимо в этой формулировке таится какая-то бездна смысла, которую я пока не способен осознать, т.к. упрямо использую sdc еще на этапе синтеза.

 

Но все же я повторю вопрос, расширив возможности для ответа:

какими способами можно проверить правильность задания неочевидных ограничений (SDC)? как простой пример: multicycle path: как подтвердить предположение о том, что указанный путь действительно multicycle и у него такие параметры?

 

из того, что мне известно: прогнать testbench на netlist'e с задержками (SDF) для углов.

 

Есть еще варианты?

 

 

 

 

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


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

2Fat Robot

sdc это констрейн для правильного синтеза схемы, а также для STA. Для временного моделирования эти констрейны не нужны.

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

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


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

 

Вообще-то мой вопрос был: "есть ли еще варианты?", а не "кто сумеет повторить мной написанное другими словами?"

 

Но все равно спасибо.

 

2Fat Robot

sdc это констрейн для правильного синтеза схемы, а также для STA. Для временного моделирования эти констрейны не нужны.

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

 

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


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

 

Насчет SDO - альтеровский софт делает файл с таким расширением еще со времен MAX. Исторически сложилось;по содержанию это обрезанный SDF.

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


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

Код делителя следующий

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;


ENTITY div IS        
    
    PORT
        (
            data_in1            : IN    STD_LOGIC_VECTOR (19 downto 0);
            data_in2            : IN    STD_LOGIC_VECTOR (15 downto 0);
            clk                : In     STD_LOGIC;
            data_div_50        : out    STD_LOGIC_VECTOR (19 downto 0)
        );
    END div;

ARCHITECTURE arhitektura OF div IS

signal data1                    : integer range 0 to 1048575;
signal data2                    : integer range 0 to 65535;
signal data_div                : integer range 0 to 1048575;

    BEGIN

    process (clk)
        begin
            if clk' event and clk = '0' then
                data1 <= conv_integer (data_in1(19 downto 0));
                data2 <= conv_integer (data_in2(15 downto 0));
            end if;
        end process;

Data_div_50 <= CONV_STD_LOGIC_VECTOR(data_div, 20);
    END arhitektura;

 

Код теста :

USE cycloneive.cycloneive_components.all ; 
USE ieee.std_logic_1164.all ; 
USE ieee.std_logic_textio.all ; 
USE ieee.std_logic_unsigned.all ; 
USE std.textio.all ; 
ENTITY proba_div_tb  IS 
END; 

ARCHITECTURE proba_div_tb_arch OF proba_div_tb IS
  SIGNAL \Out\   :  std_logic_vector (19 downto 0) ; 
  SIGNAL d2   :  std_logic_vector (15 downto 0)  := X"0000"; 
  SIGNAL CLK   :  STD_LOGIC  :='0'; 
  SIGNAL \in\   :  std_logic_vector (19 downto 0) := X"00000"; 
  COMPONENT divider  
    PORT ( 
      \Out\  : out std_logic_vector (19 downto 0); 
      d2  : in std_logic_vector (15 downto 0); 
      CLK  : in STD_LOGIC; 
      \in\  : in std_logic_vector (19 downto 0) ); 
  END COMPONENT; 
BEGIN
  DUT  : divider  
    PORT MAP ( 
      \Out\   => \Out\  ,
      d2   => d2  ,
      CLK   => CLK  ,
      \in\   => \in\   ); 



clk <= not clk after 500 ns;
d2 <= X"0248" after 1200 ns;
\in\ <= X"5aaaa" after 1200 ns;

END;

Автоматически делитель реализован скорей всего на огромной комбинационной логике и задердки должны быть несколько наносекунд. Но задержки упорно не подключаются.

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


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

Видимо в этой формулировке таится какая-то бездна смысла, которую я пока не способен осознать, т.к. упрямо использую sdc еще на этапе синтеза.

 

из того, что мне известно: прогнать testbench на netlist'e с задержками (SDF) для углов.

 

Есть еще варианты?

 

1) а где-же есчё использовать SDC как не на этапах SP&R (синтез плейс роут)?

Но функционально, увы при помощи SDC ничего не верифицировать, вот поэтому и непричём тесбенчи.

Вы кстати верифицируете ваш RTL до синтеза?

2) Ваш вариант правильный. Вот только не надо путать функциональную верификацию логики и проверку правильности SDC.

3) Есчё варианты есть... В смысле верификации SDC. Кое чё может Cadence Conformal.

он напр. проверяет SDC констрейны разных модулей на непротиворечивость.

 

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


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

Что то в вашем 'делителе' отсутствует собственно деление. А data_div вообще никуда не подключен. У вас точно код такой?

 

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


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

Автоматически делитель реализован скорей всего на огромной комбинационной логике и задердки должны быть несколько наносекунд. Но задержки упорно не подключаются.

Повторю вопрос:

1) Покажите нетлист.

2) Покажите Verilog модель (библиотеку) тех комбинаторных элементов в которые синтезился ваш делитель.

3) Где нет задержки - между входом-выходом гейтов, в соединениях между гейтами, между входом-выходом модуля?

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


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

Уберал коменты и зацепил непосредственно деление.

 

data_div <= (Data1 / Data2);

 

Не понимаю где должны быть задержки. Это исходный код. Квартус производит компиляцию и предлагает два вида симуляции RTL и Gate. Я откуда могу знать через сколько вентилей он протаскивает сигналы и какая задежка там будет?

 

Я понял что все задержки описываются в в SDO файле который подключается в Квесте при симуляции в разделе SDF. SDO файл генерит сам Квартус.

 

И что это за Verilog модель где ее взять?

Изменено пользователем seldim

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


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

Я понял что все задержки описываются в в SDO файле который подключается в Квесте при симуляции в разделе SDF. SDO файл генерит сам Квартус.

И что это за Verilog модель где ее взять?

А что вы симулите-то с SDF? Случайно не VHDL описание приведённое в примере выше? У вас нетлист вообще есть?

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


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

Я не вполне понимаю, откуда у Вас впечатление, что я хочу что-то верифицировать с помощью sdc.

 

Я хочу проверить правильность самого sdc и использовать для этого тотже модный UVM-testbench, что и для функциональной верификации. Возможно с каким-то минимальными доработками и с учетом того, что в качестве DUT в этом случае будет netlist с sdf. Это когда для проверки sdc требуется пройти как минимум синтез. По этому вопросу досужих мнений здесь много (даже модель драйвера и времени симуляции обсудили богато), а вот ответа типа: "я так делал, все нормально, нужно учитывать то-то и то-то" почему-то я в явном виде не встретил. Начинать такую масшатбную суету без уверенности в том, что не придется писать 2 testbench'a (один для RTL, а другой для netlist c sdf) у меня ни задора, ни ресурсов нет. Лучше уж по-старинке.

 

По поводу возможной проверки sdc до синтеза: я посмотрю возможности Conformal. Спасибо.

 

Но функционально, увы при помощи SDC ничего не верифицировать, вот поэтому и непричём тесбенчи.

Вы кстати верифицируете ваш RTL до синтеза?

 

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


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

Я симулирую то, что Квартус передает в Квестасим совмесно с тестовым файлом VHDL, который формирует клок и входные данные. И что вы понимаете под нет листом? RTL?

 

Нетлист при запуске симулятора через квартус передается в Квесту автоматически если Вы имеете в виду VHO файл и с ним производится симуляция. Нетлист приводить не имеет смысла он огромен. И думаю что он правильный.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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