{"id":528,"date":"2006-08-12T22:48:46","date_gmt":"2006-08-13T03:48:46","guid":{"rendered":"http:\/\/blogs.law.harvard.edu\/hoanga\/2006\/08\/12\/how-to-make-a-dsp-hardware-project-be-"},"modified":"2006-08-12T22:48:46","modified_gmt":"2006-08-13T03:48:46","slug":"how-to-make-a-dsp-hardware-project-be-on-time","status":"publish","type":"post","link":"https:\/\/archive.blogs.harvard.edu\/hoanga\/2006\/08\/12\/how-to-make-a-dsp-hardware-project-be-on-time\/","title":{"rendered":"How to make a DSP hardware project be on time"},"content":{"rendered":"<p><a name='a646'><\/a><\/p>\n<p><a href=\"http:\/\/www.rowetel.com\/blog\/?p=10\">Here<\/a> is an article describing<\/p>\n<p>a fairy tale (sadly) idea of how one would run a project for creating a product<\/p>\n<p>from DSP chips.   I&#8217;ll have to say it makes a lot of sense but what would<\/p>\n<p>be more interesting is some hard data on anyone that has actually managed to<\/p>\n<p>apply this idea:<\/p>\n<p><em><\/p>\n<p>This is OK for a simple algorithm, but what if it is even moderately complex?<\/p>\n<p>Then you are dealing with (i) a very complex algorithm and (ii) very complex<\/p>\n<p>assembler all at the same time. This is usually too much for mere mortals (and<\/p>\n<p>even minor deities). The result is long, painful development, failed projects,<\/p>\n<p>late nights, angry spouses, and lots of pizza (well its not all bad I guess).<\/p>\n<p><\/p>\n<p>The trick is to divide and conquer. Make sure we are only hitting one tough<\/p>\n<p>problem at any given time.  <\/p>\n<p> <\/p>\n<p>One approach I have found very useful is bit<\/p>\n<p>exact porting to assembler.<\/p>\n<p><\/p>\n<p>There are two important steps:<\/p>\n<p><\/p>\n<ol>\n<li>  At the fixed point C stage, you test very very carefully. Run batteries\n<p>of tests and simulations. These can be performed on a regular PC in non real<\/p>\n<p>time, using powerful debuggers. The idea is to verify that:<\/p>\n<p><\/p>\n<p>(i) The algorithm is OK and <\/p>\n<p><\/p>\n<p>(ii) The fixed point port works OK. <\/p>\n<p><\/p>\n<p>In particular (ii) is very tough, so its nice to handle this in a relatively<\/p>\n<p>benign environment like a PC or<\/p>\n<p>workstation.<\/p>\n<\/li>\n<li> Port each function to real time assembler one by one. Test each function\n<p>against the fixed point C reference. Make sure the functions give IDENTICAL<\/p>\n<p>output &#8211; right down to the last bit. This takes a lot of discipline &#8211; near<\/p>\n<p>enough is NOT good enough.  <\/p>\n<\/li>\n<\/ol>\n<p><\/em><\/p>\n<p><a href=\"http:\/\/www.rowetel.com\/blog\/?p=10\">Read it yourself<\/a> <\/p>\n<p><\/p>\n<p>Kudos to <a href=\"http:\/\/joel.reddit.com\">Joel&#8217;s Reddit page<\/a> for this one.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here is an article describing a fairy tale (sadly) idea of how one would run a project for creating a product from DSP chips. I&#8217;ll have to say it makes a lot of sense but what would be more interesting is some hard data on anyone that has actually managed to apply this idea: This [&hellip;]<\/p>\n","protected":false},"author":704,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1212],"tags":[],"class_list":["post-528","post","type-post","status-publish","format-standard","hentry","category-tagme"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/archive.blogs.harvard.edu\/hoanga\/wp-json\/wp\/v2\/posts\/528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/archive.blogs.harvard.edu\/hoanga\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/archive.blogs.harvard.edu\/hoanga\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/archive.blogs.harvard.edu\/hoanga\/wp-json\/wp\/v2\/users\/704"}],"replies":[{"embeddable":true,"href":"https:\/\/archive.blogs.harvard.edu\/hoanga\/wp-json\/wp\/v2\/comments?post=528"}],"version-history":[{"count":0,"href":"https:\/\/archive.blogs.harvard.edu\/hoanga\/wp-json\/wp\/v2\/posts\/528\/revisions"}],"wp:attachment":[{"href":"https:\/\/archive.blogs.harvard.edu\/hoanga\/wp-json\/wp\/v2\/media?parent=528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/archive.blogs.harvard.edu\/hoanga\/wp-json\/wp\/v2\/categories?post=528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/archive.blogs.harvard.edu\/hoanga\/wp-json\/wp\/v2\/tags?post=528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}