<?xml version="1.0" encoding="utf-8"?>
        <?xml-stylesheet type="text/css" href="http://tstotts.net/blog/"?>
<rss version="2.0"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:admin="http://webns.net/mvcb/"
 xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title>Filed under: engineering | tstotts dot net Weblog</title>
<atom:link href="http://tstotts.net/blog/archives/engineering/index-rss.xml" rel="self" type="application/rss+xml" />
<link>http://tstotts.net/blog</link>
<description>jumbled items that fit nowhere else</description>
<dc:language>en-us</dc:language>
<dc:creator>timotheus</dc:creator>
<dc:date>2009-12-07T20:10:25-05:00</dc:date>
<admin:generatorAgent rdf:resource="http://nanoblogger.sourceforge.net" />

<item>
<link>http://tstotts.net/blog/archives/2009/11/10/ezra_red_trac/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/11/10/ezra_red_trac/</guid>
<title>ezra red trac</title>
<dc:date>2009-11-10T01:43:56-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> software, engineering</dc:subject>
<description><![CDATA[
<p class="image"><img class="left" src="/img/blog/trac_feet.png"
alt="[Trac feet]" width="48" height="48" />

To further expedite my efforts at developing Ezra Red &mdash; my HDL revising and
rewriting application &mdash; I have created a Trac wiki and ticket site for the
project. The <a href="https://secure.tstotts.net/trac/ezrared">Ezra Red Trac site</a> permits anonymous viewing of all project
progress and tickets. Actual source-code viewing is not permitted though as
this application is closed-source.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/10/15/ezra_red_application/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/10/15/ezra_red_application/</guid>
<title>ezra red application</title>
<dc:date>2009-10-15T00:33:18-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> software, engineering</dc:subject>
<description><![CDATA[<p>“Ezra Red” is the code name for the new <a href="http://en.wikipedia.org/wiki/Hardware_description_language">HDL</a> revising and rewriting application
that I am developing as a personal project. After several weeks of studying
the Netbeans platform, I have begun a branch of my original HDL rewriting
application that will utilize the <a href="http://platform.netbeans.org">Netbeans RCP</a> instead of a custom
command-line interface and a custom Swing GUI. Using the Netbeans Platform as
a basis for my application will allow me to focus more on discipline specific
coding, such as the language parsing and tree rewriting of an HDL project; and
not spend so much time concerning myself with the presentation and usability
of the application. To track what functionality needs to be implemented, I
have created a <a href="http://tstotts.net/blog/articles/ezra_red_task_list/">Task List</a>.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/09/22/netbeans_study-up/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/09/22/netbeans_study-up/</guid>
<title>netbeans study-up</title>
<dc:date>2009-09-22T23:34:17-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> software, engineering</dc:subject>
<description><![CDATA[
<p class="image"><img class="left" src="/img/blog/netbeans_logo1.png"
alt="[Netbeans Cube]" width="55" height="55" />

After some futher consideration, I have elected to try creating a branch of my
<a href="http://en.wikipedia.org/wiki/Hardware_description_language">HDL</a> rewriting tool as a combination of the <a href="http://www.antlr.org">Antlr v3</a> and <a href="http://www.netbeans.com">Netbeans</a> projects,
instead of Antlr with a custom user interface. Rather than reinvent what
another project freely provides, I hope to make a relatively adroit user
experience by utilizing the Netbeans Platform APIs. Watching the
<a href="http://platform.netbeans.org/tutorials/nbm-10-top-apis.html">API screencasts</a>, Netbeans could be just what I am looking for.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/09/15/hdl_model_rewriting_tool/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/09/15/hdl_model_rewriting_tool/</guid>
<title>hdl model rewriting tool</title>
<dc:date>2009-09-15T20:22:29-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> software, engineering</dc:subject>
<description><![CDATA[
<p class="image"><img class="left" src="/img/blog/java_1076-2008.png"
alt="[Java and VHDL]" width="139" height="111" />

To keep myself occupied while job searching, I have created the initial
workings of a software tool to rewrite <a href="http://en.wikipedia.org/wiki/Hardware_description_language">HDL</a> source files according to a set of
user-specified rules. The tool employs the open source <a href="http://www.antlr.org/">ANTLR v3</a> project to
implement a full <a href="http://en.wikipedia.org/wiki/Vhdl">VHDL-2008</a> lexer and parser. (<a href="http://en.wikipedia.org/wiki/Verilog">Verilog</a> might also be added.)
The open source ANTLR technology
supports building
token rewritable <a href="http://en.wikipedia.org/wiki/Abstract_syntax_tree">Abstract Syntax Trees</a>; and I have created IEEE 1076-2008
compliant grammar files that make full use of this feature. The grammars are
complete, unsimplified, and modestly optimized for <a href="http://en.wikipedia.org/wiki/LL_parser">LL(*) parsing</a> speed.</p>

<p>For the time being I have chosen not to release many details, including
potential <a href="http://en.wikipedia.org/wiki/Use_case">use cases</a>, or even what I hope the tool to have as an eventual
product name (trademarked?). However, the
basic functionality of the software is simple: input HDL models, analyze,
rewrite according to a set of high-level user-provided rules, output new valid
and verified HDL models. As of now, the lexer, parser, and <a href="http://en.wikipedia.org/wiki/Xml">XML</a> &quot;project file&quot;
file format are implemented and working, along with automated high-level
regression <a href="http://en.wikipedia.org/wiki/Test_case">test cases</a>; and a <a href="http://en.wikipedia.org/wiki/Graphical_user_interface">graphical user interface</a> is under development. My
first milestone of functionality completed is the ability to&mdash;what I will term
&quot;hardcode&quot; or &quot;partially-compile&quot;&mdash;fully evaluate <code>constant</code> declarations within
a VHDL project, within the VHDL context of <code>package</code>, <code>architecture</code>, or <code>entity</code>,
and then remove the declaration(s) from the sources.</p>

<p>After some extensive research, the most cost-effective route for implementing
a proprietary HDL rewriting tool, based on <a href="http://en.wikipedia.org/wiki/Compiler_theory">compiler theory</a> (and not just
scripting some <a href="http://en.wikipedia.org/wiki/Regular_expression">regular expressions</a>), with lowest-cost technology turned out to
be <a href="http://en.wikipedia.org/wiki/Java_(software_platform)">Java</a>. The Java language has a good selection of mature <a href="http://en.wikipedia.org/wiki/Compiler-compiler">compiler-compilers</a>
available for the creation of lexers and parsers.
This particular language will also allow the tool to operate on nearly any
desktop, and not just the Windows operating system.  Since the tool is not
intended as a source code editor, but rather a batch operation processor, a
custom <a href="http://en.wikipedia.org/wiki/Swing_(Java)">Swing</a> GUI was decided to be
sufficient. Had I intended the tool to be a source code editor I probably
would have followed the path of other developers in creating an extension of
the <a href="http://en.wikipedia.org/wiki/Eclipse_(software)">Eclipse</a> or <a href="http://en.wikipedia.org/wiki/Netbeans">Netbeans</a> projects. My modest, yet pragmatic GUI will allow the
user to create an XML project file that specifies a list of batch operations
and their respective parameters.</p>]]></description>

</item>
<item>
<link>http://tstotts.net/blog/archives/2009/04/28/vhdl_modular_design/</link>
<guid isPermaLink="true">http://tstotts.net/blog/archives/2009/04/28/vhdl_modular_design/</guid>
<title>vhdl modular design</title>
<dc:date>2009-04-28T01:18:25-05:00</dc:date>
<dc:creator>timotheus</dc:creator>
<dc:subject> vhdl, software, books, engineering</dc:subject>
<description><![CDATA[<p>With his text, <a href="http://www.amazon.com/exec/obidos/ASIN/0071475451">VHDL: Modular Design and Synthesis of Cores and Systems</a>,
professor Z. Navabi of <a href="http://www.northeastern.edu/">Northeastern University</a> dives into VHDL as a modern
software modeling tool for <a href="http://en.wikipedia.org/wiki/Application-specific_integrated_circuit">ASIC</a> and <a href="http://en.wikipedia.org/wiki/Fpga">FPLD</a> designs. He provides a quick overview
of implementing VHDL designs, testbenches, and configurations; and then
continues to build upon this foundation with an in-depth treatment of the VHDL
language. The book concludes with designing testable cores and the full
development of a processor core.</p>

<p>Following his text and implementing each of the chapter problems, I have
noticed a few areas of his language treatment that were ignored both in my
classroom studies as well as my industry experience. One such language feature
is the VHDL block with guarded signal assignment.</p>

<p>The VHDL block is essentially the concurrent analogy to the sequential
process. Both may be used to create latches and flip-flops. As an example, the
following shows a D flip-flop in both concurrent (block) and sequential
(process) forms.</p>

<pre class="src"><span style="color: #b22222;">-- </span><span style="color: #b22222;">Concurrent D flip-flop with rising edge sensitivity.
</span><span style="color: #0000ff;">dff_concur</span>: <span style="color: #a020f0;">BLOCK</span> (clk = <span style="color: #bc8f8f;">'1'</span> <span style="color: #a020f0;">AND</span> <span style="color: #a020f0;">NOT</span> clk'<span style="color: #da70d6;">STABLE</span>)
<span style="color: #a020f0;">BEGIN</span>
  q &lt;= <span style="color: #a020f0;">GUARDED</span> d;
<span style="color: #a020f0;">END</span> <span style="color: #a020f0;">BLOCK</span> <span style="color: #0000ff;">dff_concur</span>;
</pre>

<pre class="src"><span style="color: #b22222;">-- </span><span style="color: #b22222;">Sequential D flip-flop with rising edge sensitivity.
</span><span style="color: #0000ff;">dff_sequent</span>: <span style="color: #a020f0;">PROCESS</span> (clk)
<span style="color: #a020f0;">BEGIN</span>
  <span style="color: #a020f0;">IF</span> (clk = <span style="color: #bc8f8f;">'1'</span> <span style="color: #a020f0;">and</span> clk'<span style="color: #da70d6;">EVENT</span>) <span style="color: #a020f0;">THEN</span>
    q &lt;= d;
  <span style="color: #a020f0;">END</span> <span style="color: #a020f0;">IF</span>;
<span style="color: #a020f0;">END</span> <span style="color: #a020f0;">PROCESS</span> <span style="color: #0000ff;">dff_sequent</span>;
</pre>

<p>I cannot help but wonder if synthesis tools treat the concurrent block form
any differently.</p>]]></description>

</item>
</channel>
</rss>
