<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>un.codiert.org</title>
	<atom:link href="http://un.codiert.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://un.codiert.org</link>
	<description>some thoughts of Benjamin Krill</description>
	<lastBuildDate>Thu, 04 Oct 2012 09:15:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Firefox sync (weave)</title>
		<link>http://un.codiert.org/2011/01/firefox-sync-weave/</link>
		<comments>http://un.codiert.org/2011/01/firefox-sync-weave/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 13:47:51 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=170</guid>
		<description><![CDATA[Mozilla provides a very nice add-on called &#8220;Firefox Sync&#8221; (included in FF4). It synchronise bookmarks, history, passwords, etc to a server, of course data will be stored encrypted. There is a nice blog post which provides a link to a tiny weave minimal server implementation. After installation you just can point the sync add-on to <a href="http://un.codiert.org/2011/01/firefox-sync-weave/#more-170" class="more-link">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Mozilla provides a very nice add-on called &#8220;Firefox Sync&#8221; (included in FF4). It synchronise bookmarks, history, passwords, etc to a server, of course data will be stored encrypted. There is a nice blog <a href="http://tobyelliott.wordpress.com/2009/09/11/weave-minimal-server/" target="_blank">post</a> which provides a link to a tiny weave minimal server implementation. After installation you just can point the sync add-on to it and keep all your Firefox installations synchronised.</p>
<p>happy synchronisation&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2011/01/firefox-sync-weave/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenSolaris on OpenSPARC T1</title>
		<link>http://un.codiert.org/2010/08/opensolaris-on-opensparc-t1/</link>
		<comments>http://un.codiert.org/2010/08/opensolaris-on-opensparc-t1/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 20:48:12 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[FPGA]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=150</guid>
		<description><![CDATA[When the XUPV5 board arrived (in 2008) it already was configured to boot OpenSolaris on the OpenSPARC T1 processor. I just did a short boot and looked at the serial prompt. This was the whole experience I made with the default set-up. Since the board was needed for other projects, I deleted the files from <a href="http://un.codiert.org/2010/08/opensolaris-on-opensparc-t1/#more-150" class="more-link">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://un.codiert.org/wp-content/uploads/2010/08/ultrasparcT1_overlay_die.jpg"><img class="alignleft size-medium wp-image-157" style="margin: 10px;" title="Ultrasparc T1" src="http://un.codiert.org/wp-content/uploads/2010/08/ultrasparcT1_overlay_die-300x300.jpg" alt="" width="126" height="126" /></a>When the XUPV5 board arrived (<a title="XUPV5" href="http://un.codiert.org/2008/08/v5osdk-aka-ml505/">in 2008</a>) it already was configured to boot OpenSolaris on the OpenSPARC T1 processor. I just did a short boot and looked at the serial prompt. This was the whole experience I made with the default set-up. Since the board was needed for other projects, I deleted the files from the SystemACE CF card. Last week I had some evening cycles and reactivated the set-up and  booted OpenSolaris on the T1 again. Here some notes about it.</p>
<p>Needed download: <a title="OpenSPARC T1 Core" href="http://www.opensparc.net/opensparc-t1/download.html">OpenSPARC T1 Core<br />
</a>Useful Documentation: <a title="OpenSPARC T1 Core" href="http://www.opensparc.net/opensparc-t1/download.html">quick start</a></p>
<p>After copying the OpenSPARCT1_1_7_os_boot.ace file into a free revN directory on the CF card and configure SW3 dips to the corresponding revN directory the board could be power-on. On the serial line the firmware boot shows up and after entering into the OpenBoot prompt OpenSolaris can be boot with the command &#8220;boot -mverbose&#8221;. Now it&#8217;s time to take a coffee, since the boot procedure takes roundabout 60 minutes. After finishing the boot procedure, a login prompt is displayed and it can be logged in the system to adjust the IP address for the local network. Now telnet can be used to log-in and to explore the system&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2010/08/opensolaris-on-opensparc-t1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xilinx JTAG Cable under Linux</title>
		<link>http://un.codiert.org/2010/08/xilinx-jtag-cable-under-linux/</link>
		<comments>http://un.codiert.org/2010/08/xilinx-jtag-cable-under-linux/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 09:06:27 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[FPGA]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=147</guid>
		<description><![CDATA[Again the issue with the Xilinx JTAG cable under Linux. This post is just a reminder&#8230; After putting the cable into the USB port, nothing happens. &#8216;lsusb&#8217; shows the device but the led on the JTAG box doesn&#8217;t light up, which means the firmware isn&#8217;t loaded. The firmware is provided by Xilinx and it can <a href="http://un.codiert.org/2010/08/xilinx-jtag-cable-under-linux/#more-147" class="more-link">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Again the issue with the Xilinx JTAG cable under Linux. This post is just a reminder&#8230; After putting the cable into the USB port, nothing happens. &#8216;lsusb&#8217; shows the device but the led on the JTAG box doesn&#8217;t light up, which means the firmware isn&#8217;t loaded. The firmware is provided by Xilinx and it can be loaded with:</p>
<pre>/sbin/fxload -v -t fx2 -I /usr/share/xusb_xlp.hex -D /proc/bus/usb/&lt;bus&gt;/&lt;dev&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2010/08/xilinx-jtag-cable-under-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iWARP/RDMA API</title>
		<link>http://un.codiert.org/2010/01/iwarp-rdma-api/</link>
		<comments>http://un.codiert.org/2010/01/iwarp-rdma-api/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 09:53:41 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=120</guid>
		<description><![CDATA[New week, new API. I&#8217;m not the person who complains about APIs, but the RDMA API is somehow scary. For a simple &#8220;HelloWorld&#8221; data transfer program I had to write over 600 lines of code. Just think about that, if everybody has to code 600 lines to get a connection and a remote buffer to <a href="http://un.codiert.org/2010/01/iwarp-rdma-api/#more-120" class="more-link">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>New week, new API. I&#8217;m not the person who complains about APIs, but the RDMA API is somehow scary. For a simple &#8220;HelloWorld&#8221; data transfer program I had to write over 600 lines of code. Just think about that, if everybody has to code 600 lines to get a connection and a remote buffer to work on that buffer, that is not very maintainable. Anyway, I have the impression that this API isn&#8217;t used by very much people and the majority just use the upper layers, like distributed filesystems or MPI. Of course, there are lots of attributes which can be configured and you have the complete control, but that only make sense if you want the last percent of performance, that is the only thing which could be rated as plus point. It would be nice if someone could explain me why this API is done this way&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2010/01/iwarp-rdma-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CUDA programming</title>
		<link>http://un.codiert.org/2010/01/cuda-programming/</link>
		<comments>http://un.codiert.org/2010/01/cuda-programming/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 14:54:30 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[CUDA]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=107</guid>
		<description><![CDATA[I started looking into the graphic card programming especially Nvdia CUDA stuff. After getting the SDK compiling under Fedora 12 (so far only possible with compat-gcc) first examples could be tested. It is quite impressive how fast and nice some tests look like. To get somehow familiar with the framework, I wrote a simple memcpy <a href="http://un.codiert.org/2010/01/cuda-programming/#more-107" class="more-link">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>I started looking into the graphic card programming especially Nvdia CUDA stuff. After getting the SDK compiling under Fedora 12 (so far only possible with compat-gcc) first examples could be tested. It is quite impressive how fast and nice some tests look like.</p>
<p>To get somehow familiar with the framework, I wrote a simple memcpy program which copies from host memory to device memory and vice versa. The results are quite nice.</p>
<pre>Host to Device: 2149.465255 Mbyte/s
Device to Host: 1609.497326 Mbyte/s
</pre>
<p>In detail, the program allocates pinned memory on host side and global memory space on device side and the measurement only measures the time of the copy routine.</p>
<p>The next simple experiment was to lunch a so called kernel (program on the GPU). For the experiment I just copied an initialized memory region to the global device memory, did a floating point multiplication and copied the result back into host memory. To compare the measured time I did the same multiplication with the host CPU on an equal region of memory.</p>
<pre>GPU w/out memcpy: 1.796128 ms
Host CPU        : 3.556544 ms</pre>
<p>Hardware used: Lenovo T61p, Nvidia Quadro FX 570M.</p>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2010/01/cuda-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VHDL: Get needed bit count for a given number</title>
		<link>http://un.codiert.org/2009/07/vhdl-get-needed-bit-count-for-a-given-number/</link>
		<comments>http://un.codiert.org/2009/07/vhdl-get-needed-bit-count-for-a-given-number/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 11:09:09 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[FPGA]]></category>
		<category><![CDATA[VHDL]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=99</guid>
		<description><![CDATA[The following recursive VHDL function provides the needed bit count for a given integer number. function len(x: integer) return integer is begin if (x&#60;=1) then return 1;  else return 1+len(x/2); end if; end len;]]></description>
				<content:encoded><![CDATA[<p>The following recursive VHDL function provides the needed bit count for a given integer number.</p>
<pre>function len(x: integer) return integer is
begin
  if (x&lt;=1) then return 1;
  else return 1+len(x/2);
  end if;
end len;</pre>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2009/07/vhdl-get-needed-bit-count-for-a-given-number/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A way to decide either one or more bits are active (VHDL)</title>
		<link>http://un.codiert.org/2009/04/a-way-to-decide-either-one-or-more-bits-are-active-vhdl/</link>
		<comments>http://un.codiert.org/2009/04/a-way-to-decide-either-one-or-more-bits-are-active-vhdl/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 08:53:53 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[FPGA]]></category>
		<category><![CDATA[VHDL]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=95</guid>
		<description><![CDATA[This solution solves the issue on, how to detect either one or more bits are active in a bit array. The technique is quite easy, just isolate one of the bits. This can be done by the same technique as known from the arbiter implementation. Calculate the two’s complement of the bit array signal and <a href="http://un.codiert.org/2009/04/a-way-to-decide-either-one-or-more-bits-are-active-vhdl/#more-95" class="more-link">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>This solution solves the issue on, how to detect either one or more bits are active in a bit array. The technique is quite easy, just isolate one of the bits. This can be done by the same technique as known from the <a href="http://http://un.codiert.org/2009/04/round-robin-arbiter-vhdl/">arbiter</a> implementation. Calculate the two’s complement of the bit array signal and bitwise AND the result with the same array line (1).</p>
<pre style="padding-left: 30px;">(1) b &lt;= a and (not a)+1;</pre>
<p>This equation isolate the least significant bit. Since we just want to know if there are more than one bit is active, the next step is to mask out (2) the detected bit from (1) and compare the result with zero (3). If the result is zero, no other bit was active.</p>
<pre style="padding-left: 30px;">(2) c &lt;= not b and a;
(3) morebits &lt;= '0' when c = 0 else '1';</pre>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2009/04/a-way-to-decide-either-one-or-more-bits-are-active-vhdl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Round Robin Arbiter (VHDL)</title>
		<link>http://un.codiert.org/2009/04/round-robin-arbiter-vhdl/</link>
		<comments>http://un.codiert.org/2009/04/round-robin-arbiter-vhdl/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 21:40:35 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[FPGA]]></category>
		<category><![CDATA[VHDL]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=80</guid>
		<description><![CDATA[Here a very cute method to implement an FPGA round robin arbiter, inspired by [1]. Assumption Incoming signals &#8220;req&#8221;/&#8221;ack&#8221;, outgoing signal &#8220;grant&#8221;. Needed Behaviour req = &#8220;0001000&#8243; =&#62; grant = &#8220;0001000&#8243; -ACK- grant = &#8220;0001000&#8243; req = &#8220;0011000&#8243; =&#62; grant = &#8220;0010000&#8243; -ACK- grant = &#8220;0001000&#8243; -ACK- grant = &#8220;0010000&#8243; &#8230; Technique To create a <a href="http://un.codiert.org/2009/04/round-robin-arbiter-vhdl/#more-80" class="more-link">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Here a very cute method to implement an FPGA round robin arbiter, inspired by [1].</p>
<p><strong>Assumption</strong><br />
Incoming signals &#8220;req&#8221;/&#8221;ack&#8221;, outgoing signal &#8220;grant&#8221;.</p>
<p><strong>Needed Behaviour</strong><br />
req = &#8220;0001000&#8243; =&gt; grant = &#8220;0001000&#8243; -ACK- grant = &#8220;0001000&#8243;<br />
req = &#8220;0011000&#8243; =&gt; grant = &#8220;0010000&#8243; -ACK- grant = &#8220;0001000&#8243; -ACK- grant = &#8220;0010000&#8243; &#8230;</p>
<p><strong>Technique<br />
</strong>To create a priority arbiter, we just calculate the two&#8217;s complement of the request signal and bitwise AND the result with the request line (1). As result the least significant bit has the highest priority. This equation always returns the request with the highest priority.</p>
<pre>(1) gnt &lt;= req and not(req)+1;</pre>
<p>To create a round robin arbiter we have to save the previous grant signal. We use this signal to masked out the previous grant signal (2) and use the method from (1) to get the least significant active bit.</p>
<pre>(2) reqs &lt;= req and not ((pre_gntM - 1) or pre_gntM);
(1) gnts &lt;= reqs and not(reqs)+1;</pre>
<p>The last step to implement the RR-Arbiter is to select between &#8220;gnt&#8221; and &#8220;gnts&#8221; (3). If all previous grant signals are masked we just start with the highest priority of equation (1).</p>
<pre>(3) gntM &lt;= gnts when reqs /= 0 else gnt;</pre>
<p><strong>Conclusion</strong><br />
This technique can be used to create a round robin arbiter for any number of input bits. Only one parameter must be changed so increase/decrease inputs and outputs.</p>
<p>[update 2010] Since I got some requests, <a href="http://un.codiert.org/wp-content/uploads/2010/08/rrarbiter.txt">Round Robin Arbiter</a>.</p>
<p>[1] http://stackoverflow.com/questions/480405/finding-the-next-in-round-robin-scheduling-by-bit-twiddling</p>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2009/04/round-robin-arbiter-vhdl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Motor Center &#8211; Indoor</title>
		<link>http://un.codiert.org/2009/02/motor-center-indoor/</link>
		<comments>http://un.codiert.org/2009/02/motor-center-indoor/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 20:19:09 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[small talk]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=77</guid>
		<description><![CDATA[Today I had a great day. I spend the whole day in Villingen and drove my motorbike on an indoor track (http://www.mo-ce.de/). It was the first time this year and the first time indoor. Also the handling of the motorbike was complete different, this could be related to the new suspension I invested during the <a href="http://un.codiert.org/2009/02/motor-center-indoor/#more-77" class="more-link">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Today I had a great day. I spend the whole day in Villingen and drove my motorbike on an indoor track (<a href="http://www.mo-ce.de/">http://www.mo-ce.de/</a>). It was the first time this year and the first time indoor. Also the handling of the motorbike was complete different, this could be related to the new <a href="http://www.mx-world.de/">suspension</a> I invested during the winter time. So hopefully, I will have time to join the track again.</p>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2009/02/motor-center-indoor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lot of code updates (LCD, Cypress USB, USB to Wishbone)</title>
		<link>http://un.codiert.org/2009/01/lot-of-code-updates-lcd-cypress-usb-usb2wishbone/</link>
		<comments>http://un.codiert.org/2009/01/lot-of-code-updates-lcd-cypress-usb-usb2wishbone/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 08:22:23 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[FPGA]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[USB]]></category>

		<guid isPermaLink="false">http://un.codiert.org/?p=74</guid>
		<description><![CDATA[During the vacation time a lot of code changes were made. Now it is time to write a little bit about the changes. The first thing was to write a Cypress USB to wishbone interface which gave the possibility to connect wishbone compliant modules to USB. As testcase the wishbone lcd driver should help to <a href="http://un.codiert.org/2009/01/lot-of-code-updates-lcd-cypress-usb-usb2wishbone/#more-74" class="more-link">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>During the vacation time a lot of code changes were made. Now it is time to write a little bit about the changes. The first thing was to write a Cypress USB to wishbone interface which gave the possibility to connect wishbone compliant modules to USB. As testcase the wishbone <a title="Wishbone Lcd module" href="http://un.codiert.org/2008/08/first-fun-with-the-v5osdk-aka-ml505-fpga/">lcd</a> driver should help to get the interface stable. Some changes regarding the LCD clock as to be made because the first implementation used the slow clock, which is needed for the lcd, for the whole design. Now a fast clock is used and the lcd module generates a slower clock for the lcd interface. Further changes were made in the Cypress bios to support the new usb2wb (USB to Wishbone) interface. What should I tell, so far everything works great. With a program which uses calls from libusb, it is now possible to initialize the lcd and drop characters to it.</p>
]]></content:encoded>
			<wfw:commentRss>http://un.codiert.org/2009/01/lot-of-code-updates-lcd-cypress-usb-usb2wishbone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
