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

In Verilog, counting and outputting the number of 1's in an 8bit input?

我想做的是取 8 个 1 位输入并计算 1。然后代表那些1。

01010111 应该输出 0101(输入有五个 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

问题:

我真的是 verilog 的新手,所以我什至不想考虑测试台。

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

逻辑上代码是正确的。

但是你可以像下面这样改进它。

  • out 设为 reg,因为您正在程序分配中使用它。
  • reset 的用法。理想情况下,任何代码都应具有重置状态,而您的代码中缺少这种状态。
  • holdclk & reset端口声明方向(input/output),目前未指定。
  • 正如 dave 提到的,您可以使用 parameters 作为您的代码。