gosha 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба synplify 9.6 используется для синтеза. ise 10 implementation. virtex 2 pro. В схеме iob 2 триггера присутствуют: для oe и data. ise триггер sdram_dq_out размещает в iob. ise триггер sdram_dq_en не размещает в iob - как победить? Спасибо. module top ( .... inout [63:0] sdram_dq; wire [63:0] sdram_dq, sdram_dq_o, sdram_dq_oe; bufif0 sdram_dq_buf [63:0] (sdram_dq, sdram_dq_o, sdram_dq_oe); memory_hub memory_hub_insertion (.sdram_dq_i(sdram_dq),.sdram_dq_o(sdram_dq_o),.sdram_dq_oe(sdram_dq_oe)); ..... entity memory_hub is port( sdram_dq_i : in std_logic_vector(63 downto 0); sdram_dq_o : out std_logic_vector(63 downto 0); sdram_dq_oe: out std_logic_vector(63 downto 0); signal sdram_dq_out : std_logic_vector(63 downto 0); signal sdram_dq_en : std_logic_vector(63 downto 0); attribute syn_keep of sdram_dq_en : signal is true; attribute syn_keep of precharge_enable : signal is true; attribute xc_props of sdram_dq_en : signal is "IOB=TRUE"; attribute xc_props of sdram_dq_out : signal is "IOB=TRUE"; ................................. sdram_dq_o <= sdram_dq_out; sdram_dq_oe <= sdram_dq_en; process (wb_clk) begin if (wb_clk'event and wb_clk = '1') then if cmd_write then sdram_dq_out <= sdram_di; precharge_enable <= false; sdram_dq_en <= (others => '0'); else sdram_dq_out <= sdram_dq_out; sdram_dq_en <= (others => '1'); precharge_enable <= true; end if; end if; end process; Maximum Data Path: memory_hub_insertion/precharge_enable to sdram_dq[55] Location Delay type Delay(ns) Physical Resource Logical Resource(s) ------------------------------------------------- ------------------- SLICE_X50Y21.YQ Tcko 0.419 sdram_dq_oe[0] memory_hub_insertion/precharge_enable J29.T1 net (fanout=68) 6.397 sdram_dq_oe[0] J29.PAD Tiotp 3.031 sdram_dq[55] sdram_dq_iobuf[55]/OBUFT sdram_dq[55] ------------------------------------------------- --------------------------- Total 9.847ns (3.450ns logic, 6.397ns route) (35.0% logic, 65.0% route) -------------------------------------------------------------------------------- Slack: 8.047ns (requirement - (clock arrival + clock path + data path + uncertainty)) Source: memory_hub_insertion/precharge_enable (FF) Destination: sdram_dq[53] (PAD) Source Clock: PLL_XC_H_c rising at 0.000ns Requirement: 20.000ns Data Path Delay: 9.577ns (Levels of Logic = 1) Clock Path Delay: 2.376ns (Levels of Logic = 2) Clock Uncertainty: 0.000ns iob.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Ну а в логах synplify и map есть что-нибудь про этот сигнал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
starley 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Ну а в логах synplify и map есть что-нибудь про этот сигнал? Эти тригера по одному синхросигналу работают, или по разным? Если по разным, - то не разместит, на IOB только один синхросигнал заходит, плюс еще там по парам ограничение есть. Если по одному,- можно еще атрибут задать для этих тригеров (map_iob или как-то так). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha 0 5 февраля, 2009 Опубликовано 5 февраля, 2009 · Жалоба Эти тригера по одному синхросигналу работают, или по разным? Если по разным, - то не разместит, на IOB только один синхросигнал заходит, плюс еще там по парам ограничение есть. Если по одному,- можно еще атрибут задать для этих тригеров (map_iob или как-то так). Похоже, что в iob сигналы размещаются, если в модуль верхнего урованя вывести dat_o, dat_oe, и там сделать bufif0 dat_buf[31:0] (dat, dat_o, dat_oe). Причем именно bufif0. И наверх вывести 32 сигнала dat_oe. Обязятельно ли выходные буфера размещать в модуле top (vhdl/verilog)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha 0 9 февраля, 2009 Опубликовано 9 февраля, 2009 · Жалоба Похоже, что в iob сигналы размещаются, если в модуль верхнего урованя вывести dat_o, dat_oe, и там сделать bufif0 dat_buf[31:0] (dat, dat_o, dat_oe). Причем именно bufif0. И наверх вывести 32 сигнала dat_oe. Обязятельно ли выходные буфера размещать в модуле top (vhdl/verilog)? Дополнение: 64 триггера dat_oe на этапе синтеза synplify оставляет. На этапе implementation, ice 64 триггера dat_oe оптимизирует в один. И, соотв., 1 триггер не может быть в 64 iob одновременно. Как победить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 4 9 февраля, 2009 Опубликовано 9 февраля, 2009 · Жалоба Поглядел свой старенький проект для PCI... И нашел аналогичное место: сигнал AD_nOE должен синхронно разрешать работу 32 выходных буферов. Естественно пришлось создать 32 IOB триггера для AD_nOE. Из constraint'ов я обнаружил только следующее: attribute IOB of AD_nOE: signal is "true";, но и IOBUF находился в модуле верхнего уровня. Также были выполнены все ограничения налагаемые используемым семейством ПЛИС (Spartan-2), т.е. CLK и RST един для всех IOB триггеров, CE - индивидуален; все сбросы одного типа (синхронные). Проверьте FPGA_Editor'ом, что можно разместить в IOB вашей ПЛИС, и то ли генерирует Synplify. В более поздних проектах (синтезируемых XST) в которых IOBUF находился вместе с описанием триггеров, к IOB дописывался и attribute NOREDUCE of nOE: signal is "true"; Почитайте про constraint KEEP, в его описании упоминается NOMERGE, очень похоже, что Вам нужен именно NOMERGE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bar 0 10 февраля, 2009 Опубликовано 10 февраля, 2009 · Жалоба Попробуйте директиву syn_useioff Из хелпа synplify: entity test is port (d : in std_logic_vector (3 downto 0); clk : in std_logic; q : out std_logc_vector (3 downto 0); attribute syn_useioff : boolean; attribute syn_useioff of q : signal is true; end test; У меня помогло, правда я на верилоге делал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilyge 0 10 февраля, 2009 Опубликовано 10 февраля, 2009 · Жалоба Используй метокомментарий в synplify : // synthesis attribute equivalent_register_removal of sdram_dq_oe is "no" Можно прочитать : wp231.pdf (HDL Coding Practices to Accelerate Design Performance) Пример : attribute EQUIVALENT_REGISTER_REMOVAL : string; attribute EQUIVALENT_REGISTER_REMOVAL of ce1 : signal is "NO"; attribute EQUIVALENT_REGISTER_REMOVAL of ce2 : signal is "NO"; begin -- Clock enable register with 64 fanout -- replicated once process (clk) begin if (rising_edge(clk)) then ce1 <= ce; ce2 <= ce; end if; end process; process (clk) begin if (rising_edge(clk)) then if (ce1='1') then res(31 downto 0) <= a_data(31 downto 0); end if; if (ce2='1') then res(63 downto 32) <= a_data(63 downto 32); end if; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha 0 10 февраля, 2009 Опубликовано 10 февраля, 2009 · Жалоба Ура. syn_useioff + EQUIVALENT_REGISTER_REMOVAL работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться