Example #1
0
 def run_start(self):
     self.sim_msg = self.sim_message()
     self.bfm_wait(10)
     self.jtag_module = jtag_support.jtag_module(self.bfm_wait,
                                                 self.tck_enable,
                                                 self.jtag__tms,
                                                 self.jtag__tdi, self.tdo,
                                                 self)
     simple_tb.base_th.run_start(self)
     pass
Example #2
0
    def run(self):
        self.sim_msg = self.sim_message()
        self.bfm_wait(10)
        self.jtag_module = jtag_support.jtag_module(self.bfm_wait,
                                                    self.tck_enable,
                                                    self.jtag__tms,
                                                    self.jtag__tdi, self.tdo,
                                                    self)
        simple_tb.base_th.run_start(self)
        openocd = jtag_support.openocd_server(server=self, port=9999)
        openocd.start_nonpy()
        rxq = openocd.queue_recvd
        txq = openocd.queue_to_send
        self.running = True
        self.had_client = False

        def x(client_skt):
            print "RV Poll", client_skt, self.had_client, self.running
            if client_skt is None and self.had_client:
                self.running = False
            if client_skt is not None:
                self.had_client = True
            return not self.running

        openocd.run_poll = x

        while self.running:
            self.bfm_wait(100)
            if not rxq.empty():
                print "Rxq not empty"
                reply = ""
                data = rxq.get()
                print "Handling", data
                for c in data:
                    if c == 'B': print "LED ON"
                    elif c == 'b': print "LED OFF"
                    elif c in "rstu": print "Do some reset thing '%s'" % c
                    elif c in "01234567":
                        c = int(c)
                        self.jtag__tdi.drive((c >> 0) & 1)
                        self.jtag__tms.drive((c >> 1) & 1)
                        self.tck_enable.drive((c >> 2) & 1)
                        self.bfm_wait(1)
                        self.tck_enable.drive(0)
                        self.bfm_wait(100)
                        pass
                    elif c == 'R':
                        self.bfm_wait(100)
                        self.tck_enable.drive(0)
                        self.bfm_wait(1)
                        self.tck_enable.drive(0)
                        reply += "01"[self.tdo.value()]
                        pass
Example #3
0
 def jtag_init(self):
     print "Start using JTAG"
     self.jtag_module = jtag_support.jtag_module(self.bfm_wait,
                                                 self.tck_enable,
                                                 self.jtag__tms,
                                                 self.jtag__tdi, self.tdo,
                                                 self)
     self.jtag_reset()
     self.jtag_write_irs(ir_bits=bits_of_n(
         5, 0x11))  # Send in 0x11 (apb_access)
     self.jtag_dm_write(0x10, 1)  # Enable
     pass
Example #4
0
    def run_start(self):
        print "Start using JTAG"
        self.jtag_module = jtag_support.jtag_module(self.bfm_wait,
                                                    self.tck_enable,
                                                    self.jtag__tms,
                                                    self.jtag__tdi, self.tdo,
                                                    self)
        self.jtag_reset()
        self.jtag_write_irs(ir_bits=bits_of_n(
            5, 0x11))  # Send in 0x11 (apb_access)
        self.jtag_dm_write(0x10, 1)  # Enable

        self.jtag_dm_write(0x20, 0x42483)  # prog0 = some load
        self.jtag_dm_write(0x04, 0x1234)  # data0 = address
        self.jtag_dm_write(
            0x17, 0x00271008
        )  # Abstract command to Write data0 to s0 and exec the load
        abstractcs = ((self.jtag_dm_read_slow(0x16) >> 2) & 0xffffffff
                      )  # Read abstractcs
        print "%d: Abstractcs %08x" % (self.global_cycle(), abstractcs)
        abstractcs = ((self.jtag_dm_read_slow(0x16) >> 2) & 0xffffffff
                      )  # Read abstractcs
        print "%d: Abstractcs %08x" % (self.global_cycle(), abstractcs)
        self.jtag_dm_write(0x04, 0)  # data0 = Initial PC

        self.jtag_dm_write(0x20, 0x942024)  # prog0 = some store
        self.jtag_dm_write(0x04, 0xfeedcafe)  # data0 = address
        self.jtag_dm_write(0x17,
                           0x00231009)  # Abstract command to Write data0 to s1
        self.jtag_dm_write(0x04, 0x1234)  # data0 = address
        self.jtag_dm_write(
            0x17, 0x00271008
        )  # Abstract command to Write data0 to s0 and exec the load
        abstractcs = ((self.jtag_dm_read_slow(0x16) >> 2) & 0xffffffff
                      )  # Read abstractcs
        print "%d: Abstractcs %08x" % (self.global_cycle(), abstractcs)
        abstractcs = ((self.jtag_dm_read_slow(0x16) >> 2) & 0xffffffff
                      )  # Read abstractcs
        print "%d: Abstractcs %08x" % (self.global_cycle(), abstractcs)
        self.jtag_dm_write(0x04, 0)  # data0 = Initial PC

        self.jtag_dm_write(0x04, 0)  # data0 = Initial PC
        self.jtag_dm_write(
            0x17, 0x002307b1)  # Abstract command to Write data0 to DEPC
        #self.jtag_dm_write(0x20, 0x12345678) # progbuf0
        self.jtag_dm_write(0x20, 0x00000133)  # progbuf0
        self.jtag_dm_write(0x17, 0x00240000)  # execute progbuf0
        status = (
            (self.jtag_dm_read_slow(0x11) >> 2) & 0xffffffff)  # Read status
        self.jtag_dm_write(0x20, 0x00002103)  # progbuf0
        self.jtag_dm_write(0x17, 0x00240000)  # execute progbuf0
        pass
Example #5
0
    def run_start(self):
        print "Start using JTAG"
        self.jtag_module = jtag_support.jtag_module(self.bfm_wait,
                                                    self.tck_enable,
                                                    self.jtag__tms,
                                                    self.jtag__tdi, self.tdo,
                                                    self)
        self.jtag_reset()
        self.jtag_write_irs(ir_bits=bits_of_n(
            5, 0x11))  # Send in 0x11 (apb_access)
        self.dm_write(0x10, 1)  # Enable
        #self.dm_write(0x04, 0x1245678) # data0 = Initial PC
        #self.dm_write(0x17, 0x002307b1) # Abstract command to Write data0 to r1
        #while True:
        #    abstractcs = ((self.dm_read_slow(0x16)>>2)&0xffffffff)
        #    print "AbstractCS %08x"%abstractcs
        #    if (abstractcs & 0x1000)==0: break
        #    pass
        #self.dm_write(0x17, 0x00221001) # Abstract command to Read data0 to r1
        #while True:
        #    abstractcs = ((self.dm_read_slow(0x16)>>2)&0xffffffff)
        #    print "AbstractCS %08x"%abstractcs
        #    if (abstractcs & 0x1000)==0: break
        #    pass
        #print "Data0 %08x"%((self.dm_read_slow(0x04)>>2)&0xffffffff)
        #self.dm_write(0x17, 0x002207b1) # Abstract command to Read data0 to r1
        #while True:
        #    abstractcs = ((self.dm_read_slow(0x16)>>2)&0xffffffff)
        #    print "AbstractCS %08x"%abstractcs
        #    if (abstractcs & 0x1000)==0: break
        #    pass
        #print "Data0 %08x"%((self.dm_read_slow(0x04)>>2)&0xffffffff)

        self.dm_write(0x04, 0)  # data0 = Initial PC
        self.dm_write(0x17,
                      0x002307b1)  # Abstract command to Write data0 to DEPC
        self.resume_riscv()
        for i in range(self.num_pauses):
            delay = (i + 1) * self.run_time / (
                self.num_pauses + 1) - 10 - self.global_cycle() / 2
            if delay < 0: delay = 1
            self.bfm_wait(delay)
            self.jtag_halt_riscv(i)
            self.jtag_resume_riscv(i)
            pass
        print "%d: Halt/resume completed" % (self.global_cycle())
        #self.dm_write(0x20, 0x12345678) # progbuf0
        #self.dm_write(0x17, 0x00240000) # execute progbuf0
        pass