<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-30325162</id><updated>2025-01-25T08:47:29.571+09:00</updated><category term="アルゴリズム"/><category term="記事の感想"/><category term="verilog"/><category term="サイトの紹介"/><category term="LatticeMico32"/><category term="ツールの紹介"/><category term="OVL"/><category term="インストールメモ"/><category term="AXI"/><category term="抽象化"/><category term="書籍の紹介"/><category term="OVLパラメータ"/><category term="SystemVerilog"/><category term="OVLチェッカー"/><category term="OVM"/><category term="SoC"/><category term="SystemC"/><category term="Tips"/><category term="VCS"/><category term="VHDL"/><category term="アンケート"/><category term="オンチップバス"/><category term="メモ"/><category term="実験"/><category term="気分転換"/><category term="記事の紹介"/><category term="設計と検証"/><title type='text'>コーヒーでも飲みながら検証の話でも</title><subtitle type='html'>LSI設計・検証に関する話題など&#xa;Verilog,SystemVerilog,OVL,FPGA,ASIC,...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>71</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30325162.post-6691526422025317266</id><published>2010-07-12T20:23:00.002+09:00</published><updated>2010-07-12T20:23:00.422+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OVM"/><category scheme="http://www.blogger.com/atom/ns#" term="記事の感想"/><title type='text'>OVMガイドライン</title><content type='html'>Verification Engineerの戯言さんのところでOVMのガイドラインを紹介されていたのでダウンロードして見てみる。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blogs.yahoo.co.jp/verification_engineer/62124940.html&quot;&gt;http://blogs.yahoo.co.jp/verification_engineer/62124940.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
automation macrosとかdefault sequenceとかsequence macrosとかpre_body()/post_body()とか、使ってたものがことごとく否定されてるんですが。。。&lt;br /&gt;
&lt;br /&gt;
見直さなきゃなぁ。&lt;br /&gt;
でもしばらく使ってなかったし、またすぐ使う予定でもないし。&lt;br /&gt;
&lt;br /&gt;
今度使うとき考えよう。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/6691526422025317266/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/6691526422025317266' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/6691526422025317266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/6691526422025317266'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/07/ovm.html' title='OVMガイドライン'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-5340148262666702513</id><published>2010-05-18T20:15:00.002+09:00</published><updated>2010-05-18T20:15:00.766+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="メモ"/><title type='text'>UVMのチュートリアル</title><content type='html'>&lt;a href=&quot;http://blog.testbench.in/?p=55&quot;&gt;UVM tutorials&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
今忙しいので後で見よう。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/5340148262666702513/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/5340148262666702513' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/5340148262666702513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/5340148262666702513'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/05/uvm.html' title='UVMのチュートリアル'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-2919810803013446077</id><published>2010-04-13T20:57:00.010+09:00</published><updated>2010-04-13T20:57:00.583+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="verilog"/><title type='text'>Constant Function</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd22-vXb_NDI4pIEBw2tpJaX_qS8jCxAF77EeX8mApg6Rj_-XA1y3NtJEELESpC9_GW3lGjBae7n9S0g5w-B3QB81X3lkPx_fkRufIjrXTKIsHE0eoPERtzQTDTQBUgp9fFMZw/s1600/3734200307_95934b3f4c_m.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd22-vXb_NDI4pIEBw2tpJaX_qS8jCxAF77EeX8mApg6Rj_-XA1y3NtJEELESpC9_GW3lGjBae7n9S0g5w-B3QB81X3lkPx_fkRufIjrXTKIsHE0eoPERtzQTDTQBUgp9fFMZw/s1600/3734200307_95934b3f4c_m.jpg&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;by &lt;a href=&quot;http://www.flickr.com/photos/franganillo/3734200307/sizes/s/&quot;&gt;Jorge Franganillo&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Verilog2001からconstant functionというものがサポートされています。&lt;br /&gt;
使い用によっては便利だなと思いつつ、使わなくてもなんとかなるものなのであまり気にしていませんでしたが、使いたくなったときに調べるのが面倒なのでメモしときます。&lt;br /&gt;
&lt;br /&gt;
まずどういうときに使うのかというと、使いたい時というのは多分限られていて例えばFIFOなどのパラメータ化を考えたとき、昔のVerilog HDLではパラメータとしてデータのビット幅とFIFOの深さそれとFIFOのポインタのビット幅をという３つのパラメータを指定する必要がありました。&lt;br /&gt;
&lt;br /&gt;
この中でFIFOのポインタのビット幅というのはFIFOの深さから導けるのですが、単純な四則演算などで計算することが出来ず、for文などを使う必要があるため別途パラメータとして渡してあげなければならなかったわけです。&lt;br /&gt;
例えば次のような感じです。&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;module my_fifo (clk, rst_n, we, re, wdt, rdt, full, empty);

  parameter DT_WIDTH = 8;
  parameter FIFO_DEPTH = 16;
  parameter PTR_WIDTH = 4;

  input clk, rst_n, we, re;
  input [DT_WIDTH-1:0] wdt;
  output [DT_WIDTH-1:0] rdt; 
  output full, empty;

  reg [DT_WIDTH-1:0] ram [0:FIFO_DEPTH-1];
  reg [PTR_WIDTH-1:0] wr_ptr;
  reg [PTR_WIDTH-1:0] rd_ptr;

  ...;

endmodule
&lt;/pre&gt;それがVerilog2001からは演算結果が定数となる場合であれば、parameterの右辺にfunctionを使えるようになったため以下のように書けるので、パラメータの受け渡しの際にFIFO_DEPTHとPTR_WIDTHの間で不整合が起こるような危険を回避できます。&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;module my_fifo (clk, rst_n, we, re, wdt, rdt, full, empty);

  parameter DT_WIDTH = 8;
  parameter FIFO_DEPTH = 16;
  localparam PTR_WIDTH = log2(FIFO_DEPTH);

  input clk, rst_n, we, re;
  input [DT_WIDTH-1:0] wdt;
  output [DT_WIDTH-1:0] rdt; 
  output full, empty;

  reg [DT_WIDTH-1:0] ram [0:FIFO_DEPTH-1];
  reg [PTR_WIDTH-1:0] wr_ptr;
  reg [PTR_WIDTH-1:0] rd_ptr;

  ...;

endmodule
&lt;/pre&gt;ここでlog2()は2を底とする入力の対数を計算するfunctionとします。&lt;br /&gt;
&lt;br /&gt;
で、この2を底とする入力の対数を求めるfunctionなんですがConstant Functionの例では必ずと行っていいほどこの例になっています。しかし、なかには間違えているコードもあるようなのでご注意ください。&lt;br /&gt;
例えば&lt;a href=&quot;http://www.sunburst-design.com/papers/CummingsHDLCON2001_Verilog2001_rev1_3.pdf&quot;&gt;こちら&lt;/a&gt;の&quot;3.0 LRM Errors&quot;ではIEEE Verilog-2001 Standardで紹介されている次のコードに誤りがあると指摘しています。&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;//define the clogb2 function 
function integer clogb2; 
  input depth; 
  integer i,result; 
  begin 
    for (i = 0; 2 ** i &amp;lt; depth; i = i + 1) 
      result = i + 1; 
    clogb2 = result; 
  end 
endfunction
&lt;/pre&gt;どこが悪いのかわかりますか？&lt;br /&gt;
&lt;br /&gt;
１つは入力のdepthが１ビットとなっていること。&lt;br /&gt;
&lt;br /&gt;
そしてもうひとつはdepthが１だった場合にforループが実行されず、resultが初期化されないためにこのfunctionが不定値を返してしまうことです。&lt;br /&gt;
&lt;br /&gt;
そこでこのfunctionは次のように置き換えるべきだと書いてあるのですが。。。 &lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;function integer clogb2; 
  input [31:0] value; 
  for (clogb2=0; value&amp;gt;0; clogb2=clogb2+1) 
    value = value&amp;gt;&amp;gt;1; 
endfunction 
&lt;/pre&gt;これはこれで問題がある気がします。&lt;br /&gt;
&lt;br /&gt;
入力が２の定数である場合、結果が正しくないですよね？&lt;br /&gt;
例えば入力value=2の時、１を返すのが正しい結果のはずですがforループが２回実行されるので結果2を返してしまいます。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.beyond-circuits.com/wordpress/2008/11/constant-functions/&quot;&gt;こちら&lt;/a&gt;で紹介されている例のほうが良いでしょう。&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;function integer log2;
  input integer value;
  begin
    value = value-1;
    for (log2=0; value&amp;gt;0; log2=log2+1)
      value = value&amp;gt;&amp;gt;1;
  end
endfunction
&lt;/pre&gt;入力が０だと問題ですが、対数を求める関数なのでもともと入力は１以上であるはずです。&lt;br /&gt;
&lt;br /&gt;
使う機会はそれほど多くないかもしれませんが覚えておいて損はないでしょう。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/2919810803013446077/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/2919810803013446077' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/2919810803013446077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/2919810803013446077'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/04/constant-function_13.html' title='Constant Function'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd22-vXb_NDI4pIEBw2tpJaX_qS8jCxAF77EeX8mApg6Rj_-XA1y3NtJEELESpC9_GW3lGjBae7n9S0g5w-B3QB81X3lkPx_fkRufIjrXTKIsHE0eoPERtzQTDTQBUgp9fFMZw/s72-c/3734200307_95934b3f4c_m.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-763200020359556022</id><published>2010-04-09T21:44:00.000+09:00</published><updated>2010-04-09T21:44:00.510+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SystemVerilog"/><title type='text'>SystemVerilogをはじめたい人に</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Aqq6Tah1IVC4L8fLm8Siu841CKcD7k8yUk1t0ApRgh3aRxamhg63_Btrov9HXJGRbudnVCkCUERrLiWb1i6SSEqUZGe5VH1hkcOc6RBkdKd_zn-PfiLo2-SPyl9tHYzGic1q/s1600/3516727523_4752e0e9ea_m.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Aqq6Tah1IVC4L8fLm8Siu841CKcD7k8yUk1t0ApRgh3aRxamhg63_Btrov9HXJGRbudnVCkCUERrLiWb1i6SSEqUZGe5VH1hkcOc6RBkdKd_zn-PfiLo2-SPyl9tHYzGic1q/s1600/3516727523_4752e0e9ea_m.jpg&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;by &lt;a href=&quot;http://www.flickr.com/photos/magnetbox/3516727523/sizes/s/&quot;&gt;magnetbox&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;４月だし、これからSystemVerilogをはじめたいなという方に調度良いサイトを見つけたのでリンクしときます。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://sites.google.com/site/allofsystemverilog/&quot;&gt;SystemVerilogの世界へようこそ&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
以前紹介したブログ、&lt;a href=&quot;http://blogs.yahoo.co.jp/verification_engineer&quot;&gt;Verification Engineerの戯言&lt;/a&gt;を書かれている方のサイトです。&lt;br /&gt;
&lt;br /&gt;
OVMやVMMなどの紹介もありますね。&lt;br /&gt;
日本語のサイトでは非常に珍しいと思います。&lt;br /&gt;
&lt;br /&gt;
Have a nice experience!</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/763200020359556022/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/763200020359556022' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/763200020359556022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/763200020359556022'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/04/systemverilog.html' title='SystemVerilogをはじめたい人に'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Aqq6Tah1IVC4L8fLm8Siu841CKcD7k8yUk1t0ApRgh3aRxamhg63_Btrov9HXJGRbudnVCkCUERrLiWb1i6SSEqUZGe5VH1hkcOc6RBkdKd_zn-PfiLo2-SPyl9tHYzGic1q/s72-c/3516727523_4752e0e9ea_m.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-9109294513273679092</id><published>2010-04-08T20:23:00.021+09:00</published><updated>2010-04-09T00:32:54.184+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SystemVerilog"/><title type='text'>always_combとalways@*の違い</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZAi9x-Yzwv3ODXOOfpfD6v1H5XElaPjk8gXzi6n3wmLCWM8iuwCfpCmKYQgRvz2uTTcd_-H7rydw2aKrRwMhdVnoJfYMPPUZCEiUtI-L-CtjBIvylWbHpDzKWkNpBdLagnvNm/s1600/180238980_6ea82bf95e_m.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZAi9x-Yzwv3ODXOOfpfD6v1H5XElaPjk8gXzi6n3wmLCWM8iuwCfpCmKYQgRvz2uTTcd_-H7rydw2aKrRwMhdVnoJfYMPPUZCEiUtI-L-CtjBIvylWbHpDzKWkNpBdLagnvNm/s320/180238980_6ea82bf95e_m.jpg&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;by &lt;a href=&quot;http://www.flickr.com/photos/melkorcete/180238980/sizes/s/&quot;&gt;Manuel Cernuda&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
以前のVerilog HDLでは、alwaysを使って組み合わせ回路を書く場合には&lt;br /&gt;
Sensitivity Listに入力を全て列挙しなければならず面倒で、またバグの温床でもありました。&lt;br /&gt;
例えばこんな感じです。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;always @ ( color or a or b or c or ... ) begin
  case (color)
    RED  : x = a;
    BLUE : x = b &amp;amp; c;
    ....;
  endcase
end
&lt;/pre&gt;&lt;br /&gt;
Verilog 2001ではalways @*がサポートされてかなりの簡潔に記述できるようになり、Sensitivity Listの記入漏れの問題は起きにくくなりました。&lt;br /&gt;
しかし、それでもまだ実はシミュレーション時に問題が起こる可能性があります。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;always @* begin
  case (color)
    RED  : x = a;
    BLUE : x = b &amp;amp; c;
    PINK : x = my_function(d, e, f);
    ....;
  endcase
end

function my_function;
  input sig_a;
  input sig_b;
  input sig_c;
  begin
    my_function = sig_a | sig_b | sig_c | SIG_X;
  end
endfunction
&lt;/pre&gt;&lt;br /&gt;
always @*はalways内で直接使用している信号までしかsensitiveではなく、&lt;br /&gt;
例えば上の例の様な記述の場合、my_function()の中で使用しているSIG_Xに変化があったとしてもalways @*の出力xは変化しません。&lt;br /&gt;
&lt;br /&gt;
このような問題を解決できるのがSystemVerilogのalways_combです。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;always_comb begin
  case (color)
    RED  : x = a;
    BLUE : x = b &amp;amp; c;
    PINK : x = my_function(d, e, f);
    ....;
  endcase
end
&lt;/pre&gt;&lt;br /&gt;
このようにalways @*の場合と同様に記述出来ます（functionの内部は省略）。&lt;br /&gt;
しかし、always_combの場合はalways @*と違い、内部に含まれるfunctionが使用している信号に対してもsensitiveになります。つまり、この場合はSIG_Xの変化にもalways_combの出力xが連動します。&lt;br /&gt;
&lt;br /&gt;
その他にも、always_combではalways @*と比べて以下のような違いがあります。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;・時刻0で一度always_comb内部が実行される&lt;/blockquote&gt;&lt;blockquote&gt;・always_comb内でドライブされている信号は他の場所でドライブできない&lt;/blockquote&gt;&lt;blockquote&gt;・always_comb内ではwait()やfork...joinなどのタイミングをブロックするような制御が行えない&lt;/blockquote&gt;&lt;br /&gt;
他にもSystemVerilogではalways_latchやalways_ffなどが追加されていますが特にこのalways_combが重要ですね。&lt;br /&gt;
&lt;br /&gt;
alwaysで組み合わせ回路を記述する場合は是非使うようにしましょう。&lt;br /&gt;
&lt;br /&gt;
最後に、昔書いた&lt;a href=&quot;http://cafeandverify.blogspot.com/2007/07/blog-post_24.html&quot;&gt;組み合わせ回路の記事&lt;/a&gt;のリンクを貼っておきます。&lt;br /&gt;
ここではalwaysで組み合わせ回路を記述する場合の短所としてregで出力を宣言しなければならないと書きましたが、SystemVerilogでは新たにlogicが追加されたので便利になりました。&lt;br /&gt;
functionを使う場合は、always_combの中に入れておくとより安全でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://bradpierce.wordpress.com/2009/12/04/sv-always_comb-safer-than-verilog-assign/&quot;&gt;こちら&lt;/a&gt;で別の例が詳細されていたのでリンクしときます。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/9109294513273679092/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/9109294513273679092' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/9109294513273679092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/9109294513273679092'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/04/alwayscombalways.html' title='always_combとalways@*の違い'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZAi9x-Yzwv3ODXOOfpfD6v1H5XElaPjk8gXzi6n3wmLCWM8iuwCfpCmKYQgRvz2uTTcd_-H7rydw2aKrRwMhdVnoJfYMPPUZCEiUtI-L-CtjBIvylWbHpDzKWkNpBdLagnvNm/s72-c/180238980_6ea82bf95e_m.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-9142866374516660274</id><published>2010-03-31T20:32:00.002+09:00</published><updated>2010-03-31T20:32:00.265+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="VCS"/><category scheme="http://www.blogger.com/atom/ns#" term="記事の紹介"/><title type='text'>VCSでマクロ使用時の注意点</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0yOKN7hPjvTUStsedrEpQTeDoABm0KXL6qsBqtEcrxgmzd5U88xkvg4Bc2YdXdPPXBNi9LUbHx7BhauFILgtWbb0CHxeZER9NjuOd8e5HF8i3qQvmC5cYGu5zg-zhyphenhyphen1AP2HoF/s1600-h/88986400_c8b5b1e1b4_m.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0yOKN7hPjvTUStsedrEpQTeDoABm0KXL6qsBqtEcrxgmzd5U88xkvg4Bc2YdXdPPXBNi9LUbHx7BhauFILgtWbb0CHxeZER9NjuOd8e5HF8i3qQvmC5cYGu5zg-zhyphenhyphen1AP2HoF/s1600/88986400_c8b5b1e1b4_m.jpg&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;by &lt;a href=&quot;http://www.flickr.com/photos/oddsock/88986400/sizes/s/&quot;&gt;oddsock&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Verilogでマクロを使われている方も多いかと思いますが、今回はSynopsysのVCSでマクロを使う場合の注意点です。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://learn-systemverilog.blogspot.com/2010/03/have-you-ever-heard-of-programming.html&quot;&gt;Have you ever heard of a programming language called &quot;Whitespace&quot;?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
VCSでマクロを使った時に痛い目にあったというお話。&lt;br /&gt;
&lt;br /&gt;
長いマクロを記述する場合、&#39;\&#39;（バックスラッシュ）を使って複数行に分けて記述することは多いですよね。&lt;br /&gt;
しかし、VCSではバックスラッシュの後にスペースが入っている場合にエラーとなり、しかもそのエラーメッセージが指している場所が変なことになってしまうそうです。&lt;br /&gt;
私もちょっとVCSで試してみましたが確かにバックスラッシュの後にスペースを入れるとエラーとなって、そのエラーメッセージでは少しズレた所を指してました。&lt;br /&gt;
ちなみにiverilogで同じコードを試してみると大丈夫でした。&lt;br /&gt;
&lt;br /&gt;
記事の方では、SystemVerilogのLRMに従えばこのコードはOKなはずだと書かれているのですが、&lt;a href=&quot;http://www.vhdl.org/sv/SystemVerilog_3.1a.pdf&quot;&gt;SystemVerilogのLRM&lt;/a&gt;を見ると&lt;i&gt;`define macros&lt;/i&gt;の項には&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;In Verilog, the ‘define macro text can include a backslash ( \ ) at the end of a line to show continuation on&amp;nbsp;the next line.&lt;/blockquote&gt;&lt;br /&gt;
と書かれているので、一応バックスラッシュは行末に置く必要があると思います。&lt;br /&gt;
ただ、エラーメッセージとしては確かにおかしいですね。&lt;br /&gt;
&lt;br /&gt;
ところで元の記事ではタイトルにもあるように&quot;Whitespace&quot;と呼ばれる言語を紹介しています。&lt;br /&gt;
言語の概要については&lt;a href=&quot;http://ja.wikipedia.org/wiki/Whitespace&quot;&gt;wikipedia:Whitespace&lt;/a&gt;を参照ください。&lt;br /&gt;
&lt;br /&gt;
なんと、スペースとタブと改行コードのみによって構成される難解プログラミング言語です。&lt;br /&gt;
たとえ色分けされてたとしても普通の人間には読めそうもありませんね。&lt;br /&gt;
&lt;br /&gt;
こんなソースを渡されて検証してくれなんて言われたらまさにブラックボックス検証です。&lt;br /&gt;
コードはホワイトスペースなのに。。。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/9142866374516660274/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/9142866374516660274' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/9142866374516660274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/9142866374516660274'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/03/vcs.html' title='VCSでマクロ使用時の注意点'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0yOKN7hPjvTUStsedrEpQTeDoABm0KXL6qsBqtEcrxgmzd5U88xkvg4Bc2YdXdPPXBNi9LUbHx7BhauFILgtWbb0CHxeZER9NjuOd8e5HF8i3qQvmC5cYGu5zg-zhyphenhyphen1AP2HoF/s72-c/88986400_c8b5b1e1b4_m.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-4042943447499818017</id><published>2010-03-30T20:35:00.001+09:00</published><updated>2010-03-30T20:35:00.091+09:00</updated><title type='text'>今後の方針</title><content type='html'>とりあえずブログを再開しようと思ったので心機一転、サイトのデザインをリニューアル。&lt;br /&gt;
とはいうものの、どんなネタを書いていこうか迷ってました。&lt;br /&gt;
&lt;br /&gt;
書いてみたいネタ自体は多少あるのだけれども&lt;br /&gt;
時間に制限もあるし、仕事の関係もあったりでなかなか制約が厳しい。&lt;br /&gt;
&lt;br /&gt;
そんなことを思いつつ、ネタ探しに海外のブログなんかを久しぶりに見まわってみると２年ぐらい前に比べてLSI機能検証関連の有益な内容の記事が多くあることに気づく。&lt;br /&gt;
それに比べて日本（日本語のサイト）はどうだろうか。&lt;br /&gt;
私の知る限りではこちら↓ぐらい（他にあれば教えてください）。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blogs.yahoo.co.jp/verification_engineer&quot;&gt;Verification Engineerの戯言&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
海外と日本とで圧倒的な情報量の差がある。&lt;br /&gt;
しかも、海外のサイトは英語だけど多分インド出身の人などが書いてるみたい。&lt;br /&gt;
冗談ではなく将来の日本の半導体業界が心配になってくる。&lt;br /&gt;
&lt;br /&gt;
そこで、既に海外には有益な情報があるのだからそれを&lt;s&gt;パクってやろう&lt;/s&gt;英語を読むのが面倒な日本のエンジニアの方々にも紹介していこうかなと考えてます。&lt;br /&gt;
&lt;br /&gt;
まあただ、英語力にはあまり自信がないし自分の勝手な解釈も入るので英語が得意な方は原文を読んだ方が早いと思いますけどね。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/4042943447499818017/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/4042943447499818017' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/4042943447499818017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/4042943447499818017'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/03/blog-post_30.html' title='今後の方針'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-4500606314078102128</id><published>2010-03-25T20:29:00.008+09:00</published><updated>2010-04-06T15:00:12.724+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AXI"/><category scheme="http://www.blogger.com/atom/ns#" term="アルゴリズム"/><title type='text'>AMBA AXIのINCRバーストアドレスの計算</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhou6f1ZoNymFBfsTY3f7SBNdUNUgx0AC0gU2-1SOl1LGPznYHjP3OA2laSjxOuuq25x16vcl-ku_wRf8UOMkvcjX_fVnTEAzXYur_VJ8-DT7W_I-UoCwMl4X220dLsiMti7Nf/s1600-h/2873524600_8f27b8201b_m-1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhou6f1ZoNymFBfsTY3f7SBNdUNUgx0AC0gU2-1SOl1LGPznYHjP3OA2laSjxOuuq25x16vcl-ku_wRf8UOMkvcjX_fVnTEAzXYur_VJ8-DT7W_I-UoCwMl4X220dLsiMti7Nf/s1600/2873524600_8f27b8201b_m-1.jpg&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 12px; line-height: 15px;&quot;&gt;Photo by&amp;nbsp;&lt;a href=&quot;http://www.flickr.com/photos/jamescridland/2873524600/sizes/s/#cc_license&quot; style=&quot;color: #992211; text-decoration: none;&quot;&gt;James Cridland&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e06666;&quot;&gt;追記：&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e06666;&quot;&gt;INCRバーストでアンアラインド転送の場合を考慮してなかったので、注意点を最後に追記しました。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
以前に&lt;a href=&quot;http://cafeandverify.blogspot.com/2010/03/amba-axiwrap-boundary-wrap-wrap.html&quot;&gt;WRAPバーストアドレスの場合&lt;/a&gt;を書いたのですがついでなのでINCRバーストの場合も書いておこうと思います。&lt;br /&gt;
というか、むしろこっちの方を先に書いておくべきだったような気が。。。&lt;br /&gt;
&lt;br /&gt;
さて、AXIでは１つのバーストのアドレスが4Kbyteの境界をまたいではいけないという制約があります。&lt;br /&gt;
したがって、アドレスのカウンタとしては12bitで十分ということになります。&lt;br /&gt;
ということで、INCRバーストのアドレスは次のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;always @(posedge ACLK or negedge ARESETn) begin
  if (!ARESETn) begin
    addr_cnt &amp;lt;= 12&#39;d0;
  end
  else begin
    if ( AWVALID &amp;amp;&amp;amp; AWREADY ) begin
      if ( WVALID &amp;amp;&amp;amp; WREADY )
        addr_cnt &amp;lt;= AWADDR[11:0] + ( 12&#39;b1 &amp;lt;&amp;lt; AWSIZE );
      else
        addr_cnt &amp;lt;= AWADDR[11:0];
    end
    else if ( WVALID &amp;amp;&amp;amp; WREADY ) begin
      addr_cnt &amp;lt;= addr_cnt + ( 12&#39;b1 &amp;lt;&amp;lt; r_awsize );
    end
  end
end
&lt;/pre&gt;&lt;br /&gt;
なんだ、WRAPの場合と同じじゃないか！といわれそうですがその通りです。&lt;br /&gt;
なので通常はアドレスカウンタは１つだけ持っておいて、&lt;br /&gt;
WRAPバーストの場合は必要な下位のビットだけ使用すれば良いと思います。&lt;br /&gt;
&lt;br /&gt;
もちろん、上位のビットはラッチしといてくださいね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;【追記】アンアラインド転送の場合の注意点&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
以上の記事を書いている時点では、アンアラインド転送の事を考慮していなかったため、このアドレスカウンタでは不十分な場合があります。&lt;br /&gt;
アンアラインドのアドレスをアラインさせるのは以下の方法で行えます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Aligned_Address = Unaligned_Address &amp;amp; ( {(Addr_Width){1&#39;b1}} &amp;lt;&amp;lt; AWSIZE ) &lt;/pre&gt;&lt;br /&gt;
アドレスカウンタにロードする際にアドレスをアラインメントさせてスタートアドレスを別に記憶しておいてもいいと思いますし、&lt;br /&gt;
最初のカウントアップ（または全てのカウントアップ）の時にアラインメントする方法もあります。&lt;br /&gt;
もしくはアドレスの計算自体は上記の方法そのままで、出力するときにアラインメントするなど。&lt;br /&gt;
方法はいろいろ考えられますが、都合の良い実装方法で行ってください。&lt;br /&gt;
&lt;br /&gt;
ただ実は、スレーブにおいては転送サイズさえ見ておいて、アドレスの下位の部分についてはWSTRBを信用すれば良いので、アドレスがちゃんと転送サイズにアラインメントされていようがいまいが関係なかったりします。&lt;br /&gt;
&lt;br /&gt;
ブリッジなどの場合はアドレスを正しく伝える必要があるかもしれないのでその場合は注意してください。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/4500606314078102128/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/4500606314078102128' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/4500606314078102128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/4500606314078102128'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/03/amba-axiincr.html' title='AMBA AXIのINCRバーストアドレスの計算'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhou6f1ZoNymFBfsTY3f7SBNdUNUgx0AC0gU2-1SOl1LGPznYHjP3OA2laSjxOuuq25x16vcl-ku_wRf8UOMkvcjX_fVnTEAzXYur_VJ8-DT7W_I-UoCwMl4X220dLsiMti7Nf/s72-c/2873524600_8f27b8201b_m-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-956539608292000605</id><published>2010-03-16T20:00:00.002+09:00</published><updated>2010-03-16T20:00:04.041+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="設計と検証"/><title type='text'>仕様を明確化する</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://cacoo.com/diagrams/OZrMiKhchZfuGzut-F28EE.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;146&quot; src=&quot;https://cacoo.com/diagrams/OZrMiKhchZfuGzut-F28EE.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;[曖昧な仕様の解釈は人それぞれ]&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;これはハードウェアに限った事ではないと思いますが、仕様を明確化する事は重要です。&lt;br /&gt;
&lt;br /&gt;
勿論、開発の初期段階で全ての仕様を明確にするのはほぼ不可能だと思うので、実際の工程では仕様の不明な点が見つかる毎に明確化させていくという手順を踏むことになると思います。&lt;br /&gt;
&lt;br /&gt;
ここで重要なのは、不明な点をそのままにしておかないという事。「ここは多分こうだろう」と勝手に決めて実装してしまうのは非常に危険です。&lt;br /&gt;
&lt;br /&gt;
多くの場合、人は自分の都合の良いように仕様を解釈します。という事は、かなりの確率でインタフェース相手の考えはあなたの考えとは異なるでしょう。&lt;br /&gt;
&lt;br /&gt;
HDLで実装した後に、仕様が変更されると非常にエネルギーを浪費します。また、ハードの場合はさらにその先で仕様の不備が発覚すると莫大なコストが発生することも。&lt;br /&gt;
&lt;br /&gt;
はじめは面倒かもしれませんが、コツコツと仕様を明確化して行く事が結果的には品質の向上とコストダウン、そしてストレスフリーにつながります。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/956539608292000605/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/956539608292000605' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/956539608292000605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/956539608292000605'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/03/blog-post.html' title='仕様を明確化する'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-2547244562471765034</id><published>2010-03-12T10:53:00.009+09:00</published><updated>2010-04-06T15:01:35.194+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AXI"/><category scheme="http://www.blogger.com/atom/ns#" term="アルゴリズム"/><title type='text'>AMBA AXIのWrapアドレスの計算</title><content type='html'>&lt;div&gt;前回、AMBA AXIのWrap Boundaryを計算しました。&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;折角なのでWRAPバーストの場合のアドレスの計算もやってみようと思います。とは言ってもWrap Boundaryが算出できればそれほど難しくはありません。&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;まず前提条件ですが、AXIのWRAPバーストでは以下の制約があります。&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;・開始アドレスは転送サイズにアラインメントされていなければならない&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;・バースト長は2,4,8または16のいずれかでなければならない&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;なので、前回のBoundaryの計算も含め、ここではこの制約を前提としています。&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;さて、アドレスを計算するにはアドレスカウンタを作ると思いますがAXIのWRAPバーストの場合、このカウンタは何ビットのものが必要かというと、転送サイズとバースト長の最大値がそれぞれ128Byteと16ビートなので&lt;/div&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&lt;div&gt;log2(128*16) = 11ビット&lt;/div&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;div&gt;となります。11ビットのライトアドレスカウンタをwaddr_cntとすると次のように書けます。&lt;/div&gt;&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;always @(posedge ACLK or negedge ARESETn) begin
  if (!ARESETn) begin
    waddr_cnt &amp;lt;= 11&#39;d0;
  end
  else begin
    if ( AWVALID &amp;amp;&amp;amp; AWREADY ) begin
      if ( WVALID &amp;amp;&amp;amp; WREADY )
        waddr_cnt &amp;lt;= AWADDR[10:0] + ( 11&#39;b1 &amp;lt;&amp;lt; AWSIZE );
      else
        waddr_cnt &amp;lt;= AWADDR[10:0];
    end
    else if ( WVALID &amp;amp;&amp;amp; WREADY ) begin
      waddr_cnt &amp;lt;= waddr_cnt + ( 11&#39;b1 &amp;lt;&amp;lt; r_awsize );
    end
  end
end
&lt;/pre&gt;&lt;div&gt;ここで、r_awsizeはAWSIZEをラッチしたものです。データチャネルがアドレスチャネルよりも先に成立する場合は考慮してません。&lt;/div&gt;&lt;div&gt;そうならないよう、WREADYを制御する(;^_^A &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;あらかじめ断っておきますが、このコードは実際に検証を行っていませんのでちゃんと動くかどうかわかりません。なんとなくこんな感じで実装できるよというのがわかっていただければ幸いです。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;あとはこのアドレスカウンタと前回計算したWrap BoundaryをくっつければWRAPバースト時のアドレスが決まります。こんな感じですね。&lt;/div&gt;&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;assign wrap_waddr = Wrap_Boundary | ( waddr_cnt &amp;amp; ~( { {(Addr_Width-4){1&#39;b1}}, ~r_awlen } &amp;lt;&amp;lt; r_awsize ) );
&lt;/pre&gt;&lt;div&gt;Addr_Widthはアドレスの幅で、r_awlenはAWLENをラッチしたものです。実際は転送サイズは16Byteまでなどといった場合が多いと思うのでカウンタのサイズはもう少し小さくできると思います。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/2547244562471765034/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/2547244562471765034' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/2547244562471765034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/2547244562471765034'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/03/amba-axiwrap-boundary-wrap-wrap.html' title='AMBA AXIのWrapアドレスの計算'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-1609002483052869173</id><published>2010-03-11T10:06:00.010+09:00</published><updated>2010-03-29T10:51:01.968+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AXI"/><category scheme="http://www.blogger.com/atom/ns#" term="アルゴリズム"/><title type='text'>AMBA AXIのWrap Boundaryの計算</title><content type='html'>&lt;div&gt;何年ぶりかの更新なのですがそんなことは特に気にせずメモがわりに書きます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;AMBA  AXI Protocol v1.0 SpecificationにはWrap Boundaryの定義として&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Wrap_Boundary = &lt;/div&gt;&lt;div&gt;( INT ( Start_Address / ( Number_Bytes x Burst_Length ) ) ) x ( Number_Bytes x Burst_Length )&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;とあります。&lt;/div&gt;&lt;div&gt;一瞬軽いイジメかと思うが、丁寧に見ると要は（転送サイズ×バースト長）にアラインメントさせたアドレスという感じの意味。&lt;/div&gt;&lt;div&gt;ここで、&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;INT(x) はxを小数点以下切り捨てで整数にした値&lt;/div&gt;&lt;div&gt;Start_Addressは転送のスタートアドレス&lt;/div&gt;&lt;div&gt;Number_Bytesは転送サイズ（単位バイト）= 2^AWSIZE または 2^ARSIZE&lt;/div&gt;&lt;div&gt;Burst_Lengthはバースト長 = AWLEN+1 または ARLEN+1&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;アドレスの幅をAddr_WidthとするとVerilogでは次のように書けます。たぶん。&lt;/div&gt;&lt;div&gt;（Writeの場合）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Wrap_Boundary = Start_Address &amp;amp; ( { {(Addr_Width-4){1&#39;b1}}, ~AWLEN } &amp;lt;&amp;lt; AWSIZE ) &lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;ハードは便利だ。&lt;/div&gt;&lt;div&gt;Readの場合はAWLEN,AWSIZEをそれぞれARLEN, ARSIZEに変えます。&lt;/div&gt;&lt;div&gt;ちなみにAXIではWRAPバーストの場合バースト長は2,4,8,16のいずれかでなければなりません。&lt;/div&gt;&lt;div&gt;なのでWRAPバースト時にAWLEN/ARLENが取り得る値は4&#39;b0001, 4&#39;b0011, 4&#39;b0111, 4&#39;b1111のいずれかです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/1609002483052869173/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/1609002483052869173' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/1609002483052869173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/1609002483052869173'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2010/03/amba-axiwrap-boundary.html' title='AMBA AXIのWrap Boundaryの計算'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-7391742946010714048</id><published>2008-02-18T17:18:00.004+09:00</published><updated>2008-02-18T18:04:15.670+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="アルゴリズム"/><title type='text'>排他的論理和（exclusive OR）　その２</title><content type='html'>排他的論理和の話をもう少し。&lt;br /&gt;今回は主にアセンブラで使われる手法です。&lt;br /&gt;&lt;br /&gt;A=Bの時、&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;A XOR B = 0&lt;/blockquote&gt;&lt;br /&gt;となりました。&lt;br /&gt;&lt;br /&gt;つまり、&lt;br /&gt;&lt;blockquote&gt;A XOR A = 0&lt;/blockquote&gt;&lt;br /&gt;です。&lt;br /&gt;&lt;br /&gt;あるレジスタAXを０でクリアしたい場合、素直に記述すると&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;MOV AX, 0&lt;/blockquote&gt;&lt;br /&gt;となりますが、排他的論理和を使うと&lt;br /&gt;&lt;blockquote&gt;XOR AX, AX&lt;/blockquote&gt;&lt;br /&gt;のように書くことができます。&lt;br /&gt;&lt;br /&gt;何が嬉しいのかというと、まず&quot;0&quot;というリテラルを記憶しておく容量を節約できます。&lt;br /&gt;あと、CPUによっては後者のほうが実行速度が速くなるかもしれません。&lt;br /&gt;アセンブラの仕様にもよるので一概には言えないかもしれませんが、まあそんな感じです。&lt;br /&gt;&lt;br /&gt;排他的論理和のもうひとつ重要な特徴が&lt;br /&gt;同じ値で２回演算すると元の値に戻るということです。&lt;br /&gt;つまり、&lt;br /&gt;&lt;blockquote&gt;(A XOR B) XOR B = A&lt;/blockquote&gt;&lt;br /&gt;となります。&lt;br /&gt;&lt;br /&gt;この特徴を利用すると、値の交換を行う際に一時的な値の退避場所が不要になります。&lt;br /&gt;&lt;br /&gt;ある２つの値xとyを交換するとき、一般的な方法は次のようになります。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;１．tempにyの値を代入&lt;br /&gt;&lt;br /&gt;２．yにxの値を代入&lt;br /&gt;&lt;br /&gt;３．xにtempの値を代入&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;この場合、xとy以外に一時的に値を退避しておくための記憶場所が必要になります。&lt;br /&gt;&lt;br /&gt;しかし排他的論理和を使うと次の手順で値の交換をすることができます。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;１．xにx XOR yの演算結果を代入&lt;br /&gt;&lt;br /&gt;２．yにx XOR yの演算結果を代入&lt;br /&gt;&lt;br /&gt;３．xにx XOR yの演算結果を代入&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;つまり、次のような記述で値の交換が可能です。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;XOR AX, BX&lt;br /&gt;XOR BX, AX&lt;br /&gt;XOR AX, BX&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;はじめて見ると不思議かも知れませんが、&lt;br /&gt;じっくりを追っかけていけば理解できると思います。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/7391742946010714048/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/7391742946010714048' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/7391742946010714048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/7391742946010714048'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2008/02/exclusive-or_18.html' title='排他的論理和（exclusive OR）　その２'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-3044604081900089729</id><published>2008-02-12T10:38:00.000+09:00</published><updated>2008-02-12T10:45:43.586+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="VHDL"/><category scheme="http://www.blogger.com/atom/ns#" term="ツールの紹介"/><category scheme="http://www.blogger.com/atom/ns#" term="記事の感想"/><title type='text'>DoxygenがVHDLをサポート</title><content type='html'>&lt;a href=&quot;http://gary-digital.blogspot.com/2008/02/doxygenvhdl.html&quot;&gt;Doxygen開始支援VHDL了&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://gary-digital.blogspot.com/&quot;&gt;Gary的Digital Design日誌&lt;/a&gt;から。&lt;br /&gt;&lt;br /&gt;中国語を読めるわけではありませんが見たままですね。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.stack.nl/~dimitri/doxygen/index.html&quot;&gt;Doxygen&lt;/a&gt;でVHDLがサポートされるようになったとのこと。&lt;br /&gt;&lt;br /&gt;なぜ、Verilog HDLよりも先に…&lt;br /&gt;&lt;br /&gt;試していないのでどんな感じかはわかりません。&lt;br /&gt;最近VHDLを使ってないので。&lt;br /&gt;&lt;br /&gt;VHDL使いの方は一度試してみては？</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/3044604081900089729/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/3044604081900089729' title='8 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/3044604081900089729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/3044604081900089729'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2008/02/doxygenvhdl.html' title='DoxygenがVHDLをサポート'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-3034333933972878696</id><published>2008-02-07T16:47:00.000+09:00</published><updated>2008-02-07T17:39:51.701+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="アルゴリズム"/><title type='text'>排他的論理和（exclusive OR）　その１</title><content type='html'>ある２つのデータAとBが一致すること&lt;br /&gt;つまり、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;A = B&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;を確認する回路をVerilog HDLで記述するにはどう書けばよいでしょうか？&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;assign equal = (A==B) ? 1&#39;b1 : 1&#39;b0;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;こんな記述が一番妥当なところでしょうか。&lt;br /&gt;&lt;br /&gt;ではもう少し具体的にどのような回路で構成されているか&lt;br /&gt;わかるように記述するとどう書きますか？&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;A - B = 0&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;なので、次のように書けそうです。&lt;br /&gt;（&lt;a href=&quot;http://cafeandverify.blogspot.com/2008/02/blog-post.html&quot;&gt;リダクション演算子については前回を参照&lt;/a&gt;）&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;assign equal = ~|(A - B);&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;しかし、データの比較のためにわざわざ減算器が登場するのも。。。&lt;br /&gt;&lt;br /&gt;そこで、排他的論理和（exclusive OR）です。&lt;br /&gt;ややこしい名前なので普通は&quot;XOR&quot;や&quot;EOR&quot;などと略します。&lt;br /&gt;&lt;br /&gt;学生の頃、数学で習ったと思いますがXORの真理値表は次のとおりです。&lt;br /&gt;&lt;br /&gt;&lt;table class=&quot;basic&quot; summary=&quot;真理値表&quot;&gt;&lt;caption&gt;真理値表&lt;/caption&gt;   &lt;tbody&gt;&lt;tr&gt;     &lt;th&gt;入力A&lt;/th&gt;     &lt;th&gt;入力B&lt;/th&gt;     &lt;th&gt;出力&lt;/th&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;0&lt;/td&gt;     &lt;td&gt;0&lt;/td&gt;     &lt;td&gt;0&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;0&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;0&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;0と0及び1と1の場合は0でそれ以外は1です。&lt;br /&gt;つまり、２つが一致していれば0となり、異なれば1となります。&lt;br /&gt;&lt;br /&gt;XORを使えば、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;A XOR B = 0&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;となるので、次のような記述で２つのデータが一致しているかどうかを判断できます。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;assign equal = ~|(A ^ B);&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;A ^ Bの演算結果は対応する各ビット毎のXORの結果となります。&lt;br /&gt;つまり、C = A ^ Bとすると&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;C[0] = A[0] ^ B[0]&lt;br /&gt;C[0] = A[1] ^ B[1]&lt;br /&gt;…&lt;br /&gt;C[i] = A[i] ^ B[i]&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;です。&lt;br /&gt;&lt;br /&gt;ちなみに上記の３つの記述をXilinx ISEで論理合成にかけた結果、次のようになりました。&lt;br /&gt;比較対照のA,Bはそれぞれ32bitとしています。&lt;br /&gt;ターゲットデバイスは&quot;xc3s1200e-4fg320&quot;です。&lt;br /&gt;&lt;br /&gt;【通常の比較】&lt;br /&gt;Number of Slices:        8&lt;br /&gt;Number of 4 input LUTs: 16&lt;br /&gt;&lt;br /&gt;【減算による比較】&lt;br /&gt;Number of Slices:       20&lt;br /&gt;Number of 4 input LUTs: 40&lt;br /&gt;&lt;br /&gt;【XORによる比較】&lt;br /&gt;Number of Slices:        8&lt;br /&gt;Number of 4 input LUTs: 16&lt;br /&gt;&lt;br /&gt;普通に書くと、XORによる比較器が生成されるようですね。&lt;br /&gt;&lt;br /&gt;高校生の頃だったと思いますが、数学の授業で初めて排他的論理和を習ったとき&lt;br /&gt;名前もややこしいせいか、なんでわざわざこんな演算が必要なのだろうと感じましたが&lt;br /&gt;この仕事をはじめてやっと、その意味がわかるようになりました。&lt;br /&gt;&lt;br /&gt;別の仕事やってたらもう一生見なかったかもしれない。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/3034333933972878696/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/3034333933972878696' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/3034333933972878696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/3034333933972878696'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2008/02/exclusive-or.html' title='排他的論理和（exclusive OR）　その１'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-1796013593279663873</id><published>2008-02-06T17:19:00.002+09:00</published><updated>2010-03-25T13:29:45.889+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="verilog"/><title type='text'>リダクション演算子</title><content type='html'>Verilog HDLのリダクション演算子。&lt;br /&gt;
&lt;br /&gt;
それほど頻繁に使うわけではないけれでも便利なもの。&lt;br /&gt;
&lt;br /&gt;
たとえば次のように書くと（dataは複数ビットのバス）。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;assign all_on = &amp;amp;data; // AND

assign bit_on = |data; // OR

assign parity = ^data; // XOR

&lt;/pre&gt;&lt;br /&gt;
all_onはdataの全てのビットが1の場合のみ1。&lt;br /&gt;
&lt;br /&gt;
bit_onはdataのいずれかのビットが1でれば1。全てのビットが0の場合のみ0。&lt;br /&gt;
&lt;br /&gt;
parityはdata中に奇数個の1がある場合は1。偶数個の1があある場合は0となる。&lt;br /&gt;
&lt;br /&gt;
つまりそれぞれこんな感じ&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;verilog&quot; name=&quot;code&quot;&gt;all_on = data[0];
for (i=1; i &amp;lt; DATA_WIDTH; i=i+1) 
  all_on = all_on &amp;amp; data[i];  

bit_on = data[0]; 
for (i=1; i &amp;lt; DATA_WIDTH; i=i+1) 
  bit_on = bit_on | data[i];  

parity = data[0]; 
for (i=1; i &amp;lt; DATA_WIDTH; i=i+1) 
  parity = parity ^ data[i];
&lt;/pre&gt;&lt;br /&gt;
ビット幅を気にする必要がないので楽ですよね。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/1796013593279663873/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/1796013593279663873' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/1796013593279663873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/1796013593279663873'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2008/02/blog-post.html' title='リダクション演算子'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-5170152111069300121</id><published>2008-01-23T17:51:00.000+09:00</published><updated>2008-01-25T10:03:02.727+09:00</updated><title type='text'>アサーションを使いましょう</title><content type='html'>と言いつつ、私も実際の業務で積極的に使っているわけではないので自分にも向けて。&lt;br /&gt;&lt;br /&gt;アサーションとは、デザインが実行されている間、常に成立すると期待されている条件や動作を宣言することです。&lt;br /&gt;&lt;br /&gt;たとえば、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;このデザインでは仕様上、入力よりも出力のほうがスループットが高いので&lt;br /&gt;デザイン中のFIFOのFullフラグが立つことは決して無い。&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;という場合は、「Fullフラグは常に偽である」と宣言します。&lt;br /&gt;これがアサーション。&lt;br /&gt;&lt;br /&gt;もちろん、コード中にこのコメントを挿入しても何の効力もないので&lt;br /&gt;（コードを読んだ人間が設計者の意図を読み取れるというメリットはあるが）&lt;br /&gt;何かしら効力のある方法でアサーションを使わなければなりません。&lt;br /&gt;&lt;br /&gt;アサーションを記述する方法としては、PSLやSVA（SystemVerilog Assertion）などがあると思いますが、シンプルなアサーションであれば普通のVerilog HDLでも記述できます。&lt;br /&gt;&lt;br /&gt;先の例だと、コード中にこんな具合に記述してやるだけです。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;`ifdef SIMULATION&lt;br /&gt;&lt;br /&gt;  always @(posedge CLK) begin&lt;br /&gt;     if (FIFO_FULL!=0)&lt;br /&gt;       $display(&quot;Assertion failed! FIFO full flag should be always 0.&quot;);&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;`endif&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;それほど手間ではないでしょう？&lt;br /&gt;&lt;br /&gt;一度記述しておけば、シミュレーションを行うたびにいつもアサーションがデザインを監視してくれるのです。&lt;br /&gt;&lt;br /&gt;また、アサーションはデザインの内部で監視しているので、デザインの外で出力をチェックするよりも、バグの原因に近い場所で問題を発見できます。&lt;br /&gt;&lt;br /&gt;さらにアサーションの後段の部分に対しては、アサーションでチェックされている部分については常に保障されていることになります。&lt;br /&gt;アサーションを用いず、出力をチェックする場合は、問題が発生した時にデザイン全てを疑わなければならないかもしれませんが、アサーションを記述しておくことで、少なくともそのアサーション周辺やそれらに関連する部分は正しく動作しているということがわかります。&lt;br /&gt;&lt;br /&gt;少しの手間が必要ですが、アサーションがあなたのデザインを守ってくれるんです。&lt;br /&gt;&lt;br /&gt;シミュレーションだけでなく、アサーションはフォーマル検証にも使用されます。&lt;br /&gt;この場合、フォーマル検証が使えるEDAが必要ですが&lt;br /&gt;テストベンチを書かずにバグを発見することができます。&lt;br /&gt;数学的な手法を用いて、あるデザインにおいて宣言したアサーションが常に成立するかどうかを検証するのです。&lt;br /&gt;あまり大きなデザインには不向きかもしれませんが、動的な検証手法では見つけにくいバグを発見することができるようです。&lt;br /&gt;&lt;br /&gt;いきなりOVLなどの検証ライブラリを使用したり、高価なEDAを購入することは難しいという方は、まずは簡単なVerilog HDLでの記述からはじめてはいかがでしょうか？</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/5170152111069300121/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/5170152111069300121' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/5170152111069300121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/5170152111069300121'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2008/01/blog-post_23.html' title='アサーションを使いましょう'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-8665396516662738138</id><published>2008-01-23T17:34:00.000+09:00</published><updated>2008-01-23T17:45:34.247+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="記事の感想"/><title type='text'>検証環境を評価するツール</title><content type='html'>&lt;a href=&quot;http://www.eda-express.com/news/?m=p&amp;idno=1303&quot;&gt;米Certessの検証環境評価ツール「Certitude」、欧米市場に続き日本でも本格的な利用が始まる～ベルギーのVCから100万ドルを追加調達&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;EDA EXPRESSより。&lt;br /&gt;&lt;br /&gt;デザインを検証する環境を作っているときに、&lt;br /&gt;「さて、この検証環境自体はどう検証するべきか？」&lt;br /&gt;と思ったことはないでしょうか？&lt;br /&gt;&lt;br /&gt;そういったことが心配な場合にこのツールは役に立つかもしれませんね。&lt;br /&gt;&lt;br /&gt;個人的にはデザインと検証環境ともにバグがあるばあいでも&lt;br /&gt;通常結果はNGになり、結果がOKになるのは仕様を誤認している場合ぐらいだと思うので&lt;br /&gt;今までこういったものに必要性を感じたことはあまりありません。&lt;br /&gt;&lt;br /&gt;ただ、意図的にバグを組み込んでそれを検証できるかどうかを確認するという発想は面白いですね。&lt;br /&gt;&lt;br /&gt;費用対効果のほうがどれほどあるかはわかりませんが。。。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/8665396516662738138/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/8665396516662738138' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/8665396516662738138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/8665396516662738138'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2008/01/blog-post.html' title='検証環境を評価するツール'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-7615345556069076983</id><published>2008-01-10T13:49:00.000+09:00</published><updated>2008-01-10T14:05:12.751+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="サイトの紹介"/><category scheme="http://www.blogger.com/atom/ns#" term="記事の感想"/><title type='text'>「OVM」、オープンソースとして一般配布を開始</title><content type='html'>ケイデンスとメンターによるOVMの一般配布が開始されました。&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://www.eda-express.com/news/?m=p&amp;idno=1282&quot;&gt;ケイデンスとメンターによるSystemVerilogベースの検証メソドロジ「OVM」、オープンソースとして一般配布を開始&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;次のサイトからダウンロードできます。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.ovmworld.org/&quot;&gt;OVM World&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;AVMと違って、OVMはSystemVerilogのみのようです。&lt;br /&gt;&lt;br /&gt;検証メソトロジー関係は興味があるので本やドキュメントなどは少し目を通していますが、まだ実際に現場で使ったことがないので、このようなものをどうやって使えばより検証の効率が上がるのかということはまだ具体的にイメージできていません。&lt;br /&gt;&lt;br /&gt;メンターは『AVM Cookbook』のようなものを出してくれないのかな。&lt;br /&gt;クラスのリファレンスやExampleコードなどはありましたが、それだけではまだ自分にとっては厳しいところです。&lt;br /&gt;&lt;br /&gt;日本でもすでにVMMやAVMなどを使われているところはいくつかあるんですかね？&lt;br /&gt;&lt;br /&gt;ちなみに↓こちらの記事によると&lt;br /&gt;&lt;a href=&quot;http://blog.pld.jp/archives/51224341.html&quot;&gt;XSTでSystemVerilogサポート（たーぼ のハードウェア設計記録）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FPGAの設計環境も今年からSystemVerilogがサポートされるようになりそうです。&lt;br /&gt;&lt;br /&gt;今年から本格的にSystemVerilogを採用するところが増えてきそうですね。&lt;br /&gt;&lt;br /&gt;自分も勉強しなきゃ。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/7615345556069076983/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/7615345556069076983' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/7615345556069076983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/7615345556069076983'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2008/01/ovm.html' title='「OVM」、オープンソースとして一般配布を開始'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-8711802506736253581</id><published>2008-01-07T17:51:00.000+09:00</published><updated>2008-01-07T18:25:48.155+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="記事の感想"/><title type='text'>DWM JAN.2008 特集１　アルゴリズムのハードウェア化手法</title><content type='html'>あけましておめでとうございます。&lt;br /&gt;&lt;br /&gt;せっかくなので久しぶりに少し書いてみます。&lt;br /&gt;といっても、記事の感想程度ですが。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.cqpub.co.jp/dwm/contents/dwm0122i.htm&quot;&gt;デザインウェーブマガジン 2008年１月号&lt;/a&gt;の特集１&lt;br /&gt;『アルゴリズムのハードウェア化手法』&lt;br /&gt;&lt;br /&gt;結構良い内容でした。&lt;br /&gt;&lt;br /&gt;現在のシステムLSI設計を上流工程の視点からこのように具体的に書かれているものは珍しい。&lt;br /&gt;ソフトをハード化する上でのメリット・デメリットも詳しく載っていて、ソフト・ハード協調設計をやる上でも有益な情報が多いと思う。&lt;br /&gt;&lt;br /&gt;調べてみると記事を書いた森岡澄夫さんは&lt;br /&gt;↓こちらの本の著者でもあるようだ。&lt;br /&gt;&lt;a href=&quot;http://www.cqpub.co.jp/hanbai/books/33/33951.htm&quot;&gt;HDLによる高性能ディジタル回路設計&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;実はこれ、自分が就職してから２年目ぐらいのころに結構お世話になった本。&lt;br /&gt;特にモジュール間のインタフェース設計などはこの本で勉強しました。&lt;br /&gt;&lt;br /&gt;LSI設計・検証関係の本は日本人の著者のものではあまりおすすめな物が少ないのですが、&lt;br /&gt;この本はLSI設計エンジニア２・３年目ぐらいで初心者から中級者へのステップアップにはちょうど良いのでは思います。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/8711802506736253581/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/8711802506736253581' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/8711802506736253581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/8711802506736253581'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2008/01/dwm-jan2008.html' title='DWM JAN.2008 特集１　アルゴリズムのハードウェア化手法'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-6663946384338194178</id><published>2007-12-07T13:15:00.000+09:00</published><updated>2007-12-07T13:31:21.035+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="サイトの紹介"/><title type='text'>FPGA PARK</title><content type='html'>&lt;a href=&quot;http://fpgapark.com/&quot;&gt;えふ・ぴー・じー・えー・ぱーく&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FPGAを使ったかなり積極的な実験や自作のIPを公開されています。&lt;br /&gt;ざっと見ただけですが、詳細なレポートがあるのでいろいろと勉強になりそうです。&lt;br /&gt;&lt;br /&gt;履歴を見ると以前から公開されていたようですが、ぜんぜん知りませんでした。&lt;br /&gt;&lt;br /&gt;IPの中には&quot;MR16&quot;という自作の16bit RISC CPUもあります。&lt;br /&gt;&lt;br /&gt;残念ながらCコンパイラは現在のところ無いようで、アセンブラでの開発になりますが&lt;br /&gt;iverilogでもシミュレーションができるようなので、CPUの動作を見てみたいなどという場合にはLattice Mico32などよりはこちらのほうが良いかもしれません。&lt;br /&gt;（iverilogでLattice Mico32のシミュレーションをやってみようとしたのですが、どうもそのままではうまくいかないようでした。どこかいじる必要があります。）&lt;br /&gt;&lt;br /&gt;また、このMR16はインタフェース誌の記事にも載っていたようなので、日本語の情報源も他のフリーのソフトコアCPUよりは多いかもしれません。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/6663946384338194178/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/6663946384338194178' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/6663946384338194178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/6663946384338194178'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2007/12/fpga-park.html' title='FPGA PARK'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-7466422702209141690</id><published>2007-12-04T11:07:00.000+09:00</published><updated>2007-12-04T11:38:41.340+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SoC"/><title type='text'>IP-XACT</title><content type='html'>ちょっととりとめもなく書きますが&lt;br /&gt;最近、&lt;a href=&quot;http://www.spiritconsortium.org/home&quot;&gt;IP-XACT&lt;/a&gt;というものが気になってます。&lt;br /&gt;&lt;br /&gt;ActelのツールにCoreConsoleというGUIでSoCを構成するツールがあってそれを使っているときにはじめて知ったのですが、IPの仕様をXMLで記述したようなものだと思います。&lt;br /&gt;&lt;br /&gt;私もまだ詳細を理解していないので↓こちらなどをご参考に。&lt;br /&gt;&lt;a href=&quot;http://www.spiritconsortium.org/press/presentations/IP-XACT_Tech_Awareness_EDSFair_2007_JAPANESE.pdf&quot;&gt;IP-XACTを使った効果的な設計フロー統合&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;CoreConsoleを使って思ったのですが、部品をポン、ポン、ポンと置くだけで細かいところはツールが自動的にやってくれて、SoCを構成できるので非常に便利です。&lt;br /&gt;&lt;br /&gt;現在のCoreConsoleはユーザーが作成したIPを追加することはできませんが、将来的には適切なIP-XACTの記述があれば、ユーザーが作成したIPも同様に簡単に接続できるようになるとのこと。&lt;br /&gt;&lt;br /&gt;これからのSoC設計はこういった流れになっていくのかなと感じました。&lt;br /&gt;&lt;br /&gt;各ベンダーが同様のツールを出していますが、SoCの構成を自動化するためには、IPに加えてそのインタフェースがどのようなものであるかなどの情報を付加する必要があり、そのためにユーザが手作業で情報を追加したり、またはベンダーごとに独自の仕様であったりといったのが現状だと思います。&lt;br /&gt;&lt;br /&gt;この追加が必要な情報がIP-XACTのように標準化されれば、IPの再利用化も進み、IPプロバイダの裾野が広がると思うんですけどね。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/7466422702209141690/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/7466422702209141690' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/7466422702209141690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/7466422702209141690'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2007/12/ip-xact.html' title='IP-XACT'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-4518588226910054822</id><published>2007-11-25T21:02:00.000+09:00</published><updated>2007-11-25T21:37:29.520+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="記事の感想"/><title type='text'>Nios II をASICで</title><content type='html'>&lt;a href=&quot;http://www.synopsys.co.jp/pressrelease/2008/20071113.html&quot;&gt;アルテラとシノプシス、Nios IIプロセッサ・コアのASICへの適用拡大に向けて協力&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ソフトコア・プロセッサの話題が続きますが。&lt;br /&gt;&lt;br /&gt;実際のところ、これを待っていたメーカーは結構いるのではないでしょうか。&lt;br /&gt;&lt;br /&gt;これで家電向けのSoCも、FPGAでプロト、初期ロット→ASICでコストダウンといった流れが加速して行きそうです。&lt;br /&gt;&lt;br /&gt;さて、Xilinxはどうするのか？&lt;br /&gt;&lt;br /&gt;ところで、私はAlteraのデバイス自体は使ったことあるのですが、Niosは使ったことがありません。&lt;br /&gt;オンチップバスは&quot;Avalon&quot;という独自のものになっているようですが使い勝手はどうなんでしょうね？&lt;br /&gt;&lt;br /&gt;まあこの業界、シェアを取った者勝ちといった気もしますが。。。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/4518588226910054822/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/4518588226910054822' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/4518588226910054822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/4518588226910054822'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2007/11/nios-ii-asic.html' title='Nios II をASICで'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-6030352937557190425</id><published>2007-11-15T10:27:00.000+09:00</published><updated>2007-11-15T10:36:10.638+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="記事の感想"/><title type='text'>MicroBlazeにMMUが搭載される！</title><content type='html'>&lt;a href=&quot;http://www.eetimes.jp/contents/200711/28025_1_20071114123823.cfm?AAAA892eE928KkEiisa2&quot;&gt;Xilinx社が32ビット・コアを改良、MMU搭載で仮想メモリーをサポートへ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MicroBlazeがメジャーバージョーンアップされたようです。&lt;br /&gt;&lt;br /&gt;内部バスも最大128ビットまで拡張可能。&lt;br /&gt;&lt;br /&gt;MMUを搭載してもSpartan-3E 1600の10%程度しかリソースを使わないらしい。&lt;br /&gt;だとしたら結構なものだ。&lt;br /&gt;&lt;br /&gt;ちなみに最大動作周波数はどのくらいなんだろうか？&lt;br /&gt;&lt;br /&gt;評価してみたいけどなぁ。&lt;br /&gt;時間があれば。。。&lt;br /&gt;&lt;br /&gt;といいつつ、いろいろ先延ばしにしてしまう悪い癖。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/6030352937557190425/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/6030352937557190425' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/6030352937557190425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/6030352937557190425'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2007/11/microblazemmu.html' title='MicroBlazeにMMUが搭載される！'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-1626483709862999058</id><published>2007-11-12T10:24:00.000+09:00</published><updated>2007-11-12T11:15:57.448+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ツールの紹介"/><title type='text'>Icarus Verilog &amp; GTKWave for Windows</title><content type='html'>このブログで使っているシミュレータは基本的にModelSimXE Staterなのですが、&lt;a href=&quot;http://cafeandverify.blogspot.com/2007/10/latticemico32.html&quot;&gt;以前の記事&lt;/a&gt;でも書いたように、商用シミュレータの無償版はコードサイズに制限がある場合が多いと思います。&lt;br /&gt;&lt;br /&gt;まあそれでも、自分でコーディングをする範囲であれば、勉強目的では十分ですし実際に仕事でもそこそこ使えるはずです。&lt;br /&gt;&lt;br /&gt;しかし最近はオープンなIPコアなどもさまざまなものが入手可能になり&lt;br /&gt;先のLatticeMico32のような大規模なコアでは&lt;br /&gt;それだけでコードサイズの制限を越えるようなものもあります。&lt;br /&gt;&lt;br /&gt;そのような場合に使えるフリーなシミュレータが&lt;a href=&quot;http://icarus.com/eda/verilog/&quot;&gt;Icarus Verilog&lt;/a&gt;です。&lt;br /&gt;ModelSimのようなGUIのインタフェースはありませんが、コードサイズによる制限などはもちろんありません。&lt;br /&gt;最近はドキュメントも（英語ですが）充実しつつあるように思います。&lt;br /&gt;実際、業務で使用されているところもあるようです。&lt;br /&gt;&lt;br /&gt;Windows環境では、cygwinなどでコンパイルも可能なようですが&lt;br /&gt;コンパイル済みのものが↓こちらで配布されているのでそれを使ったほうが手っ取り早いと思います。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://bleyer.org/icarus/&quot;&gt;Icarus Verilog for Windows&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;波形はVCDなどをダンプして、&lt;a href=&quot;http://home.nc.rr.com/gtkwave/&quot;&gt;GTKWave&lt;/a&gt;でみることができます。&lt;br /&gt;こちらもWindows版が配布されています。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.dspia.com/gtkwave.html&quot;&gt;http://www.dspia.com/gtkwave.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;DDLも一緒にダウンロードして、解凍したディレクトリのgtkw\binにgtkwave.exeをおけば使えるようになります。&lt;br /&gt;パスを通すのを忘れずに。&lt;br /&gt;&lt;br /&gt;こちらは、アプリケーションの起動はコマンドラインからになりますが&lt;br /&gt;操作はModelSimのWaveウィンドウのようにGUIで扱えます。&lt;br /&gt;以前のWindows版は使いづらかった記憶があるのですが&lt;br /&gt;現在のものは使い勝手がだいぶ向上しているようです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;上記の２つはソースコードも配布されているので&lt;br /&gt;ガンバレばMacで開発も可能！？</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/1626483709862999058/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/1626483709862999058' title='4 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/1626483709862999058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/1626483709862999058'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2007/11/icarus-verilog-gtkwave-for-windows.html' title='Icarus Verilog &amp; GTKWave for Windows'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30325162.post-3190920364647448701</id><published>2007-10-30T19:18:00.000+09:00</published><updated>2007-10-30T19:35:22.025+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LatticeMico32"/><title type='text'>LatticeMico32 シリアル通信の確認</title><content type='html'>&lt;a href=&quot;http://cafeandverify.blogspot.com/2007/10/latticemico32-spartan-3e.html&quot;&gt;前回、&lt;/a&gt;やり残していたシリアル通信の確認。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;とその前に、以前はSpartan-3E Starter Kitのメス型の方のシリアルポートにアサインしていましたが、それをオス型の方に変更しました。&lt;br /&gt;&lt;br /&gt;[ucfファイル]&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# Period constraint for 50MHz operation&lt;br /&gt;#&lt;br /&gt;NET &quot;clk&quot; PERIOD = 20.0ns HIGH 50%;&lt;br /&gt;#&lt;br /&gt;# soldered 50MHz Clock.&lt;br /&gt;# &lt;br /&gt;NET &quot;clk&quot; LOC = &quot;C9&quot; | IOSTANDARD = LVTTL;&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;# Simple LEDs &lt;br /&gt;# Require only 3.5mA. &lt;br /&gt;#&lt;br /&gt;NET &quot;led&lt;0&gt;&quot; LOC = &quot;F12&quot; | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;&lt;br /&gt;NET &quot;led&lt;1&gt;&quot; LOC = &quot;E12&quot; | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;&lt;br /&gt;#&lt;br /&gt;# Press buttons &lt;br /&gt;#   Must have pull DOWN resistors to provide Low when not pressed.&lt;br /&gt;#&lt;br /&gt;NET &quot;btn_south&quot; LOC = &quot;K17&quot; | IOSTANDARD = LVTTL | PULLDOWN;&lt;br /&gt;#&lt;br /&gt;# UART connections&lt;br /&gt;#&lt;br /&gt;#NET &quot;tx_female&quot; LOC = &quot;M14&quot; | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;&lt;br /&gt;#NET &quot;rx_female&quot; LOC = &quot;R7&quot;  | IOSTANDARD = LVTTL;&lt;br /&gt;NET &quot;RS232_DTE_RXD&quot; LOC = &quot;U8&quot; | IOSTANDARD = LVTTL ;&lt;br /&gt;NET &quot;RS232_DTE_TXD&quot; LOC = &quot;M13&quot; | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = SLOW ;&lt;br /&gt;# End of File&lt;br /&gt;#&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;[ラッパー]&lt;br /&gt;&lt;code&gt;&lt;br /&gt;`define LEDOUT_BITS 2&lt;br /&gt;&lt;br /&gt;module wrap_s3e_kit (/*AUTOARG*/&lt;br /&gt;   // Outputs&lt;br /&gt;   led, RS232_DTE_TXD,&lt;br /&gt;   // Inputs&lt;br /&gt;   clk, btn_south, RS232_DTE_RXD&lt;br /&gt;   );&lt;br /&gt;&lt;br /&gt;   input                     clk;&lt;br /&gt;   input        btn_south;&lt;br /&gt;   output [`LEDOUT_BITS-1:0] led;&lt;br /&gt;   output        RS232_DTE_TXD;&lt;br /&gt;   input        RS232_DTE_RXD;&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;   system_top system_top_i (&lt;br /&gt;       .clk_i(clk),&lt;br /&gt;       .rst_i_n(~btn_south),&lt;br /&gt;       .led_out(led),&lt;br /&gt;       .tx_out(RS232_DTE_TXD),&lt;br /&gt;       .rx_in(RS232_DTE_RXD)&lt;br /&gt;       );&lt;br /&gt;&lt;br /&gt;endmodule&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;結果は以下のとおり。&lt;br /&gt;&lt;br /&gt;↓ハイパーターミナルを起動して、LatticeMico32をリセット。&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyJnu8eUe32FM0r_NdD9RzvxeIyME3JE5r69meS4SD9imBZO_BEt2GOYG_LQv7rrpalI3OoMAruicGpqVxMvKzTLN8xtxO5Y-7w0sERZvD4B67IqRv65q2d3cgGLosleWM7cnX/s1600-h/Mico32_RS232C_1.PNG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyJnu8eUe32FM0r_NdD9RzvxeIyME3JE5r69meS4SD9imBZO_BEt2GOYG_LQv7rrpalI3OoMAruicGpqVxMvKzTLN8xtxO5Y-7w0sERZvD4B67IqRv65q2d3cgGLosleWM7cnX/s400/Mico32_RS232C_1.PNG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5127074014340835874&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;リセット直後にLatticeMico32から送信されるメッセージが表示されます。&lt;br /&gt;&lt;br /&gt;↓その後、適当にキーボードから文字を打つと、&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWNgyCiMp8uzAzQY5kluJL0fzVmin0CajRq_X2DRLdGiFGXCRWZdOHMUkPuF0U9pfma2feo44C3MEbWga4EzRiDOXsCXXAEVMC_KgLy8ZkXCch-l3KDbEPgm5FqHlNud55Emfz/s1600-h/Mico32_RS232C_2.PNG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWNgyCiMp8uzAzQY5kluJL0fzVmin0CajRq_X2DRLdGiFGXCRWZdOHMUkPuF0U9pfma2feo44C3MEbWga4EzRiDOXsCXXAEVMC_KgLy8ZkXCch-l3KDbEPgm5FqHlNud55Emfz/s400/Mico32_RS232C_2.PNG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5127074014340835890&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;そのまま返ってきた文字が表示されます。&lt;br /&gt;&lt;br /&gt;ハイパーターミナル側のボーレートは115200bpsに設定しています。&lt;br /&gt;&lt;br /&gt;以上で無事、シリアル通信の動作も確認ができましたので&lt;br /&gt;今後はこれを使って遊んでみようかなと思います。</content><link rel='replies' type='application/atom+xml' href='http://cafeandverify.blogspot.com/feeds/3190920364647448701/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/30325162/3190920364647448701' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/3190920364647448701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30325162/posts/default/3190920364647448701'/><link rel='alternate' type='text/html' href='http://cafeandverify.blogspot.com/2007/10/latticemico32_30.html' title='LatticeMico32 シリアル通信の確認'/><author><name>Ein</name><uri>http://www.blogger.com/profile/01701478433572724823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1U9YFD7WrSoANhDihlx29mlmLY7cbTdqYHgjmiQHzarQp7Bln5LOUhWkoau0pXR5SjJmmp1yWImQANeGB1W36xmLParozzFjypEOvVId_90m-eRoVWW-2i40VUzAD4Lw/s1600-r/a7jA6v-2QUZ7xLyN1jnvsuJ8Yhx76Vo4H9y_nB_mpkZyklyDEGud-4NNd_6xPX3wdVv-Ys1MvyWE-Z7j4JPRtdim7N7MAdm5ka1_3z_cSbg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyJnu8eUe32FM0r_NdD9RzvxeIyME3JE5r69meS4SD9imBZO_BEt2GOYG_LQv7rrpalI3OoMAruicGpqVxMvKzTLN8xtxO5Y-7w0sERZvD4B67IqRv65q2d3cgGLosleWM7cnX/s72-c/Mico32_RS232C_1.PNG" height="72" width="72"/><thr:total>0</thr:total></entry></feed>