在Verilog中,计算并输出8位输入中的1的数量?

时间:2017-10-13 02:23:01

标签: verilog hdl 8-bit

我想在脑海中做的是取8个1位输入并计算1' s。然后代表那些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位输入的正确方法吗?或者我需要将每个变量声明为一位ex:输入A,B,C,D,E,F,G,H;
  • 如果上面的代码接近正确,那么这是出示显示1的计数的正确方法吗?我需要一个案例陈述吗?

我对verilog很陌生,所以我甚至不想考虑一个测试平台。

2 个答案:

答案 0 :(得分:0)

您编写它的方式可能是编写它的更好方法,因为它可以更容易地参数化位数。但从技术上讲,你有一个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

答案 1 :(得分:0)

逻辑上代码是正确的。

但是你可以改进它,如下所示。

  • out设为reg,因为您是在程序转让中使用它。
  • reset的用法。理想情况下,任何代码都应该具有重置状态,这在代码中是缺失的。
  • 声明holdclk&amp;的方向(输入/输出) reset端口,当前未指定。
  • 正如戴夫所提到的,您可以使用parameters代码。