您的位置:首页 > 其它

不能被综合的Verilog语言——非静态循环

2016-04-29 20:24 274 查看
Verilog语言是硬件描述语言,需要综合成硬件电路。不是所有的行为描述都可以综合成硬件电路的。
比如下面的这段代码:功能很简单,完成统计输入的并行数据中‘1’计数。


module test(
output reg [2:0] bit_count,
input [7:0]  data,
input  clk,
input  reset
);
reg [2:0] count,index;
reg [7:0] temp;
always@(posedge clk)begin
if(reset)begin
count = 0;
bit_count = 0;
end else begin
count = 0;
temp = data;
for(index=0;|temp;index=index+1)begin
if(temp[0]) count = count+1;
temp = temp>>1;
end
bit_count = count;
end
end
endmodule


下面来分析一下上面的例子:用C编程的话思路没有任何问题。程序通过将输入数据保存到temp寄存器中,然后对其循环右移。判断temp的LSB来确定是否对bit_count加一。对数字‘1’的计数任务原则上应该是组合逻辑完成的任务。但是组合逻辑却不能在一个循环内完成多个循环任务。而且对不同的数据输入循环的次数是不确定的。但是上面的代码仿真是可以通过的,波形也可以达到预期的结果。但是代码是不可被综合。

总结:当在一个行为模块里嵌入for循环的组合逻辑,或着当循环的此次不能被确定时,不能被综合成硬件电路。

材料来源:Verilog高级数字设计
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  硬件 语言