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

 
 
> RAM based shift register, Как правильно описать сдвиговый регистр на блоках памяти
Flip-fl0p
сообщение May 7 2018, 10:40
Сообщение #1


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Приветствую Уважаемые посетители форума.
Хотелось бы услышать ваши мысли как можно описать сдвиговый регистр на встроенных блоках памяти.
Собственно работаю с Altera. Альтеровский IP - ALT_SHIFT_TAPS меня не устраивает по ряду причин, поэтому написал свой сдвиговый регистр:

CODE
library ieee;
use ieee.std_logic_1164.all;

library altera_mf;
use altera_mf.altera_mf_components.all;

entity KAA_RAM_shreg is
generic
(
width : natural := 24; -- Разрядность регистра
length : natural := 8 -- Длина сдвигового регистра
);
port
(
clk : in std_logic;
data_in : in std_logic_vector (width - 1 downto 0);
data_out : out std_logic_vector (width - 1 downto 0)
);
end entity;


architecture RTL of KAA_RAM_shreg is
type signal_array is array (length downto 0) of std_logic_vector(width - 1 downto 0); -- Сигналы для подключаения блоков памяти
signal signal_ram : signal_array := (others => (others => '0'));
begin

signal_ram(0) <= data_in; -- Записывам данные в младший адрес памяти

--=====================================================================
-- Генерирование блоков памяти для сдвигового регистра
--=====================================================================
SGREG_RAM_GENERATE : for i in 0 to length - 1 generate
altsyncram_component : altsyncram
generic map
(
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
intended_device_family => "Cyclone V",
lpm_hint => "ENABLE_RUNTIME_MOD=NO",
lpm_type => "altsyncram",
numwords_a => 1,
operation_mode => "SINGLE_PORT",
outdata_aclr_a => "NONE",
outdata_reg_a => "UNREGISTERED",
power_up_uninitialized => "FALSE",
read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ",
widthad_a => 1,
width_a => width,
width_byteena_a => 1
)
port map
(
address_a => "0",
clock0 => clk,
data_a => signal_ram(i),
wren_a => '1',
q_a => signal_ram(i + 1)
);
end generate;

data_out <= signal_ram(length); -- Вдаем данные наружу со старшего разряда памяти
end architecture;

Он прекрасно синтезируется и работает как надо. Но есть один маленький недостаток, который портит картину - он завязан на альтеровские библиотеки.
Попытка описать блок RAM памяти, необходимый для реализации такого регистра не увенчалась успехом. Quartus 13.1 отказывается синтезировать блок памяти для одного слова. Атрибуты синтеза также не помогают. А для полноты картины хочется сделать такой регистр универсальным и независимым от аппаратной платформы. Хотелось бы услышать ваши мысли как можно описать такой регистр. Google внятных ответов не дал.
Go to the top of the page
 
+Quote Post



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

 


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


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