2013-12-12 5 views
-2

나는 매개 변수화 된 숫자의 제곱근에 대한 Verilog 코드를 작성했습니다. 비트 수가 많으면 코드가 작동합니다.제곱근 나누기 비트 그룹화

비트 수가 홀수 인 경우 코드는 비트 수를 오른쪽 (LSB)부터 시작하여 두 그룹으로 나눕니다. 첫 번째 반복은 가장 왼쪽 비트부터 시작하여 1 비트의 그룹을 선택합니다.

필요한주기를 수행하기 위해 카운터를 사용하고 있습니다. 첫 번째 반복에서는 1 비트 그룹을 선택하고 나머지 반복에서는 두 그룹을 선택하는 방법을 이해하지 못합니다.

답변

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 

코드 예제이 정적 odd으로 언 롤링 할 수 있어야한다 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 

에 대한 매개 변수를 기반으로 반복은 고정 된 수의 반복을 갖는다. 루프를 정적으로 풀면 합성이 가능합니다.