Нужно скомпилировать такой код:
Сначала точки записываются в разное время в регистр, затем выдаются из регистраКод:-------------------------------------------------------------------------------- -- ПЕРЕДАЧА ДАННЫХ ЧЕРЕЗ ОЗУ 090726 -- -------------------------------------------------------------------------------- -- управление выводом на шину данных (запись произойдет по фронту WE) D(7 downto 0) <= WR_REG when VIDEO_H(0) = '1' else (others => 'Z'); process (F14, VIDEO_H) begin if (rising_edge(F14) and VIDEO_H(0) = '0') then -- по фронту OE -------------------------------------------------------------------------------- -- запись кода двух точек VIDEO в регистр для записи в ОЗУ if VIDEO_H(1) = '0' then -- WR_REG(3) <= R2; -- запись точки в младший полубайт регистра -- WR_REG(2) <= G2; -- WR_REG(1) <= B2; -- WR_REG(0) <= I2; else -- WR_REG(7) <= R2; -- запись точки в старший полубайт регистра -- WR_REG(6) <= G2; -- WR_REG(5) <= B2; -- WR_REG(4) <= I2; end if; -------------------------------------------------------------------------------- -- чтение кода двух точек из ОЗУ в регистр для вывода на VGA RD_REG <= D(7 downto 0); -------------------------------------------------------------------------------- end if; end process;
на шину данных ОЗУ для записи.
Если убрать комментарий в одной из восьми строк, где записываются данные в регистр,
возникает ошибка:
Не понятно, каких сигналов много. Может код можно переделать.Error: Design requires 7 output enable signals, but the device can contain only 6 output enable signals
Error: Can't find fit
Error: Quartus II Fitter was unsuccessful. 2 errors, 9 warnings
Error: Quartus II Full Compilation was unsuccessful. 4 errors, 23 warnings
"L-256"
По этому куску кода и сообщениям ничего сказать нельзя. Единственно что ясно так это ресурсов не хватает, почти на 100% трасировочного ресурса. Победить только переиначивая код и внимательно смотря в RTL, и вообще сделать загруженную на 100% CPLD/FPGA может оказаться нереально.
Короче без проекта - гадание.
Во вложении видно что у на IO блок может идти с трасировочной сетки только 6 сигналов, а в твоем случае на какие то ноги синтезатор насинтезировал что получается 7 сигналов. Надо избавиться, например не if юзать на каждом углу а какие нить логические условия что бы сигнал не в мультиплексоре io блока собирался а в LUT
Последний раз редактировалось ZEK; 22.02.2014 в 20:03.
В проекте строки с ошибкой закомментированы.
На EPM3512 ошибки нет, так как у нее 10 выходов. Откуда картинка? В Advisor столько настроек и при разных, наверно, получаются разные схемы. По какому принципу происходит преобразование, а то я могу напридумывать таких конструкций, что и DE1 не хватит.
Последний раз редактировалось zx-kit; 28.07.2009 в 07:52.
"L-256"
Из datasheet по max3000
Ну LUT как бы выгодней, чем мультиплексоры. Так что если необходимо уменьшить занимаемые ресурсы то смотреть что бы лезло куда надо, + юзать атрибуты синтезатора, которые оформляются в виде комментариев.
---------- Post added at 07:27 ---------- Previous post was at 07:27 ----------
Из datasheet по max3000
Ну LUT как бы выгодней, чем мультиплексоры. Так что если необходимо уменьшить занимаемые ресурсы то смотреть что бы лезло куда надо, + юзать атрибуты синтезатора, которые оформляются в виде комментариев.
Короче дофига сигналов которые переводят выходы в Z-Состояние
надо переиграть логику
К примеру
поменять наIR_VGA <= 'Z'; -- резисторы отключены
IG_VGA <= 'Z';
IB_VGA <= 'Z';
И сделать чуть по другому аналоговую частьIR_VGA <= '1';
IG_VGA <= '1';
IB_VGA <= '1';
---------- Post added at 09:05 ---------- Previous post was at 08:40 ----------
И еще неужели VHDL настолько уродский что надо сочинять вот такое?
VGA_SSI <= '0' when VGA_H < 53 else '1';
Последний раз редактировалось ZEK; 28.07.2009 в 11:04.
Не нашел, как сделать open-drain... Тут лучше не менять.
Может ошибка как-то связана с обменом с ОЗУ. Вот его бы переделать.
Я думал, что это самый простой способ записи. Тем более, что if then без process не компилируется.[/COLOR]И еще неужели VHDL настолько уродский что надо сочинять вот такое?
VGA_SSI <= '0' when VGA_H < 53 else '1';
Если есть более красивое решение, c удовольствием так сделаю.
Пробовал инверсию входных сигналов переделать из if then в xor - размер прошивки не изменился...
"L-256"
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Да нет ошибки просто у тебя рулится яркостные R,G,B для VGA и VIDEO (6 каналов OE), фик его знает чего синтезатор решил что кадому необходим отдельный сигнал OE, и один на перевод в Z данные для памяти.
Попробуй ввести сигнал который расчитывается когда нада VIDEO и VGA переводить в Z, и сделай по единому сигналу что бы срабатывало и мож имеет смысл за пределами процесса.
Безруля, я VHDL не знаю. На Verilog можно просто
VGA_SSI = !VGA_H< 53;
с закомментированными строками было 112 ячеек
заменил Z на 1 на 6 выходах RGB стало 106 и компилируется без ошибок
если заменить Z только на одном выходе - станет 114 и компилируется без ошибок
Выводы:
1. Каждый сигнал или шина с z состоянием занимает примерно на одну ячейку больше
2. Таких сигналов или шин может быть не более 6.
Может RGB выходы в две шины объединить по три сигнала...
Может переделать на VERILOG...
Для RGB надо выход с открытым коллектором. Не знаю как сделать...
Для шины данных на ОЗУ тоже не нужно z состояние - достаточно in и out. Не знаю как сделать...
Будет ли работать если использовать тактовые импульсы 14 МГц не глобальный CLK, как сейчас временно сделано, а после инвертора использовать в процессах?
"L-256"
А никак ты не сделаешь inout это in+out(c Z состоянием)
Будет, это важно для высокочастотных схем где клок обязательно надо пускать под спец-трассам
http://www.altera.com/support/kdb/so...s=open%20drain
Заменил шесть отдельных выходов яркости:
На два вектора по 3 сигнала:Код:... IR_VGA : out std_logic := '1'; -- цифровой BRIGHT для RED (состояние 0/Z) IG_VGA : out std_logic := '1'; -- цифровой BRIGHT для GREEN(состояние 0/Z) IB_VGA : out std_logic := '1'; -- цифровой BRIGHT для BLUE (состояние 0/Z) ... IR_VIDEO : out std_logic := '1'; -- цифровой BRIGHT для RED (состояние 0/Z) IG_VIDEO : out std_logic := '1'; -- цифровой BRIGHT для GREEN(состояние 0/Z) IB_VIDEO : out std_logic := '1'; -- цифровой BRIGHT для BLUE (состояние 0/Z) ... if I2 = '0' then -- если яркость пониженная: IR_VGA <= '0'; -- уменьшаем сигнал подключением резисторов к 0 IG_VGA <= '0'; IB_VGA <= '0'; else IR_VGA <= 'Z'; -- резисторы отключены IG_VGA <= 'Z'; IB_VGA <= 'Z'; end if; ...
Ошибка пропала, 106 ячеек...Код:... I_VGA : out std_logic_vector (2 downto 0) := "000"; -- выходы яркости VGA ... I_VIDEO : out std_logic_vector (2 downto 0) := "000"; -- выходы яркости VIDEO ... if I2 = '0' then -- если яркость пониженная: I_VGA <= "000"; -- уменьшаем сигнал подключением резисторов к 0 else I_VGA <= "ZZZ"; -- резисторы отключены end if; ...
Но, если в описании выходов проинициализировать их как "111" ошибка появляется опять. Но нам как раз надо "000".
В старом тексте с отдельными выходами заменил инициализацию всех выходов цвета и яркости на '0' - ошибка пропала, 108 ячеек вместо 112.
Вывод: если не писать на выход единицу, то выход работает как с открытым коллектором...
Вариант с векторами яркости короче...
Спасибо за помощь.
"L-256"
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)