|
Работа с флэш-памятью, Или какие еще способы проверки декодера? |
|
|
|
Nov 2 2010, 16:45
|

Местный
  
Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382

|
Те, кто видел мои прошлые темы, наверное уже догадался, что я снова про декодер Витерби :-) Я дописал HDL код, погонял его, все работает Ок. Перехожу к синтезу и отладке в железке. И возникает вот какой вопрос. Последовательность из демодулятора для проверки декодера я моделирую в матлабе, записать их можно в каком угодно виде. Сейчас я объявил их в виде константы в упаковке Код type Ara is array (NATURAL RANGE <>) of std_logic_vector (Input_Bits-1 downto 0); constant InP: Ara:=("011111","000111","000001","101000",..............................,"000000"); Далее описал генератор, который читает эти данные и выдает на кодер. Все работает Ок. Теперь вопрос, каким образом тестировать реальную ПЛИС Имеется отладочная плата http://www.actel.com/products/hardware/dev...sic3l.aspx#docsНа ней есть встроенная флэш-память, есть 2 USB порта, один для программирования, вторым собсно можно пользоваться. У меня нет никакого опыта в работе с флэш-память, в книгах тоже пока ничего не нашел. Подскажите какой нибудь материал по тому, как работать с памятью? Я это вижу так, что предварительно во флэш записываются кодированные символы, затем небольшой блок внутри самого ПЛИСа обращается к этой памяти и подает данные на вход кодера. Как это сделать? Ткните пальцем что ли. Вариант второй, с использованием порта. Распайку ног нашел, но вот каким образом с компьютера подавать символы на этот порт? Как там всякие прерывания и прочие радости? Можно ли делать это из среды Матлаб или САПРа ПЛИС? Спасибо
--------------------
Because it's there
|
|
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 29)
|
Nov 8 2010, 15:52
|

Местный
  
Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382

|
Цитата(Maverick @ Nov 8 2010, 18:10)  Например здесь - смотрим таблицу. Я пока использую - SmartGen RAM. Это на стр. 78 документа "Actel HDL Coding Style Guide" и показано... PS Я писал письмо по этому поводу в Actel. Ответил, что вышлет описание на HDL. Достаточно странно отвечать на мой вопрос моей же цитатой, не находите? Как объявить память я понял. Вопрос в том, каким образом задать это значение по умолчанию. Я привел 3 варианта, которые я пока вижу, хочу узнать как поступали другие. Опробовать смогу только в четверг.
--------------------
Because it's there
|
|
|
|
|
Nov 8 2010, 16:53
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 14-03-06
Пользователь №: 15 223

|
Цитата(Muscat @ Nov 8 2010, 13:42)  _ANDREW, я тоже уже склоняюсь к тому, чтобы попробовать положить все на блочную память. Как это лучше сделать в HDL коде? 1) Внутри архитектуры сигнала объявить сигнал типа массив с предварительным заданием значений 2) Внутри процесса объявить переменную, с предварительным заданием 3) Оставить все, как есть у меня сейчас - массив входных данных объявлен константой в упаковке Я всегда делаю 1. вот небольшой пример CODE library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity ROM is port (CLK : in std_logic; EN : in std_logic; ADDR : in std_logic_vector(15 downto 0); DATA : out std_logic_vector(31 downto 0)); end ROM;
architecture syn of ROM is
type rom_type is array (0 to 1007) of std_logic_vector (31 downto 0); signal ROM : rom_type:= ( X"00000000", X"00040050", X"000d00c0", X"00cc01f0", X"00ea0180", X"01bb0080", X"01aa0090", X"01720120", X"014d0100", X"011001f1", X"010a00c1", X"00000010", X"00110160", X"00710200", X"00810110", X"008901a0", X"008d0111", X"00b801e0", X"00c10112", X"01cb0230", X"016c0091", X"015a0150", X"00000020", X"00130181", X"004d0210", X"006800c2", X"006c0140", X"00cc0092", X"01e401d0", X"01c00130", X"01a201e1", X"01630093", X"01200141", X"00000030", X"001200d0", X"001901c0", X"00620231", X"00680211", X"007800a0", X"009d0142", X"00ad00f0", X"01d401c1", X"01b30220", X"01740190", X"00000040", X"00120212", X"00310131", X"00550170", X"009b0221", X"00bd00d1", X"00e300a1", X"01400232", X"012b0041", X"012d0070", X"01220171", X"00000051" -- и так далее ); attribute ROM_STYLE : string; ---атрибуты для того чтобы при синтезе распределение было в блоковую память attribute ROM_STYLE of ROM: signal is "block"; begin
process (CLK) begin if (CLK'event and CLK = '1') then if (EN = '1') then DATA <= ROM(conv_integer(ADDR)); end if; end if; end process;
end syn;
у Вас будут скорее всего другие атрибуты, или можно обойтись без них, с помощью настроек синтеза..
Сообщение отредактировал _ANDREW - Nov 8 2010, 16:55
|
|
|
|
|
Nov 8 2010, 17:26
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 14-03-06
Пользователь №: 15 223

|
Это для XILINX, атрибуты для родного XILINX SYN TOOLS (XST) который по умолчанию в ISE...
|
|
|
|
|
Nov 8 2010, 20:26
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 14-03-06
Пользователь №: 15 223

|
Цитата(Maverick @ Nov 8 2010, 22:43)  Muscat Сравните то что в документе на стр. 78 и то что привел _ANDREW описание на VHDL правда для XILINX. на 78 странице память подключена как примитив, а вот на стр 76, внизу (Register-Based Dual-Port SRAM) подключение памяти как синтезируемого компонента... и практически тоже самое что и в моём коде (только я прописал ROM с инициализированными значениями). Честно говоря, думаю что отличия в архитектуре у разных компаний не велики.. и я обычно не подключаю блоки как примитивы, лучше писать на чистом языке, с настройкой синтеза атрибутами, чем лепить примитивы, и каждый раз переделывать проект под разные микросхемы.
|
|
|
|
|
Nov 8 2010, 20:49
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(_ANDREW @ Nov 8 2010, 22:26)  на 78 странице память подключена как примитив, а вот на стр 76, внизу (Register-Based Dual-Port SRAM) подключение памяти как синтезируемого компонента... и практически тоже самое что и в моём коде (только я прописал ROM с инициализированными значениями). Честно говоря, думаю что отличия в архитектуре у разных компаний не велики.. и я обычно не подключаю блоки как примитивы, лучше писать на чистом языке, с настройкой синтеза атрибутами, чем лепить примитивы, и каждый раз переделывать проект под разные микросхемы. Правильно! Я хотел показать эту разницу Muscat - Вы опередили с ответом PS У меня не получилось Цитата ... лучше писать на чистом языке, с настройкой синтеза атрибутами, ... для ПЛИС фирмы Actel так описать блочную память. Регистровая память - не проблема. Из-за этого я и соответствующий вопрос и задал... PS PS SmartGen RAM - это программа, которая генерирует макрос RAM памяти для ПЛИС, типа CoreGenerator у Xilinx
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Nov 9 2010, 10:38
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 14-03-06
Пользователь №: 15 223

|
Цитата(Maverick @ Nov 8 2010, 23:49)  PS У меня не получилось для ПЛИС фирмы Actel так описать блочную память. а почему не получилось??? синтезатор ругается?? каким Вы синтезатором пользуетесь??
|
|
|
|
|
Nov 16 2010, 11:02
|

Местный
  
Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382

|
пробовал использовать атрибуты синтеза, делал аккурат по образцу из хелпа Код library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
library synplify;
entity ROM is port (CLK : in std_logic; EN : in std_logic; ADDR : in std_logic_vector(6 downto 0); DATA : out std_logic_vector(6-1 downto 0)); end ROM;
architecture syn of ROM is
-- mem is the signal that defines the RAM
type MEM is array (0 to 127) of std_logic_vector (6-1 downto 0);
signal ROM : MEM:=("000000",.................,"000000");
attribute syn_ramstyle : string; attribute syn_ramstyle of ROM : signal is "block_ram"; Синтезировал кусок кода из coding Style Guide. синтезатор продолжал все делать на регистрах. Единственный рабочий способ, тот о котором говорил Maverick, использовать coreGen. но это какой то извратский способ. Написал письмо в тех поддержку. Жду ответа.
--------------------
Because it's there
|
|
|
|
|
Nov 16 2010, 20:18
|

Местный
  
Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382

|
Цитата В настройках синтезатора не запрещено синтезировать BRAM? Помню был экзамен по курсу приемников, паренька спросили про выравниватель спектра. Он затормозил, понял что ничего не помнит про принципы работы, начал на ходу придумывать узкополосные фильтры, на что преподаватель прервал его и спокойно так ручкой прочетрил линию по спектру "вот так он его выравнивает". Если бы я нашел пункт меню "Не использовать ячейки RAM" я обратил на это внимание =) Как то плавно тема скатилась в объявление оперативной памяти. Никаких других рабочих способов, кроме использования CoreGEN не нашлось, так что выложу тут его полностью, авось кому пригодится. Итак 1) Объявляем наше Entity, к которому в дальнейшем будем обращаться. Код library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity ram32_16 is port (WAddress, RAddress:in std_logic_vector(4 downto 0); Data : in std_logic_vector (15 downto 0); WClock, RClock,WE,RE:in std_logic; Q :out std_logic_vector (15 downto 0)); end ram32_16;
architecture rtl of ram32_16 is component ram port (Data : in std_logic_vector (15 downto 0); WE : in std_logic; RE : in std_logic; WClock : in std_logic; RClock : in std_logic; WAddress : in std_logic_vector (4 downto 0); RAddress : in std_logic_vector (4 downto 0); Q: out std_logic_vector (15 downto 0) ); end component; begin R_32_16: ram port map (Data => Data, WE => WE, WAddress => WAddress, RE => RE, RAddress => RAddress, WClock => WClock, RClock => RClock, Q => Q); end rtl; -- RAM.vhd 2) Генерируем Two-Port Memmory. В либеро IDE справа внизу закладка Cores.  3)Собсно все, синтезируем.  Но первый вопрос никуда не делся. Сейчас я храню 128 тестовых байт по 6 бит внутрях самой ПЛИС, ясно что этот метод подходит только на начальных этапах отладки. Поэтому вовзаращаясь к первоначальной теме - как работать с flash-памятью? Есть ли у кого примеры?
--------------------
Because it's there
|
|
|
|
|
Nov 17 2010, 07:44
|

Местный
  
Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382

|
Пришел ответ от службы технической поддержки, огромное спасибо Карпову Сергею! Память синтезируется в виде блоков при использовании атрибута Код type mem_type is array (DATA_DEPTH downto 0) of std_logic_vector (7 downto 0); signal mem: mem_type;
attribute syn_ramstyle : string; attribute syn_ramstyle of mem : signal is [b]"no_rw_check"[/b]; Атрибут block_ram используется только для семейств ProASIC Plus.
--------------------
Because it's there
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|