示例#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)
示例#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)
示例#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
示例#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
示例#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
示例#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
示例#7
0
 def visit_Assign(self, node):
     return _Assign(self.visit(node.l), self.visit(node.r))
示例#8
0
 def visit_Assign(self, node):
     return _Assign(self.visit(node.l), self.visit(node.r))