acvarif 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба Подсобите пожалуйста примером ПЗУ на VHDL (адреса 4..0) (выходные биты 10..0) - 32 11_ти разрядных числа. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PDA 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба открываем ISE. Далее жмакаем на лампочку (Language Templates). Выбираем VHDL - FPGA - Spartan - ROM. Смотрим примеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 (изменено) · Жалоба Подсобите пожалуйста примером ПЗУ на VHDL (адреса 4..0) (выходные биты 10..0) - 32 11_ти разрядных числа. Спасибо. можно вот так например: process(addr) begin case addr is when "00000" => data <= "..."; when "00001" => data <= "..."; . . . when "11111" => data <= "..."; when others => data <= "..."; end case; end process; Изменено 22 декабря, 2010 пользователем gin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба Спасибо. Виноват. Вопрос был не полный. Сам понимаю, что спрашиваю ерунду, но авось.. Можно ли на VHDL написать ПЗУ которая бы при компиляции загружала в себя данные () из файла? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
o-henry 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба Спасибо. Виноват. Вопрос был не полный. Сам понимаю, что спрашиваю ерунду, но авось.. Можно ли на VHDL написать ПЗУ которая бы при компиляции загружала в себя данные () из файла? Вы ответ от PDA видели? А почему на лампочку не жмакнули? Лампочки - они полезные, там даже такой пример есть: -- The following code will infer a Single port Block RAM and initialize it using a FILE Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба Видел. Спасибо. Но к сожалению у меня ISE нет (придется поставить) Пытаюсь сделать то же в Quartus9. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба Пытаюсь сделать то же в Quartus9. Edit/Insert Template/VHDL/Full Designs/RAMs and ROMs/Single-Port ROM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба Edit/Insert Template/VHDL/Full Designs/RAMs and ROMs/Single-Port ROM Спасибо. Нашел. Это место -- Declare the ROM signal and specify a default value. Quartus II -- will create a memory initialization file (.mif) based on the -- default value. signal rom : memory_t := init_rom; не совсем понятно. Допустим у меня есть готовый файл (например test.hex) с данными в HEX формате. как прописать его загрузку в ROM? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба Подсобите пожалуйста примером ПЗУ на VHDL (адреса 4..0) (выходные биты 10..0) - 32 11_ти разрядных числа. Спасибо. Посмотрите может это поможет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 (изменено) · Жалоба Посмотрите может это поможет Спасибо. Хороший пример. Попробую ROM (не RAM) на файле сделать по подобию. Уже не первый раз сталкиваюсь с тем, что приходится применять стандартные функции VHDL типа (CONV_INTEGER и т. п.) Функции рабтают. Наверняка всяких разных функций много. Но ни разу ни в сети ни в справочниках VHDL не встречал собранного в одном месте перечня VHDL функций (типа Win MSDN). В Q они присутствуют разбросанные по всему хелпу. Иногда случайно узнаешь о какой то функции... Есть ли вообще где ниудь такой перечень с описанием? Ведь многие из них работают везде и в Q и в ISE. Изменено 23 декабря, 2010 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 24 декабря, 2010 Опубликовано 24 декабря, 2010 · Жалоба Здесь можно почитать о пакете NUMERIC_STD. NUMERIC_STD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 28 декабря, 2010 Опубликовано 28 декабря, 2010 · Жалоба Может это Вам поможет, но в Quartus'е она не будет работать, т.к. она не синтезируема. Должно быть что-то вроде этого: library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; use IEEE.std_logic_textio.all; use std.textio.all; entity ROM is port(CLK: in std_logic; CE: in std_logic; ADDR: in std_logic_vector(addr_size - 1 downto 0); Q: out std_logic_vector(2*data_size - 1 downto 0)); end entity ROM; architecture RTL_ROM of ROM is type ROM_TYPE is array(0 to 2**addr_size - 1) of std_logic_vector(2*data_size - 1 downto 0); -- Функция инициализации памяти из файла: -- function INIT_ROM(constant filename: string) return ROM_TYPE is -- Входным параметром является строковая переменная названия файла file initfile: text open read_mode is filename; -- Открытие файла filename для чтения variable fline: line; variable ROM: ROM_TYPE := (others => (others => 'U')); -- Память begin for i in ROM_Type'range loop readline(initfile, fline); hread(fline, ROM(i)); end loop; return ROM; end function INIT_ROM; -- Файл шестнадцатиричный, для двоичного файла использовать read вместо hread-- signal ROM_BANK: ROM_TYPE:= INIT_ROM(init_file); -- Инициализация памяти begin process begin wait until (rising_edge(CLK)); if (CE = '1') then Q <= ROM_BANK(TO_INTEGER(UNSIGNED(ADDR))); end if; end process; end RTL_RAM; Если вы хотите в квартусе проининциализировать ROM, то просто берите компонент и подключайте mif-файл (пример для RAM, для ROM он схожий): Объявление компонента: component lpm_ram_dp generic(intended_device_family: string; lpm_indata: string; lpm_outdata: string; lpm_file: string; lpm_rdaddress_control: string; lpm_type: string; lpm_width: NATURAL; lpm_widthad: NATURAL; lpm_wraddress_control: string; rden_used: string; use_eab: string); port(rdclken: in std_logic; rdclock: in std_logic; wren: in std_logic; wrclken: in std_logic; wrclock: in std_logic; q: out std_logic_vector (lpm_width - 1 downto 0); data: in std_logic_vector (lpm_width - 1 downto 0); rdaddress: in std_logic_vector (lpm_widthad - 1 downto 0); wraddress: in std_logic_vector (lpm_widthad - 1 downto 0)); end component; Подключение компонента: RAM_1: lpm_ram_dp generic map(intended_device_family => "APEX20KE", lpm_indata => "REGISTERED", lpm_outdata => "REGISTERED", lpm_file => "Data.mif", lpm_rdaddress_control => "REGISTERED", lpm_type => "LPM_RAM_DP", lpm_width => data_size, lpm_widthad => addr_size, lpm_wraddress_control => "REGISTERED", rden_used => "FALSE", use_eab => "ON") port map(rdclken => RCE, rdclock => CLK, wren => WE, wrclken => WCE, wrclock => CLK, data => D, rdaddress => ADDR_RD, wraddress => ADDR_WR, q => Q); mif-файл (пример): WIDTH=64; DEPTH=32; ADDRESS_RADIX=UNS; DATA_RADIX=BIN; CONTENT BEGIN -------------------- RAM -------------------- 0 : 0000000000000000000000000000000000000000000000000111111111111111; 1 : 0000000000000000001100010101100100000000000000000111011000011010; 2 : 0000000000000000010110110001000100000000000000000101100111110010; 3 : 0000000000000000011101101011010000000000000000000010111111100010; 4 : 0000000000000000011111111111110011111111111111111111111001101011; 5 : 0000000000000000011101010111101111111111111111111100110100110010; 6 : 0000000000000000010110001101000011111111111111111010001111010100; 7 : 0000000000000000001011100110100111111111111111111000100010110110; 8 : 1111111111111111111111001101011011111111111111111000000000001010; 9 : 1111111111111111110010111011111111111111111111111000101100100111; 10 : 1111111111111111101000101011110011111111111111111010100001010101; 11 : 1111111111111111100010000010010111111111111111111101001100010001; 12 : 1111111111111111100000000001011100000000000000000000010011000000; 13 : 1111111111111111100010111100111100000000000000000011010110110010; 14 : 1111111111111111101010010111111000000000000000000101111001010111; 15 : 1111111111111111110101001000110100000000000000000111100001100110; 16 : 0000000000000000000001100101010000000000000000000111111111010111; 17 : 0000000000000000001101110010000100000000000000000111001110000100; 18 : 0000000000000000010111110110011100000000000000000101010101010101; 19 : 0000000000000000011110001110110100000000000000000010100111110100; 20 : 0000000000000000011111111100000011111111111111111111100000010111; 21 : 0000000000000000011100101101001111111111111111111100011101110010; 22 : 0000000000000000010101000010010111111111111111111001111110001100; 23 : 0000000000000000001010000111010111111111111111111000011010010000; 24 : 1111111111111111111101101000001011111111111111111000000001011010; 25 : 1111111111111111110001100000100011111111111111111000110111100001; 26 : 1111111111111111100111101000010011111111111111111010110100001101; 27 : 1111111111111111100001100001001011111111111111111101100100001100; 28 : 1111111111111111100000000111101100000000000000000000101100010001; 29 : 1111111111111111100011101001101100000000000000000011101101100000; 30 : 1111111111111111101011100100001100000000000000000110001010000000; 31 : 1111111111111111110110101000111100000000000000000111101001100110; END; А так пользуйтесь советом gin'а P.S. mif-файл лучше всего генерить в Matlab'e Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
almost 0 14 января, 2011 Опубликовано 14 января, 2011 · Жалоба P.S. mif-файл лучше всего генерить в Matlab'e Файл создается с помощью матлабовских скриптов или есть отдельная утилита? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 14 января, 2011 Опубликовано 14 января, 2011 · Жалоба Файл создается с помощью матлабовских скриптов или есть отдельная утилита? есть еще s-record, умеет конвертировать кучу форматов, в т.ч. mif http://srecord.sourceforge.net/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
almost 0 14 января, 2011 Опубликовано 14 января, 2011 · Жалоба есть еще s-record, умеет конвертировать кучу форматов, в т.ч. mif http://srecord.sourceforge.net/ Отличная штука, спасибо. Пригодится=) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться