Jump to content
    

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

1 hour ago, yes said:

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

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

Share this post


Link to post
Share on other sites

3 hours ago, RobFPGA said:

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

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

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

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

 

Share this post


Link to post
Share on other sites

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

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

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

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

Edited by one_eight_seven

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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


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

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

 

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


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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

по поводу 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, объясняющий концепцию? 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...