2017-10-13 15 views
0

私が気にしていることは、8ビットの入力を1つ取り、1を数えることです。次に、それらの1を表します。Verilogでは、8ビット入力の1の数を数えて出力しますか?

01010111出力0101(5 1の入力からあります)

module 8to4 (in,out,hold,clk,reset); 
input [7:0] in; //1 bit inputs 
reg [7:0] hold; //possible use for case statement 
output [3:0] out; //Shows the count of bits 

always @(clk) 
    begin 
    out = in[0] + in[1] + in[2] + in[3] + in[4] + in[5] + in[6] + in[7]; //Adds the inputs from testbench and outputs it 
    end 
endmodule 

質問すべき:

  • は、適切な方法は、8 1ビット入力を持っているということですか?あるいは、各変数を1ビットとして宣言する必要がありますか?入力A、B、C、D、E、F、G、H;
  • 私の上記のコードが正しければ、1のカウントを表示するには適切な方法ですか?ケースステートメントが必要でしょうか?

私は本当にVerilogが新しく、まだテストベンチについて考えたくありません。

答えて

0

あなたが書き込んだ方法はおそらく、ビット数をパラメータ化することが容易になるため、書き込む方がよいでしょう。しかし、技術的には、1つの8ビット入力があります。

module 8to4 #(parameter WIDTH=8) (input [WIDTH-1:0] in, 
         output reg [3:0] out,hold, 
         input clk,reset); 
    reg [WIDTH-1:0] temp; 
    integer ii; 
    always @(clk) 
    begin 
     temp = 0; 
     for(ii=0; ii<WIDTH; i = i + 1) 
     temp = temp + in[ii]; 
     out <= temp; 
    end 
endmodule 
+0

申し訳ありませんが、私はまだこれに慣れていません。おそらく '#(WIDTH-8)'を説明できますか?グーグルの「integer ii;」の束の後でも、正直言って私はVerilogがそのようなintを作ることができないと私はそれのためのテストベンチを書く手がかりを持っていないだろう。 –

+0

申し訳ありませんが、それはタイプミスでした。私はモジュールを異なるサイズの入力に使用できるようにパラメータ化していました。 WIDTH = 8のとき、 'for'ループは元の式と全く同じことを行います。合成ツールは私のループをあなたの表現に展開します。しかし、パラメータ化されたので、 'WIDTH'を16に上書きすることができます。 –

0

論理的にはコードが適切です。

ただし、次のように改善できます。

  • outregとしてください。手続き割り当てで使用しているためです。
  • resetの使用。理想的には、コードにはリセット状態が存在する必要があります。
  • 現在指定されていないhold,clk & resetポートの方向(入力/出力)を宣言します。
  • 上記のように、コードにはparametersを使用できます。
関連する問題