0

こんにちは、私が VHDL でやろうとしているのは、8 ビットのバイナリ値を取り、それを BCD として表現することですが、この値は最大入力の 9 の一部でなければならないという問題があります。

1- 入力を整数に変換します。例: 1000 0000 -> 128

2- 整数を 255 で割ってから 90 を掛けます (1 の桁と小数点以下の最初の桁がすべて小数点以下になるように 90 を掛けます)

例: 128/255*90 = 45.17 (これを signal_in とします)

3. 20 で割って 45 の 2 桁を抽出し、それらを別の整数として保存します。たとえば、次のようなものを使用します。

LSB_int = signal_in mod 10

次に、信号を 10 で割って 4.517 に変更し、それを MSB_int に等しくします (小数点以下を切り捨てて 4 を右に格納します)。

4.LSB_intとMSB_intの両方を4桁のBCDに変換します

..そして私はそこから完璧になるでしょう...しかし悲しいことに、私は非常に多くの問題を抱えました...さまざまなデータ型(署名されていないstd_logic_vectors)と除算で.だから、私の思考プロセスの欠陥と私がすべきことについて助けが必要ですこれを行うときは注意してください..

私は実際に自分のコードをやり直して、これを保存したと思っていました..しかし、私はそうしませんでした..私はまだこの解決策がうまくいくと信じています.古いコードだと思うものを返信します...すべてを思い出すことができたらすぐに..

これが私の新しいコードに関する私の他の質問です..(私が何かをしたことを示すためだけに..) VHDLで8ビットの2進数をBCDに変換する

4

1 に答える 1

0

f よくわかりました、必要なのは 8bit データを変換することです

0~255 → 0~9000

BCD4桁で表します。

たとえば 0x80 → 4517 (BCD) が欲しい

もしそうなら、私はあなたにまったく別のアイデアを提案します:

1)

単純な 8bit*8bit->16bit で入力範囲を出力範囲に変換してみましょう

(in_data * 141) 14 MSB を保持 (0.1% エラー)

そして、この14ビットレジスタがTARGETであるとしましょう

2)

4 桁の BCD アップ/ダウン カウンターを作成します (出力)

14 ビット バイナリ アップ/ダウン カウンター (フォロワー) を構築します。

両方に同じ入力 (reset、clk、UpDown) を供給します。

(一方を他方の影にする)

3)

TARGET とバイナリ カウンターを比較する

if (follower < target) then increment the counters
else if (follower > target) then decrements the counters
else nothing

4)

終わり

于 2014-11-26T19:01:42.030 に答える