6つのスイッチをビットとして使用して2つの7セグメントディスプレイに10進数(0〜63)を表示するにはどうすればよいですか?

ハイドレイク

私は最近、問題が次のように説明されているスキルテストを行いました。「sw [6:1]を使用して7セグメントディスプレイhex2およびhex1で0〜63を表す.v(verilog hdl)ファイルを作成します」- 「4で割り切れる任意の数。」

(制限時間内だったので)すべての値をハードコーディングして、0〜63のcaseステートメントを使用し、4で割り切れる値に注意して「-」だけを表示して終了しました。

もちろん、それは最適な解決策ではありません。値をハードコーディングすることで問題を解決したままにするのは嫌です。

これはCyclone-IIFPGA(大学にあるもの)用であり、QuartusIIを使用してコンパイルしています。4で割り切れるすべての数の「-」について、条件演算子を追加して解決し、「(sw%4)== 0?n:...」を実行しました。私はハードコーディングを行い、16間隔ごとのパターンに注意し、7セグメントディスプレイの値をその値の「0000」(16)に「シフトアップ」することで、別の方法で解決しようとしました。 10000 = h6、17 10001 = h7など):

module sk10(sw,hex1,hex2,hex3,hex0);
input [5:0] sw;
output [6:0] hex1,hex2,hex3 = 7'h7F, hex0 = 7'h7F; 

reg [6:0] hex1;

parameter h0 = 7'b0000001; 
parameter h1 = 7'b1001111;
parameter h2 = 7'b0010010; 
parameter h3 = 7'b0000110;
parameter h4 = 7'b1001100;
parameter h5 = 7'b0100100;
parameter h6 = 7'b0100000;
parameter h7 = 7'b0001111;
parameter h8 = 7'b0000000;
parameter h9 = 7'b0000100;
parameter n =  7'b1111110;

assign hex2 = (sw % 4 == 0) ? n :
                    (sw < 10) ? h0 : 
                    (sw < 20 && sw >= 10) ? h1 :
                    (sw < 30 && sw >= 20) ? h2 :
                    (sw < 40 && sw >= 30) ? h3 :
                    (sw < 50 && sw >= 40) ? h4 :
                    (sw < 60 && sw >= 50) ? h5 :
                    (sw < 70 && sw >= 60 ) ? h6 : n;

always @ (sw)
begin
    if (sw < 16) begin 
            case (sw[3:0])
            0 : hex1 = h0; 
            1 : hex1 = h1;
            2 : hex1 = h2; 
            3 : hex1 = h3;
            4 : hex1 = h4;
            5 : hex1 = h5;
            6 : hex1 = h6;
            7 : hex1 = h7;
            8 : hex1 = h8;
            9 : hex1 = h9;
            10 : hex1 = h0;
            11 : hex1 = h1;
            12 : hex1 = h2;
            13 : hex1 = h3;
            14 : hex1 = h4;
            15 : hex1 = h5;
            endcase
            end
    else if (sw >= 16 && sw < 32) begin
            case (sw[3:0])
            0 : hex1 = h6; 
            1 : hex1 = h7;
            2 : hex1 = h8; 

... and so on for every 16 intervals until 64

それは機能しますが、ほとんど最適ではなく、私が作成したこの新しい代替コードはそれよりも長いため、64個のcaseステートメントすべてをハードコーディングした方がよいでしょう。それぞれをハードコーディングしたり、上記の試みをしたりするよりも、より良い代替案について助けを求めたいと思います。どんな答えでも大歓迎です!

ウラド

結果は表示用であるため、結果を取得するためにいくつかのクロックサイクルを費やすことは許容できるはずです。

「ダブルダブル」アルゴリズムを確認してください

ナンランドサイトにもいくつかの例があります:https://www.nandland.com/vhdl/modules/double-dabble.html

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ