我是编程的新手,我发现自己过分依赖条件语句。我发现它们在编码时与我的思路相似,这使得它们易于实现。
下面我在Verilog中有一个控制数字时钟显示的小代码片段。整个代码以这种方式布局。代码有效并且非常易读。但是,我发现它不够优雅。是否可以简化代码,同时提高可读性?
if (cnt >= clkspeed) begin
cnt = 0;
out0 <= out0 + 4'h1;
// LED0 > 9 -> LED1 += 1
if (out0 == 4'h9) begin
out0 <= 4'h0;
out1 <= out1 + 4'h1;
// LED1 > 5 -> LED2 += 1
if (out1 == 4'h5) begin
out1 <= 4'h0;
out2 <= out2 + 4'h1;
// LED2 > 9 -> LED3 += 1
if (out2 == 4'h9) begin
out2 <= 4'h0;
out3 <= out3 + 4'h1;
// LED3 > 5 -> LED3 = 0
if (out3 == 4'h5) begin
out3 <= 4'h0;
end
end
end
end
end
答案 0 :(得分:1)
您的问题是,您将数据存储在标量变量中时,执行相同的操作四次。这种情况的解决方案是将数字存储在数组中,然后循环遍历它们。伪代码类似于:
array<int> digits;
int position = digits.length();
while (position >= 0) {
digits[position] = (digits[position] + 1) % 10;
if (digits[position]>0) break; // if there is no carry, just break
position--;
}
此代码假定每个数字最多为9个。因此您仍需要添加处理LED1和LED3的逻辑...(通过使用另一个数组,或者如果您有OOP创建可以存储实际的LED对象数字和领导的限制......)