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

 
 
 
Reply to this topicStart new topic
> Помогите описать схему на 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
Dmitriyspb
сообщение Nov 27 2012, 05:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Здравствуйте.
Не совсем ясны условия задачи!!!
Цитата
Есть массив восьмибитных регистров из N элементов, Есть Nразрядный регистр.

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

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

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

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

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

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

Тематика раздела иная!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
doublekey
сообщение Nov 27 2012, 05:57
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 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
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 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
doublekey
сообщение Nov 27 2012, 15:20
Сообщение #5


Участник
*

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



SystemVerilog поддерживает использование в качестве портов многомерных массивов, именно поэтому приведённый код синтезируется, и результат можно увидеть на прикреплённой картинке.
Вообще говоря не рекомендуется использовать unpacked array (reg [REG_W - 1:0] data_reg[REG_N - 1:0];) для описания массива регистров, обычно его используют для описания памяти или массивов абстрактных типов.

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


Участник
*

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



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


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

(плюс, перепутал топик-стартера и ваш комментарий, тяжкий случай ) )
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 00:24
Рейтинг@Mail.ru


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