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

   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高级数字设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值