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

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

超富豪な2進10進変換回路

2進→10進変換回路 BIN2HEX

RTL 3H, sim 1H , Blogなど2H

今、作りたい回路があるんですが、回路の中の値をリアルタイムに表示したいんですよ。

できれば16進でなく10進がいいなぁと思って、2進ー>10進変換回路を作って見ました。

 

色々方法があるんですが、一番単純な、BCD加算器を縦横に並べた、力技回路を書いてみました。

 

構成

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目の分のみ書いてますが、実際には列実装されています。

こちらの方向は、実は順番はどうでもいいので、実装上の緩和条件を見つけると、回路がちいさくなるかもしれません。

 

f:id:mangakoji:20170423211433p:plain

 

速度、回路規模

コンパイルしてみると、

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!!