[an error occurred while processing this directive]
Ответ: C Alterой не пробовал
(«Телесистемы»: Конференция 'Программируемые логические схемы и их применение')

миниатюрный аудио-видеорекордер mAVR

Отправлено imsushka 20 августа 2004 г. 16:13
В ответ на: Если двухпортовая (+) отправлено SM 20 августа 2004 г. 14:54

Софт alterовый freeшный с ограничениями
И соответсвенно у меня там что то не получилось

А вот мое
Извиняюсь что тоакое здоровое
--------------------------------------------------------------------------
--
-- Behavioural architecture of register file.
--
LIBRARY ieee;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
--use work.ramlib.all;

entity reg_file is
port (a1 : in std_logic_vector( 9 downto 0);
q1 : out std_logic_vector(255 downto 0);
s1 : in std_logic_vector( 2 downto 0);
a2 : in std_logic_vector( 9 downto 0);
q2 : out std_logic_vector(255 downto 0);
s2 : in std_logic_vector( 2 downto 0);
a3 : in std_logic_vector( 9 downto 0);
d3 : in std_logic_vector(255 downto 0);
s3 : in std_logic_vector( 2 downto 0);
clk : in bit;
wr_en : in bit);
end reg_file;

-- size 0 - byte; 1 - word; 2 - dword; 3 - qword; 4 - oword; 5 - hword; 6 -

architecture behaviour of reg_file is

begin

reg: process (a1, a2, a3, d3, wr_en)

subtype reg_index is natural range 0 to 7; --1023;

type r_ar is array (0 to 31) of std_logic_vector(7 downto 0);
type register_array is array (0 to 31) of r_ar; -- 8 block 8 bit = QWORD
-- for HWORD = 32 block 8 bit (0 to 31)
-- for 1024 bytes regfile = 32 HWORD - (0 to 31)
variable register_file : register_array;
attribute syn_ramstyle : string;
attribute syn_ramstyle of register_file: variable is "block_ram";

variable q : std_logic_vector(255 downto 0);
variable r_index1, r_index2, r_index3 : reg_index;
variable reg_index1, reg_index2, reg_index3 : reg_index;

begin

-- do write first if enabled
--
if wr_en = '1' then
r_index3 := conv_integer(unsigned(a3(9 downto 5)));
reg_index3 := conv_integer(unsigned(a3(4 downto 0)));
case s3 is
when "001" => register_file(r_index3 )(reg_index3) := d3( 7 downto 0);
when "010" => register_file(r_index3 )(reg_index3) := d3( 7 downto 0);
register_file(r_index3+ 1)(reg_index3) := d3( 15 downto 8);
when "011" => register_file(r_index3 )(reg_index3) := d3( 7 downto 0);
register_file(r_index3+ 1)(reg_index3) := d3( 15 downto 8);
register_file(r_index3+ 2)(reg_index3) := d3( 23 downto 16);
register_file(r_index3+ 3)(reg_index3) := d3( 31 downto 24);
when "100" => register_file(r_index3 )(reg_index3) := d3( 7 downto 0);
register_file(r_index3+ 1)(reg_index3) := d3( 15 downto 8);
register_file(r_index3+ 2)(reg_index3) := d3( 23 downto 16);
register_file(r_index3+ 3)(reg_index3) := d3( 31 downto 24);
register_file(r_index3+ 4)(reg_index3) := d3( 39 downto 32);
register_file(r_index3+ 5)(reg_index3) := d3( 47 downto 40);
register_file(r_index3+ 6)(reg_index3) := d3( 55 downto 48);
register_file(r_index3+ 7)(reg_index3) := d3( 63 downto 56);
when "101" => register_file(r_index3 )(reg_index3) := d3( 7 downto 0);
register_file(r_index3+ 1)(reg_index3) := d3( 15 downto 8);
register_file(r_index3+ 2)(reg_index3) := d3( 23 downto 16);
register_file(r_index3+ 3)(reg_index3) := d3( 31 downto 24);
register_file(r_index3+ 4)(reg_index3) := d3( 39 downto 32);
register_file(r_index3+ 5)(reg_index3) := d3( 47 downto 40);
register_file(r_index3+ 6)(reg_index3) := d3( 55 downto 48);
register_file(r_index3+ 7)(reg_index3) := d3( 63 downto 56);
register_file(r_index3+ 8)(reg_index3) := d3( 71 downto 64);
register_file(r_index3+ 9)(reg_index3) := d3( 79 downto 72);
register_file(r_index3+10)(reg_index3) := d3( 87 downto 80);
register_file(r_index3+11)(reg_index3) := d3( 95 downto 88);
register_file(r_index3+12)(reg_index3) := d3(103 downto 96);
register_file(r_index3+13)(reg_index3) := d3(111 downto 104);
register_file(r_index3+14)(reg_index3) := d3(119 downto 112);
register_file(r_index3+15)(reg_index3) := d3(127 downto 120);
when "110" => register_file(r_index3 )(reg_index3) := d3( 7 downto 0);
register_file(r_index3+ 1)(reg_index3) := d3( 15 downto 8);
register_file(r_index3+ 2)(reg_index3) := d3( 23 downto 16);
register_file(r_index3+ 3)(reg_index3) := d3( 31 downto 24);
register_file(r_index3+ 4)(reg_index3) := d3( 39 downto 32);
register_file(r_index3+ 5)(reg_index3) := d3( 47 downto 40);
register_file(r_index3+ 6)(reg_index3) := d3( 55 downto 48);
register_file(r_index3+ 7)(reg_index3) := d3( 63 downto 56);
register_file(r_index3+ 8)(reg_index3) := d3( 71 downto 64);
register_file(r_index3+ 9)(reg_index3) := d3( 79 downto 72);
register_file(r_index3+10)(reg_index3) := d3( 87 downto 80);
register_file(r_index3+11)(reg_index3) := d3( 95 downto 88);
register_file(r_index3+12)(reg_index3) := d3(103 downto 96);
register_file(r_index3+13)(reg_index3) := d3(111 downto 104);
register_file(r_index3+14)(reg_index3) := d3(119 downto 112);
register_file(r_index3+15)(reg_index3) := d3(127 downto 120);
register_file(r_index3+16)(reg_index3) := d3(135 downto 128);
register_file(r_index3+17)(reg_index3) := d3(143 downto 136);
register_file(r_index3+18)(reg_index3) := d3(151 downto 144);
register_file(r_index3+19)(reg_index3) := d3(159 downto 152);
register_file(r_index3+20)(reg_index3) := d3(167 downto 160);
register_file(r_index3+21)(reg_index3) := d3(175 downto 168);
register_file(r_index3+22)(reg_index3) := d3(183 downto 176);
register_file(r_index3+23)(reg_index3) := d3(191 downto 184);
register_file(r_index3+24)(reg_index3) := d3(199 downto 192);
register_file(r_index3+25)(reg_index3) := d3(207 downto 200);
register_file(r_index3+26)(reg_index3) := d3(215 downto 208);
register_file(r_index3+27)(reg_index3) := d3(223 downto 216);
register_file(r_index3+28)(reg_index3) := d3(231 downto 224);
register_file(r_index3+29)(reg_index3) := d3(239 downto 232);
register_file(r_index3+30)(reg_index3) := d3(247 downto 240);
register_file(r_index3+31)(reg_index3) := d3(255 downto 248);
when others => null;
end case;
end if;
--
-- read port 1
--
q := (others => '0');
r_index1 := conv_integer(unsigned(a1(9 downto 5)));
reg_index1 := conv_integer(unsigned(a1(4 downto 0)));
case s1 is
when "000" => null;
when "001" => q( 7 downto 0) := register_file(r_index1 )(reg_index1);
when "010" => q( 7 downto 0) := register_file(r_index1 )(reg_index1);
q( 15 downto 8) := register_file(r_index1+ 1)(reg_index1);
when "011" => q( 7 downto 0) := register_file(r_index1 )(reg_index1);
q( 15 downto 8) := register_file(r_index1+ 1)(reg_index1);
q( 23 downto 16) := register_file(r_index1+ 2)(reg_index1);
q( 31 downto 24) := register_file(r_index1+ 3)(reg_index1);
when "100" => q( 7 downto 0) := register_file(r_index1 )(reg_index1);
q( 15 downto 8) := register_file(r_index1+ 1)(reg_index1);
q( 23 downto 16) := register_file(r_index1+ 2)(reg_index1);
q( 31 downto 24) := register_file(r_index1+ 3)(reg_index1);
q( 39 downto 32) := register_file(r_index1+ 4)(reg_index1);
q( 47 downto 40) := register_file(r_index1+ 5)(reg_index1);
q( 55 downto 48) := register_file(r_index1+ 6)(reg_index1);
q( 63 downto 56) := register_file(r_index1+ 7)(reg_index1);
when "101" => q( 7 downto 0) := register_file(r_index1 )(reg_index1);
q( 15 downto 8) := register_file(r_index1+ 1)(reg_index1);
q( 23 downto 16) := register_file(r_index1+ 2)(reg_index1);
q( 31 downto 24) := register_file(r_index1+ 3)(reg_index1);
q( 39 downto 32) := register_file(r_index1+ 4)(reg_index1);
q( 47 downto 40) := register_file(r_index1+ 5)(reg_index1);
q( 55 downto 48) := register_file(r_index1+ 6)(reg_index1);
q( 63 downto 56) := register_file(r_index1+ 7)(reg_index1);
q( 71 downto 64) := register_file(r_index1+ 8)(reg_index1);
q( 79 downto 72) := register_file(r_index1+ 9)(reg_index1);
q( 87 downto 80) := register_file(r_index1+10)(reg_index1);
q( 95 downto 88) := register_file(r_index1+11)(reg_index1);
q(103 downto 96) := register_file(r_index1+12)(reg_index1);
q(111 downto 104) := register_file(r_index1+13)(reg_index1);
q(119 downto 112) := register_file(r_index1+14)(reg_index1);
q(127 downto 120) := register_file(r_index1+15)(reg_index1);
when "110" => q( 7 downto 0) := register_file(r_index1 )(reg_index1);
q( 15 downto 8) := register_file(r_index1+ 1)(reg_index1);
q( 23 downto 16) := register_file(r_index1+ 2)(reg_index1);
q( 31 downto 24) := register_file(r_index1+ 3)(reg_index1);
q( 39 downto 32) := register_file(r_index1+ 4)(reg_index1);
q( 47 downto 40) := register_file(r_index1+ 5)(reg_index1);
q( 55 downto 48) := register_file(r_index1+ 6)(reg_index1);
q( 63 downto 56) := register_file(r_index1+ 7)(reg_index1);
q( 71 downto 64) := register_file(r_index1+ 8)(reg_index1);
q( 79 downto 72) := register_file(r_index1+ 9)(reg_index1);
q( 87 downto 80) := register_file(r_index1+10)(reg_index1);
q( 95 downto 88) := register_file(r_index1+11)(reg_index1);
q(103 downto 96) := register_file(r_index1+12)(reg_index1);
q(111 downto 104) := register_file(r_index1+13)(reg_index1);
q(119 downto 112) := register_file(r_index1+14)(reg_index1);
q(127 downto 120) := register_file(r_index1+15)(reg_index1);
q(135 downto 128) := register_file(r_index1+16)(reg_index1);
q(143 downto 136) := register_file(r_index1+17)(reg_index1);
q(151 downto 144) := register_file(r_index1+18)(reg_index1);
q(159 downto 152) := register_file(r_index1+19)(reg_index1);
q(167 downto 160) := register_file(r_index1+20)(reg_index1);
q(175 downto 168) := register_file(r_index1+21)(reg_index1);
q(183 downto 176) := register_file(r_index1+22)(reg_index1);
q(191 downto 184) := register_file(r_index1+23)(reg_index1);
q(199 downto 192) := register_file(r_index1+24)(reg_index1);
q(207 downto 200) := register_file(r_index1+25)(reg_index1);
q(215 downto 208) := register_file(r_index1+26)(reg_index1);
q(223 downto 216) := register_file(r_index1+27)(reg_index1);
q(231 downto 224) := register_file(r_index1+28)(reg_index1);
q(239 downto 232) := register_file(r_index1+29)(reg_index1);
q(247 downto 240) := register_file(r_index1+30)(reg_index1);
q(255 downto 248) := register_file(r_index1+31)(reg_index1);
when others => null;
end case;
q1 <= q;
--
-- read port 2
--
q := (others => '0');
r_index2 := conv_integer(unsigned(a2(9 downto 5)));
reg_index2 := conv_integer(unsigned(a2(4 downto 0)));
case s2 is
when "000" => null;
when "001" => q( 7 downto 0) := register_file(r_index2 )(reg_index2);
when "010" => q( 7 downto 0) := register_file(r_index2 )(reg_index2);
q( 15 downto 8) := register_file(r_index2+ 1)(reg_index2);
when "011" => q( 7 downto 0) := register_file(r_index2 )(reg_index2);
q( 15 downto 8) := register_file(r_index2+ 1)(reg_index2);
q( 23 downto 16) := register_file(r_index2+ 2)(reg_index2);
q( 31 downto 24) := register_file(r_index2+ 3)(reg_index2);
when "100" => q( 7 downto 0) := register_file(r_index2 )(reg_index2);
q( 15 downto 8) := register_file(r_index2+ 1)(reg_index2);
q( 23 downto 16) := register_file(r_index2+ 2)(reg_index2);
q( 31 downto 24) := register_file(r_index2+ 3)(reg_index2);
q( 39 downto 32) := register_file(r_index2+ 4)(reg_index2);
q( 47 downto 40) := register_file(r_index2+ 5)(reg_index2);
q( 55 downto 48) := register_file(r_index2+ 6)(reg_index2);
q( 63 downto 56) := register_file(r_index2+ 7)(reg_index2);
when "101" => q( 7 downto 0) := register_file(r_index2 )(reg_index2);
q( 15 downto 8) := register_file(r_index2+ 1)(reg_index2);
q( 23 downto 16) := register_file(r_index2+ 2)(reg_index2);
q( 31 downto 24) := register_file(r_index2+ 3)(reg_index2);
q( 39 downto 32) := register_file(r_index2+ 4)(reg_index2);
q( 47 downto 40) := register_file(r_index2+ 5)(reg_index2);
q( 55 downto 48) := register_file(r_index2+ 6)(reg_index2);
q( 63 downto 56) := register_file(r_index2+ 7)(reg_index2);
q( 71 downto 64) := register_file(r_index2+ 8)(reg_index2);
q( 79 downto 72) := register_file(r_index2+ 9)(reg_index2);
q( 87 downto 80) := register_file(r_index2+10)(reg_index2);
q( 95 downto 88) := register_file(r_index2+11)(reg_index2);
q(103 downto 96) := register_file(r_index2+12)(reg_index2);
q(111 downto 104) := register_file(r_index2+13)(reg_index2);
q(119 downto 112) := register_file(r_index2+14)(reg_index2);
q(127 downto 120) := register_file(r_index2+15)(reg_index2);
when "110" => q( 7 downto 0) := register_file(r_index2 )(reg_index2);
q( 15 downto 8) := register_file(r_index2+ 1)(reg_index2);
q( 23 downto 16) := register_file(r_index2+ 2)(reg_index2);
q( 31 downto 24) := register_file(r_index2+ 3)(reg_index2);
q( 39 downto 32) := register_file(r_index2+ 4)(reg_index2);
q( 47 downto 40) := register_file(r_index2+ 5)(reg_index2);
q( 55 downto 48) := register_file(r_index2+ 6)(reg_index2);
q( 63 downto 56) := register_file(r_index2+ 7)(reg_index2);
q( 71 downto 64) := register_file(r_index2+ 8)(reg_index2);
q( 79 downto 72) := register_file(r_index2+ 9)(reg_index2);
q( 87 downto 80) := register_file(r_index2+10)(reg_index2);
q( 95 downto 88) := register_file(r_index2+11)(reg_index2);
q(103 downto 96) := register_file(r_index2+12)(reg_index2);
q(111 downto 104) := register_file(r_index2+13)(reg_index2);
q(119 downto 112) := register_file(r_index2+14)(reg_index2);
q(127 downto 120) := register_file(r_index2+15)(reg_index2);
q(135 downto 128) := register_file(r_index2+16)(reg_index2);
q(143 downto 136) := register_file(r_index2+17)(reg_index2);
q(151 downto 144) := register_file(r_index2+18)(reg_index2);
q(159 downto 152) := register_file(r_index2+19)(reg_index2);
q(167 downto 160) := register_file(r_index2+20)(reg_index2);
q(175 downto 168) := register_file(r_index2+21)(reg_index2);
q(183 downto 176) := register_file(r_index2+22)(reg_index2);
q(191 downto 184) := register_file(r_index2+23)(reg_index2);
q(199 downto 192) := register_file(r_index2+24)(reg_index2);
q(207 downto 200) := register_file(r_index2+25)(reg_index2);
q(215 downto 208) := register_file(r_index2+26)(reg_index2);
q(223 downto 216) := register_file(r_index2+27)(reg_index2);
q(231 downto 224) := register_file(r_index2+28)(reg_index2);
q(239 downto 232) := register_file(r_index2+29)(reg_index2);
q(247 downto 240) := register_file(r_index2+30)(reg_index2);
q(255 downto 248) := register_file(r_index2+31)(reg_index2);
when others => null;
end case;
q2 <= q;
end process reg;

end behaviour;

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru