<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>ｔake#のブログ</title>
<link>https://ameblo.jp/takeru0x5569/</link>
<atom:link href="https://rssblog.ameba.jp/takeru0x5569/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>ブログの説明を入力します。</description>
<language>ja</language>
<item>
<title>A/Dサンプリングタイミング</title>
<description>
<![CDATA[ エフェクタのA/Dサンプリング周波数は、CDと同じく44.1kHzとします。<br>手持ちの水晶は4MHｚなのでFPGAで分周してタイミングを生成します。<br><br>残念ながら44.1kHzが4MHzの整数倍ではなく、等間隔にはできません。<br>しょうがないので10msで441回サンプルに帳尻あわせするようにします。<br><br>4MHz(250ns)で90サイクルを131回と91サイクルを310回、<br>それでちょうど10msにする作戦です。<br><br>回路はVerilogで記述します。<br>こんな感じ。<br><br>// =====================================================<br>// A/Dサンプリングタイミングトリガを生成するモジュール<br>// ベースクロックは4MHz <br>// サンプルタイミングは44.1kHz(=22.675736・・・us)<br>// 10msあたり441発のトリガを出力する。<br>// 90サイクルカウントを131発と91サイクルカウントで310発<br>// =====================================================<br>`timescale 1ns/1ns<br>module m_SAMPL_TRG<br>&nbsp;&nbsp;&nbsp; (i_clk&nbsp; <br>&nbsp;&nbsp;&nbsp; ,i_rst_n<br>&nbsp;&nbsp;&nbsp; ,o_trg_p<br>&nbsp;&nbsp;&nbsp; );<br><br>&nbsp;&nbsp;&nbsp; input&nbsp;&nbsp; i_clk&nbsp;&nbsp; ;// クロック(4MHz)<br>&nbsp;&nbsp;&nbsp; input&nbsp;&nbsp; i_rst_n ;// リセット<br>&nbsp;&nbsp;&nbsp; output&nbsp; o_trg_p ;// サンプルトリガ(44.1kHz)<br><br>&nbsp;&nbsp;&nbsp; reg [6:0] count_div;// <br>&nbsp;&nbsp;&nbsp; reg [8:0] count_trg;// 出力トリガの回数をカウント<br>&nbsp;&nbsp;&nbsp; reg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o_trg_p&nbsp; ;//<br><br>&nbsp;&nbsp;&nbsp; wire [6:0]max_count&nbsp; = (count_trg &gt;10'd130&nbsp;&nbsp;&nbsp; ) ? 7'd90 : 7'd89;<br>&nbsp;&nbsp;&nbsp; wire&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cler_div_p = (count_div == max_count) ? 1'b1&nbsp; : 1'b0 ;<br>&nbsp;&nbsp;&nbsp; wire&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cler_trg_p = (count_trg == 10'd441&nbsp; ) ? 1'b1&nbsp; : 1'b0 ;<br><br>&nbsp;&nbsp;&nbsp; //トリガ生成用カウンタ<br>&nbsp;&nbsp;&nbsp; always@(posedge i_clk or i_rst_n)<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(~i_rst_n)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count_div &lt;= 7'd0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(cler_div_p) count_div &lt;= 7'd0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count_div &lt;= count_div + 7'd1;<br>&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //トリガ出力回数カウンタ<br>&nbsp;&nbsp;&nbsp; always@(posedge i_clk or i_rst_n)<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(~i_rst_n)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count_trg &lt;= 9'd0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(cler_trg_p) count_trg &lt;= 9'd0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(cler_div_p) count_trg &lt;= count_trg + 9'd1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count_trg &lt;= count_trg;<br>&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; always@(posedge i_clk or i_rst_n)<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(~i_rst_n)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o_trg_p &lt;= 1'd0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o_trg_p &lt;= cler_div_p;<br>&nbsp;&nbsp;&nbsp; end<br><br>endmodule<br>//テストベンチ <br>module m_SAMPL_TRG_tb();<br>&nbsp;&nbsp;&nbsp; reg i_clk&nbsp;&nbsp; =0;<br>&nbsp;&nbsp;&nbsp; reg i_rst_n =0;<br>&nbsp;&nbsp;&nbsp; wire o_trg_p;<br><br>&nbsp;&nbsp;&nbsp; m_SAMPL_TRG&nbsp; m_SAMPL_TRG<br>&nbsp;&nbsp;&nbsp; (.i_clk&nbsp;&nbsp; (i_clk&nbsp;&nbsp; )<br>&nbsp;&nbsp;&nbsp; ,.i_rst_n (i_rst_n )<br>&nbsp;&nbsp;&nbsp; ,.o_trg_p (o_trg_p )<br>&nbsp;&nbsp;&nbsp; );<br><br>&nbsp;&nbsp;&nbsp; //クロック4MHz<br>&nbsp;&nbsp;&nbsp; always#125 i_clk = ~i_clk;<br><br>&nbsp;&nbsp;&nbsp; integer cnt=0;<br>&nbsp;&nbsp;&nbsp; //10ms毎のトリガで時刻とカウント数を表示<br>&nbsp;&nbsp;&nbsp; always@(posedge m_SAMPL_TRG.cler_trg_p)<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $display("10ms Triger = %t[ns] cnt = %d",$time,cnt);<br>&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //44.1kHzトリガの回数をカウント<br>&nbsp;&nbsp;&nbsp; always@(posedge o_trg_p)<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnt =&nbsp; cnt +1;<br>&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //トリガ間隔のチェック<br>&nbsp;&nbsp;&nbsp; integer chk_time1;<br>&nbsp;&nbsp;&nbsp; integer chk_time2;<br>&nbsp;&nbsp;&nbsp; integer chk_time;<br>&nbsp;&nbsp;&nbsp; always@(posedge o_trg_p)<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chk_time1 &lt;= $time&nbsp;&nbsp;&nbsp;&nbsp; ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chk_time2 &lt;= chk_time1 ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(cnt &gt; 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chk_time &lt;= chk_time1 - chk_time2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( (chk_time &gt; 22750) || (chk_time &lt; 22500) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $display("Triger Error");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; end<br><br>&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp; initial<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #50;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i_rst_n=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #100000050; //1秒で終了<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $stop;<br>&nbsp;&nbsp;&nbsp; end<br><br>endmodule<br><br>***********************************************************<br>シミュレーションの結果は以下のとおり。<br>これで44.1kHzのサンプリングタイミングが作れました。<br><br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 441<br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 19999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 882<br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 29999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1323<br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 39999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1764<br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2205<br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 59999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2646<br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 69999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3087<br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 79999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3528<br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 89999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3969<br># 10ms Triger =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 99999625[ns] cnt =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4410<br>
]]>
</description>
<link>https://ameblo.jp/takeru0x5569/entry-11763351856.html</link>
<pubDate>Sun, 02 Feb 2014 18:04:26 +0900</pubDate>
</item>
<item>
<title>入力プリアンプ</title>
<description>
<![CDATA[ デジタル回路でエフェクタを作りたいのだが、まずはギターの音をA/D変換しなくてはいけない。<br><br>今回は5V単一電源で制作したいので、入力アンプは方電源で試作した。<br>ギターからの入力をコンデンサでDCカットし、5Vから作った.約2.5Vでオフセットする。<br>初段のアンプはボルテージフォロアで、後段で反転増幅する。<br><br>スピーカーにつなげて音が出るかチャックしてみた結果。<br>音は正常に出ていたし、振幅もフルスケール振れていた。<br><br>破線の部分は音出し用なので、後程A/Dコンバータへ置き換える。<br><p><a href="http://stat.ameba.jp/user_images/20140123/00/takeru0x5569/1a/29/j/o0800038112822249837.jpg"><img ratio="2.0952380952380953" src="https://stat.ameba.jp/user_images/20140123/00/takeru0x5569/1a/29/j/t02200105_0800038112822249837.jpg" style="width:220px; height:105px; border:none;"></a></p>ブレッドボードの様子。<br>今回使ったOPアンプはNJM2732D。<br>選定基準としては、電源電圧までフルスイング可能であること。<br><br><a href="http://stat.ameba.jp/user_images/20140123/00/takeru0x5569/01/97/j/o0480064012822247193.jpg"><img ratio="0.7504690431519699" id="1390406392183" src="https://stat.ameba.jp/user_images/20140123/00/takeru0x5569/01/97/j/o0480064012822247193.jpg" border="0" width="400"></a><br>
]]>
</description>
<link>https://ameblo.jp/takeru0x5569/entry-11755817765.html</link>
<pubDate>Thu, 23 Jan 2014 00:58:45 +0900</pubDate>
</item>
<item>
<title>ギター用デジタルエフェクタを作る</title>
<description>
<![CDATA[ FPGAを使ったギター用エフェクタ。<br>頓挫しかかっていたが、今年こそ頑張って作る！<br><br>アメブロのパスワードも思い出せたし！<br><br>使用するのは,xilinxのXC3S250E。<br><br><a href="http://stat.ameba.jp/user_images/20140123/00/takeru0x5569/1b/7d/j/o0800142212822224274.jpg"><img alt="" title="" ratio="0.5625879043600562" id="1390403984910" src="https://stat.ameba.jp/user_images/20140123/00/takeru0x5569/1b/7d/j/o0800142212822224274.jpg" border="0" width="400"></a><br>
]]>
</description>
<link>https://ameblo.jp/takeru0x5569/entry-11755801417.html</link>
<pubDate>Thu, 23 Jan 2014 00:19:38 +0900</pubDate>
</item>
</channel>
</rss>
