在 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
问题:
- 这是拥有 8 个 1 位输入的正确方法吗?或者我是否需要将每个变量声明为一位 ex: input A,B,C,D,E,F,G,H;
- 如果我上面的代码接近正确,那是显示 1 的计数的正确方法吗?我需要案例陈述吗?
我真的是 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
的用法。理想情况下,任何代码都应具有重置状态,而您的代码中缺少这种状态。
- 为
hold
、clk
& reset
端口声明方向(input/output),目前未指定。
- 正如 dave 提到的,您可以使用
parameters
作为您的代码。
我想做的是取 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
问题:
- 这是拥有 8 个 1 位输入的正确方法吗?或者我是否需要将每个变量声明为一位 ex: input A,B,C,D,E,F,G,H;
- 如果我上面的代码接近正确,那是显示 1 的计数的正确方法吗?我需要案例陈述吗?
我真的是 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
的用法。理想情况下,任何代码都应具有重置状态,而您的代码中缺少这种状态。- 为
hold
、clk
&reset
端口声明方向(input/output),目前未指定。 - 正如 dave 提到的,您可以使用
parameters
作为您的代码。