Ejemplo n.º 1
0
 def visit_Slice(self, node):
     if not isinstance(node.value, Signal):
         slice_proxy = Signal(value_bits_sign(node.value))
         if self.target_context:
             a = _Assign(node.value, slice_proxy)
         else:
             a = _Assign(slice_proxy, node.value)
         self.comb.append(self.visit_Assign(a))
         node = _Slice(slice_proxy, node.start, node.stop)
     return NodeTransformer.visit_Slice(self, node)
Ejemplo n.º 2
0
 def visit_Slice(self, node):
     if not isinstance(node.value, Signal):
         slice_proxy = Signal(value_bits_sign(node.value))
         if self.target_context:
             a = _Assign(node.value, slice_proxy)
         else:
             a = _Assign(slice_proxy, node.value)
         self.comb.append(self.visit_Assign(a))
         node = _Slice(slice_proxy, node.start, node.stop)
     return NodeTransformer.visit_Slice(self, node)
Ejemplo n.º 3
0
 def visit_ArrayProxy(self, node):
     # TODO: rewrite without variables
     array_muxed = Signal(value_bits_sign(node), variable=True)
     if self.target_context:
         k = self.visit(node.key)
         cases = {}
         for n, choice in enumerate(node.choices):
             cases[n] = [self.visit_Assign(_Assign(choice, array_muxed))]
         self.extra_stmts.append(Case(k, cases).makedefault())
     else:
         cases = dict((n, _Assign(array_muxed, self.visit(choice)))
                      for n, choice in enumerate(node.choices))
         self.comb.append(Case(self.visit(node.key), cases).makedefault())
     return array_muxed
Ejemplo n.º 4
0
 def visit_ArrayProxy(self, node):
     # TODO: rewrite without variables
     array_muxed = Signal(value_bits_sign(node), variable=True)
     if self.target_context:
         k = self.visit(node.key)
         cases = {}
         for n, choice in enumerate(node.choices):
             cases[n] = [self.visit_Assign(_Assign(choice, array_muxed))]
         self.extra_stmts.append(Case(k, cases).makedefault())
     else:
         cases = dict((n, _Assign(array_muxed, self.visit(choice)))
             for n, choice in enumerate(node.choices))
         self.comb.append(Case(self.visit(node.key), cases).makedefault())
     return array_muxed
Ejemplo n.º 5
0
    def visit_Assign(self, node):
        old_target_context, old_extra_stmts = self.target_context, self.extra_stmts
        self.extra_stmts = []

        self.target_context = True
        lhs = self.visit(node.l)
        self.target_context = False
        rhs = self.visit(node.r)
        r = _Assign(lhs, rhs)
        if self.extra_stmts:
            r = [r] + self.extra_stmts

        self.target_context, self.extra_stmts = old_target_context, old_extra_stmts
        return r
Ejemplo n.º 6
0
    def visit_Assign(self, node):
        old_target_context, old_extra_stmts = self.target_context, self.extra_stmts
        self.extra_stmts = []

        self.target_context = True
        lhs = self.visit(node.l)
        self.target_context = False
        rhs = self.visit(node.r)
        r = _Assign(lhs, rhs)
        if self.extra_stmts:
            r = [r] + self.extra_stmts

        self.target_context, self.extra_stmts = old_target_context, old_extra_stmts
        return r
Ejemplo n.º 7
0
 def visit_Assign(self, node):
     return _Assign(self.visit(node.l), self.visit(node.r))
Ejemplo n.º 8
0
 def visit_Assign(self, node):
     return _Assign(self.visit(node.l), self.visit(node.r))