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

 
 
> Помогите избавиться от dangling'а, spartan-3AN
fylhtq2u
сообщение Sep 9 2009, 19:52
Сообщение #1





Группа: Участник
Сообщений: 3
Регистрация: 15-04-09
Из: Таганрог
Пользователь №: 47 729



После компиляции программы для процессора picoblaze создается файл proc_ROM:

CODE
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
library unisim;
use unisim.vcomponents.all;

entity proc_rom is
Port ( address : in std_logic_vector(9 downto 0);
instruction : out std_logic_vector(17 downto 0);
clk : in std_logic);
end proc_rom;

architecture low_level_definition of proc_rom is
attribute INIT_00 : string;
...
attribute INITP_07 : string;
--
-- Attributes to define ROM contents during implementation synthesis.
--
attribute INIT_00 of ram_1024_x_18 : label is "09FF003A09FF030002010F020E010D0000340F460E410D0A00340F390E300D00";
...
attribute INITP_07 of ram_1024_x_18 : label is "C000000000000000000000000000000000000000000000000000000000000000";
--
begin
--
--Instantiate the Xilinx primitive for a block RAM
ram_1024_x_18: RAMB16_S18
port map( DI => "1111111111111111",
DIP => "11",
EN => '1',
WE => '0',
SSR => '0',
CLK => clk,
ADDR => address,
DO => instruction(15 downto 0),
DOP => instruction(17 downto 16));
--
end low_level_definition;


При синтезе удаляется входные сигналы для блочной памяти: DI и DIP. И в МАП затем выдается сообщение о том, что

WARNING:PhysDesignRules:812 - Dangling pin <DIA0> on
block:<FILTER_1/CONTROL_1/PROGRAM_1/RAM_1024_X_18/FILTER_1/CONTROL_1/PROGRAM_
1/RAM_1024_X_18>:<RAMB16BWE_RAMB16BWE>.


Пробовал применить в файле proc_rom такой вот аттрибут

Код
    attribute BOX_TYPE: string;
    attribute BOX_TYPE of ram_1024_x_18: label is "BLACK_BOX";


Но он тоже не помог. Синтезатор все равно выкидывает входные сигналы для памяти.

Подскажите как это можно исправить, плиз.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sefo
сообщение Sep 9 2009, 20:28
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 429
Регистрация: 11-08-05
Из: Санкт-Петербург
Пользователь №: 7 537



Я не специалист по Xilinx, но, видимо, на этот варнинг можно не обращать внимания - ROM и не должна иметь входных сигналов для данных. Но т.к. ROM описывается на основе RAM блока у которого эти сигналы есть, вот и получается, что в режиме ROM ппамяти у него остаются "болтаться" ножки для входных данных.

В конце концов, можно самостоятельно вставить вместо ram_1024_x_18 что-нибудь более похожее на настоящую ROM-память.
Go to the top of the page
 
+Quote Post
fylhtq2u
сообщение Sep 12 2009, 14:34
Сообщение #3





Группа: Участник
Сообщений: 3
Регистрация: 15-04-09
Из: Таганрог
Пользователь №: 47 729



Цитата(Sefo @ Sep 10 2009, 00:28) *
Я не специалист по Xilinx, но, видимо, на этот варнинг можно не обращать внимания ...


Да, в процессе синтеза и в par на это можно не обращать внимания, но при прошивке ПЛИС bitgen сообщает о предупреждении, что некоторые контакты примитива не подключены. А в таком случае, при прошивке ПЛИС, я не уверен, что с ней будет все в порядке. До этого прошивал ПЛИС и bitgen не выдавал никаких предупреждений. ПЛИС работала как и при моделировании.


Цитата(Sefo @ Sep 10 2009, 00:28) *
В конце концов, можно самостоятельно вставить вместо ram_1024_x_18 что-нибудь более похожее на настоящую ROM-память.


1.ROM-память в Spartan-3 можно построить только на рассыпухе и каждый блок имеет только 16 бит памяти. Команды же для процессора имеют ширину 18 бит. У меня для процессора 311 команд, т.е. мне потребуется около 600 LUTов. Будут раскиданы по всей ПЛИС.
2.Машинный код для процессора компилируется отдельной программой, а исправляеть его каждый раз не хочется.


На BRAM постоянно подается сигнал чтения (EN = '0') и так как никакие данные записываться не будут, то синтезатор и убирает входные проводники. Из-за чего потом появляется предупреждение. Я не знаю какой аттрибут надо применить, чтобы синтезатор и map не трограли входные сигналы.

В cgd написано, что необходимо использовать аттрибут "keep". Но я не знаю как правильно его применить к такому коду

Код
begin
--
  --Instantiate the Xilinx primitive for a block RAM
  ram_1024_x_18: RAMB16_S18
  port map(    [b]DI => "1111111111111111",
              DIP => "11",[/b]
               EN => '1',
               WE => '0',
              SSR => '0',
              CLK => clk,
             ADDR => address,
               DO => instruction(15 downto 0),
              DOP => instruction(17 downto 16));
--
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 16:28
Рейтинг@Mail.ru


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