<feed xmlns='http://www.w3.org/2005/Atom'>
<title>freedom-e-sdk/bsp/env/freedom-e300-hifive1, branch useTimerIRQ</title>
<subtitle>my bad beginner RISC-V assembly LED blinking code.</subtitle>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/'/>
<entry>
<title>Remove legacy BSP</title>
<updated>2019-03-07T17:27:31+00:00</updated>
<author>
<name>Nathaniel Graff</name>
<email>nathaniel.graff@sifive.com</email>
</author>
<published>2019-03-07T17:27:31+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=f695df295da82c8ef801906ad8b00b0e8afa7502'/>
<id>f695df295da82c8ef801906ad8b00b0e8afa7502</id>
<content type='text'>
Signed-off-by: Nathaniel Graff &lt;nathaniel.graff@sifive.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Nathaniel Graff &lt;nathaniel.graff@sifive.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Speed up Dhrystone on the HiFive1</title>
<updated>2017-11-17T23:24:01+00:00</updated>
<author>
<name>Palmer Dabbelt</name>
<email>palmer@dabbelt.com</email>
</author>
<published>2017-11-17T20:14:52+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=401b704e73599a36bfdc8c778dab85f94d74ed1d'/>
<id>401b704e73599a36bfdc8c778dab85f94d74ed1d</id>
<content type='text'>
There's a handful of things that went wrong here:

* The read-only data sections were mapped to flash, which is very slow.
  I just put them in the data segment, so they end up in the scratchpad.
  This is about a 10x hit, so it's really important.
* The toolchain was an old version, which didn't have a fast memcpy
  implementation on 32-bit systems.  This is about a 2x hit.
* Some compiler flags were incorrect, including
    * -Os instead of -O3
    * Missing -mexplicit-relocs
    * Missing -DNOENUM
    * Missing -falign-functions=4
  I haven't checked how much those hurt

With this, I get

$ make software BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
$ make upload BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
Execution starts, 10000000 runs through Dhrystone
Execution ends

Final values of the variables used in the benchmark:

Int_Glob:            5
        should be:   5
Bool_Glob:           1
        should be:   1
Ch_1_Glob:           A
        should be:   A
Ch_2_Glob:           B
        should be:   B
Arr_1_Glob[8]:       7
        should be:   7
Arr_2_Glob[8][7]:    10000010
        should be:   Number_Of_Runs + 10
Ptr_Glob-&gt;
  Ptr_Comp:          -2147470264
        should be:   (implementation-dependent)
  Discr:             0
        should be:   0
  Enum_Comp:         2
        should be:   2
  Int_Comp:          17
        should be:   17
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob-&gt;
  Ptr_Comp:          -2147470264
        should be:   (implementation-dependent), same as above
  Discr:             0
        should be:   0
  Enum_Comp:         1
        should be:   1
  Int_Comp:          18
        should be:   18
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:           5
        should be:   5
Int_2_Loc:           13
        should be:   13
Int_3_Loc:           7
        should be:   7
Enum_Loc:            1
        should be:   1
Str_1_Loc:           DHRYSTONE PROGRAM, 1'ST STRING
        should be:   DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:           DHRYSTONE PROGRAM, 2'ND STRING
        should be:   DHRYSTONE PROGRAM, 2'ND STRING

Microseconds for one run through Dhrystone: 1.3
Dhrystones per Second:                      714285.6

which is 1.55 DMIPS/MHz at 262 MHz.  It's still a bit slower than our
current stuff, but I don't remember what was actually in the HiFive1 so
I'm not sure what we should be getting.  I verified the clock is
accurate with a stopwatch.  I haven't bothered to go look through the
binary, but I think we're about 10 cycles off so it should be managable.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There's a handful of things that went wrong here:

* The read-only data sections were mapped to flash, which is very slow.
  I just put them in the data segment, so they end up in the scratchpad.
  This is about a 10x hit, so it's really important.
* The toolchain was an old version, which didn't have a fast memcpy
  implementation on 32-bit systems.  This is about a 2x hit.
* Some compiler flags were incorrect, including
    * -Os instead of -O3
    * Missing -mexplicit-relocs
    * Missing -DNOENUM
    * Missing -falign-functions=4
  I haven't checked how much those hurt

With this, I get

$ make software BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
$ make upload BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
Execution starts, 10000000 runs through Dhrystone
Execution ends

Final values of the variables used in the benchmark:

Int_Glob:            5
        should be:   5
Bool_Glob:           1
        should be:   1
Ch_1_Glob:           A
        should be:   A
Ch_2_Glob:           B
        should be:   B
Arr_1_Glob[8]:       7
        should be:   7
Arr_2_Glob[8][7]:    10000010
        should be:   Number_Of_Runs + 10
Ptr_Glob-&gt;
  Ptr_Comp:          -2147470264
        should be:   (implementation-dependent)
  Discr:             0
        should be:   0
  Enum_Comp:         2
        should be:   2
  Int_Comp:          17
        should be:   17
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob-&gt;
  Ptr_Comp:          -2147470264
        should be:   (implementation-dependent), same as above
  Discr:             0
        should be:   0
  Enum_Comp:         1
        should be:   1
  Int_Comp:          18
        should be:   18
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:           5
        should be:   5
Int_2_Loc:           13
        should be:   13
Int_3_Loc:           7
        should be:   7
Enum_Loc:            1
        should be:   1
Str_1_Loc:           DHRYSTONE PROGRAM, 1'ST STRING
        should be:   DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:           DHRYSTONE PROGRAM, 2'ND STRING
        should be:   DHRYSTONE PROGRAM, 2'ND STRING

Microseconds for one run through Dhrystone: 1.3
Dhrystones per Second:                      714285.6

which is 1.55 DMIPS/MHz at 262 MHz.  It's still a bit slower than our
current stuff, but I don't remember what was actually in the HiFive1 so
I'm not sure what we should be getting.  I verified the clock is
accurate with a stopwatch.  I haven't bothered to go look through the
binary, but I think we're about 10 cycles off so it should be managable.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add linker scripts that target the scratchpad</title>
<updated>2017-06-14T15:53:39+00:00</updated>
<author>
<name>Palmer Dabbelt</name>
<email>palmer@dabbelt.com</email>
</author>
<published>2017-06-08T16:39:14+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=9b831bc77f8a7a0046899075aa0f0016478f5bf2'/>
<id>9b831bc77f8a7a0046899075aa0f0016478f5bf2</id>
<content type='text'>
Everything still defaults to the flash, but users can optionally select
the scratchpad.  Note that you have to be pretty careful about your
scratchpad programs, most of them won't fit.  For example, printf is too
big to fit in the scratchpad.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Everything still defaults to the flash, but users can optionally select
the scratchpad.  Note that you have to be pretty careful about your
scratchpad programs, most of them won't fit.  For example, printf is too
big to fit in the scratchpad.
</pre>
</div>
</content>
</entry>
<entry>
<title>Just lump all the RAM sections together</title>
<updated>2017-06-10T20:20:01+00:00</updated>
<author>
<name>Palmer Dabbelt</name>
<email>palmer@dabbelt.com</email>
</author>
<published>2017-06-10T20:20:01+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=9cb0177cdf178e7f941341b98bf85289c6b30b1f'/>
<id>9cb0177cdf178e7f941341b98bf85289c6b30b1f</id>
<content type='text'>
Since our loader doesn't support multiple sections anyway, there's
really no reason to have all these sections floating around.  They're
causing trouble due to misalignment so it's easiest to just group them
together so we can properly enforce alignment.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Since our loader doesn't support multiple sections anyway, there's
really no reason to have all these sections floating around.  They're
causing trouble due to misalignment so it's easiest to just group them
together so we can properly enforce alignment.
</pre>
</div>
</content>
</entry>
<entry>
<title>Use the correct global pointer symbol</title>
<updated>2017-06-10T06:23:42+00:00</updated>
<author>
<name>Palmer Dabbelt</name>
<email>palmer@dabbelt.com</email>
</author>
<published>2017-06-10T06:20:22+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=323592969d8d60a5c262aba34c2d75980208dab8'/>
<id>323592969d8d60a5c262aba34c2d75980208dab8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't use .section\nALIGN, reorder sdata and srodata</title>
<updated>2017-06-10T06:23:02+00:00</updated>
<author>
<name>Palmer Dabbelt</name>
<email>palmer@dabbelt.com</email>
</author>
<published>2017-06-10T06:15:52+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=185e62e71e5db52e76f3c7e57e4de15d5688cb2e'/>
<id>185e62e71e5db52e76f3c7e57e4de15d5688cb2e</id>
<content type='text'>
I'm hoping this will make everything more likely to align.  We can't use
the other mechanism because our loader is lazy and assumes all the
sections are contiguous.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
I'm hoping this will make everything more likely to align.  We can't use
the other mechanism because our loader is lazy and assumes all the
sections are contiguous.
</pre>
</div>
</content>
</entry>
<entry>
<title>Specify alignment on the .sdata and .srodata sections</title>
<updated>2017-06-09T04:59:58+00:00</updated>
<author>
<name>Palmer Dabbelt</name>
<email>palmer@dabbelt.com</email>
</author>
<published>2017-06-09T04:58:46+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=a05948f5d0630aaa62f7d296e5f3ed78409c433f'/>
<id>a05948f5d0630aaa62f7d296e5f3ed78409c433f</id>
<content type='text'>
Without these alignment directives the sections are only required to be
aligned on word-sized boundries, but we sometimes require double-word
alignment.  This allows the linker to sanely emit these sections.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Without these alignment directives the sections are only required to be
aligned on word-sized boundries, but we sometimes require double-word
alignment.  This allows the linker to sanely emit these sections.
</pre>
</div>
</content>
</entry>
<entry>
<title>Update SDK For E31/E51 Coreplex IP Evaluation</title>
<updated>2017-05-04T12:46:05+00:00</updated>
<author>
<name>Megan Wachs</name>
<email>megan@sifive.com</email>
</author>
<published>2017-05-04T12:46:05+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=4d5cbec9118cbedf2d4ae5b54acaa22862245a4c'/>
<id>4d5cbec9118cbedf2d4ae5b54acaa22862245a4c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use consistent OpenOCD config for Arty and HiFive1</title>
<updated>2017-01-24T18:14:13+00:00</updated>
<author>
<name>Megan Wachs</name>
<email>megan@sifive.com</email>
</author>
<published>2017-01-24T18:14:13+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=dd71fc76e9c40b394a923e3007cb69be787d9af9'/>
<id>dd71fc76e9c40b394a923e3007cb69be787d9af9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>reduce code duplication and apply the same flags to Arty board</title>
<updated>2017-01-11T22:25:45+00:00</updated>
<author>
<name>mwachs5</name>
<email>megan@sifive.com</email>
</author>
<published>2017-01-11T22:25:45+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=c7f7bec992d3d6787cf001892a24d0660ce192b1'/>
<id>c7f7bec992d3d6787cf001892a24d0660ce192b1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
