不能被綜合的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高級數字設計

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章