реклама на сайте
подробности

 
 
> Помогите описать схему на Verilog
SlavikMIPT
сообщение Nov 27 2012, 02:35
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 7-06-12
Пользователь №: 72 217



В общем следующая схема - есть восьмибитный регистр. Есть массив восьмибитных регистров из N элементов, Есть Nразрядный регистр. Нужно соединить каждый регистр из массива с восьмибитным регистром побитовым И, Каждые 8 выходов И(для каждого регистра из массива) - соединить по ИЛИ, а выход ИЛИ соединить с соответствующей ячейкой Nразрядного регистра, получается в общем, что мы накладываем маску на каждый регистр - если после наложения маски - значение ненулевое, то записываем 1 в соответствующий бит N разрядного регистра.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
doublekey
сообщение Nov 27 2012, 05:57
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 28-01-08
Из: Zelenograd
Пользователь №: 34 503



Код
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

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Cordroy
сообщение Nov 27 2012, 15:05
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 13-09-10
Из: Israel
Пользователь №: 59 464



Цитата(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".

Сообщение отредактировал Cordroy - Nov 27 2012, 15:14
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 21:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016