Open-Source Projects: Issueshttps://forge.ispras.ru/https://forge.ispras.ru/favicon.ico?16490126692019-11-13T12:01:33ZOpen-Source Projects
Redmine Verilog Translator - Bug #9915 (Closed): "Cycle inclusion has been detected in fine <filename>" e...https://forge.ispras.ru/issues/99152019-11-13T12:01:33ZSergey Smolovsmolov@ispras.ru
<p>The tool reports "Cycle inclusion has been detected in fine <filename>" error for the case when "a.v" and "b.v" modules include "c.v" module.</p>
<p>To reproduce the bug, checkout to <a class="changeset" title="hdl-benchmark submodule update Signed-off-by: chudnovmaxim <chudnov@ispras.ru>" href="https://forge.ispras.ru/projects/veritrans/repository/veritrans/revisions/5ca788cdbc460bf393ccdef4b9cd6451f71acdd0">5ca788cd</a> commit and run <strong>ru.ispras.verilog.parser.VerilogQuipTestCase</strong>. It should be fail-free, but it is not.</p>
<p>IMPORTANT: please run all the project tests before push and compare your results with Jenkins!</p> Retrascope - Task #9911 (Closed): merge "*/sample/*TestCase" Java test cases https://forge.ispras.ru/issues/99112019-11-12T08:52:05ZSergey Smolovsmolov@ispras.ru
<p>There are separate "*/sample/*TestCase" Java classes in the project. They contain duplicated code and should be merged the same way as benchmark-related test case collections at Verilog Translator project. See <strong>ru.ispras.verilog.parser.VerilogQuipTestCase</strong> for example.</p> QEMU4V - Bug #9288 (Closed): /target/mips/translate.c:2617:9: error: ‘else’ without a previous ‘if’https://forge.ispras.ru/issues/92882018-09-28T08:44:54ZSergey Smolovsmolov@ispras.ru
<p>Compilation error:</p>
<pre>
/srv/****/workspace/QEMU4V/target/mips/translate.c: In function ‘gen_logic_imm’:
/srv/****/workspace/QEMU4V/target/mips/translate.c:2617:9: error: ‘else’ without a previous ‘if’
else {
^~~~
/srv/****/workspace/QEMU4V/rules.mak:69: recipe for target 'target/mips/translate.o' failed
make[1]: *** [target/mips/translate.o] Error 1
Makefile:481: recipe for target 'subdir-mips-softmmu' failed
make: *** [subdir-mips-softmmu] Error 2
:make FAILED
</pre> Verilog Translator - Bug #8990 (Closed): vcegar-benchmarks/pi_bus/main_1.v: incorrect translation...https://forge.ispras.ru/issues/89902018-06-22T15:41:11ZSergey Smolovsmolov@ispras.ru
<p>The following Verilog code fragment:<br /><pre><code class="text syntaxhl" data-language="text">`MST_ADDR_DATA:
begin
if (read_tmp == 1)
mst_data_tmp = DIN;
//else
// mst_data_tmp = mst_datain;
if ((ACK == `ERR)||(TOUT == 1))
begin
state = `MST_IDLE;
st_mst_abort_tmp = 1;
lock_tmp = 0;
req_tmp = 0;
addr_tmp = {30{1'b0}};
opc_tmp = 4'b0000;
read_tmp = 0;
end
else if (ACK == `RTR)
state = `MST_RTRCT;
else if (((ACK==`RDM)||(ACK==`RDY))&& (lock_tmp == 1))
begin
req_tmp = 0;
addr_tmp = mst_addr;
opc_tmp = (mst_size==1)? 4'b0001:4'b0000;
read_tmp = (mst_rd == 1)? 1 : 0;
lock_tmp = mst_lock;
state = `MST_ADDR_DATA;
end
else if (ACK==`WAT)
begin
state = `MST_ADDR_DATA;
end
else
begin
req_tmp = 0;
addr_tmp = {30{1'b0}};
opc_tmp = 4'b0000;
read_tmp = 0;
lock_tmp = 0;
state = `MST_DATA;
end
end
</code></pre></p>
<p>is incorrectly translated by VeriTrans into the following:<br /><pre><code class="text syntaxhl" data-language="text">100:
begin
if(((acknowledge == 1) || (timeout == 1)))
begin
state2 = 000;
M_cnt_1.st_mst_abort_tmp = 1;
M_cnt_1.lock_tmp = 0;
M_cnt_1.req_tmp = 0;
M_cnt_1.addr_tmp = 000000000000000000000000000000;
M_cnt_1.opc_tmp = 0000;
M_cnt_1.read_tmp = 0;
end
else
if((acknowledge == 1))
state2 = 101;
else
if((acknowledge == 1))
begin
if((M_cnt_1.read_tmp == 1))
mst_data_tmp2 = data_slave2master;
else
begin
end
end
M_cnt_1.req_tmp = 0;
state2 = 100;
M_cnt_1.addr_tmp = 000000000000000000000000000000;
M_cnt_1.opc_tmp = 0000;
M_cnt_1.read_tmp = 0;
M_cnt_1.lock_tmp = 0;
end
else
if(((M_cnt_1.mst_rd == 1) || (M_cnt_1.mst_wr == 1)))
begin
M_cnt_1.req_tmp = 1;
state2 = 001;
end
else
begin
M_cnt_1.req_tmp = 0;
M_cnt_1.st_mst_abort_tmp = 0;
M_cnt_1.lock_tmp = 0;
M_cnt_1.addr_tmp = 000000000000000000000000000000;
M_cnt_1.opc_tmp = 0000;
M_cnt_1.read_tmp = 0;
state2 = 000;
end
end
end
end
end
end
</code></pre></p>
<p>The erroneous point is at two nested "acknowledge == 1" switch statements which are not appear in the original module. The module code is attached; also it can be found in the <em>Retrascope MC Benchmark</em> project test suite.</p> Verilog Translator - Bug #8957 (Closed): wrong datatype for arrayshttps://forge.ispras.ru/issues/89572018-06-15T12:14:37ZSergey Smolovsmolov@ispras.ru
<p>The following code is interpreted as 2-bit size bitvector, than an array:<br /><pre><code class="text syntaxhl" data-language="text">reg [1:0] memory[0:31];
</code></pre></p> Verilog Translator - Feature #8874 (Closed): mapping from instance variables to their code entrieshttps://forge.ispras.ru/issues/88742018-05-15T12:19:48ZSergey Smolovsmolov@ispras.ru
<p>Those variables that have "flattened" hierarchical names (that are built on the base of instance name) should be somehow linked with their code entries.<br />A design-level map would be very helpful.</p> Retrascope - Task #6367 (Closed): Fortress expressions printing in an SMV formathttps://forge.ispras.ru/issues/63672015-10-25T18:19:41ZSergey Smolovsmolov@ispras.ru
<p>We need utility methods for Fortress expressions printing in an SMV format.</p>
<p>The most wanted use case is:</p>
<p>we have a collection of Fortress expressions: <code>e[1]</code>, <code>e[2]</code>, ... , <code>e[n]</code>;<br />we want to produce and SMV file of the following structure (it is supposed to be so):</p>
<pre>
declarations(e[1])
...
declarations(e[n])
formula(e[1])
...
formula(e[n])
</pre>
<p>where i = 1, ... , n; <code>declarations(e[i])</code> is a list of variable declarations that are used in <code>e[i]</code> expression; <code>formula(e[i])</code> is an SMV equivalent for <code>e[i]</code> expression.</p> Verilog Translator - Bug #6363 (Closed): src/test/verilog/fifo0/mem_2p.v: AbstractMethodErrorhttps://forge.ispras.ru/issues/63632015-10-21T15:38:50ZSergey Smolovsmolov@ispras.ru
<p>Exception in thread "main" java.lang.AbstractMethodError: ru.ispras.verilog.parser.calculator.StandardIntegerOperations$12.validTypes([Lru/ispras/fortress/data/Data;)Z<br /> at ru.ispras.fortress.calculator.OperationGroup.isSupported(OperationGroup.java:109)<br /> at ru.ispras.fortress.transformer.OperationReducer.isSupported(OperationReducer.java:148)<br /> at ru.ispras.fortress.transformer.OperationReducer.calculate(OperationReducer.java:195)<br /> at ru.ispras.fortress.transformer.OperationReducer.reduce(OperationReducer.java:76)<br /> at ru.ispras.fortress.transformer.Transformer.reduce(Transformer.java:73)<br /> at ru.ispras.fortress.transformer.OperationReducer.analyzeOperands(OperationReducer.java:112)<br /> at ru.ispras.fortress.transformer.OperationReducer.<init>(OperationReducer.java:65)<br /> at ru.ispras.fortress.transformer.Transformer.reduce(Transformer.java:70)<br /> at ru.ispras.verilog.parser.model.basis.Expression.reduce(Unknown Source)<br /> at ru.ispras.verilog.parser.model.basis.Expression.reduce(Unknown Source)<br /> at ru.ispras.verilog.parser.processor.VerilogGenerateProcessor.reduce(Unknown Source)<br /> at ru.ispras.verilog.parser.processor.VerilogGenerateProcessor.reduce(Unknown Source)<br /> at ru.ispras.verilog.parser.processor.VerilogGenerateProcessor.reduce(Unknown Source)<br /> at ru.ispras.verilog.parser.processor.VerilogGenerateProcessor.onDeclarationBegin(Unknown Source)<br /> at ru.ispras.verilog.parser.walker.VerilogNodeVisitor$13.onBegin(Unknown Source)<br /> at ru.ispras.verilog.parser.walker.VerilogNodeVisitor.onBegin(Unknown Source)<br /> at ru.ispras.verilog.parser.core.TreeWalker.onBegin(Unknown Source)<br /> at ru.ispras.verilog.parser.core.TreeWalker.start(Unknown Source)<br /> at ru.ispras.verilog.parser.VerilogBackend.start(Unknown Source)<br /> at ru.ispras.verilog.parser.VerilogBackends.start(Unknown Source)<br /> at ru.ispras.verilog.parser.VerilogTranslator.start(Unknown Source)</p> Verilog Translator - Bug #6355 (Closed): src/test/verilog/fifo/fifo_testbench.v: NullPointerExcep...https://forge.ispras.ru/issues/63552015-10-16T11:24:13ZSergey Smolovsmolov@ispras.ru
<p>While running VerilogPrinter on src/test/verilog/fifo/fifo_testbench.v the following error appears:<br /><pre>
Including file 'src/test/verilog/fifo/fifo_testbench.v'
java.lang.NullPointerException
at ru.ispras.fortress.data.types.bitvector.BitVector.notNullCheck(BitVector.java:772)
at ru.ispras.fortress.data.types.bitvector.BitVector.valueOf(BitVector.java:535)
at ru.ispras.verilog.parser.model.basis.Literal.getBitVector(Literal.java:222)
at ru.ispras.verilog.parser.model.basis.Literal.getValue(Literal.java:356)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_primary(VerilogTreeBuilder.java:7296)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_expression(VerilogTreeBuilder.java:7146)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_task_statement(VerilogTreeBuilder.java:5031)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_statement(VerilogTreeBuilder.java:4633)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_block_statement(VerilogTreeBuilder.java:6057)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_statement(VerilogTreeBuilder.java:4737)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_process(VerilogTreeBuilder.java:3600)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_item(VerilogTreeBuilder.java:958)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_module(VerilogTreeBuilder.java:634)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.ast_root(VerilogTreeBuilder.java:440)
at ru.ispras.verilog.parser.grammar.VerilogTreeBuilder.startRule(VerilogTreeBuilder.java:382)
at ru.ispras.verilog.parser.VerilogFrontend.startBuilder(VerilogFrontend.java:216)
at ru.ispras.verilog.parser.VerilogFrontend.startBuilder(VerilogFrontend.java:220)
at ru.ispras.verilog.parser.VerilogFrontend.start(VerilogFrontend.java:231)
at ru.ispras.verilog.parser.VerilogFrontend.start(VerilogFrontend.java:235)
at ru.ispras.verilog.parser.VerilogTranslator.start(VerilogTranslator.java:120)
at ru.ispras.verilog.parser.sample.VerilogPrinter.main(VerilogPrinter.java:46)
</pre></p> Retrascope - Bug #5719 (Closed): EFSM Test Generator hangs on b11https://forge.ispras.ru/issues/57192015-03-18T07:20:55ZSergey Smolovsmolov@ispras.ru
<p>The EFSM Test Generator that is run at <strong>EfsmTestGeneratorVhdlTestCase</strong> hangs on b11 VHDL design (or this testcase continues more than <strong>8 hours</strong> - it is very suspicious).</p>
<p>The log fragment is attached below.</p> Retrascope - Bug #5680 (Closed): [efsm][generator][test][fate] DirectedFateGenerator.generateSequ...https://forge.ispras.ru/issues/56802015-03-04T08:01:26ZSergey Smolovsmolov@ispras.ru
<p>The error appears upon b07 design processing.</p>
<p>The stack trace:</p>
<p>[stack]<br />java.lang.NullPointerException<br /> at ru.ispras.retrascope.engine.efsm.generator.test.fate.DirectedFateGenerator.generateSequence(DirectedFateGenerator.java:226)<br /> at ru.ispras.retrascope.engine.efsm.generator.test.fate.DirectedFateGenerator.getNextSequenceIterator(DirectedFateGenerator.java:163)<br /> at ru.ispras.retrascope.engine.efsm.generator.test.fate.EfsmFateTestGenerator.start(EfsmFateTestGenerator.java:315)<br /> at ru.ispras.retrascope.engine.efsm.generator.test.fate.EfsmFateTestGenerator.start(EfsmFateTestGenerator.java:52)<br /> at ru.ispras.retrascope.basis.Engine.start(Engine.java:200)<br /> at ru.ispras.retrascope.basis.ToolChain.start(ToolChain.java:106)<br /> at ru.ispras.retrascope.basis.Engine.start(Engine.java:200)<br /> at ru.ispras.retrascope.Retrascope$Run.start(Retrascope.java:116)<br /> at ru.ispras.retrascope.Retrascope.main(Retrascope.java:333)<br /> at ru.ispras.retrascope.Retrascope.main(Retrascope.java:355)<br /> at ru.ispras.retrascope.util.VhdlUtilTest.runRetrascope(VhdlUtilTest.java:148)<br /> at ru.ispras.retrascope.util.VhdlUtilTest.runVhdl(VhdlUtilTest.java:73)<br /> at ru.ispras.retrascope.util.HdlUtilTest.runVhdl(HdlUtilTest.java:94)<br /> at ru.ispras.retrascope.engine.efsm.generator.test.fate.EfsmFateTestGeneratorVhdlTestCase.generate(EfsmFateTestGeneratorVhdlTestCase.java:32)<br />[/stack]</p>
<p>Full log is attached below.</p> Verilog Translator - Bug #5567 (Closed): VerilogStaticChecker.ExpressionVisitor is not abstract a...https://forge.ispras.ru/issues/55672015-01-22T11:55:30ZSergey Smolovsmolov@ispras.ru
<p>$ ant<br />Buildfile: /home/ssedai/projects/veritrans.svn/veritrans/build.xml</p>
<p>init:</p>
<p>parser:<br /> [echo] antlr VerilogLexer.g<br /> [echo] antlr VerilogParser.g<br /> [echo] antlr VerilogTreeBuilder.g</p>
<p>build:<br /> [javac] Compiling 50 source files to /home/ssedai/projects/veritrans.svn/veritrans/bin/main<br /> [javac] /home/ssedai/projects/veritrans.svn/veritrans/src/main/java/ru/ispras/verilog/parser/processor/VerilogStaticChecker.java:68: error: VerilogStaticChecker.ExpressionVisitor is not abstract and does not override abstract method getOperandOrder() in ExprTreeVisitor<br /> [javac] private final class ExpressionVisitor implements ExprTreeVisitor {<br /> [javac] ^<br /> [javac] 1 error</p>
<p>BUILD FAILED<br />/home/ssedai/projects/veritrans.svn/veritrans/build.xml:91: Compile failed; see the compiler error output for details.</p> Retrascope - Task #5258 (Closed): [basis] Обработка циклических зависимостей разных Enginehttps://forge.ispras.ru/issues/52582014-09-09T05:58:43ZSergey Smolovsmolov@ispras.ru
<p>В Retrascope стали появляться Engine, имеющие циклические зависимости по Entity.<br />Это означает, что можно найти пару Engine, таких, что output type одного является input type для другого и обратно.</p>
<p>Запуск инструмента, в котором зарегистрирована хотя бы одна пара таких Engine, приводит к ошибке:</p>
<p><code>java.lang.IllegalArgumentException: Addition of engine 'xml-test-parser' causes a cycle dependency</code></p>
<p>Необходимо корректно разрешать такие зависимости при построении последовательности вызовов Engine.<br />Возможный вариант такой: строить кратчайший путь между двумя вершинами в графе зависимостей Engine (проходить циклы не более чем один раз).</p> Retrascope - Task #5249 (Closed): [basis] Настройка Retrascope для работы с SMT-решателямиhttps://forge.ispras.ru/issues/52492014-09-04T10:32:33ZSergey Smolovsmolov@ispras.ru
<p>Для корректного взаимодействия с SMT-решателями через библиотеку Fortress необходимо в инструменте Retrascope определять путь к исполняемому файлу (Environment.setSolverPath(String path)).</p>
<p>Такую настройку нужно однократно проделывать при каждом запуске Retrascope.</p> С++TESK Development Environment - Task #3756 (New): Генерация C++ кода для модели сообщенийhttps://forge.ispras.ru/issues/37562012-12-05T15:32:06ZSergey Smolovsmolov@ispras.ru
<p>Небходимо разработать метод генерации C++ кода для модели сообщений.</p>
<p>На вход методу подается несколько объектов класса Adapter. В виде какой структуры данных эти "несколько" будут подаваться - на твое усмотрение. Например, можно взять ту же, что использовалась<br />в инструменте signalsGrouper для хранения набора накликанных "интерфейсов".<br />Т.к. все адаптеры между собой различны и полных совпадений между ними быть не должно, то из самых общих соображений могу предложить использовать java.util.Set.</p>
<p>Суть метода такова: проходим по всем адаптерам и извлекаем из них объекты MessageType и помещаем их в промежуточное хранилище (возможно, тот же Set). При этом необходимо проверять, что в хранилище ещё нет такого же типа сообщений (а при разработке адаптеров для разных интерфейсов вполне реально, что они будут использовать сообщения одного типа)- делать такую проверку лучше всего посредством разработки метода сравнения equals в классе MessageType.</p>
<p><strong>Шаблон для *.h-файла</strong></p>
<pre>
#pragma once
#include <hw/message.hpp>
namespace имя_пространства_имен {
</pre> Про извлечение название пространства имен смотри <a class="issue tracker-2 status-1 priority-4 priority-default" title="Task: namespace name for test system prototypes (New)" href="https://forge.ispras.ru/issues/3755">#3755</a>
<p>Для каждого типа сообщений далее генерируем следующий код:<br /><pre>
MESSAGE(имя_типа_сообщений)
{
public:
имя_типа_сообщений();
virtual ~имя_типа_сообщений();
SUPPORT_CLONE(имя_типа_сообщений);
</pre></p>
<p>Далее для всех полей сообщения данного типа генерируем вызов соответствующего макроса. Макросы бывают следующие:<br />1) Если размер поля больше 64 бит, то нужно использовать<br /> - CPPTESK_DECLARE_FIELD_ARRAY(имя_поля, размер_массива, размер_поля); - если маска не задана<br /> - CPPTESK_DECLARE_MASKED_FIELD_ARRAY(имя_поля, размер_массива, размер_поля, маска_поля); - если маска задана</p>
<p>В силу особенностей реализации параметр размер_поля делаем равным 64, а параметр размер_массива делаем таким, чтобы удовлетворялось следующее неравенство:</p>
<p>capacity <= размер_поля*размер_массива</p>
<p>где capacity - одноименное поле соответствующего экземпляра класса MessageField.</p>
<p>2) Если размер поля меньше, или равен 64 бит, то нужно использовать<br /> - CPPTESK_DECLARE_FIELD(имя_поля, размер_поля);<br /> - CPPTESK_DECLARE_MASKED_FIELD(имя_поля, размер_поля, маска_поля);<br /> - CPPTESK_DECLARE_BIT(имя_поля); - если размер поля равен 1</p>
<pre>
};
}
</pre>
<p>Заголовочный файл называем имя_пространства_имен_msg.h</p>
<p><strong>Шаблон для .cpp файла</strong></p>
<pre>
include <имя_пространства_имен_msg.h>
namespace имя_пространства_имен {
</pre>
<p>Для каждого из типов сообщений генерируем следующий код конструктора и деструктора</p>
<pre>
имя_типа_сообщений::имя_типа_сообщений(void)
{
</pre>
<p>Для всех полей сообщения, у которых incomparable равно false (см. <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Task: флаг incomparable в полях сообщений (Closed)" href="https://forge.ispras.ru/issues/3754">#3754</a>):<br /><pre>
ADD_FIELD(имя_типа_сообщений::имя_поля);
</pre></p>
<p>Для всех полей сообщения, у которых incomparable равно true (см. <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Task: флаг incomparable в полях сообщений (Closed)" href="https://forge.ispras.ru/issues/3754">#3754</a>):<br /><pre>
ADD_INCOMPARABLE_FIELD(имя_типа_сообщений::имя_поля);
</pre></p>
<p>Рандомизируем значения полей - только если оно соответствует входному интерфейсу!<br /><pre>
RANDOMIZE_MESSAGE(*this);
}
имя_типа_сообщений::~имя_типа_сообщений(void) {}
}
</pre></p>
<p>Рекомендация - данную задачу стоить решать посредством разработки нескольких относительно простых методов в соответствующих классах, а не одного сложного.</p>