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
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
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
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
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