■■純正律音源を作りたい
なんか「伝説のハンドメイドアナログシンセサイザー: 1970年代の自作機が蘇る」を読んでたら、純正律のハーモニーを聞きたくなって、オールデジタルの簡単なシンセサイザーを作ろうと思い、分周やらエンベロープやら考えてる内、やっぱり純正律なら正弦波だろうと思い、まずsin tableを実装することに。
■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にしました。
入出力関係
このアイディアのキモは、
1.1周期は90°づつ、符号反転、鏡面反転でえられるので、
アドレス方向は2bit減らせる、データbit方向も1bit減らせる。
2.下図の様に、sinを0~90°で見ると、比例分を削除して、直線分を引けば、
波高さの1/4で済むため、データbit方向をさらに2bit減らせるというもの。
実装ブロック図は、こんな感じ。
こちらがsim結果
考察は20時間以上使った上に失敗だったけど、実装はテーブルデータコミでも3時間くらいかな?
やっぱりverilogは早くてキモチイ。
フラット階層でさえこれだもんなぁ。VHDLは階層間が入るとさらにたくさん書かなきゃならないんだよな。
コーディング時間30%、debug時間50%くらいは削減できると思うんだけど...誰でも。
ただverilog の時でも port size checkのstrict optionはあってもいいと思う。(そのアドバンテージもsim時のMSB詰めで帳消しだけどな>VHDL)
ハッキリ行って回路の余裕があるんだから8和音でも16bitでベタ書きROM余裕で入っちゃうのわかってるのに、どうしてぼくはこうも遠回りしたがるんだろうか....
困った性分である。
というわけで、音源自体は影も形も。
そもそも12bitで足りるかも考えずに、実装してしまったわけで。
こうやって休みがどんどん消費されてしまう。困る。