散歩師・漫画居士のくだらなクラブ日記

ども、散歩師・漫画居士っす。散歩したり実働模型作ったりが趣味なんで、その時に思いついたこととか書くッス

12bit in/12bit out sin tableの実装

■■純正律音源を作りたい

 なんか「伝説のハンドメイドアナログシンセサイザー: 1970年代の自作機が蘇る」を読んでたら、純正律のハーモニーを聞きたくなって、オールデジタルの簡単なシンセサイザーを作ろうと思い、分周やらエンベロープやら考えてる内、やっぱり純正律なら正弦波だろうと思い、まずsin tableを実装することに。

www.amazon.co.jp

 

■16bit in/16bit out

Altera FPGAボードBeMicroMAX10 /DE0Nanoには M9kという ROMが搭載されてますが、これ 1個で16bit in/16bit outのsinテーブルを作ろうとして2日間格闘しましたが、結局あきらめました。

なんとかROMには入れたんですが、どうやっても5bit×7bitの乗算器を削れないので、アキラメ。

 

■M9K ROM

M9k ROMは 9kbitのROMなので、ベタで使うと、10bit in/9bit outか、 9bit in/18bit outになります。

 

■12bit in / 12bit out

 ベタ書きじゃさすがに芸がないので、design wave magazineのFM受信機コンテストの回路のアイデアを、一部いただいて、12bit in/12bit outにしました。

 

入出力関係

f:id:mangakoji:20151213205640p:plain

f:id:mangakoji:20151213205650p:plain

 

このアイディアのキモは、

1.1周期は90°づつ、符号反転、鏡面反転でえられるので、

  アドレス方向は2bit減らせる、データbit方向も1bit減らせる。

 

2.下図の様に、sinを0~90°で見ると、比例分を削除して、直線分を引けば、

波高さの1/4で済むため、データbit方向をさらに2bit減らせるというもの。

f:id:mangakoji:20151213205628p:plain

 

実装ブロック図は、こんな感じ。

f:id:mangakoji:20151213205608p:plain

こちらがsim結果

f:id:mangakoji:20151213205405p:plain

 

考察は20時間以上使った上に失敗だったけど、実装はテーブルデータコミでも3時間くらいかな?

やっぱりverilogは早くてキモチイ。

フラット階層でさえこれだもんなぁ。VHDLは階層間が入るとさらにたくさん書かなきゃならないんだよな。

コーディング時間30%、debug時間50%くらいは削減できると思うんだけど...誰でも。

ただverilog の時でも port size checkのstrict optionはあってもいいと思う。(そのアドバンテージもsim時のMSB詰めで帳消しだけどな>VHDL)

 

ハッキリ行って回路の余裕があるんだから8和音でも16bitでベタ書きROM余裕で入っちゃうのわかってるのに、どうしてぼくはこうも遠回りしたがるんだろうか....

困った性分である。

 

というわけで、音源自体は影も形も。

そもそも12bitで足りるかも考えずに、実装してしまったわけで。

こうやって休みがどんどん消費されてしまう。困る。