Added real->int convertion in ast genrtlil
authorClifford Wolf <clifford@clifford.at>
Sat, 14 Jun 2014 05:44:19 +0000 (07:44 +0200)
committerClifford Wolf <clifford@clifford.at>
Sat, 14 Jun 2014 05:44:19 +0000 (07:44 +0200)
frontends/ast/genrtlil.cc

index 9273636f454774c989a3f71f4d50fbc0dc4b4000..5b43f57ff9cfc4eb98aefb63d2d1757d145a32b6 100644 (file)
@@ -602,6 +602,10 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint)
                        sign_hint = false;
                break;
 
+       case AST_REALVALUE:
+               width_hint = std::max(width_hint, 32);
+               break;
+
        case AST_IDENTIFIER:
                id_ast = id2ast;
                if (id_ast == NULL && current_scope.count(str))
@@ -909,6 +913,14 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
                        return RTLIL::SigSpec(bitsAsConst());
                }
 
+       case AST_REALVALUE:
+               {
+                       int intvalue = round(realvalue);
+                       log("Warning: converting real value %e to integer %d at %s:%d.\n",
+                                       realvalue, intvalue, filename.c_str(), linenum);
+                       return RTLIL::SigSpec(intvalue);
+               }
+
        // simply return the corresponding RTLIL::SigSpec for an AST_IDENTIFIER node
        // for identifiers with dynamic bit ranges (e.g. "foo[bar]" or "foo[bar+3:bar]") a
        // shifter cell is created and the output signal of this cell is returned