首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Verilog中,在8位输入中计数和输出1的数目?

在Verilog中,在8位输入中计数和输出1的数目?
EN

Stack Overflow用户
提问于 2017-10-13 02:23:01
回答 2查看 8.5K关注 0票数 0

在我的脑海中,我想做的是接受8个1位的输入并数1,然后表示那些1。

01010111应该输出0101 (从输入有5个1)

代码语言:javascript
复制
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非常陌生,所以我甚至还不想考虑一个测试平台。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-13 05:56:17

您编写它的方式可能是更好的编写它的方法,因为它使参数化位数变得更容易。但严格来说,你有一个8位的输入。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-10-14 01:23:06

从逻辑上讲,代码是正确的。

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

  • out作为reg,因为您在过程分配中使用它。
  • reset的使用。理想情况下,任何代码都应该具有重置状态,这在您的代码中是缺失的。
  • 声明当前未指定的holdclkreset端口的方向(输入/输出)。
  • 正如dave提到的,您可以使用parameters作为代码。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46721548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档