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

verilog-modelsim автоматизация тестирования

Кто-нибудь может поделиться примерами автоматизации тестирования модулей verilog?  (имеется ввиду этап симуляции в modelsim)

Реально ли использовать в разработке модулей на verilog подход "test first"?

Реально ли отказаться от визуального контроля в режиме "Wave" в пользу консольного вывода наподобие Test::Simple ?

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


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

Есть целая профессия для этого. Верификация. Верификаторы с изумлением смотрят на то, что разглядывание вейвформ считается тестом, и с неподдельным интересуются, умеет ли смотрящий на картинки читать.

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


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

On 11/12/2022 at 7:37 AM, Вадим Н. said:

Реально ли отказаться от визуального контроля в режиме "Wave" в пользу консольного вывода наподобие Test::Simple ?

На начальном этапе создания RTL все равно придется посмотреть глазками, а затем уже автоматизировать.

Например UART Tx как RTL, UART Rx как эталон. Затем известные передаваемые вектора, напирмер из файла, принимаются тоже в фейл и файлы сравниваются.

И результат сравнения выводится уже как сообщение в консоль или еще как.

Обычно на качественные тесты с покрытием, времени или людей не бывает.

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


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

modelsim, насколько я помню, не годится для верификации - в нем нет рандомизации и (по-моему) асершинов

то есть надо на questаsim переходить.

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

а так подходов полно (я сам не верификатор просто маску нашел   смотрю что они делают) - как встроеных в тулзы, так и сторонних

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


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

угу. значит не избежать думать головой ) и метода test-first не годится хотя бы потому что заточена на какие-то статические вещи "если на входе то, то на выходе должно быть это". А здесь у нас процессы, параллельное выполнение, обратная связь, зависимость от предидущего состояния..

слишком много надо городить чтобы хотя бы входной сигнал сгенерировать. Хотя на простом примере попробовать можно. Подход с файлами, с входными и выходными векторами, по крайней мере на каких то задачах попытаюсь применить. Спасибо!

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


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

1 hour ago, yes said:

modelsim, насколько я помню, не годится для верификации - в нем нет рандомизации и (по-моему) асершинов

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

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


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

3 hours ago, RobFPGA said:

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

когда-то и Verilog-XL всем хватало 🙂 

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

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

 

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


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

7 hours ago, Вадим Н. said:

угу. значит не избежать думать головой ) и метода test-first не годится хотя бы потому что заточена на какие-то статические вещи "если на входе то, то на выходе должно быть это". А здесь у нас процессы, параллельное выполнение, обратная связь, зависимость от предидущего состояния..

слишком много надо городить чтобы хотя бы входной сигнал сгенерировать. Хотя на простом примере попробовать можно. Подход с файлами, с входными и выходными векторами, по крайней мере на каких то задачах попытаюсь применить. Спасибо!

Нет. По всем вашим предположениям, кроме думать головой. Ну или, наоборот, - вы правы во всём, но это если не думать головой

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

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


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

В качестве примера такого теста, посмотрите корку EthMAC 10/100 от Игоря Мохора на опенкоресах, да, она очень старая, но зато написана в plain Verilog, с планами тестирования, автоматической верификацией, переборкой тестов и т.д. 

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


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

народ, спасибо за проявленное участие к этой драме.


Да - как верно предположили - проекты у меня не сложные. Пару лет назад слова ПЛИСка в моём лексиконе вообще не было.

Но есть задача, и закон диалектики (или чего там) о переходе количества в качество уже вот-вот прилетит по башке.

 

des00, спасибо за наводку, уже вытянул с github-а.


А вообще захотелось супер быстро изготовить модуль. Уже далеко не десятый, так что надо прям по щелчку. Типа, сначала тест. Он и будет спецификацией. А потом уже модуль. Тест проходит, следовательно удовлетворяет спецификации - и фсё! - Понятно, в общем...

Я ещё может сюда его закину, если получится быстро что-нибудь сгородить.
 

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


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

В 15.11.2022 в 09:40, Вадим Н. сказал:

народ, спасибо за проявленное участие к этой драме.

Это не драма, а нормальный инженерный подход. Все когда-то такими были, и нам же растить тех, кто пойдёт вслед за нами (я не слишком пафосно сказал?).
ЕМНИП, мы уже общались в личке? Напишите ещё раз, и мы решим эту вашу и не драму и не проблему даже ASAP.

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


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

по поводу ethermac:

Из всего что там есть, модуль wb_bus_mon.v вроде бы понял как работает. Он прикручен к "шине" в тестбенче. Пишет в лог все противоестественные сочетания значений на шине. Сам лог, вроде  бы, дальше не анализируется.

У меня в проекте ни каких шин таких нет, хотя в гораздо меньшем объёме тоже можно прикрутить сбоку к выходным сигналам такой монитор. Сейчас я ради этого в modelsim в wave.do добавляю сигнал:

quietly virtual function -install /testbench/uut -env /testbench/uut { (k[1] && k[4]) || (k[2] && k[3])} comm

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

Такое можно в рамках целого проекта поддерживать, но не для каждого модуля. А всё-таки каждый модуль тоже нуждается в формальной проверке.

Мне кажется, в Quartus, что что-то подобное предпологается. Вот в настройках проекта / EDA Tool Settings / Simulation / Test Benches... / Edit / Run simulation until all vector stimuli are used 

Vector stimuli это что латынь? Что имели ввиду авторы? Кто нибудь видел tutorial с данным подходом?

Я только нашёл что Quartus под это дело генерирует шаблон:

Spoiler
// Verilog Test Bench template for design : adder_sats
// 
// Simulation tool : ModelSim-Altera (Verilog)
// 

`timescale 1 ns/ 1 ps
module adder_sats_vlg_tst();
// constants                                           
// general purpose registers
reg eachvec;
// test vector input registers
reg [7:0] adc_data;
reg adc_data_valid;
reg areset;
reg clk;
reg set;
// wires                                               
wire [7:0]  abs;
wire sgn;
wire [20:0]  sum;
wire [11:0]  tot;
wire valid;

// assign statements (if any)                          
adder_sats i1 (
// port map - connection between master ports and signals/registers   
	.adc_data(adc_data),
	.adc_data_valid(adc_data_valid),
	.areset(areset),
	.clk(clk),
	.abs(abs),
	.sgn(sgn),
	.sum(sum),
	.tot(tot),
	.valid(valid),
	.set(set)
);
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
                                                       
// --> end                                             
$display("Running testbench");                       
end                                                    
always                                                 
// optional sensitivity list                           
// @(event1 or event2 or .... eventn)                  
begin                                                  
// code executes for every event on sensitivity list   
// insert code here --> begin                          
                                                       
@eachvec;                                              
// --> end                                             
end                                                    
endmodule

 

в этом шаблоне имеется регистр eachvec. Видимо, дальше всё супер-просто, но где пример )) кто нибудь видел пример от intel/altera/mentor_graphics, объясняющий концепцию? 

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


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

эмм, может быть вам литературу по методологии верификации почитать, если уж вам настолько это надо?

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


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

вообще то, мне это обсуждение помогло, (за что я очень признателен всем причастным)

Testbench, вот сейчас рисую. Он выглядит более структурировано чем предидущие. И главное, в нём прописано, что собственно хотелось бы проверить на каждом этапе. Более осознанный подход )) но проверять предполагается по-прежнему визуально.

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


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

Это и есть верификация, и для этого надо пользоваться несинтезируемыми конструкциями Verilog для упрощения работы. Более того, есть SystemVerilog

 

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

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


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

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

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

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

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

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

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

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

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

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