From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13943 invoked by alias); 19 Sep 2002 02:03:24 -0000 Mailing-List: contact sid-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: sid-owner@sources.redhat.com Received: (qmail 13930 invoked from network); 19 Sep 2002 02:03:23 -0000 Received: from unknown (HELO sanmx03.sanyo.co.jp) (134.180.230.88) by sources.redhat.com with SMTP; 19 Sep 2002 02:03:23 -0000 Received: from sanmx03.sanyo.co.jp (localhost [127.0.0.1]) by localhost (Postfix) with ESMTP id 71D1BA8446; Thu, 19 Sep 2002 11:03:22 +0900 (JST) Received: from postgw.idc.lsi.sanyo.co.jp (unknown [134.180.177.20]) by sanmx03.sanyo.co.jp (Postfix) with ESMTP id 68F35A8465; Thu, 19 Sep 2002 11:03:21 +0900 (JST) Received: from seed13.td.idc.lsi.sanyo.co.jp (seed13 [134.180.182.13]) by postgw.idc.lsi.sanyo.co.jp (8.9.3/3.4W3-05/13/97) with SMTP id KAA05597; Thu, 19 Sep 2002 10:55:01 +0900 (JST) Received: from sltisatish by seed13.td.idc.lsi.sanyo.co.jp (SMI-8.6/6.4J.6) id LAA02275; Thu, 19 Sep 2002 11:04:17 +0900 Message-ID: <001501c26006$e8cd63c0$19b6b486@sltisatish> From: "T Satish Kumar" To: "T Satish Kumar" , "Keith Seitz" Cc: , , "Frank Ch. Eigler" Subject: Re: Fw: [ECOS] how to build an eCos library for ARM7tdmi simulator Date: Wed, 18 Sep 2002 19:03:00 -0000 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0012_01C25FCC.3C486620" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 X-SW-Source: 2002-q3/txt/msg00067.txt.bz2 This is a multi-part message in MIME format. ------=_NextPart_000_0012_01C25FCC.3C486620 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-length: 2042 oops forgot to attach the configrun-sid file... here is it.. satish ----- Original Message ----- From: "T Satish Kumar" To: "Keith Seitz" Cc: ; ; "Frank Ch. Eigler" Sent: Thursday, September 19, 2002 11:02 AM Subject: Re: Fw: [ECOS] how to build an eCos library for ARM7tdmi simulator > well, i m attaching the default configrun-sid file: > i have some doubts in the configrun-sid file: > why is the gloss_comptype for arm-elf is "angel" > %gloss_comptype = ( "arm" => "sw-gloss-arm/angel" ) > > is it becoz of which i m not able to connect to the target properly.. > > if yes, what should i replace it with..? > > well, any other links or suggestions.. > > satish > > > > > > > ----- Original Message ----- > From: "Keith Seitz" > To: "T Satish Kumar" > Sent: Wednesday, September 18, 2002 9:15 AM > Subject: Re: Fw: [ECOS] how to build an eCos library for ARM7tdmi simulator > > > > On Wed, 18 Sep 2002, T Satish Kumar wrote: > > > > > > I did the changes manually as per ur mail. and later when i > try > > > to > > > > run arm-elf-gdb twothreads.x i get the following error: > > > > localhost:2000 Attempt toconnect timed out with out establishing a > > > > connection. > > > > GDB cannot connect to the target board using localhost:2000. > > > > verify that the board is securly connected and, if necessary, > > > > modify the port setting with debugger preferences. > > > > Ok, I have to admit, I'm a little behind on this discussion (which I > > missed entirely). Correct me if I've gotten something wrong: you had some > > sort of problem with insight, Frank got you started, and now you cannot > > connect to your target using Insight, right? > > > > So let's start with the simplest test... Can you run "arm-elf-gdb -nw" > > (which will disable insight and run comman-line gdb) and try connecting to > > your target? > > > > Keith > > > > > > > ------=_NextPart_000_0012_01C25FCC.3C486620 Content-Type: application/octet-stream; name="configrun-sid" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="configrun-sid" Content-length: 47197 :=0A= # Emulate a standalone simulator. Construct a sid configuration file=0A= # and run it.=0A= =0A= eval 'exec perl -S $0 ${1+"$@"}'=0A= if $running_under_some_shell;=0A= $running_under_some_shell =3D 0;=0A= =0A= #use strict;=0A= use Getopt::Long;=0A= use File::Basename;=0A= require 5.004;=0A= =0A= %cpu_comptype =3D (=0A= "arm" =3D> "hw-cpu-arm7t",=0A= "thumb" =3D> "hw-cpu-arm7t",=0A= "x86" =3D> "hw-cpu-x86",=0A= # INSERT NEW ENTRIES HERE=0A= "m32r" =3D> "hw-cpu-m32r/d",=0A= "xstormy16" =3D> "hw-cpu-xstormy16",=0A= );=0A= =0A= %cpu_defaultendian =3D (=0A= "x86" =3D> "-EL",=0A= "m32r" =3D> "-EB",=0A= "xstormy16" =3D> "-EL",=0A= );=0A= =0A= %gloss_comptype =3D (=0A= "arm" =3D> "sw-gloss-arm/angel",=0A= "thumb" =3D> "sw-gloss-arm/angel",=0A= "x86" =3D> "sw-gloss-generic/libgloss",=0A= # INSERT NEW ENTRIES HERE=0A= "m32r" =3D> "sw-gloss-m32r/libgloss",=0A= "xstormy16" =3D> "sw-gloss-generic/libgloss",=0A= );=0A= =0A= %gloss_memspecs =3D (=0A= "arm" =3D> "0x00000000,0x00800000",=0A= "thumb" =3D> "0x00000000,0x00800000",=0A= "x86" =3D> "0x00000,0x500000",=0A= # INSERT NEW ENTRIES HERE=0A= "m32r" =3D> "0x00000000,0x00800000",=0A= "xstormy16" =3D> "0x00000000,0x00800000",=0A= );=0A= =0A= =0A= =0A= # -------------------------------------------------------------------------= ---=0A= # Consume argument list=0A= =0A= $opt_cpu=3D"";=0A= $opt_help=3D0;=0A= $opt_version=3D0;=0A= $opt_verbose=3D0;=0A= $opt_save_temps=3D0;=0A= $opt_no_run=3D0;=0A= $opt_trace_extract=3D0;=0A= $opt_trace_semantics=3D0;=0A= $opt_trace_disassemble=3D0;=0A= $opt_trace_counter=3D0;=0A= $opt_trace_core=3D0;=0A= $opt_trace_core_visual=3D0;=0A= $opt_enable_warnings=3D0;=0A= @opt_memory_region =3D ();=0A= $opt_gdb=3D0;=0A= $opt_persistent=3D0;=0A= $opt_gprof=3D0;=0A= $opt_tksm=3D0;=0A= $opt_board=3D"gloss-stdio";=0A= $opt_engine=3D"pbb";=0A= $opt_EB=3D0;=0A= $opt_EL=3D0;=0A= $opt_sidrtc=3D"";=0A= $opt_sidcodec=3D"";=0A= @opt_wrap =3D ();=0A= %opt_load=3D();=0A= %opt_gdbport=3D();=0A= =0A= $any_tcl =3D 0;=0A= =0A= # sid executable=0A= if ($ENV{'SID'}) {=0A= $sid=3D$ENV{'SID'};=0A= } else {=0A= $sid =3D dirname($0);=0A= $sid .=3D "/sid";=0A= }=0A= =0A= $version=3Dq$Id: configrun-sid.in,v 1.34 2001/12/28 21:16:48 fche Exp $;=0A= =0A= # by default the loader data mapper connects to the cpu-mapper access-port= =0A= $load_mapper_data =3D "cpu-mapper access-port";=0A= =0A= # (see perldoc Getopt::Long)=0A= %options =3D (=0A= "help!" =3D> ["help", "Print this help message."],=0A= "version!" =3D> ["version", "Print wrapper / sid versions."],=0A= "cpu=3Ds" =3D> ["cpu=3DCPU (REQUIRED)", "Select target processor.", = "none"],=0A= "verbose|v!" =3D> ["verbose|v", "Turn on various run-time verbosity se= ttings.", "no"],=0A= "save-temps!" =3D> ["save-temps", "Keep generated sid configuration fi= le.", "no"],=0A= "trace-extract!" =3D> ["trace-extract", "Turn on CPU insn decode traci= ng.", "no"],=0A= "trace-semantics!" =3D> ["trace-semantics", "Turn on CPU insn execute = tracing.", "no"],=0A= "trace-disassemble!" =3D> ["trace-disassemble", "Turn on CPU insn exec= ute disassembly.", "no"],=0A= "trace-counter!" =3D> ["trace-counter", "Turn on CPU insn counter.", "= no"],=0A= "trace-core!" =3D> ["trace-core", "Turn on bus access tracing.", "no"]= ,=0A= # "trace-core-visual!" =3D> ["trace-core-visual", "Turn on visual bus = access tracing.", "no"],=0A= "enable-warnings!" =3D> ["enable-warnings", "Enable CPU execution warn= ings.", "no"],=0A= "memory-region=3Ds@" =3D> ["memory-region=3DBASE,SIZE", "Add RAM regio= n from BASE to BASE+SIZE-1.", "no",=0A= "other options:",=0A= " bus=3DMAPPER Attach memory to bus MAPPER",=0A= " read-only Make memory read-only",=0A= " alias=3DBASE2 Add an alias at BASE2",=0A= " file=3DFILENAME Load/save memory image from file",=0A= " mmap Memory map given file",=0A= " latency=3DR:W Set read, write latencies [0:0]",=0A= " latency=3DRW Set both latencies [0]"],=0A= "gdb=3Di" =3D> ["gdb=3DPORT", "Add a gdb/debugger interface on TCP por= t.", "",=0A= "Equivalent to --gdbport cpu=3DPORT. [none]"],=0A= "gdbport=3Di%" =3D> ["gdbport PROCESSOR=3DPORT", "Add a gdb/debugger i= nterface on TCP port", "",=0A= "for the given processor. May be specified",=0A= "more than once to debug multiple CPUs. [none]"],=0A= "tksm!" =3D> ["tksm", "Add an experimental Tk system monitor.", "no"],= =0A= "board=3Ds" =3D> ["board=3DBOARD", "Model given board or system.", "gl= oss"],=0A= "engine=3Ds" =3D> ["engine=3Dscache|pbb", "Set given cgen CPU engine."= , "pbb"],=0A= "EB!" =3D> ["-EB | -EL", "Set powerup CPU mode to big/little endian.",= "auto"],=0A= "EL!" =3D> [],=0A= "persistent!" =3D> ["persistent", "Rerun top-level loop indefinitely."= , "no"],=0A= "no-run!" =3D> ["no-run", "Make config file (--save-temps) and exit.",= "no"],=0A= "insn-count=3Di" =3D> ["insn-count=3DN", "Block of uninterrupted ticks= for insns", "10000"],=0A= "gprof!" =3D> ["gprof", "GPROF-profile, collect every insn-count ticks= ", "no"],=0A= "sidrtc=3Ds" =3D> [],=0A= "sidcodec=3Ds" =3D> [],=0A= "wrap=3Ds@" =3D> ["wrap=3DCOMPONENT", "Turn on SID API tracing for nam= ed component", "none"],=0A= "load=3Ds%" =3D> ["load PROCESSOR=3DNAME", "Specify an executable to b= e loaded into", "",=0A= "a specific processor. May be specified more",=0A= "than once to load multiple processors. [cpu=3De= xec]"],=0A= "icache=3Ds" =3D> ["icache=3DTYPE", "Add an instruction cache.", "none= "],=0A= "dcache=3Ds" =3D> ["dcache=3DTYPE", "Add a data cache.", "none",=0A= "refer to any existing \"hw-cache-TYPE\" component type",=0A= "e.g., direct/64kb/32, 4way/256kb/64/lru"],=0A= );=0A= =0A= @options =3D keys (%options);=0A= =0A= sub usage {=0A= print STDERR "\nUsage: $0 --cpu=3DCPU [option ..] [--] [exec args ..]\n";= =0A= print STDERR "Options:\n";=0A= =20=20=0A= foreach $usage_msgs (sort (values %options))=0A= {=0A= my $num_entries =3D scalar (@{$usage_msgs});=0A= next if ($num_entries < 2);=0A= =20=20=20=20=20=20=0A= my $option =3D @{$usage_msgs}[0];=0A= my $synopsis =3D @{$usage_msgs}[1];=0A= my $default =3D @{$usage_msgs}[2];=0A= =0A= # Special handling for single dash options (eg. -EL).=0A= if ($option =3D~ /^-/)=0A= {=0A= printf STDERR " %-26s ", $option;=0A= } else {=0A= printf STDERR " --%-24s ", $option;=0A= }=0A= =0A= # If a default value has been given, display it within [ ].=0A= if ($default ne "")=0A= {=0A= my $width =3D 48 - length ($default);=0A= printf STDERR "%-${width}s%s\n", $synopsis, "[" . $default . "]";=0A= }=0A= else=0A= {=0A= printf STDERR "%s\n", $synopsis;=0A= }=0A= =0A= # Print any supplementary lines of help.=0A= for ($i =3D 3; $i < $num_entries; $i++)=0A= {=0A= printf STDERR "%28s%s\n", " ", @{$usage_msgs}[$i];=0A= }=0A= }=0A= exit (0);=0A= }=0A= =0A= sub configure_gloss=0A= {=0A= my $board =3D $_[0];=0A= $memspecs =3D $gloss_memspecs{$opt_cpu};=0A= @regions =3D split (/:/, $memspecs);=0A= foreach $region (@regions)=0A= {=0A= push @opt_memory_region, $region;=0A= }=0A= =0A= $gloss_component_type =3D $gloss_comptype{$opt_cpu} || die "Unknown cpu= $opt_cpu for gloss component type\n";=0A= $first_section .=3D "# gloss\n" .=0A= &sidconf_new("$gloss_component_type", "gloss") . "\n";=0A= =0A= $second_section .=3D "# gloss=0A= relate gloss cpu cpu=0A= connect-pin init-sequence output-2 -> gloss reset=0A= connect-pin cpu trap <-> gloss trap=0A= connect-pin cpu trap-code -> gloss trap-code=0A= set gloss verbose? $opt_verbose=0A= connect-bus gloss target-memory $bus_upstream=0A= ";=0A= if ($opt_cpu eq "x86")=0A= {=0A= $second_section .=3D "set gloss syscall-numbering-scheme cygmon\n";=0A= }=0A= =0A= if ($#exec_args >=3D 0) {=0A= $second_section .=3D "# args=0A= set gloss command-line \"$exec @exec_args\"=0A= ";=0A= }=0A= =0A= # pick tty of choice=0A= if ($board =3D~ /tty/)=0A= {=0A= $any_tcl =3D 1;=0A= =0A= $first_section .=3D "# gloss <-> tty\n" .=0A= &sidconf_new("hw-visual-tty", "tty") . "\n";=0A= $third_section .=3D "# gloss <-> tty=0A= relate tty \"$gloss_component_type gloss\" gloss=0A= ";=0A= }=0A= =0A= # check if gdb option is not specified=0A= if ($opt_gdb =3D=3D 0)=0A= {=0A= # gloss-stdio only allowed if gdb not specified=0A= if ($board =3D~ /stdio/)=0A= {=0A= $first_section .=3D "# gloss <-> stdio\n" .=0A= &sidconf_new("sid-io-stdio", "stdio") . "\n";=0A= $second_section .=3D "# gloss <-> stdio=0A= set host-sched 0-regular? 1=0A= set host-sched 0-time 150 # apprx. human perception limit=0A= connect-pin host-sched 0-event -> stdio poll=0A= connect-pin gloss debug-tx -> stdio stdout=0A= connect-pin gloss debug-rx <- stdio stdin=0A= ";=0A= }=0A= $second_section .=3D "# gloss w/o gdb=0A= connect-pin gloss process-signal -> main stop!=0A= connect-pin gloss process-signal -> yield-net input=0A= ";=0A= }=0A= # gloss gdb connections handled later in gdb section=0A= }=0A= =0A= my @ARGV_COPY =3D @ARGV;=0A= =0A= # handle args=0A= &GetOptions(@options);=0A= =0A= # handle version/help=0A= if ($opt_version) {=0A= print STDERR "$version\n";=0A= system ("$sid", "-v");=0A= exit (0);=0A= }=0A= if ($opt_help || $opt_cpu eq "") {=0A= &usage;=0A= }=0A= =0A= # handle leftover options=0A= $exec =3D $#ARGV >=3D 0 ? (shift @ARGV) : "";=0A= @exec_args =3D ();=0A= foreach $arg (@ARGV) {=0A= # The double quotemeta() call is intended to allow arguments containing= =0A= # weird characters to go through both the cfgroot parser AND the run-time= =0A= # target libgloss parser.=0A= push @exec_args, quotemeta(quotemeta($arg));=0A= }=0A= =0A= #if (!$exec && !$opt_gdb)=0A= # {=0A= # warn "Executable name not supplied";=0A= # }=0A= =0A= # --load cpu=3D overrides $exec=0A= if ($opt_load{"cpu"})=0A= {=0A= if ($exec && $exec ne $opt_load{"cpu"})=0A= {=0A= warn "--load cpu=3D" . $opt_load{"cpu"} . " overrides $exec\n";=0A= }=0A= $exec =3D $opt_load{"cpu"};=0A= }=0A= elsif ($exec)=0A= {=0A= $opt_load{"cpu"} =3D "$exec";=0A= }=0A= =0A= # --gdbport cpu=3Dport overrides --gdb=0A= if ($opt_gdbport{"cpu"})=0A= {=0A= if ($opt_gdb && $opt_gdb ne $opt_gdbport{"cpu"})=0A= {=0A= warn "--gdbport cpu=3D" . $opt_gdbport{"cpu"} . " overrides --gdb=3D$opt_g= db\n";=0A= }=0A= $opt_gdb =3D $opt_gdbport{"cpu"};=0A= }=0A= elsif ($opt_gdb)=0A= {=0A= $opt_gdbport{"cpu"} =3D $opt_gdb;=0A= }=0A= =0A= if ($exec)=0A= {=0A= die "Cannot read executable `$exec'" if (! -r $exec && ! $opt_no_run);= =0A= }=0A= =0A= # infer --save-temps from --no-run=0A= if ($opt_no_run && (! $opt_save_temps))=0A= {=0A= $opt_save_temps =3D 1;=0A= }=0A= =0A= # infer --persistent from --gdb=3Dxxxx=0A= if ($opt_gdb)=0A= {=0A= $opt_persistent =3D 1;=0A= }=0A= =0A= # complete component library list=0A= %component_libs=3D(=0A= "audio" =3D> "audio_component_library",=0A= "cache" =3D> "cache_component_library",=0A= "cgencpu" =3D> "cgen_component_library",=0A= "consoles" =3D> "console_component_library",=0A= "gdb" =3D> "gdb_component_library",=0A= "gloss" =3D> "gloss_component_library",=0A= "glue" =3D> "glue_component_library",=0A= "ide" =3D> "ide_component_library",=0A= "interrupt" =3D> "interrupt_component_library",=0A= "hd44780u" =3D> "hd44780u_component_library",=0A= "loader" =3D> "loader_component_library",=0A= "mapper" =3D> "mapper_component_library",=0A= "memory" =3D> "mem_component_library",=0A= "mmu" =3D> "mmu_component_library",=0A= "parport" =3D> "parport_component_library",=0A= "prof" =3D> "prof_component_library",=0A= "rtc" =3D> "rtc_component_library",=0A= "sched" =3D> "sched_component_library",=0A= "tclapi" =3D> "tcl_bridge_library",=0A= "timers" =3D> "timer_component_library",=0A= "uart" =3D> "uart_component_library",=0A= "x86" =3D> "x86_component_library"=0A= );=0A= =0A= =0A= # -------------------------------------------------------------------------= ---=0A= # Configuration file construction=0A= =0A= # Don't bother compute accurate values if config file is temporary=0A= # anyway.=0A= if ($opt_norun || $opt_save_temps) {=0A= $whoami=3Dqx{whoami}; chop ($whoami);=0A= $hostname=3Dqx{hostname}; chop ($hostname);=0A= $date=3Dqx{date}; chop ($date);=0A= $uname=3Dqx{uname}; chop ($uname);=0A= } else {=0A= $whoami=3D"";=0A= $hostname=3D"";=0A= $date=3D"";=0A= $uname=3D"";=0A= }=0A= $zeroth_section =3D "# sid configuration file=0A= # created by $version=0A= # run by $whoami @ $hostname ($uname) at $date=0A= # args: @ARGV_COPY\n";=0A= =0A= if ($opt_verbose) { $zeroth_section .=3D "set main verbose? true\n"; }=0A= =0A= $cpu_component_type =3D $cpu_comptype{$opt_cpu} || die "Unknown cpu $opt_cp= u for cpu component type\n";=0A= $first_section =3D "# first section\n" .=0A= &sidconf_new("$cpu_component_type", "cpu") . "\n" .=0A= &sidconf_new("hw-mapper-basic", "cpu-mapper") . "\n" .=0A= &sidconf_new("hw-glue-sequence-8", "init-sequence") . "\n" .=0A= &sidconf_new("hw-glue-sequence-1", "hw-reset-net") . "\n" .=0A= &sidconf_new("hw-glue-sequence-8", "deinit-sequence") . "\n" .=0A= &sidconf_new("hw-glue-sequence-1", "yield-net") . "\n" .=0A= &sidconf_new("hw-glue-sequence-2", "cache-flush-net") . "\n" .=0A= &sidconf_new("sid-sched-host-accurate", "host-sched") . "\n" .=0A= &sidconf_new("sid-sched-sim", "target-sched") . "\n" .=0A= "";=0A= =0A= if ($opt_trace_core || $opt_trace_core_visual)=0A= {=0A= $first_section .=3D "# core tracing\n" .=0A= &sidconf_new("hw-glue-probe-bus", "bus-probe") . "\n";=0A= $bus_upstream =3D "bus-probe upstream";=0A= }=0A= else=0A= {=0A= $bus_upstream =3D "cpu-mapper access-port";=0A= }=0A= =0A= if ($opt_insn_count)=0A= {=0A= $cpu_insn_count =3D $opt_insn_count;=0A= }=0A= else=0A= {=0A= $cpu_insn_count =3D 10000;=0A= }=0A= =0A= if ($opt_gprof)=0A= {=0A= $first_section .=3D "# gprof\n" .=0A= &sidconf_new("sw-profile-gprof", "gprof") . "\n";=0A= }=0A= =0A= $enable_z_packet =3D "false";=0A= $second_section =3D "# second section=0A= # settings=0A= set cpu step-insn-count $cpu_insn_count\n" .=0A= ($opt_trace_semantics ? "set cpu trace-semantics? $opt_trace_semantics\n" := "") .=0A= ($opt_trace_disassemble ? "set cpu trace-disassemble? $opt_trace_disassembl= e\n" : "") .=0A= ($opt_trace_counter ? "set cpu trace-counter? $opt_trace_counter\n" : "") .= =0A= ($opt_trace_extract ? "set cpu trace-extract? $opt_trace_extract\n" : "") .= =0A= ($opt_enable_warnings ? "set cpu enable-warnings? $opt_enable_warnings\n" := "") .=0A= "set host-sched num-clients 10 # large enough?=0A= set target-sched num-clients 10 # large enough?=0A= # pin connections=0A= connect-pin main perform-activity -> host-sched advance=0A= connect-pin main perform-activity -> target-sched advance=0A= connect-pin main starting -> init-sequence input=0A= connect-pin main stopping -> deinit-sequence input=0A= connect-pin init-sequence output-0 -> hw-reset-net input=0A= connect-pin hw-reset-net output-0 -> cpu reset!=0A= connect-pin target-sched 0-event -> cpu step!=0A= connect-pin target-sched 0-control <- cpu step-cycles=0A= connect-pin target-sched time-query <- cpu time-query=0A= connect-pin target-sched time-high -> cpu time-high=0A= connect-pin target-sched time-low -> cpu time-low=0A= connect-pin yield-net output-0 -> cpu yield=0A= connect-pin yield-net output-0 -> host-sched yield=0A= ";=0A= =0A= if ($opt_icache) {=0A= $first_section .=3D &sidconf_new("hw-cache-$opt_icache", "icache") . "\n"= ;=0A= $second_section .=3D "connect-bus cpu insn-memory icache upstream=0A= connect-bus icache downstream $bus_upstream=0A= set icache report-heading \"icache profile report\"=0A= connect-pin init-sequence output-1 -> icache invalidate-all=0A= connect-pin deinit-sequence output-6 -> icache report!=0A= connect-pin cache-flush-net output-0 -> icache flush-all=0A= connect-pin cache-flush-net output-1 -> icache invalidate-all\n";=0A= # $bus_upstream =3D "icache upstream";=0A= } else {=0A= $second_section .=3D "connect-bus cpu insn-memory $bus_upstream\n";=0A= }=0A= =0A= if ($opt_dcache) {=0A= $first_section .=3D &sidconf_new("hw-cache-$opt_dcache", "dcache") . "\n"= ;=0A= $second_section .=3D "connect-bus cpu data-memory dcache upstream=0A= connect-bus dcache downstream $bus_upstream=0A= set dcache report-heading \"dcache profile report\"=0A= connect-pin init-sequence output-1 -> dcache invalidate-all=0A= connect-pin deinit-sequence output-6 -> dcache report!=0A= connect-pin cache-flush-net output-0 -> dcache flush-all=0A= connect-pin cache-flush-net output-1 -> dcache invalidate-all\n";=0A= $bus_upstream =3D "dcache upstream";=0A= } else {=0A= $second_section .=3D "connect-bus cpu data-memory $bus_upstream\n";=0A= }=0A= =0A= if ($opt_cpu eq "x86")=0A= {=0A= $second_section .=3D "set cpu memory-mode cygmon\n";=0A= }=0A= =0A= if ($opt_gprof)=0A= {=0A= $second_section .=3D "# gprof connections=0A= connect-pin target-sched 0-event -> gprof sample=0A= connect-pin deinit-sequence output-7 -> gprof store=0A= relate gprof target-component cpu=0A= connect-pin cpu cg-caller -> gprof cg-caller=0A= connect-pin cpu cg-callee -> gprof cg-callee=0A= set gprof value-attribute pc=0A= set gprof bucket-size 4 # bytes per bucket=0A= ";=0A= }=0A= =0A= if ($opt_trace_core || $opt_trace_core_visual)=0A= {=0A= $second_section .=3D "# core tracing=0A= connect-bus bus-probe downstream cpu-mapper access-port=0A= ";=0A= }=0A= =0A= if ($opt_trace_core)=0A= {=0A= $second_section .=3D "set bus-probe trace? 1\n";=0A= }=0A= =0A= $third_section =3D "";=0A= =0A= =0A= # -------------------------------------------------------------------------= ---=0A= # Board-dependent logic=0A= =0A= =0A= if ($opt_board =3D~ /pid7t/)=0A= {=0A= # XXX: incorrect!=0A= # XXX: what about SRAM, SSRAM memory regions???=0A= =0A= if ($opt_board =3D~ /cygmon/)=0A= {=0A= die "board pid7t-cygmon only supported in little-endian mode (-EL)\n" unle= ss ($opt_EL);=0A= unshift @opt_memory_region, ( "0x04000000,0x00100000,file=3Darmpid-cygmon.= img,read-only" );=0A= }=0A= elsif ($opt_board =3D~ /eCosstub/)=0A= {=0A= die "board pid7t-eCos only supported in little-endian mode (-EL)\n" unless= ($opt_EL);=0A= unshift @opt_memory_region, ( "0x04000000,0x00100000,file=3Darmpid-eCos.im= g,read-only" );=0A= }=0A= if ($opt_board =3D~ /redboot/)=0A= {=0A= die "board pid7t-redboot only supported in little-endian mode (-EL)\n" unl= ess ($opt_EL);=0A= unshift @opt_memory_region, ( "0x04000000,0x00100000,file=3Darmpid-redboot= .img,read-only" );=0A= }=0A= else=0A= {=0A= unshift @opt_memory_region, ( "0x04000000,0x00100000" ); # default 1MB ROM= - writeable=0A= }=0A= =0A= unshift @opt_memory_region, ( "0x00000000,0x01000000" ); # default 16MB= RAM=0A= =0A= $first_section .=3D "# pid7t components\n" .=0A= &sidconf_new("hw-remap/pause-arm/ref", "remapper") . "\n" .=0A= &sidconf_new("hw-timer-arm/ref-sched", "timer1") . "\n" .=0A= &sidconf_new("hw-timer-arm/ref-sched", "timer2") . "\n" .=0A= &sidconf_new("hw-interrupt-arm/ref", "intctrl") . "\n" .=0A= &sidconf_new("hw-uart-ns16550", "uart1") . "\n" .=0A= &sidconf_new("hw-uart-ns16550", "uart2") . "\n" .=0A= &sidconf_new("hw-parport-ps/2", "parport") . "\n" .=0A= "";=0A= =0A= $second_section .=3D "# pid7t control connections=0A= connect-pin target-sched 2-control <- timer1 divided-clock-control=0A= connect-pin target-sched 2-event -> timer1 divided-clock-event=0A= set target-sched 2-scale 1/4 # artificial speed-up=0A= connect-pin timer1 interrupt -> intctrl interrupt-source-4=0A= connect-pin target-sched 3-control <- timer2 divided-clock-control=0A= connect-pin target-sched 3-event -> timer2 divided-clock-event=0A= set target-sched 3-scale 1/4 # artificial speed-up=0A= connect-pin timer2 interrupt -> intctrl interrupt-source-5=0A= connect-pin intctrl interrupt -> cpu nirq=0A= connect-pin intctrl fast-interrupt -> cpu nfiq=0A= connect-pin hw-reset-net output-0 -> uart1 Reset=0A= connect-pin hw-reset-net output-0 -> uart2 Reset=0A= connect-pin hw-reset-net output-0 -> intctrl reset=0A= connect-pin hw-reset-net output-0 -> timer1 reset=0A= connect-pin hw-reset-net output-0 -> timer2 reset=0A= connect-pin uart1 INTR -> intctrl interrupt-source-8=0A= connect-pin uart2 INTR -> intctrl interrupt-source-9=0A= connect-pin parport INTP -> intctrl interrupt-source-10=0A= # pid7t memory map=0A= connect-bus cpu-mapper intctrl:[0xA000000,0xA000013] intctrl irq-registers= =0A= connect-bus cpu-mapper intctrl:[0xA000100,0xA00010F] intctrl fiq-registers= =0A= connect-bus cpu-mapper timer1:[0xA800000,0xA80000F] timer1 registers=0A= connect-bus cpu-mapper timer2:[0xA800020,0xA80002F] timer2 registers=0A= connect-bus cpu-mapper remapper:[0xB000000,0xB000037] remapper registers=0A= connect-bus cpu-mapper uart1:[0xD800000,0xD80001F,4,1] uart1 Bus=0A= connect-bus cpu-mapper uart2:[0xD800020,0xD80003F,4,1] uart2 Bus=0A= connect-bus cpu-mapper parport:[0xD800040,0xD80005F,4,1] parport Bus=0A= # set uart unframed mode=0A= set uart1 sio-framing? 0=0A= set uart2 sio-framing? 0=0A= # remapper configuration=0A= # NB: remapping polarity is opposite to document=0A= set remapper num-relocations 1=0A= set remapper 0-start 0x0=0A= set remapper 0-end 0xFFFF=0A= set remapper 0-reloc-to 0x04000000=0A= ";=0A= =0A= # reconnect bus masters to pass through remapper=0A= $third_section .=3D "# remapper reconnection=0A= connect-bus remapper all $bus_upstream=0A= disconnect-bus cpu insn-memory $bus_upstream=0A= connect-bus cpu insn-memory remapper access-port=0A= disconnect-bus cpu data-memory $bus_upstream=0A= connect-bus cpu data-memory remapper access-port=0A= ";=0A= =0A= # create uart <-> real world connections=0A= if ($opt_board =3D~ /normalmap/)=0A= {=0A= $third_section .=3D "# disable remapper=0A= set remapper remapping? no=0A= ";=0A= }=0A= =0A= # pull in this configuration.=0A= configure_uart1_uart2();=0A= }=0A= elsif ($opt_board =3D~ /^cma110/)=0A= {=0A= # missing:=0A= # PS/2 kbd/ms, PCI, flash, gloss=0A= =0A= unshift @opt_memory_region, ( "0x00000000,0x00800000" ); # default 8MB = RAM=0A= if ($opt_board =3D~ /:cma222/)=0A= {=0A= =0A= $first_section .=3D "# cma110/cma222 specific parts\n" .=0A= &sidconf_new("hw-timer-arm/ref-sched", "timer") . "\n" .=0A= &sidconf_new("hw-interrupt-cogent/cma222", "intctrl") . "\n" .=0A= "";=0A= =0A= $second_section .=3D "# cma222 control connections=0A= connect-pin target-sched 2-control <- timer divided-clock-control=0A= connect-pin target-sched 2-event -> timer divided-clock-event=0A= connect-pin timer interrupt -> intctrl interrupt-source-4=0A= connect-pin intctrl interrupt -> cpu nirq=0A= # connect the on-cpu board devices=0A= connect-bus cpu-mapper intctrl:[0xF600000,0xF600037] intctrl irq-registers= =0A= connect-bus cpu-mapper timer:[0xF700020,0xF70003F] timer registers=0A= ";=0A= }=0A= else=0A= {=0A= die "Unknown board `$opt_board'\n";=0A= }=0A= =0A= $first_section .=3D "# cma110 common parts\n" .=0A= &sidconf_new("hw-uart-ns16550", "uart1") . "\n" .=0A= &sidconf_new("hw-uart-ns16550", "uart2") . "\n" .=0A= &sidconf_new("hw-parport-ps/2", "parport") . "\n" .=0A= &sidconf_new("hw-rtc-ds1642", "rtc") . "\n" .=0A= &sidconf_new("hw-lcd-hd44780u-a02", "lcd") . "\n" .=0A= &sidconf_new("hw-visual-lcd", "display") . "\n" .=0A= "";=0A= =0A= $second_section .=3D "# cma110 control connections=0A= connect-pin hw-reset-net output-0 -> uart1 Reset=0A= connect-pin hw-reset-net output-0 -> uart2 Reset=0A= connect-pin hw-reset-net output-0 -> timer reset=0A= connect-pin uart1 INTR -> intctrl interrupt-source-2=0A= connect-pin uart2 INTR -> intctrl interrupt-source-1=0A= connect-pin parport INTP -> intctrl interrupt-source-4=0A= # configure the clock=0A= set host-sched num-clients 10=0A= set host-sched 0-regular? 1=0A= set host-sched 0-time 1000 # 1 sec=0A= connect-pin host-sched 0-event -> rtc clock=0A= connect-pin rtc clock-control -> host-sched 1-control=0A= connect-pin rtc clock-event <- host-sched 1-event=0A= # configure the lcd=0A= #set display width 40 # 8 chars X 5 pixels per char=0A= # note that hw-lcd-hd44780u may not support width of 80; this board=0A= # has one though.=0A= set display width 80 # 16 chars X 5 pixels per char=0A= set display height 16 # two lines of 8 pixels=0A= connect-pin host-sched 9-event -> lcd refresh-sync-event=0A= connect-pin host-sched 9-control <- lcd refresh-sync-control=0A= connect-pin lcd row-col -> display row-col=0A= connect-pin lcd FR -> display FR=0A= # memory map=0A= # 8MB main memory=0A= #connect-bus PCI pcibus:[0x4000000,0x5FEFFFF] pcibus config-space=0A= #connect-bus ??? ??????:[0x5FF0000,0x5FFFFFF] v360epc registers=0A= # ARM EPROM/FLASH memory=0A= connect-bus cpu-mapper rtc:[0xE800000,0xE803FFF] rtc read-write-port=0A= connect-bus cpu-mapper uart1:[0xE900000,0xE90001F,4,1] uart1 Bus=0A= connect-bus cpu-mapper uart2:[0xE900020,0xE90003F,4,1] uart2 Bus=0A= connect-bus cpu-mapper parport:[0xE900080,0xE90009F,4,1] parport Bus=0A= # kbd/ms=0A= connect-bus cpu-mapper lcd:[0xE900100,0xE90010F,4,1] lcd bus=0A= # DIP switches=0A= #connect-bus PCI pcibus:[0xF200000,0xF2FFFFF] pcibus control-registers=0A= # set uart unframed mode=0A= set uart1 sio-framing? 0=0A= set uart2 sio-framing? 0=0A= ";=0A= =0A= # pull in this configuration.=0A= configure_uart1_uart2();=0A= =0A= }=0A= elsif ($opt_board =3D~ /gloss/)=0A= {=0A= configure_gloss($opt_board);=0A= }=0A= else=0A= {=0A= die "Unknown board `$opt_board'\n";=0A= }=0A= =0A= =0A= =0A= # ------------------------------------------------------------------------= =0A= # Handle endianness=0A= =0A= if ($opt_EB && $opt_EL) { die "Both -EB and -EL specified\n"; }=0A= if (!$opt_EB && !$opt_EL && $opt_gdb !=3D 0)=0A= {=0A= if ($cpu_defaultendian{$opt_cpu} eq "-EB") { $opt_EB =3D 1; }=0A= elsif ($cpu_defaultendian{$opt_cpu} eq "-EL") { $opt_EL =3D 1; }=0A= else { warn "Should specify endianness"; &usage; }=0A= }=0A= elsif (!$opt_EB && !$opt_EL && !$exec)=0A= {=0A= warn "Should specify executable"; &usage;=0A= }=0A= if ($opt_EB) { $third_section .=3D "set cpu endian big\n"; }=0A= if ($opt_EL) { $third_section .=3D "set cpu endian little\n"; }=0A= =0A= =0A= # -------------------------------------------------------------------------= ---=0A= # Misc. logic=0A= =0A= # this is used by both the arm710t and cogent cma110 boards.=0A= sub configure_uart1_uart2=0A= {=0A= # create uart <-> real world connections=0A= if ($opt_board =3D~ /uart1:stdio/)=0A= {=0A= $first_section .=3D "# stdio1\n" .=0A= &sidconf_new("sid-io-stdio", "stdio1") . "\n";=0A= $second_section .=3D "# stdio1 polling=0A= set host-sched 0-regular? 1=0A= set host-sched 0-time 50=0A= connect-pin host-sched 0-event -> stdio1 poll=0A= ";=0A= $third_section .=3D "# stdio1 connection=0A= connect-pin uart1 Sout -> stdio1 stdout=0A= connect-pin uart1 Sin <- stdio1 stdin=0A= ";=0A= }=0A= =0A= if ($opt_board =3D~ /uart2:stdio/)=0A= {=0A= $first_section .=3D "# stdio2\n" .=0A= &sidconf_new("sid-io-stdio", "stdio2") . "\n";=0A= $second_section .=3D "# stdio2 polling=0A= set host-sched 0-regular? 1=0A= set host-sched 0-time 50=0A= connect-pin host-sched 0-event -> stdio2 poll=0A= ";=0A= $third_section .=3D "# stdio2 connection=0A= connect-pin uart2 Sout -> stdio2 stdout=0A= connect-pin uart2 Sin <- stdio2 stdout=0A= ";=0A= }=0A= =0A= if ($opt_board =3D~ /uart1:tty/)=0A= {=0A= $any_tcl =3D 1;=0A= =0A= $first_section .=3D "# tty1\n" .=0A= &sidconf_new("hw-visual-tty", "tty1") . "\n";=0A= $third_section .=3D "# tty1 auto-connection=0A= relate tty1 \"hw-uart-ns16550 uart1\" uart1=0A= ";=0A= }=0A= =0A= if ($opt_board =3D~ /uart2:tty/)=0A= {=0A= $any_tcl =3D 1;=0A= =0A= $first_section .=3D "# tty2\n" .=0A= &sidconf_new("hw-visual-tty", "tty2") . "\n";=0A= $third_section .=3D "# tty2 auto-connection=0A= relate tty2 \"hw-uart-ns16550 uart2\" uart2=0A= ";=0A= }=0A= =0A= if ($opt_board =3D~ /uart1:([0-9]+)/)=0A= {=0A= $port =3D $1;=0A= =0A= $first_section .=3D "# uart1 socket\n" .=0A= &sidconf_new("sid-io-socket-server", "uart1-console") . "\n";=0A= =0A= $second_section .=3D "# uart1 socketio config=0A= connect-pin host-sched 3-event -> uart1-console poll-event=0A= connect-pin host-sched 3-control <- uart1-console poll-control=0A= set uart1-console verbose? $opt_verbose=0A= set uart1-console sockaddr-local 0.0.0.0:$port=0A= connect-pin init-sequence output-2 -> uart1-console init=0A= connect-pin deinit-sequence output-6 -> uart1-console fini=0A= # make big receive fifo=0A= set uart1 in-fifo-length 4096=0A= ";=0A= =0A= $third_section .=3D "# uart1 <-> socket=0A= connect-pin uart1 Sout -> uart1-console tx=0A= connect-pin uart1 Sin <- uart1-console rx=0A= ";=0A= }=0A= =0A= if ($opt_board =3D~ /uart2:([0-9]+)/)=0A= {=0A= $port =3D $1;=0A= =0A= $first_section .=3D "# uart2 socket\n" .=0A= &sidconf_new("sid-io-socket-server", "uart2-console") . "\n";=0A= =0A= $second_section .=3D "# uart2 socketio config=0A= connect-pin host-sched 4-event -> uart2-console poll-event=0A= connect-pin host-sched 4-control <- uart2-console poll-control=0A= set uart2-console verbose? $opt_verbose=0A= set uart2-console sockaddr-local 0.0.0.0:$port=0A= connect-pin init-sequence output-2 -> uart2-console init=0A= connect-pin deinit-sequence output-6 -> uart2-console fini=0A= # make big receive fifo=0A= set uart2 in-fifo-length 4096=0A= ";=0A= =0A= $third_section .=3D "# uart2 <-> socket=0A= connect-pin uart2 Sout -> uart2-console tx=0A= connect-pin uart2 Sin <- uart2-console rx=0A= ";=0A= }=0A= =0A= if ($opt_board =3D~ /uart1:gdb/ && $opt_gdb !=3D 0)=0A= {=0A= $third_section .=3D "# uart1 <-> cpu-gdb also=0A= connect-pin uart1 Sout -> cpu-gdb target-tx=0A= ";=0A= }=0A= =0A= if ($opt_board =3D~ /uart2:gdb/ && $opt_gdb !=3D 0)=0A= {=0A= $third_section .=3D "# uart2 <-> cpu-gdb also=0A= connect-pin uart2 Sout -> cpu-gdb target-tx=0A= ";=0A= }=0A= }=0A= =0A= =0A= sub configure_harvard_bus=0A= {=0A= my $cpu =3D $_[0];=0A= =0A= $first_section .=3D "# $cpu harvard bus mappers\n" .=0A= &sidconf_new("hw-mapper-basic", "data-mapper") . "\n" .=0A= &sidconf_new("hw-mapper-basic", "insn-mapper") . "\n";=0A= =0A= $second_section .=3D "# $cpu harvard bus specific.=0A= disconnect-bus cpu insn-memory $bus_upstream=0A= connect-bus cpu insn-memory insn-mapper access-port=0A= disconnect-bus cpu data-memory $bus_upstream=0A= ";=0A= if ($opt_trace_core || $opt_trace_core_visual)=0A= {=0A= $second_section .=3D "# $cpu harvard bus data probe.=0A= connect-bus cpu data-memory bus-probe upstream=0A= disconnect-bus bus-probe downstream cpu-mapper access-port=0A= connect-bus bus-probe downstream data-mapper access-port=0A= ";=0A= }=0A= else=0A= {=0A= $second_section .=3D "# $cpu harvard bus data mapping.=0A= connect-bus cpu data-memory data-mapper access-port=0A= ";=0A= }=0A= =0A= if ($opt_board =3D~ /gloss/)=0A= {=0A= $second_section .=3D "# $cpu harvard bus specific gloss .=0A= disconnect-bus gloss target-memory $bus_upstream=0A= connect-bus gloss target-memory data-mapper access-port=0A= ";=0A= }=0A= =0A= }=0A= =0A= =0A= =0A= =0A= if ($opt_cpu eq "arm")=0A= {=0A= $enable_z_packet =3D "true";=0A= }=0A= =0A= if ($opt_cpu eq "xstormy16")=0A= {=0A= $enable_z_packet =3D "true";=0A= }=0A= =0A= =0A= # --engine=0A= if ($opt_engine eq "pbb")=0A= {=0A= # FIXME: the x86 component should support this setting=0A= if ($opt_cpu ne "x86")=0A= {=0A= $second_section .=3D "set cpu engine-type pbb\n";=0A= }=20=0A= }=0A= elsif ($opt_engine eq "scache")=0A= {=0A= $second_section .=3D "set cpu engine-type scache\n";=0A= }=0A= else=0A= {=0A= die "Invalid engine type $opt_engine\n";=0A= }=0A= =0A= =0A= # --gdb=0A= # Generate a gdb component for each processor requested.=0A= $non_cpu_gdbs=3D0;=0A= foreach $processor (keys %opt_gdbport)=0A= {=0A= $first_section .=3D "# $processor gdb\n" .=0A= &sidconf_new("sw-debug-gdb", "${processor}-gdb") . "\n" .=0A= &sidconf_new("sid-io-socket-server", "${processor}-gdb-socket") . "\n= ";=0A= $second_section .=3D "# ${processor}-gdb=0A= relate ${processor}-gdb cpu $processor=0A= relate ${processor}-gdb cfgroot main=0A= relate ${processor}-gdb target-schedulers target-sched=0A= relate ${processor}-gdb host-schedulers host-sched=0A= connect-pin ${processor}-gdb process-signal -> main stop!=0A= connect-pin init-sequence output-3 -> ${processor}-gdb init=0A= connect-pin deinit-sequence output-5 -> ${processor}-gdb deinit=0A= connect-pin ${processor}-gdb yield -> yield-net input=0A= connect-pin ${processor}-gdb flush-icache -> cache-flush-net input=0A= connect-pin cache-flush-net output-1 -> $processor flush-icache=0A= connect-pin ${processor}-gdb restart -> hw-reset-net input=0A= set ${processor}-gdb exit-on-detach? 1\n" .=0A= ($opt_verbose ? "set ${processor}-gdb trace-gdbsid? $opt_verbose\n" : "") .= =0A= ($opt_verbose ? "set ${processor}-gdb trace-gdbserv? $opt_verbose\n" : "") = .=0A= "# ${processor}-gdb-socket=0A= connect-pin init-sequence output-2 -> ${processor}-gdb-socket init=0A= connect-pin deinit-sequence output-6 -> ${processor}-gdb-socket fini=0A= connect-pin ${processor}-gdb-socket rx -> ${processor}-gdb remote-rx=0A= connect-pin ${processor}-gdb-socket tx <- ${processor}-gdb remote-tx=0A= connect-pin host-sched 6-event -> ${processor}-gdb-socket poll-event=0A= connect-pin host-sched 6-control <- ${processor}-gdb-socket poll-control=0A= set ${processor}-gdb-socket sockaddr-local 0.0.0.0:$opt_gdbport{$processor}= \n" .=0A= ($opt_verbose ? "set ${processor}-gdb-socket verbose? $opt_verbose\n" : "")= ;=0A= if ($processor ne "cpu")=0A= {=0A= $non_cpu_gdbs ++;=0A= }=0A= }=0A= =0A= # Update the enable thresholds of the shedulers to account for GDB componen= ts=0A= # attached to processors other than the cpu.=0A= if ($non_cpu_gdbs !=3D 0)=0A= {=0A= $opt_persistent =3D 1;=0A= $sched_threshold =3D $non_cpu_gdbs + 1;=0A= $third_section .=3D "=0A= # We want the target scheduler to come up enabled, so update the enabled?= =0A= # attribute to match the threshold. The GDB components will take care of=0A= # disabling it when necessary.=0A= set target-sched enable-threshold $sched_threshold=0A= set target-sched enabled? $sched_threshold=0A= ";=0A= }=0A= =0A= # Additional settings for main cpu gdb.=0A= if ($opt_gdb)=0A= {=0A= if ($opt_board =3D~ /gloss/)=0A= {=0A= $second_section .=3D "# gdb w/ gloss=0A= connect-pin gloss trap-chain <-> cpu-gdb trap=0A= connect-pin gloss trap-code-chain -> cpu-gdb trap-code=0A= connect-pin gloss process-signal -> cpu-gdb gloss-process-signal=0A= connect-pin gloss debug-tx -> cpu-gdb target-tx=0A= relate cpu-gdb gloss gloss=0A= set cpu-gdb enable-Z-packet? $enable_z_packet=0A= set cpu-gdb operating-mode? false=0A= ";=0A= }=0A= else=0A= {=0A= $second_section .=3D "# gdb w/o gloss=0A= connect-pin cpu trap <-> cpu-gdb trap=0A= connect-pin cpu trap-code -> cpu-gdb trap-code=0A= ";=0A= }=0A= }=0A= =0A= # Generate a loader for each processor=0A= foreach $processor (keys %opt_load)=0A= {=0A= $first_section .=3D "# ${processor} loader\n" .=0A= &sidconf_new("sw-load-elf", "${processor}-loader") . "\n";=0A= $second_section .=3D "# ${processor} loader=0A= set ${processor}-loader file \"$opt_load{$processor}\" \n" .=0A= ($opt_verbose ? "set ${processor}-loader verbose? $opt_verbose\n" : "");=0A= =0A= # Have the loader write data via $load_mapper_data for the "cpu" proces= sor=0A= if ($processor eq "cpu")=0A= {=0A= $second_section .=3D=0A= "connect-bus ${processor}-loader load-accessor-data $load_mapper_dat= a\n";=0A= }=0A= else=0A= {=0A= $second_section .=3D=0A= "connect-bus ${processor}-loader load-accessor-data ${processor}-map= per access-port # don't trace loading\n";=0A= }=0A= =0A= $second_section .=3D=0A= "connect-bus ${processor}-loader load-accessor-insn ${processor}-mapper ac= cess-port # don't trace loading=0A= connect-pin init-sequence output-1 -> ${processor}-loader load!=0A= connect-pin ${processor}-loader start-pc-set -> ${processor} start-pc-set!= =0A= connect-pin ${processor}-loader endian-set -> ${processor} endian-set!=0A= connect-pin ${processor}-loader error -> main stop!=0A= ";=0A= }=0A= =0A= # --trace-core-visual=0A= =0A= if ($opt_trace_core_visual !=3D 0)=0A= {=0A= $any_tcl =3D 1;=0A= =0A= $first_section .=3D "# visual bus access viewer\n" .=0A= &sidconf_new("hw-visual-probe-bus", "visual-bus-probe") . "\n";=0A= $second_section .=3D "# visual bus access viewer=0A= set visual-bus-probe addr2line-cmd \"arm-elf-addr2line -C -f -e $exec\"=0A= relate visual-bus-probe cpu cpu=0A= connect-pin bus-probe address -> visual-bus-probe address=0A= connect-pin bus-probe data-high -> visual-bus-probe data-high=0A= connect-pin bus-probe data-low -> visual-bus-probe data-low=0A= connect-pin bus-probe status -> visual-bus-probe status=0A= connect-pin bus-probe type -> visual-bus-probe type=0A= ";=0A= }=0A= =0A= # --tksm=0A= if ($opt_tksm !=3D 0)=0A= {=0A= $any_tcl =3D 1;=0A= =0A= $first_section .=3D "# tk system monitor\n" .=0A= &sidconf_new("sid-control-tksm", "tksm") . "\n";=0A= =0A= $second_section .=3D "# tk system monitor=0A= relate main component-catalog-informees tksm=0A= # refresh=0A= set host-sched 1-regular? 1=0A= set host-sched 1-time 1000=0A= connect-pin host-sched 1-event -> tksm refresh=0A= ";=0A= }=0A= =0A= if ($opt_tksm && $opt_gdb)=0A= {=0A= $third_section .=3D "# triggerpoint signal=0A= connect-pin tksm triggerpoint-hit -> cpu-gdb stop-target=0A= ";=0A= }=0A= =0A= =0A= # -------------------------------------------------------------------------= ---=0A= # Memory logic.=0A= =0A= $mems =3D 0;=0A= while ($#opt_memory_region >=3D 0)=0A= {=0A= $spec =3D shift @opt_memory_region;=0A= $mems ++;=0A= # Format: BASE,SIZE=0A= # [,bus=3DMAPPER]=0A= # [,read-only]=0A= # [,alias=3DBASE2]=0A= # [,file=3DNAME]=0A= # [,mmap]=0A= # [,latency=3DR[:W]]=0A= # [,relate=3DCOMPONENT/RELATION] (deprecated)=0A= @spec =3D split /,/, $spec;=0A= =0A= # print STDERR "spec=3D$spec\n";=0A= die "Cannot parse memory region specification `$spec'.\n" if ($#spec < = 1);=0A= =0A= $base =3D shift @spec;=0A= $base =3D oct($base) if ($base =3D~ /^0/);=0A= $size =3D shift @spec;=0A= $size =3D oct($size) if ($size =3D~ /^0/);=0A= =0A= die "Illegal memory region size `$size'\n" if ($size <=3D 0);=0A= =0A= $last =3D $base + $size - 1;=0A= $membus =3D "read-write-port"; # default read-write=0A= $memfile =3D ""; # default no file=0A= $memmapper =3D "cpu-mapper";=0A= $mmap =3D 0; # default no mmap=0A= $latr =3D 0; $latw =3D 0; # default no latencies=0A= @aliases =3D ();=0A= @relates =3D ();=0A= =0A= # common stuff=0A= $first_section .=3D "# memory region $mems ($spec)\n" .=0A= &sidconf_new("hw-memory-ram/rom-basic", "mem$mems") . "\n";=0A= $third_section .=3D "# memory region $mems ($spec) configuration\n" .= =0A= "set mem$mems size $size\n";=0A= =0A= # consume other options=0A= while ($#spec >=3D 0)=0A= {=0A= $opt =3D shift @spec;=0A= if ($opt eq "read-only") { $membus =3D "read-only-port"; }=0A= elsif ($opt eq "mmap") { $mmap =3D 1; }=0A= elsif ($opt =3D~ /bus=3D(.+)/) { $memmapper =3D $1; }=0A= elsif ($opt =3D~ /file=3D(.+)/) { $memfile =3D $1; }=0A= elsif ($opt =3D~ /alias=3D(.+)/) { push @aliases, $1 }=0A= elsif ($opt =3D~ /relate=3D(.+)/) { push @relates, $1 }=0A= elsif ($opt =3D~ /latency=3D(\d+):(\d+)/) { $latr =3D $1; $latw =3D $2 }= =0A= elsif ($opt =3D~ /latency=3D(\d+)/) { $latr =3D $1; $latw =3D $1 }=0A= else { die "Cannot parse memory region option `$opt'.\n"; }=0A= }=0A= =0A= # process memory maps=0A= $third_section .=3D "connect-bus $memmapper mem$mems:[$base,$last] mem$= mems $membus\n";=0A= =0A= foreach $alias (@aliases)=0A= {=0A= $alias =3D oct($alias) if ($alias =3D~ /^0/);=0A= $aliasend =3D $alias + $size - 1;=0A= $third_section .=3D "connect-bus $memmapper mem$mems:[$alias,$aliasend] me= m$mems $membus\n";=0A= }=0A= =0A= foreach $relate (@relates) {=0A= $relate =3D~ /(.*)\/(.*)/;=0A= $third_section .=3D "relate $1 $2 mem$mems\n";=0A= }=0A= =0A= # process file backing store=0A= if ($memfile)=0A= {=0A= $third_section .=3D "set mem$mems image-file \"$memfile\"\n";=0A= =0A= if ($mmap) {=0A= $third_section .=3D "connect-pin init-sequence output-1 -> mem$mems imag= e-mmap\n";=0A= } else {=0A= $third_section .=3D "connect-pin init-sequence output-1 -> mem$mems imag= e-load\n";=0A= }=0A= =0A= # save only if memory was writeable and not memory-mapped=0A= if ($membus eq "read-write-port" && !$mmap) {=0A= $third_section .=3D "connect-pin deinit-sequence output-6 -> mem$mems im= age-store\n";=0A= }=0A= }=0A= =0A= # process latencies=0A= if ($latr !=3D 0) { $third_section .=3D "set mem$mems read-latency $lat= r\n" }=0A= if ($latw !=3D 0) { $third_section .=3D "set mem$mems write-latency $la= tw\n" }=0A= }=0A= =0A= =0A= # -------------------------------------------------------------------------= ---=0A= # Really miscellanous stuff.=0A= =0A= # sidrtc: 8 bytes=0A= if ($opt_sidrtc)=0A= {=0A= $addr =3D $opt_sidrtc;=0A= $addr =3D oct($addr) if ($addr =3D~ /^0/);=0A= $addrend =3D $addr + 7;=0A= =0A= $first_section .=3D "# special rtc\n" .=0A= &sidconf_new("hw-rtc-sid", "sidrtc") . "\n";=0A= =0A= $third_section .=3D "# special rtc mapping=0A= connect-bus cpu-mapper sidrtc:[$addr,$addrend] sidrtc registers=0A= ";=0A= }=0A= =0A= =0A= # sidcodec: 20 bytes=0A= if ($opt_sidcodec)=0A= {=0A= $addr =3D $opt_sidcodec;=0A= $addr =3D oct($addr) if ($addr =3D~ /^0/);=0A= $addrend =3D $addr + 19;=0A= =0A= $first_section .=3D "# special codec & host audio\n" .=0A= &sidconf_new("hw-audio-sid", "sidcodec") . "\n" .=0A= &sidconf_new("sid-io-audio", "sidaudio") . "\n" .=0A= "";=0A= =0A= $third_section .=3D "# special codec mapping=0A= connect-bus cpu-mapper sidcodec:[$addr,$addrend] sidcodec registers=0A= # codec <-> host audio connections=0A= connect-pin sidcodec tx-sample -> sidaudio tx-sample=0A= connect-pin sidcodec rx-sample <- sidaudio rx-sample=0A= connect-pin sidcodec tx-mode -> sidaudio tx-mode=0A= connect-pin sidcodec tx-pending <- sidaudio tx-pending=0A= connect-pin sidcodec rx-mode -> sidaudio rx-mode=0A= connect-pin sidcodec rx-pending <- sidaudio rx-pending=0A= connect-pin sidcodec config-set -> sidaudio config-set=0A= # host audio polling=0A= set host-sched 7-regular? 1=0A= set host-sched 7-time 100=0A= connect-pin host-sched 7-event -> sidaudio poll=0A= ";=0A= }=0A= =0A= =0A= # any tcl stuff?=0A= if ($any_tcl)=0A= {=0A= $first_section .=3D "# tcl/tk adaptive event polling" . "\n" .=0A= &sidconf_new("bridge-tcl", "tcl-event-consumer") . "\n";=0A= $third_section .=3D "# tcl/tk adaptive event polling=0A= connect-pin host-sched 2-event -> tcl-event-consumer !event=0A= connect-pin host-sched 2-control <- tcl-event-consumer !event-control=0A= connect-pin init-sequence output-7 -> tcl-event-consumer !event=0A= ";=0A= }=0A= =0A= =0A= # add dso commands=0A= foreach $lib (sort keys %component_libs)=0A= {=0A= $symbol =3D $component_libs{$lib};=0A= $lib_la =3D "lib" . $lib . ".la";=0A= =0A= # minor optimization: don't include large tcl dll unless needed=0A= next if ($any_tcl =3D=3D 0 && $lib eq "tclapi");=0A= =0A= $zeroth_section .=3D "load $lib_la $symbol\n";=0A= }=0A= =0A= =0A= # -------------------------------------------------------------------------= ---=0A= if ($opt_persistent) { $zeroth_section .=3D "set main persistent? true\n"; = }=0A= =0A= # Build config file=0A= $tmpdir =3D $ENV{'TMPDIR'} ? $ENV{'TMPDIR'} : "/tmp";=0A= $basename =3D $exec ne "" ? `basename $exec` : "sid";=0A= chomp($basename);=0A= $tfile =3D $opt_save_temps ? "$basename.conf" : "$tmpdir/$basename-$$.conf"= ;=0A= open CONFIG, ">$tfile" || die ("Cannot write to $tfile\n");=0A= print CONFIG $zeroth_section;=0A= print CONFIG $first_section;=0A= print CONFIG $second_section;=0A= print CONFIG $third_section;=0A= close CONFIG;=0A= =0A= # -------------------------------------------------------------------------= ---=0A= # Exit early?=0A= =0A= if ($opt_save_temps)=0A= {=0A= print "Configuration file saved to `$tfile'.\n";=0A= }=0A= =0A= if ($opt_no_run)=0A= {=0A= exit (0);=0A= }=0A= =0A= =0A= # -------------------------------------------------------------------------= ---=0A= # (Generate and) run a simulator=0A= =0A= @args =3D ("$sid");=0A= push @args, ($tfile);=0A= =0A= # spawn sid child process=0A= system @args;=0A= $exit_value =3D $?;=0A= =0A= # Process the exit code.=0A= if (($exit_value & 0xff00) =3D=3D 0xff00) # catch old perls' fork rc bugs= =0A= {=0A= print "\nCannot run `@args': $!\n";=0A= }=0A= =0A= if (! $opt_save_temps)=0A= {=0A= unlink $tfile;=0A= }=0A= =0A= exit ($exit_value >> 8);=0A= =0A= =0A= # -------------------------------------------------------------------------= ---=0A= =0A= =0A= sub sidconf_new {=0A= my ($comptype,$compname) =3D @_;=0A= my $wrap_this =3D 0;=0A= for ($i=3D0; $i