<?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>Dooba.net &#187; Uncategorized</title>
	<atom:link href="http://dooba.net/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://dooba.net</link>
	<description>Tech, Science, Insanity</description>
	<lastBuildDate>Tue, 06 Mar 2012 05:30:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Will Smartphones Replace Digital Cameras?</title>
		<link>http://dooba.net/2012/03/03/will-smartphones-replace-digital-cameras/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=will-smartphones-replace-digital-cameras</link>
		<comments>http://dooba.net/2012/03/03/will-smartphones-replace-digital-cameras/#comments</comments>
		<pubDate>Sat, 03 Mar 2012 22:44:31 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dooba.net/?p=262</guid>
		<description><![CDATA[With smartphone cameras becoming more and more advanced, it is perhaps unsurprising that many have suggested that they may soon replace the need for separate cameras altogether. However, both options can still be seen to have certain advantages over the other&#8230; Of course, one of the main advantages of smartphones is that they&#8217;re convenient. With [...]]]></description>
			<content:encoded><![CDATA[<p>With smartphone cameras becoming more and more advanced, it is perhaps unsurprising that many have suggested that they may soon replace the need for separate cameras altogether. However, both options can still be seen to have certain advantages over the other&#8230;</p>
<p>Of course, one of the main advantages of smartphones is that they&#8217;re convenient. With a huge variety of makes, models and contracts available from providers such as <a href="http://www.o2.co.uk/">O2</a> and AT&amp;T, it&#8217;s little wonder that, these days, a huge number of people own a smartphone, and tend to have it with them wherever they go. For those who may not be professional photographers, but simply want to capture their favourite memories whilst on the go, the smartphone offers the advantage of always being close at hand. Using apps to link with sites such as Facebook can also mean that it&#8217;s much easier to upload photos quickly and easily &#8211; something which some may feel is more valuable that having pictures which are of a exceptionally high quality.</p>
<p>However, another factor which may influence those thinking about buying a camera is the price. The price of a smartphone can be far higher than that of a basic digital camera &#8211; especially if the phone camera is not particularly advanced. If the cost is a deciding factor, then then some people looking to take great photos may decide that they&#8217;re rather simple pay less and have a separate camera and phone.</p>
<p>Finally, it is worth remembering that despite the fact the the quality of smartphone cameras has greatly improved over recent years, they are still generally unable to match up to that of advanced digital camera alternatives. To those for whom picture quality is a priority, digital cameras are likely to remain the most popular choice.</p>
]]></content:encoded>
			<wfw:commentRss>http://dooba.net/2012/03/03/will-smartphones-replace-digital-cameras/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VHDL Reset</title>
		<link>http://dooba.net/2010/07/27/vhdl-reset/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vhdl-reset</link>
		<comments>http://dooba.net/2010/07/27/vhdl-reset/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 03:21:29 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[VHDL]]></category>

		<guid isPermaLink="false">http://dooba.net/?p=234</guid>
		<description><![CDATA[In most HW systems you need a way to do a system reset, but you obviously don&#8217;t want your reset line to miss fire and kill your system. Also, you don&#8217;t want to deal with multiple resets due to bouncing. And depending on your operating environment, you may need to protect your resets from SEI&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>In most HW systems you need a way to do a system reset, but you obviously don&#8217;t want your reset line to miss fire and kill your system. Also, you don&#8217;t want to deal with multiple resets due to bouncing. And depending on your operating environment, you may need to protect your resets from SEI&#8217;s from radiation or whatever.</p>
<p>Below details a simple solution to debounce and enforce a minimum reset hold time in your code.</p>
<p>&#8212;&#8212;</p>
<p>I use Generics in my entity so I can set the sys clk rate and the minimum width for the reset pulse easily:</p>
<blockquote>
<div id="_mcePaste">entity rst_detect is</div>
<div id="_mcePaste">generic(</div>
<div id="_mcePaste">clk_rate_mhz : integer := 20000000;</div>
<div id="_mcePaste">min_width_us : integer := 10000</div>
<div id="_mcePaste">);</div>
<div id="_mcePaste">port(</div>
<div id="_mcePaste">clk     : in std_logic;</div>
<div id="_mcePaste">rst_in  : in std_logic;</div>
<div id="_mcePaste">rst_out : out std_logic</div>
<div id="_mcePaste">);</div>
<div id="_mcePaste">end entity</div>
</blockquote>
<blockquote><p>architecture rtl of por_detect is</p>
<p>&#8211; to get the minimum ticks for a valid por,</p>
<p>&#8211; find the ticks per 1MHz (or 1us) and then</p>
<p>&#8211; multiply by the min us value</p>
<p>constant MIN_TICKS : integer := integer(ceil(real((clk_rate_mhz/1000000)*min_width_us)));</p>
<p>&#8211; min bit width of the counter for to count to min_ticks</p>
<p>constant COUNTER_WID : integer := integer(ceil(log2(real(MIN_TICKS))));</p>
<p>constant MAX_COUNT : integer := integer((2**COUNTER_WID) &#8211; 1);</p>
<p>signal count : std_logic_vector(COUNTER_WID &#8211; 1 downto 0) := (others =&gt; &#8217;0&#8242;);</p>
<p>&#8211;start and stop counter vals</p>
<p>signal s_count : std_logic_vector(COUNTER_WID &#8211; 1 downto 0);</p>
<p>type   por_state_t is (POR_IDLE, POR_WAIT, POR_OUTPUT);</p>
<p>signal por_state : por_state_t := POR_IDLE;</p>
<p>begin</p>
<p>counter : process(clk) begin</p>
<p>if(rising_edge(clk)) then</p>
<p>count &lt;= count + 1;</p>
<p>end if;</p>
<p>end process;</p>
<p>por_det : process(clk) begin</p>
<p>if(rising_edge(clk)) then</p>
<p>case por_state is</p>
<p>when POR_IDLE =&gt;</p>
<p>por_out &lt;= &#8217;0&#8242;;</p>
<p>if(por_in = &#8217;1&#8242;) then</p>
<p>s_count   &lt;= count;</p>
<p>por_state &lt;= POR_WAIT;</p>
<p>else</p>
<p>por_state &lt;= POR_IDLE;</p>
<p>end if;</p>
<p>when POR_WAIT =&gt;</p>
<p>if(por_in = &#8217;0&#8242;) then</p>
<p>por_state &lt;= POR_IDLE;</p>
<p>else</p>
<p>if(count &gt; s_count) then</p>
<p>if(count &#8211; s_count &gt;= MIN_TICKS) then</p>
<p>por_out   &lt;= &#8217;1&#8242;;</p>
<p>por_state &lt;= POR_OUTPUT;</p>
<p>else</p>
<p>por_state &lt;= POR_WAIT;</p>
<p>end if;</p>
<p>else</p>
<p>if((MAX_COUNT &#8211; s_count) + count &gt;= MIN_TICKS) then</p>
<p>por_out   &lt;= &#8217;1&#8242;;</p>
<p>por_state &lt;= POR_OUTPUT;</p>
<p>else</p>
<p>por_state &lt;= POR_WAIT;</p>
<p>end if;</p>
<p>end if;</p>
<p>end if;</p>
<p>when POR_OUTPUT =&gt;</p>
<p>if(por_in = &#8217;0&#8242;) then</p>
<p>por_out &lt;= &#8217;0&#8242;;</p>
<p>por_state &lt;= POR_IDLE;</p>
<p>else</p>
<p>por_state &lt;= POR_OUTPUT;</p>
<p>end if;</p>
<p>when others =&gt;</p>
<p>por_out   &lt;= &#8217;0&#8242;;</p>
<p>por_state &lt;= POR_IDLE;</p>
<p>end case;</p>
<p>end if;<br />
end process;</p>
<p>end architecture rtl</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://dooba.net/2010/07/27/vhdl-reset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple UDP</title>
		<link>http://dooba.net/2009/06/23/simple-udp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=simple-udp</link>
		<comments>http://dooba.net/2009/06/23/simple-udp/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 16:00:34 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Xilinx]]></category>
		<category><![CDATA[Ethernet]]></category>
		<category><![CDATA[FPGA]]></category>

		<guid isPermaLink="false">http://dooba.net/?p=152</guid>
		<description><![CDATA[There are many reasons why you might need to send data or messages between devices on your network. Maybe you want to control a remote box, or you have a small linux setup running somewhere remotely and you want to sent and receive data. There are obviously several ways to do this, and one is [...]]]></description>
			<content:encoded><![CDATA[<p>There are many reasons why you might need to send data or messages between devices on your network. Maybe you want to control a remote box, or you have a small linux setup running somewhere remotely and you want to sent and receive data. There are obviously several ways to do this, and one is using sockets and UDP.</p>
<p>This code came about when I needed to talk to an embeded CPU in a Xilinx FPGA. I have ethernet on the card as well, and the CPU is setup to handle it. I wanted to send control commands to the CPU from my Linux workstation to verify some functionality. To do this, I have two pieces of code: (1) a &#8220;server&#8221; that spins on the FPGA and receives the incoming messages, and a &#8220;client&#8221; app that can send a command to the &#8220;server&#8221;. This is a trvial example and the code is basic, but you can see how easy it would be to expand as needed.</p>
<p>The Client:</p>
<pre name="code" class="c">
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>

void die(char* msg) { perror(msg); exit(1); }

int main(int argc, char *argv[]) {
	int sock;
	struct sockaddr_in server;
	unsigned short int serverPort = 9999;

	sock= socket(AF_INET, SOCK_DGRAM, 0);
	if(sock < 0 ) die("failed to create socket");

	server.sin_family = AF_INET;
	server.sin_addr.s_addr = inet_addr("127.0.0.1");
	server.sin_port = serverPort; .

	char msg[] = "Hello World. ";
	printf("We will send the message: \"%s\" to the server. \n", msg);

	if (sendto(socketDescriptor, msg, strlen(msg), 0, (struct sockaddr *) &#038;server, sizeof(server)) < 0) {
                   die("failed to send message");
	}

	return 0;
}
</pre>
<p>And now the Server:</p>
<pre name="code" class="c">
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>

#define BUFFSIZE 255
void Die(char* msg) { perror(msg); exit(1); }

int main(int argc, char* argv[]){
	int sock;
	struct sockaddr_in echoserver;
	struct sockaddr_in echoclient;

	char buffer[BUFFSIZE];
	unsigned int echolen, serverlen, clientlen;
	int rec = 0;

	if(argc != 2){
		fprintf(stderr, "USAGE: %s
<port>\n", argv[0]);
		exit(1);
	}

	/* create UDP socket */
	if((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0){
		Die("failed to create socket");
	}

	memset(&#038;echoserver, 0, sizeof(echoserver));
	echoserver.sin_family = AF_INET;
	echoserver.sin_addr.s_addr = htonl(INADDR_ANY);
	echoserver.sin_port = htons(atoi(argv[1]));

	serverlen = sizeof(echoserver);
	if(bind(sock, (struct sockaddr *) &#038;echoserver, serverlen) < 0) {
		Die("failed to bind.");
	}

	while(1){

		clientlen = sizeof(echoclient);
		if((rec = recvfrom(sock, buffer, BUFFSIZE, 0, (struct sockaddr*)&#038;echoclient, &#038;clientlen)) < 0){
			Die("failed to rec mesg");
		}
		printf("client connected: %s\nData: %s\n\n", inet_ntoa(echoclient.sin_addr),buffer);

	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://dooba.net/2009/06/23/simple-udp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
