Перейти к содержанию
    

Возможности Verilog / VHDL

Кому интересно будет, решение на 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...