2進→10進変換回路 BIN2HEX
RTL 3H, sim 1H , Blogなど2H
今、作りたい回路があるんですが、回路の中の値をリアルタイムに表示したいんですよ。
できれば16進でなく10進がいいなぁと思って、2進ー>10進変換回路を作って見ました。
色々方法があるんですが、一番単純な、BCD加算器を縦横に並べた、力技回路を書いてみました。
構成
BCD_ADDERがBCD加算器で1桁の2値を足して、10以上になったら桁上り(cyo_o)を出す、
筆算の一桁を計算する回路です。
各bitがHのときは、それに対応した値を、筆算の様に足してゆく、だけ、の回路です。
入力の1bit分
0からの4bit目がHなら、10の位に1,1の位に6を足します。
この図では、縦方向に1の位、10の位、100の位...と並んでます。
この図では1000の位までしか書いてませんが、実際には32bitは10桁必要なので10億の位まであります。
この時、桁上りを足すのを忘れない様に。
それを32bit分
入力の各bit分32ビット分の加算器が横に並んでます。
図では4bit目と5bit目の分のみ書いてますが、実際には列実装されています。
こちらの方向は、実は順番はどうでもいいので、実装上の緩和条件を見つけると、回路がちいさくなるかもしれません。
速度、回路規模
コンパイルしてみると、
CQ出版のMAX10-FBに搭載の(Altera MAX10:10M08SAE144C8)で、fmax=11.5MHzと
想像以上に複雑な回路で、回路規模も1.5kLEと、NiosIIマイコンよりもデカイという結果。
まさに富豪コーディング。
これならNiosII使えよ。と言った感じ。
もっとも、フラッシュにこだわらなければ、巡回に変更する方法もあります。
縦1列分で、1bitずつ巡回加算すれば、1列+コントローラで棲むので、多分200LE、33clock delay ,fmax=100MHzくらいには収まりそうな気がしますが...
ここでタイムアップ
sim
FPGA/RTL/BIN2BCD.v内にテストベンチ TB_BIN2BCD()も同梱してあります。
ランダム値10000値入力での一致比較で完全一致してたので、bugということもないでしょう。
ソース
ソースはこちら。例によってGitHubにupしてます。(たった1 fileのためにGitHubとか、こちらも富豪
github.comhttps://github.com/mangakoji/BIN2BCD
enjoy!!