|
использование встроенной памяти ПЛИС |
|
|
|
Nov 9 2009, 02:20
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
c помощью визарда создал такой файл mem.vhd: Код LIBRARY ieee; USE ieee.std_logic_1164.all;
LIBRARY altera_mf; USE altera_mf.all;
ENTITY mem IS PORT ( clock : IN STD_LOGIC; data : IN STD_LOGIC_VECTOR (14 DOWNTO 0); rdaddress : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wraddress : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wren : IN STD_LOGIC := '1'; q : OUT STD_LOGIC_VECTOR (14 DOWNTO 0) ); END mem;
ARCHITECTURE SYN OF mem IS
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (14 DOWNTO 0);
COMPONENT altsyncram GENERIC ( address_reg_b : STRING; clock_enable_input_a : STRING; clock_enable_input_b : STRING; clock_enable_output_a : STRING; clock_enable_output_b : STRING; intended_device_family : STRING; lpm_type : STRING; numwords_a : NATURAL; numwords_b : NATURAL; operation_mode : STRING; outdata_aclr_b : STRING; outdata_reg_b : STRING; power_up_uninitialized : STRING; ram_block_type : STRING; read_during_write_mode_mixed_ports : STRING; widthad_a : NATURAL; widthad_b : NATURAL; width_a : NATURAL; width_b : NATURAL; width_byteena_a : NATURAL ); PORT ( wren_a : IN STD_LOGIC; clock0 : IN STD_LOGIC; address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); address_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); q_b : OUT STD_LOGIC_VECTOR (14 DOWNTO 0); data_a : IN STD_LOGIC_VECTOR (14 DOWNTO 0) ); END COMPONENT;
BEGIN q <= sub_wire0(14 DOWNTO 0);
altsyncram_component : altsyncram GENERIC MAP ( address_reg_b => "CLOCK0", clock_enable_input_a => "BYPASS", clock_enable_input_b => "BYPASS", clock_enable_output_a => "BYPASS", clock_enable_output_b => "BYPASS", intended_device_family => "Cyclone II", lpm_type => "altsyncram", numwords_a => 256, numwords_b => 256, operation_mode => "DUAL_PORT", outdata_aclr_b => "NONE", outdata_reg_b => "CLOCK0", power_up_uninitialized => "FALSE", ram_block_type => "M4K", read_during_write_mode_mixed_ports => "DONT_CARE", widthad_a => 8, widthad_b => 8, width_a => 15, width_b => 15, width_byteena_a => 1 ) PORT MAP ( wren_a => wren, clock0 => clock, address_a => wraddress, address_b => rdaddress, data_a => data, q_b => sub_wire0 );
END SYN; и ещё mem_inst.vhd: Код mem_inst : mem PORT MAP ( clock => clock_sig, data => data_sig, rdaddress => rdaddress_sig, wraddress => wraddress_sig, wren => wren_sig, q => q_sig ); как теперь этим пользоваться? читать/записать... и как включить в проект?
|
|
|
|
|
Nov 9 2009, 04:49
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141

|
Цитата(penauch @ Nov 9 2009, 07:20)  как теперь этим пользоваться? читать/записать... и как включить в проект? Может я сейчас глупость скажу, но всегда ли оправдано использование VHDL? В графическом режиме таких вопросов не возникает.
|
|
|
|
|
Nov 9 2009, 14:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(penauch @ Nov 9 2009, 16:47)  я наконец-то хочу услышать ответ по этой памяти. Вы это, не школьный учитель, часом? Цитата(penauch @ Nov 9 2009, 16:47)  можно ли работу с ней сделать настолько же удобной как с массивами std_logic_vector ? Двадвцать раз уже кажется вам объяснили: нет, нет и нет. Никакое железо не поддерживает всех конструкций языков высокого уровня, и искусство программирования на HDL заключается именно в знании аппаратуры и умением написать на HDL конструкции, которые в кокретном железе могут быть реализованы.
|
|
|
|
|
Nov 9 2009, 18:08
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
penauch, Вы вероятно программист, в смысле - программируете для МК, PC и т.п... Вполне понятно, что хочется иметь аналогию того, как в программе для МК ведётся обращение к регистрам или ячейке памяти на низком уровне - примерно одинаково, или на высоком уровне - можно даже и не знать - что задействует для хранения переменной компилятор. Но упускается важный момент - в случае с МК вся архитектура и растактовка сделана до Вас и на ещё БОЛЕЕ НИЗКОМ уровне. А ПЛИС это и есть конструктор того самого низкого железного уровня. Так что, описание ведётся не столько алгоритма, сколько архитектуры, которая позволяет этот алгоритм реализовать. В этом плане HDL-описание итак довольно высоко поднимает разработчика относительно gate-уровня. Кроме того, организация сигнальных путей и законов управления. В случае с std_vector_logic на него выделяются отдельные физические пути и Вы всегда можете "обратиться" к нему. С памятью, всё-таки, дело обстоит посложнее именно физически (например: первым тактом ваша схема защёлкивает у себя адрес, вторым тактом этот адрес захватывается в ДША ОЗУ и выдаются данные, третьим тактом Вы эти данные захватываете в регистр своей схемы). А голом наборе вентилей никто за Вас времянки очерёдности и эти клоки формировать не будет хотя бы потому, что их просто нет, кроме тех, что Вы сами и завели на кристалл и которыми сами полностью и управляете - куда подвести, а куда нет, где по какому фронту защёлкнуть и т.д. Но в общем на ваш вопрос можно ответить с некоторой степенью утвердительно - работу с некоторыми узлами можно облегчить, создав специальные автоматы (драйверы, контроллеры, как хотите) и вести обращение через них.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|