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

Как в Active-HDL использовать test bench

Не могу подключить test bench к своему проекту, да и вообще он как нибуть создается в Activ-HDL?

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


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

DLR

Создаём модуль, компилируем модуль.

В desing browser в рабочей библиотеке находим откомпилированное entity, ЛКМ->generate testbench.

Статим его top'ом.

Active создаст файл с модулем и заготовками для тестов.

Набиваем свои сигналы.

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


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

Но вот проблема с временной симуляцией остается,

в options требуется waveforms (*.awf) - как ее сделать из обычного test-bench файла или както еще?

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


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

Но вот проблема с временной симуляцией остается,

в options требуется waveforms (*.awf) - как ее сделать из обычного test-bench файла или както еще?

 

Для проведения симуляции можно использовать do-файлы, пример

@onerror

{

goto end

}

 

savealltabs

SetActiveLib -work

 

comp -include "$DSN\src\TestBench_top\sfifo_32kx18.vhd"

comp -include "$DSN\src\top.vhd"

comp -include "$DSN\src\TestBench_top\top_TB.vhd"

 

asim TESTBENCH_FOR_top

 

wave

wave -color 200,0,0 clk

wave -color 200,0,0 rst

run 4us

 

label end

endsim

 

Для проведения временной симуляции можно пользоваться темже test-bench, но в do-файле надо компилить файл модели устройства после имплементации:

 

comp "$DSN\implement\TIME_SIM.VHD"

comp -include "$DSN\src\TestBench_top\top_TB.vhd"

comp -include "$DSN\src\TestBench_top\top_TB_tim_cfg.vhd"

asim -sdftyp -AUTO="$DSN\IMPLEMENT\TIME_SIM.SDF" TIMING_FOR_top

 

Где-то так.

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


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

По моему проще в файле testbench добавить формирование своих сигналов, например

 

reset <= '0', '1' after 300 ns;

clk <= not clk after 10 ns;

 

А если требуется моделировать циклы чтения-записи, то создаём отдельный процесс и него добавляем функции read_mem, write_mem. Например

 

pr_main: process

 

procedure read_mem( a: in std_logic_vector( 31 downto 0 ), data: out std_logic_vector( 31 downto 0 ) is

begin

wait until rising_edge( clk );

adr <= a after 1 ns;

rd <= '0' after 1 ns;

wait until rising_edge( clk );

rd <= '1' after 1 ns;

d <= data;

end read_mem;

 

begin -- это тело процесса

read_mem( x"80000000", data_in );

 

read_mem( x"80000001", data_in );

 

end process;

 

Тест создаётся за несколько минут. Далее его можно расширять до необходимого уровня.

Главное преимущество такого подхода по сравнению с заданием сигналов в Wayworm - возможность использования обратных связей, например для проверки состояния готовности.

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


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

По моему проще в файле testbench добавить формирование своих сигналов, например

 

Тест создаётся за несколько минут. Далее его можно расширять до необходимого уровня.

Главное преимущество такого подхода по сравнению с заданием сигналов в Wayworm - возможность использования обратных связей, например для проверки состояния готовности.

 

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

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

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


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

При временной симуляции происходит куча ошибок типа -

# SDF: Error: time_sim.sdf(2203) Instance /uut/u1_u3_n0035_1_147 not found

 

Что я делаю не так?

Вот описание файла out_data.do:

 

SetActiveLib -work

 

comp -include "$DSN\IMPLEMENT\TIME_SIM.vhd"

comp -include "$DSN\src\TestBench\out_data_TB_tim_cfg.vhd"

asim -sdftyp -AUTO="$DSN\IMPLEMENT\TIME_SIM.SDF" TIMING_FOR_out_data

 

wave

wave -noreg CLK_OI

wave -noreg CLKi

wave -noreg PRP1

wave -noreg PRP2

wave -noreg RSTI

wave -noreg VLD

wave -noreg CMD

wave -noreg DIS

wave -noreg ADSC

wave -noreg ADSP

wave -noreg ADV

wave -noreg BW

wave -noreg CS2

wave -noreg CS2INV

wave -noreg EN1

wave -noreg EN2

wave -noreg F1NA

wave -noreg F1NB

wave -noreg GW

wave -noreg LBO

wave -noreg OE

wave -noreg PRPA_O

wave -noreg PRPA_R

wave -noreg PRPB_O

wave -noreg PRPB_R

wave -noreg PUSK_A

wave -noreg PUSK_B

wave -noreg RDDO

wave -noreg T0_1

wave -noreg WE

wave -noreg ZZ

wave -noreg ADRS

wave -noreg DA

wave -noreg DB

wave -noreg TEL

wave -noreg DSR

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


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

При временной симуляции происходит куча ошибок типа -

# SDF: Error: time_sim.sdf(2203) Instance /uut/u1_u3_n0035_1_147 not found

Если это пишелся во время иницилизации моделирования, тогда возможно что sdf подключена не туда.

Зайдите Design -> Settings -> Simulation -> sdf. Там увидите свою sdf-ку и путь, куда она подцеплена.По умолчанию этот путь /UUT. Возможно что этот путь надо изменить на правильный.

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


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

Да ошибки пишутся при иницилизации моделирования, а в настройках SDF

путь просто /UUT - вроде в симуляции он и есть верхний,

value - Average,

load было no, поставил yes - ни чего не изменилось!

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


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

путь просто /UUT - вроде в симуляции он и есть верхний,

А вот это лучше проверить.Возьмите сигнал,который торчит из верхнего уровня временной модели(клок например, или ресет) и засуньте его в waveform. И посмотрите, как его обозвали в столбике иеархии. Наверняка если будет буть типа UUT/, тогда не знаю что дальше делать.А если что-то другое, то это другое надо вписать в путь подключения sdf.

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


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

Все верно UUT!,

хотел подключить проект - но не дается!!!(хотя и сжал до 990 КБайт!) :blink:

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


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

А зачем нужно временное моделирование?

 

Еще раз перепроверить математику Quartus или ISE? Реально файл задержек является порождением математического аппарата соответствующего програмного продукта. Даже если временные модели содержат серьезную ошибку то это не будет заметно при временной симуляции, при том что оконечное устройство может не работать или сбоить.

 

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

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


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

А зачем нужно временное моделирование?

 

Еще раз перепроверить математику Quartus или ISE?

"Бывают дни, когда опустишь руки..." Мне однажды, правда, уже очень давно, временное моделирование помогло найти и осознать свою ошибку. Да, это была ошибка моя, ошибка грубая, но, проведя временное моделирование, я ее нашел и исправил. Приобретя такой опыт, запомнил на всю оставшуюся жизнь, что так делать нельзя.

 

Пусть человек учится...

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


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

Вообще, работая в ISE + ModelSim я часто находил ошибки при симуляции после трассировки кристалла - это очень помогало при разработке!

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


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

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

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

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

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

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

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

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

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

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