Forums » Project Forum »
Каталог patterns
Added by Igor Melnichenko about 10 years ago
Для хранения шаблонов тестбенчей я создал каталог patterns\testbench.
Предлагаю обсудить.
Replies (12)
RE: Каталог patterns - Added by Sergey Smolov about 10 years ago
Не очень понятно, какова роль шаблонов в процессе генерации тестбенчей и почему их нельзя генерировать on-the-fly?
RE: Каталог patterns - Added by Igor Melnichenko about 10 years ago
Файловое представление более наглядно. Также в него можно вносить изменения без перекомпиляции кода.
RE: Каталог patterns - Added by Sergey Smolov about 10 years ago
А что по поводу первой части вопроса:
Сергей Смолов wrote:
Не очень понятно, какова роль шаблонов в процессе генерации тестбенчей и ...
?
RE: Каталог patterns - Added by Igor Melnichenko about 10 years ago
Хранение каркаса, на основе которого генерируются тестбенчи для конкретных модулей.
Планируется, что в этой папке будет два файла: один — для VHDL, другой — для Verilog'а.
RE: Каталог patterns - Added by Sergey Smolov about 10 years ago
По поводу размещения: предлагаю пока шаблоны перенести в src/main/templates/vhdl и src/main/templates/verilog соответственно для VHDL-тестбенчей и Verilog-тестбенчей.
Текстовый формат описания тестов также кажется не самым удобным решением. Что мы будем делать, если потребуется генерировать тесты иной структуры, нежели описана сейчас? Например, тесты для подсистем? Постоянно новые шаблоны в текстовом виде класть в инструмент? А если тесты потребуется делать длинными?
Кроме того, файлы с расширениями "vhd" и "v" - это, все-таки, файлы HDL-описаний. То, что в них кладется сейчас, попросту не синтезабельно. Я считаю, что для описания шаблонов нужно использовать более удобные форматы, например, XML. Их можно, к тому же, обрабатывать автоматически и генерировать синтезабельный HDL в динамике.
RE: Каталог patterns - Added by Igor Melnichenko about 10 years ago
По поводу перемещения не возражаю.
По поводу формата: с точки зрения текущего механизма генерации тестбенчей текущий формат шаблонов как раз наиболее удобен, так как их преобразования сводится к простой замене заполнителей на реальный код. Переход к XML усложнит процесс и сделает шаблоны менее наглядными (глядя на XML, тяжелее будет понять, как будет выглядеть итоговый тестбенч).
По поводу тестов иной структуры: хотелось бы увидеть пример таких тестов, тогда смогу прокомментировать.
RE: Каталог patterns - Added by Sergey Smolov about 10 years ago
Igor Melnichenko wrote:
По поводу перемещения не возражаю.
Ок.
По поводу формата: с точки зрения текущего механизма генерации тестбенчей текущий формат шаблонов как раз наиболее удобен, так как их преобразования сводится к простой замене заполнителей на реальный код. Переход к XML усложнит процесс и сделает шаблоны менее наглядными (глядя на XML, тяжелее будет понять, как будет выглядеть итоговый тестбенч).
Но что мешает сгенерировать по шаблону синтезируемый тестбенч и на него полюбоваться?
Текстовый формат нагляден, не спорю. Мне в текущей реализации не нравятся две вещи:
1) Шаблоны тестов имеют расширение HDL - это плохо, ибо вносит путаницу.
2) Содержимое шаблонов непонятно, комментарии (хотя бы даже в духе "This is an automatically generated testbench for...") отсутствуют. Что, например, в тесте HDL-описания, делает вот это:
[code]
procedure extract_next_value(s: inout string; value_string: out string) is
variable i, j: integer;
begin
i := 1;
j := 1;
value_string := (others => '/');
while (s(i) /= ' ') loop
if (s(i) /= '/') then
value_string(j) := s(i);
j := j + 1;
end if;
i := i + 1;
end loop;
s(i) := '/';
end extract_next_value;
[/code]
Здорово смахивает на попытку загнать в HDL то, что должно делаться на более высоком уровне (в том же генераторе тестов, как компоненте Retrascope). Зачем в тесте парсить текстовую строку?
По поводу тестов иной структуры: хотелось бы увидеть пример таких тестов, тогда смогу прокомментировать.
src/test/vhdl/hc11/testbenches/bset.vhd
src/test/vhdl/hc11/testbenches/daa.vhd
RE: Каталог patterns - Added by Sergey Smolov about 10 years ago
Я не настаиваю на срочном изменении формата шаблонов, но считаю, что в будущем это может понадобиться. Текстовый формат для описания, вообще говоря, произвольных тестов неудобен и трудоемок.
RE: Каталог patterns - Added by Igor Melnichenko about 10 years ago
Комментарии добавлю, расширение сменю.
Приведённый код добавлен в тестбенч, потому что он должен считывать тест, записанный в формате DECIDER'а (в котором значения входов записываются в одну строку через пробел). Более красивого решения по преобразованию таких тестов в сигналы я не нашёл.
Сергей Смолов wrote:
Я не настаиваю на срочном изменении формата шаблонов, но считаю, что в будущем это может понадобиться. Текстовый формат для описания, вообще говоря, произвольных тестов неудобен и трудоемок.
Тогда предлагаю пока оставить всё как есть и вернуться к этому вопросу, когда этот формат окажется непригодным для решения текущих задач. В общем, я его и не задумывал как универсальный и постоянный.
RE: Каталог patterns - Added by Sergey Smolov about 10 years ago
Igor Melnichenko wrote:
Комментарии добавлю, расширение сменю.
Приведённый код добавлен в тестбенч, потому что он должен считывать тест, записанный в формате DECIDER'а (в котором значения входов записываются в одну строку через пробел). Более красивого решения по преобразованию таких тестов в сигналы я не нашёл.
Мне кажется, что парсить DECIDER-тест - это не задача HDL-шаблона. Для этого в проекте должен существовать специально обученный DeciderTestParser, или что-то вроде того.
Поясни, пожалуйста, по шагам схему генерации теста с использованием DECIDER-теста, тогда можно будет что-то придумать.
RE: Каталог patterns - Added by Igor Melnichenko about 10 years ago
Я без изменений заимствовал DECIDER'овскую структуру тестбенча, включающую два файла: файл .tst, хранящий тестовые последовательности, и файл .vhd, в котором эти последовательности считываются и подаются на вход тестируемого устройства.
Собственно класс Test из Retrascope преобразуется в .tst, такого формата (ниже приведена одна тестовая последовательность из DECIDER'овского примера):
X X X X 1 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
-3 6 1 1 0 1 X X X X X X X X X X X X X X X X X X X X 5 1 0 0 1 0 0 1 0 1 0 0 0 0 0 1 0 0 X X X X X X X X X
X X X X 0 X X X X X 0 0 0 X X X X X X X X X X X X X 3 0 0 X 1 0 1 0 0 0 0 X 0 0 0 1 0 0 X X X X X X X X X
X X X X 0 X X X X X X X X X 0 X X X X X X X X X X X 0 0 0 X 0 0 X 0 0 0 0 X 1 0 0 0 0 0 X X X X X X X X 0
X X X X 0 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X 0 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
В их тестбенче тест считывается без использования процедур путём последовательного повторения следующего куска кода для каждой входной переменной (переменная test_pattern - это строка, считанная из файла):
-- data_in1 value
m:= 0;
while (test_pattern(n) /= ' ') loop
m:= m+1;
value_string(m) := test_pattern(n);
n:= n+1;
end loop;
if value_string(1) = 'X' then
w_data_in1 <= (others => 'X');
else
write(tmp_l_data_in1, value_string(1 to m));
read (tmp_l_data_in1, data_in1_r);
w_data_in1 <= std_logic_vector(to_signed(data_in1_r,4));
end if;
n:= n + 1;
RE: Каталог patterns - Added by Sergey Smolov about 10 years ago
Предлагаю функции чтения выделить в отдельный неизменяемый "кусок" шаблонов и подключать его при генерации тестбенчей (а-ля include).