Перейти к содержанию
    

daemonDX

Свой
  • Постов

    42
  • Зарегистрирован

  • Посещение

Весь контент daemonDX


  1. С ISE 9.1i на Windows XP Pro x64 у меня возникла проблема с излишним потреблением памяти для PAR. Server 2003 x64 поднимать было лениво. Собственно, Xilinx и не гарантирует работу 9.1i с WinXP PRO x64. У 9.2i XP x64 уже в списке поддерживаемых систем. Сейчас использую XP x64 c ISE 8.2i. Теоретически, 32-х битный 8.2i под WinXP x64 может получить 4 Гб памяти вместо стандартных 2 Гб, если программисты Xilinx об этом позаботились. Готовлюсь перейти на 9.2i.
  2. Поставил SP2 на x64 - c 9.1i ситуация не изменилась. Снес 9.1i, поставил 8.2i, там все нормально работает. Инсталятор 9.1i ставит на этой винде 64-х битные dll/exe (в папке bin только nt64). А 8.2 - 32-х битные. Хотел обеспечить xst/par хорошим объемом памяти :05: . Насчет требований PAR - синтез в 8.2 на текущем проекте выдает peak memory usage 1280 MB. А на Xilinx так и совсем страшные цифры приведены - http://www.xilinx.com/ise/products/memory.htm. Коллега возгорелся желанием поставить 8 Гб и RedHat WS4 64 :)
  3. Доброго дня, электрониксы ! Проект для xc2v6000 стал требовать под 2 гига памяти на PAR. Решил перейти на XP x64 SP1 и ISE 9.1i. Проект в ISE 9.1i на 32-х битной XP успешно разводится. На XP x64 - при синтезе, по показаниям task manager, xst отъедает 3.3 ГБ. При этом непрерывно растет PF Usage и, соответственно, Commit Charge (использование файла подкачки и объемы запрошенной виртуальной памяти). Как только page file кончается, xst перестает синтезить (загрузка проца снижается до 1-3%). Физической памяти в машине 4 ГБ, page file ставил 32 ГБ. Пробовал ISE 9.1 без SP и с SP3. Результат один и тот же. Собственно, в документации на 9.1 указано, что на x64 был limited testing. Кто-нибудь с x64 связывался ?
  4. Сам не пробовал (мне хватает ISE XST), но этот метод предположительно применителен к любому синтезу, поддерживающему атрибуты Verilog. Атрибуты - часть стандарта Verilog, а не расширение Xilinx.
  5. При использовании verilog в ISE поддерживаются атрибуты, что позволяет использовать в HDL такие конструкции: module top ( (*IOSTANDARD="SSTL2_II"*) input wire [ 7 : 0 ] SAMPLE_IN, (*IOSTANDARD="SSTL2_II_DCI"*) output wire [ 7 : 0 ] SAMPLE_OUT ); Иногда удобно вынести почти все содержимое ucf в модуль верхнего уровня: module top ( (*LOC="AT17 AT14 AT8 AN6 M36 U38"*) (*IOSTANDARD="SSTL2_II"*) input wire [ 7 : 0 ] SAMPLE_IN, (*LOC="M34 AK39 AJ38 AC38 AJ39 AG38 AH38 AF39"*) (*IOSTANDARD="SSTL2_II_DCI"*) output wire [ 7 : 0 ] SAMPLE_OUT );
  6. Попробуйте при подключении компонента в port map использовать open, т.е. : <выход> => open,
  7. Очень советую посмотреть в сторону Xilinx PlanAhead, если уж решили помочь placer'y. По-моему, там все гораздо удобнее.
  8. Itch, вы бы разобрались с присвоениями. В коде в одном синхронном процессе намешаны blocking (<=) и non-blocking (=) присвоения сигналов. Если пока не разбираетесь, что синтез нагенерит на non-blocking в синхронном процессе, то ограничтесь блокирующими (<=). Сюрпризов будет меньше :). Ну и мысли вслух :) . Уж коли триггеров с Z-состояниями вроде бы пока нет, и синтез поставит латч/триггер с тристабильным буфером по выходу, то лучше так и описать - как триггер, выход которого через assign вне процесса назначается по некоторому условию в Z.
  9. sazh, вы правильно подметили, инициализация в Xilinx реализуется с помощью прозрачной для пользователя XST замены конструкции на атрибут INIT. Собственно, именно это и написано в приведенном куске User Guide :) . При моделировании в ModelSim поведенческая модель и генерируемая XST cтруктурная модель с временными характеристиками в отношении инициализации регистров ведут себя одинаково. Т.е. при использовании связки ISE(XST) + ModelSim у меня заковык с инициализацией не возникало. С CPLD не работал, поэтому определенно сказать не могу. Предполагаю, что если у примитивов CPLD есть атрибуты INIT, то велика вероятность, что и для CPLD подобный подход сработает.
  10. XST User Guide: When you give a register an initial value in a declaration, XST sets this value on the output of the register at global reset, or at power up. A value assigned this way is carried in the NGC file as an INIT attribute on the register, and is independent of any local reset. У Altera не знаю. Так что наверное в доках по среде нужно выяснить, а не "Наверно так не стоит делать на верилоге".
  11. В Xilinx ISE при объявлении регистра : reg [ 7 : 0 ] cnt = 8'd15;
  12. Попробуйте так: library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; use work.mylib.all; entity RAM is generic ( bw : integer := 3; --разрядность шины адреса word_size : integer := 4; --разрядность шины данных ram_size : integer := 8 --ёмкость ОЗУ в словах ); port ( clk : in std_logic; ce : in std_logic; wr : in std_logic; oe : in std_logic; addr : in std_logic_vector(bw-1 downto 0); data : inout std_logic_vector(word_size-1 downto 0) ); end RAM; architecture Beh of RAM is subtype ram_word is std_logic_vector(word_size downto 0); type ram_table is array(0 to ram_size-1) of ram_word; signal xRAM : ram_table; signal r_data : std_logic_vector( word_size - 1 downto 0 ); signal r_data_valid : std_logic; begin data <= r_data when ( ( oe = '0' ) and ( r_data_valid = '1' ) ) else (others => 'Z'); write : process(clk) variable bch : std_logic :='1'; begin if clk'event and clk='1' then if ce = '1' then if wr = '0' then bch:=bitchet(data); xRAM(conv_integer(addr))(word_size) <= bch; xRAM(conv_integer(addr))(word_size-1 downto 0) <= data; end if; end if; end if; end process; read : process(clk) variable bch : std_logic :='1'; begin if clk'event and clk='1' then if ( ( ce = '1' ) and ( wr = '1' ) ) then r_data <= xRAM(conv_integer(addr))(word_size-1 downto 0); bch:=bitchet(data); if xRAM(conv_integer(addr))(word_size) /= bch then r_data <= (others => 'X'); end if; end if; if ( ce = '1' ) then r_data_valid <= wr; end if; end if; end process; end Beh; В вашем коде data назначается под clk, то есть является регистром, а регистры с Z не работают.
  13. Инлайн Груп, дистрибютор Xilinx в России проводит курсы. Подробности на http://www.plis.ru/page.php?id=45
  14. Страница 13, DS001-3 (v2.7) September 3, 2003 Period Tolerance: the allowed input clock period change in nanoseconds. "Толерантность периода: допустимое измненение периода входного клока в наносекундах". Это показатель допустимой нестабильности периода опорного клока.
  15. А вы уверены, что код выдает нарисованные вами сигналы ? if (clk'event and clk='1') предполагает изменение всех синхронных сигналов по переднему фронту clk process(clk) -- делитель частоты begin if (clk'event and clk='1') then if res_clk='1' then st<= conv_std_logic_vector(0,16); elsif set_clk='1' then if st=program_CLK-1 then st<= conv_std_logic_vector(0,16); else st<=st+1; end if; end if; if program_CLK="0000000000000001" then out_clk <= clk; elsif (st=program_CLK-1 and set_clk='1' and clk='1')then out_clk <= '1'; else out_clk <= '0'; end if; end if; end process; 0011001100110011001100 0011000000000011000000 Такое только на DDR-регистрах получить можно... Ну или с асинхронной логикой, выдавая gated-клок. И пора бы уже научиться кодами форума пользоваться, а то код смотреть неудобно.
  16. Ну вот и определились с set. :) А Вы, sazh, говорите, что запутываю. Кстати, ваш код переписывал вслепую, не особо следя за его логикой :) Мне уже было достаточно воспоминания о давнем знакомстве с VHDL :) . To darkniisiis: А теперь вернемся к нашим баранам, т.е. к set. Вы уверены, что делитель частоты работает именно так, с изменением скважности сигнала (т.е. в вашем примере из входного сигнала со скважностью 50/ 50 (50% времени высокий уровень, 50% времени низкий уровень) получаем сигнал со скважностью 75/25)? Должен бы работать так, как говорит sazh, хотя я пока работал только со встроенными в FPGA Xilinx DCM, может и другое в мире есть :) . 00110011001100110011 CLK 00110000001100000011 SET И про то, что set получается с внешнего устройства, а не с триггера внутри устройства, следовало упомянуть. Судя по последним новостям, set - периодический сигнал, асинхронный для clk. Так таймер должен задерживать всю последовательность set ? Тогда это не таймер, а управляемая линия задержки. Нарисуйте, плиз, выходной сигнал с устройства для вашего примера с парой-тройкой значений x (SET=CLK/x), ну и парой малых значений prog, для разъяснения ситуации (а то что-то чем дальше, тем темнее :) ). Прямо в используемом в предыдущем формате (по три строки, clk/set/pinout)
  17. Сорри, совсем VHDL забыл. :) Теперь поподробнее про длительность set. Его длительность равна периоду Clk (т.е. в последовательности ...01010101... длине 01)? Или половине периода (т.е. в последовательности 01010101 длине 0, или длине 1)? Относительно clk - set синхронный сигнал, или полностью асинхронный (т.е. можно ли его анализировать по переходу сигнала clk из 0 в 1, или из 1 в 0) ?
  18. Код sazh в вольном переводе на VHDL. Отсутствие ошибок не гарантирую. library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_arith.all; entity timedel is port ( clk : in STD_LOGIC; set : in STD_LOGIC; prog : in STD_LOGIC_VECTOR ( 15 downto 0 ); pinout : out STD_LOGIC ); end timedel; architecture timedel_arch of timedel is signal cnt : std_logic_vector( 15 : 0 ); signal enable; signal delayed_set; begin pinout <= delayed_set; process( CLK ) begin if CLK'event and CLK = '1' then if ( set = '1' ) then enable <= '1'; elsif ( cnt = 1 ) enable <= '0'; end if; if ( set = '1' ) then cnt <= prog; elsif ( enable = '1' ) then cnt <= cnt - 1; end if; if ( cnt = 1 ) delayed_set <= '1'; else delayed_set <= '0'; end if; end if; end process; end timedel_arch;
  19. Попробуйте поставить в заголовке каждого .v файла директиву `default_nettype none , запрещающую подстановку цепей 'по умолчанию', т.е. запрещает компилятору самому создавать определения wire, если таковое не указано пользователем. Возможно, поможет.
  20. Предполагая, что iSDATA - некоторое 1-битное значение, wire или reg: wire [ 32 : 0 ] SDATA; reg [ 32 : 0 ] TEMP_DATA; always @ ( negedge iCLK or posedge iRST ) begin if (iRST) TEMP_DATA <= 33'b0; else TEMP_DATA <= { TEMP_DATA[31:0] , iSDATA }; end assign SDATA = TEMP_DATA; Здесь SDATA является как бы переименованной версией TEMP_DATA, от которой можно избавиться. Ругательства ModelSim вполне понятнты, не следует выполнять non-blocking assignment (<=) вне блока always. Не совсем понимаю, как он проинтерпретировал строку SDATA = TEMP_DATA без assign... В любом случае, назначение сигнала следует производить в одном месте кода. В данном случае - либо в блоке always, либо вне его.
  21. to andrew_b: а у меня на верхнем уровне код состоит только из подключений модулей, т.е. является шаблоном для работы с отдельно взятой серией плат, там загромождать особо нечего :). Сам проектированием PCB не занят, работаю с готовыми, причем стандартно на платах стоит 2 кристалла, один для общения с компом, а другой - "рабочий". Смена пина в "рабочем" обычно требует не только перекомпиляции проекта, но и серьезного общения с теми, из-за кого эта смена произошла, так как обычно только сменой пина это не обходится :). Ну и плюс дискуссия ведется по поводу наиболее простого и удобного способа "Как сделать по умолчанию в SPARTAN3 все выходные сигналы LVTTL", а не по поводу "как я считаю нужным проектировать" :)
  22. Скорректируйте систему генерации верхнего уровня (либо создайте дополнительно скрипт/программу на Python/Perl/Tcl/etc...), чтобы перед каждым сигналом указывался тип io-стандарта, в вашем случае (*IOSTANDARD="LVTTL"*) . То есть: module top ( (*IOSTANDARD="LVTTL"*) input wire TOP_LEVEL_INPUT_SINGLE, (*IOSTANDARD="LVTTL"*) input wire [ 7 : 0 ] TOP_LEVEL_INPUT_BUS, (*IOSTANDARD="LVTTL"*) output wire TOP_LEVEL_OUTPUT_SINGLE, (*IOSTANDARD="LVTTL"*) output wire [ 7 : 0 ] TOP_LEVEL_OUTPUT_BUS ) ... endmodule Удобно полностью исключить ucf из проекта, указывая полные спецификации сигналов: module top ( (*LOC="AR6"*) (*IOSTANDARD="LVTTL"*) input wire TOP_LEVEL_INPUT_SINGLE, (*LOC="AK38"*) (*IOSTANDARD="LVTTL"*) input wire [ 7 : 0 ] TOP_LEVEL_INPUT_BUS, (*LOC="AL38"*) (*IOSTANDARD="LVTTL"*) output wire TOP_LEVEL_OUTPUT_SINGLE, (*LOC="J31 E34 L34 K37 H31 D35 K33 K34"*) (*IOSTANDARD="LVTTL"*) (*IOBDELAY="NONE"*) output wire [ 7 : 0 ] TOP_LEVEL_OUTPUT_BUS ) ... endmodule
  23. Т.е. нужна ПЛИС с поддержкой LVDS18 - это 1.8 вольта, да ? Если да, то это существенно ограничивает возможные ПЛИС. Собственно, у Xilinx такового нет ни у Spartan-3, ни у Virtex2, ни у Virtex4. Насчет Altera Cyclon2 точно сказать не могу, но на первый взгляд и у этого семейства поддержка только LVDS25 (поправьте, если эти данные неверны). Вообще, зайдите на www.altera.com, www.xilinx.com или другого производителя микросхем программируемой логики - там все на английском, ознакомитесь с возможностями CPLD/FPGA, определитесь, что вам нужно.
  24. Отнюдь :) . Процессор в Virtex-II Pro запускается на частоте до 400 МГц (speed grade -6 - 350 МГц, speed grade -7 - 400 МГц). Но ему для этого счастья нужно завести 100 МГц генератор тактовой частоты. На 350 заводил. Если завести PLB на 100 МГц , то контроллер памяти сможет передавать данные на частоте 100 МГц. При общении по этой шине возникнут потери пропускной способности за счет организации протокола шины. Т.е. скорость обмена контроллера памяти с процессором будет ниже теоретической скорости 100 МГц х 64 бита. При этом, если контроллер памяти работает на два фронта - к примеру, его использует процессор для работы + некое устройство пишет в память данные, то все равно можно будет использовать всю достижимую пропускную способность памяти.
  25. Насколько мне известно, от платы никакой особенной поддержки не требуется. Единственно, чтоб использовать процы на полной скорости нужен клок 100 МГц - в противном случае EDK предложит несколько меньшие максимальных частоты шины и проца. Ну и интерфейсы к плисине нужны. Если выбрать что-нить стандартное, для чего в EDK найдется ipcore (ну UART например :) ), то проц можно завести очень быстро. А так к процу можно и любой интерфейсик прилепить, только разбираться чуть подольше придется.
×
×
  • Создать...