如何在Verilog中为4位线添加1

时间:2015-09-25 00:38:02

标签: verilog

这看起来很简单,但我无法找到如何在任何地方执行此操作...我想要做的就是将1添加到4位线。

总的来说,我想计算8位变量中的1的数量。我们在A中调用此输入。输出将是outA。两者都被定义为电线; inA是8位,其中outA是4位。

wire[0:7] inA;
wire[0:3] outA;

我可以通过for循环来完成数组:

for (i = 0; i <= 7; i = i + 1) begin
    if (inA[i] == 1) begin
       outA <= outA + 1;
    end
end

但这不起作用。 有人可以帮忙吗?我对Verilog(和VHDL)非常陌生,所以我真的不知道我做错了什么。

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点,这里有一个选项:

<div class="col-xs-12 col-sm-12 col-md-12">
    <div class="form-group" ng-init="getSecurityQuestions()">
        <label class="control-label small-font">Security Question*</label>
        <ui-select ng-model="form.security_question" theme="bootstrap" required>
            <ui-select-match placeholder="Pick one...">{{$select.selected.text }}</ui-select-match>
            <ui-select-choices repeat="question in security_questions">
                {{ question.text }}
            </ui-select-choices>
        </ui-select>
    </div>
</div>

<div class="col-xs-12 col-sm-12 col-md-12">
    <div class="form-group">
        <label class="control-label small-font" for="security_answer">Your Answer*</label>
        <input type="text" id="security_answer" ng-model="form.security_answer" class="form-control" min="3" required />
    </div>
</div>

由于您尚未提供完整的源代码(例如 reg [0:3] ones; integer i; always @ (inA) begin ones = 0; for (i = 0; i < 8; i = i + 1) begin ones = ones + inA[i]; end end assign outA = ones; 循环的上下文),我们只能猜出问题所在。

请记住,for之类的非阻止分配将计划在outA <= outA + 1的末尾执行,以便最后一次分配覆盖所有以前的。

由于always(如果您的outA循环嵌入reg块中,那么顺便说一下必须是for),只会在always之后更新{ {1}}块已完成“正在执行”,只有always可以导致inA[7]的增量。

有关outA块执行方式的详细信息,请查看my answer here