Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите описать схему на Verilog
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
SlavikMIPT
В общем следующая схема - есть восьмибитный регистр. Есть массив восьмибитных регистров из N элементов, Есть Nразрядный регистр. Нужно соединить каждый регистр из массива с восьмибитным регистром побитовым И, Каждые 8 выходов И(для каждого регистра из массива) - соединить по ИЛИ, а выход ИЛИ соединить с соответствующей ячейкой Nразрядного регистра, получается в общем, что мы накладываем маску на каждый регистр - если после наложения маски - значение ненулевое, то записываем 1 в соответствующий бит N разрядного регистра.
Dmitriyspb
Здравствуйте.
Не совсем ясны условия задачи!!!
Цитата
Есть массив восьмибитных регистров из N элементов, Есть Nразрядный регистр.

Выражаясь обывательским языков, массивом из регистров является ОЗУ. Что вы называете элементом? Число регистров в массиве, т.е. глубину памяти? Прокомментируйте яснее!!!!

Цитата
Есть Nразрядный регистр.

?????????????????????????????????????

Цитата
Нужно соединить каждый регистр из массива с восьмибитным регистром побитовым И, Каждые 8 выходов И(для каждого регистра из массива) - соединить по ИЛИ, а выход ИЛИ соединить с соответствующей ячейкой Nразрядного регистра, получается в общем, что мы накладываем маску на каждый регистр - если после наложения маски - значение ненулевое, то записываем 1 в соответствующий бит N разрядного регистра.

Тут уже вовсе не ясно. Это вы описываете логические преобразования уже с считанным байтом из массива регистров????????????????????????????? и формируете "флаг" на заданные условия маскирования.

Однозначно! Что вам небходимо описать?????????????????????????!!!!! Сформулируйте яснее.

Тематика раздела иная!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
doublekey
Код
module add_mask #(
    parameter REG_N = 5, // Nuber of registers.
    parameter REG_W = 8  // Register width.
    )
    (
    input                                 clk,   // Clock input.
    input      [REG_N - 1:0][REG_W - 1:0] data,  // Data input.
    input                   [REG_W - 1:0] mask,  // Mask value.
    output reg [REG_N - 1:0]              masked // Maske data output.
    );
    
    reg [REG_N - 1:0][REG_W - 1:0] data_reg; // Internal data register.
    
    always_ff @(posedge clk)
    begin
        data_reg <= data; // Store input data.
        for (int i = 0; i < REG_N; i += 1)
            masked[i] <= |(data_reg[i] & mask); // Apply mask.
    end
    
endmodule
Cordroy
Цитата(doublekey @ Nov 27 2012, 08:57) *
Код
...
    input      [REG_N - 1:0][REG_W - 1:0] data,  // Data input.
...
    reg [REG_N - 1:0][REG_W - 1:0] data_reg; // Internal data register.
...


1. Двумерные порты еще не поддерживаются в Верилоге. Сформируйте одномерный порт с размерностью REG_N *REG_W.

2. Правильное описание регистра-матрицы будет:

reg [REG_W - 1:0] data_reg[REG_N - 1:0];

И в коде, при использовании, лучше полностью указывать размерность, а то легко запутаться wink.gif
Например: data_reg[17][7:0] = some_wire[7:0];

3. Судя по схеме, возможно вам будет проще написать и полностью отладить модуль для случая N=1 и потом, во внешнем враппере, создать массив таких модулей размерностью N. Синтакс - в гугле, "array of modules verilog".
doublekey
SystemVerilog поддерживает использование в качестве портов многомерных массивов, именно поэтому приведённый код синтезируется, и результат можно увидеть на прикреплённой картинке.
Вообще говоря не рекомендуется использовать unpacked array (reg [REG_W - 1:0] data_reg[REG_N - 1:0];) для описания массива регистров, обычно его используют для описания памяти или массивов абстрактных типов.
Cordroy
Цитата(doublekey @ Nov 27 2012, 18:20) *
SystemVerilog поддерживает использование в качестве портов многомерных массивов, именно поэтому приведённый код синтезируется, и результат можно увидеть на прикреплённой картинке.
Вообще говоря не рекомендуется использовать unpacked array (reg [REG_W - 1:0] data_reg[REG_N - 1:0]wink.gif для описания массива регистров, обычно его используют для описания памяти или массивов абстрактных типов.


Виноват, не подумал про SystemVerilog.
Вы правы )

(плюс, перепутал топик-стартера и ваш комментарий, тяжкий случай ) )
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.