2013-12-12 82 views
-2

我已經編寫了參數化數字的平方根的verilog代碼。如果位數甚至是代碼工作。平方根分區中的位分組

如果位數是奇數,則代碼將位數從右邊開始分成兩組(兩個LSB)。第一次迭代將選擇從最左側開始具有1位的組。

我正在使用計數器來檢查所需的週期數。我不明白我應該如何選擇第一次迭代的1位組,以及2次迭代的其餘部分。

回答

0

可變數量的位選擇在硬件中看起來並不實際。如果你展示了一些代碼,答案可能會更相關或更實用。

兩種解決這一方式:

  1. 墊上檢測奇數的數量,加入的0

  2. MSB具有其中選擇1或2位有選擇地填充所述迭代的if else LSB。

碼例如用於1.

parameter DATA_W = 11; 
parameter odd = DATA_W % 2; 
input [DATA_W-1:0] data; 
reg [DATA_W-1+odd:0] data_int; 

always @* begin 
    if (odd) 
    data_int = {1'b0, data}; 
    else 
    data_int = data; 
end 

碼例如用於2.

// Iteration for(loop=0; loop<max; loop=loop+1) begin 
    if ((loop == 0) && (odd)) begin 
    sel = {data[0], 1'b0}; 
    end 
    else begin 
    sel = data[loop*2+1:loop*2]; 
    end 
// end 

這應該能夠被靜態展開爲odd是基於參數並且循環具有固定數量的迭代。如果一個循環可以靜態展開,那麼它是可綜合的。