MAZZI 1 21 декабря, 2006 Опубликовано 21 декабря, 2006 · Жалоба Кому интересно будет, решение на Verilog: parameter NUMB_FRM = 16 /* число FRM в MultiFRM */ , WIDTH_SRL = 16 /* ширина сдвигового регистра */ , NUMB_SRL = NUMB_FRM * BYTE / WIDTH_SRL /* число FRM в MultiFRM */ , NUMB_INIT = NUMB_FRM * BYTE /* число установок INIT */ ; /* функция переворачивания числа */ function [(WIDTH_SRL-1): 0] f_MsbToLsb; input [(WIDTH_SRL-1): 0] i_numb; integer i; begin for (i = 0; i < WIDTH_SRL; i = i+1) f_MsbToLsb[i] = i_numb[(WIDTH_SRL-1) -i]; end endfunction /* функция сдвига числа */ function [(WIDTH_SRL-1): 0] f_ShiftINIT; input [(NUMB_INIT-1): 0] i_numb; input integer i_idx; begin f_ShiftINIT = i_numb >> WIDTH_SRL * i_idx; end endfunction /*----------------------------------------------------------------------------- * компоненты SRL16 */ parameter GEN_INIT = { {SA, ALM, NFAS, Ebit_2}, {FAS, CRC4} , {SA, ALM, NFAS, Ebit_1}, {FAS, CRC4} , {SA, ALM, NFAS, 1'b1}, {FAS, CRC4} , {SA, ALM, NFAS, 1'b1}, {FAS, CRC4} , {SA, ALM, NFAS, 1'b0}, {FAS, CRC4} , {SA, ALM, NFAS, 1'b1}, {FAS, CRC4} , {SA, ALM, NFAS, 1'b0}, {FAS, CRC4} , {SA, ALM, NFAS, 1'b0}, {FAS, CRC4} }; genvar i; wire [(NUMB_SRL/*-1*/):0] DOUT_SRL; assign DOUT_SRL[NUMB_SRL] = DOUT_SRL[0]; assign o_DOUT = DOUT_SRL[0]; generate for (i=0; i<NUMB_SRL; i=i+1)begin:SRL SRL16E #( .INIT( f_MsbToLsb(f_ShiftINIT(GEN_INIT,i)) ) ) SRL( .Q (DOUT_SRL[i] ), // SRL data output .A0 (1'b1 ), // Select[0] input .A1 (1'b1 ), // Select[1] input .A2 (1'b1 ), // Select[2] input .A3 (1'b1 ), // Select[3] input .CE (i_CLK_EN ), // Clock enable input .CLK(i_GCLK ), // Clock input .D (DOUT_SRL[i+1]) // SRL data input ); end endgenerate Причем прикол был, что Active-HDL-7.1, так и не заработал, на боле новой не проверял, ModelSim 6.1f вылетал при моделировании, причина оказалась в используемых параметрах внутри функций, помогло установкой ModelSim 6.2e Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться