Project

General

Profile

Actions

Bug #9182

closed

ru.ispras.verilog.parser.sample.MulFifoTestCase: java.lang.IllegalStateException: Parameter is not a value: i

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

Status:
Closed
Priority:
High
Target version:
Start date:
08/01/2018
Due date:
% Done:

0%

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

Description

Running the described testcase causes an exception with the following stack trace:

java.lang.IllegalStateException: Parameter is not a value: i
    at ru.ispras.fortress.expression.NodeOperation.getParams(NodeOperation.java:260)
    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$2.apply(VerilogExprTransformer.java:166)
    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.onIfStatementBegin(VerilogTransformer.java:109)
    at ru.ispras.verilog.parser.walker.VerilogNodeVisitor$20.onBegin(VerilogNodeVisitor.java:469)
    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:85)
    at ru.ispras.verilog.parser.elaborator.VerilogTransformer.run(VerilogTransformer.java:54)
    at ru.ispras.verilog.parser.elaborator.VerilogVariableSubstitutor.transform(VerilogVariableSubstitutor.java:44)
    at ru.ispras.verilog.parser.elaborator.VerilogInstantiator.instantiate(VerilogInstantiator.java:106)
    at ru.ispras.verilog.parser.elaborator.VerilogInstantiator.instantiateProcess(VerilogInstantiator.java:84)
    at ru.ispras.verilog.parser.elaborator.VerilogDesign$1$1.next(VerilogDesign.java:181)
    at ru.ispras.verilog.parser.elaborator.VerilogDesign$1$1.next(VerilogDesign.java:169)
    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.VerilogPrinterTestCase.runTest(VerilogPrinterTestCase.java:48)

The problem seems to be connected with the following Verilog code:

generate
    genvar i;
    for (i=0; i!=(1 << FCOUNT_SIZE); i=i+1) begin
        myfifo #(ADDR_SIZE,DATA_SIZE) one_fifo(
        .DO(DO_tmp[i]),
        .DO_VAL(DO_VAL_tmp[i]),
        .IS_EMPTY(IS_EMPTY[i]),
        .IS_FULL(IS_FULL[i]),
        .CLK(CLK),
        .RST(RST),
        .DI(DI),
        .CE_RD(CE_RD_tmp[i]),
        .CE_WR(CE_WR_tmp[i])
        );

        assign CE_WR_tmp[i] = (WR_A == i) ? CE_WR : 1'b0;
        assign CE_RD_tmp[i] = (RD_A == i) ? CE_RD : 1'b0;

        always @(posedge CLK) begin
            if(DO_VAL_tmp[i]) begin
                DO <= DO_tmp[i];
            end
        end

    end
endgenerate

Actions #1

Updated by Sergey Smolov over 5 years ago

  • Priority changed from Normal to High
Actions #2

Updated by Alexander Kamkin over 5 years ago

The DescriptorBuffersTestCase causes the same problem:

java.lang.IllegalStateException: Parameter is not a value: the_read_command_FIFO.the_dp_ram.width_byteena_a
Actions #3

Updated by Alexander Kamkin over 5 years ago

The problem is as follows: if there is a binding var -> expr(param), then VerilogVariableSubstitutor replaces var with expr(param) and does not replace param to the corresponding value. It seems that two-level replacement is required.

Actions #4

Updated by Alexander Kamkin over 5 years ago

  • Status changed from New to Resolved
Actions #5

Updated by Sergey Smolov over 5 years ago

  • Status changed from Resolved to Verified
Actions #6

Updated by Sergey Smolov over 5 years ago

  • Status changed from Verified to Closed
Actions

Also available in: Atom PDF