Project

General

Profile

Actions

Bug #9055

closed

Texas97IFetchVerilogPrinterTestCase: java.lang.IndexOutOfBoundsException: 4294967283 is out of bounds.

Added by Sergey Smolov almost 6 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
High
Target version:
Start date:
07/02/2018
Due date:
% Done:

0%

Estimated time:
Detected in build:
master
Platform:
Published in build:

Description

Тест компонента VerilogPrinter под названием Texas97IFetchVerilogPrinterTestCase для описания IFetch.v (проект Retrascope MC Benchmark) падает со следующим стеком ошибки:

java.lang.IndexOutOfBoundsException: 4294967283 is out of bounds.
at ru.ispras.fortress.expression.NodeOperation.getParams(NodeOperation.java:273)
at ru.ispras.fortress.expression.NodeOperation.getDataType(NodeOperation.java:196)
at ru.ispras.fortress.expression.Node.isType(Node.java:177)
at ru.ispras.fortress.expression.ExprUtils.isType(ExprUtils.java:84)
at ru.ispras.verilog.parser.processor.VerilogExprTransformer$3.apply(VerilogExprTransformer.java:215)
at ru.ispras.fortress.transformer.NodeTransformer.applyRule(NodeTransformer.java:169)
at ru.ispras.fortress.transformer.NodeTransformer.onOperationEnd(NodeTransformer.java:229)
at ru.ispras.fortress.expression.ExprTreeWalker.visitOperation(ExprTreeWalker.java:173)
at ru.ispras.fortress.expression.ExprTreeWalker.visitNode(ExprTreeWalker.java:123)
at ru.ispras.fortress.expression.ExprTreeWalker.visitOperation(ExprTreeWalker.java:160)
at ru.ispras.fortress.expression.ExprTreeWalker.visitNode(ExprTreeWalker.java:123)
at ru.ispras.fortress.expression.ExprTreeWalker.visit(ExprTreeWalker.java:93)
at ru.ispras.fortress.transformer.NodeTransformer.walk(NodeTransformer.java:54)
at ru.ispras.fortress.transformer.Transformer.transform(Transformer.java:230)
at ru.ispras.verilog.parser.processor.VerilogExprTransformer.transform(VerilogExprTransformer.java:62)
at ru.ispras.verilog.parser.elaborator.VerilogTransformer.transform(VerilogTransformer.java:180)
at ru.ispras.verilog.parser.elaborator.VerilogTransformer.transform(VerilogTransformer.java:191)
at ru.ispras.verilog.parser.elaborator.VerilogTransformer.transform(VerilogTransformer.java:210)
at ru.ispras.verilog.parser.elaborator.VerilogTransformer.onAssignStatementBegin(VerilogTransformer.java:83)
at ru.ispras.verilog.parser.walker.VerilogNodeVisitor$3.onBegin(VerilogNodeVisitor.java:265)
at ru.ispras.verilog.parser.walker.VerilogNodeVisitor.onBegin(VerilogNodeVisitor.java:700)
at ru.ispras.verilog.parser.core.TreeWalker.onBegin(TreeWalker.java:100)
at ru.ispras.verilog.parser.core.TreeWalker.start(TreeWalker.java:79)
at ru.ispras.verilog.parser.elaborator.VerilogTransformer.run(VerilogTransformer.java:54)
at ru.ispras.verilog.parser.elaborator.VerilogRangeTransformer.transform(VerilogRangeTransformer.java:56)
at ru.ispras.verilog.parser.elaborator.VerilogInstantiator.instantiate(VerilogInstantiator.java:108)
at ru.ispras.verilog.parser.elaborator.VerilogInstantiator.instantiateProcess(VerilogInstantiator.java:84)
at ru.ispras.verilog.parser.elaborator.VerilogDesign$1$1.next(VerilogDesign.java:180)
at ru.ispras.verilog.parser.elaborator.VerilogDesign$1$1.next(VerilogDesign.java:168)
at ru.ispras.verilog.parser.sample.VerilogDesignPrinter.start(VerilogDesignPrinter.java:36)
at ru.ispras.verilog.parser.VerilogDesignBackends.start(VerilogDesignBackends.java:56)
at ru.ispras.verilog.parser.VerilogTranslator.start(VerilogTranslator.java:169)
at ru.ispras.verilog.parser.sample.VerilogPrinter.main(VerilogPrinter.java:45)
at ru.ispras.verilog.parser.sample.VerilogPrinterTest.runTest(VerilogPrinterTest.java:49)

Проблема, по всей видимости, там в следующем. В модуле instrFetch декларируется переменная:

output [29:0] InstrAddr_s2i;

Это модуль верхнего уровня, в котором инстанцируются модули IFetchDatapath и PCUnitDatapath. В модуле IFetchDatapath декларируется переменная с тем же именем, но другого типа:

input [29:13] InstrAddr_s2i;

В binding'е по данной переменной из модуля верхнего уровня передается InstrAddr_s2i[29:13].

Наконец, в модуле PCUnitDatapath переменная с тем же именем декларируется так:

output [29:0] InstrAddr_s2i;

и в нем же она используется в присваивании (выражение, на котором происходит падение, я выделил жирным):

assign PC_Original_s2i = {InstrAddr_s2i[29:1], InstrAddr_s2i0 & MipsMode_s2e};

Однако, когда выражение в правой части присваивания проходит элаборацию, в класс VerilogRangeTransformer
приходит offset, равный 13, которой вычитается из 0. Получается отрицательное число, которое затем преобразуется в число,
выбрасываемое исключением. offset здесь быть не должно, т.к. в данном модуле переменная InstrAddr_s2i адресуется
с 0 до 29.


Related issues 1 (0 open1 closed)

Related to Retrascope Test Suite - Bug #9011: Texas97IFetchVerilogPrinterTestCase: java.lang.IndexOutOfBoundsException: 4294967283 is out of bounds.ClosedSergey Smolov06/27/2018

Actions
Actions

Also available in: Atom PDF