这看起来很简单,但我无法找到如何在任何地方执行此操作...我想要做的就是将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)非常陌生,所以我真的不知道我做错了什么。
答案 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。