daemonDX
Свой-
Постов
42 -
Зарегистрирован
-
Посещение
Весь контент daemonDX
-
С 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.
-
Поставил 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 :)
-
ISE 9.1i на Windows XP Pro x64
daemonDX опубликовал тема в Среды разработки - обсуждаем САПРы
Доброго дня, электрониксы ! Проект для 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 связывался ? -
ISE ucf + IOSTANDARD
daemonDX ответил masics тема в Среды разработки - обсуждаем САПРы
Сам не пробовал (мне хватает ISE XST), но этот метод предположительно применителен к любому синтезу, поддерживающему атрибуты Verilog. Атрибуты - часть стандарта Verilog, а не расширение Xilinx. -
ISE ucf + IOSTANDARD
daemonDX ответил masics тема в Среды разработки - обсуждаем САПРы
При использовании 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 ); -
Попробуйте при подключении компонента в port map использовать open, т.е. : <выход> => open,
-
Очень советую посмотреть в сторону Xilinx PlanAhead, если уж решили помочь placer'y. По-моему, там все гораздо удобнее.
-
Itch, вы бы разобрались с присвоениями. В коде в одном синхронном процессе намешаны blocking (<=) и non-blocking (=) присвоения сигналов. Если пока не разбираетесь, что синтез нагенерит на non-blocking в синхронном процессе, то ограничтесь блокирующими (<=). Сюрпризов будет меньше :). Ну и мысли вслух :) . Уж коли триггеров с Z-состояниями вроде бы пока нет, и синтез поставит латч/триггер с тристабильным буфером по выходу, то лучше так и описать - как триггер, выход которого через assign вне процесса назначается по некоторому условию в Z.
-
sazh, вы правильно подметили, инициализация в Xilinx реализуется с помощью прозрачной для пользователя XST замены конструкции на атрибут INIT. Собственно, именно это и написано в приведенном куске User Guide :) . При моделировании в ModelSim поведенческая модель и генерируемая XST cтруктурная модель с временными характеристиками в отношении инициализации регистров ведут себя одинаково. Т.е. при использовании связки ISE(XST) + ModelSim у меня заковык с инициализацией не возникало. С CPLD не работал, поэтому определенно сказать не могу. Предполагаю, что если у примитивов CPLD есть атрибуты INIT, то велика вероятность, что и для CPLD подобный подход сработает.
-
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 не знаю. Так что наверное в доках по среде нужно выяснить, а не "Наверно так не стоит делать на верилоге".
-
В Xilinx ISE при объявлении регистра : reg [ 7 : 0 ] cnt = 8'd15;
-
Попробуйте так: 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 не работают.
-
Инлайн Груп, дистрибютор Xilinx в России проводит курсы. Подробности на http://www.plis.ru/page.php?id=45
-
Страница 13, DS001-3 (v2.7) September 3, 2003 Period Tolerance: the allowed input clock period change in nanoseconds. "Толерантность периода: допустимое измненение периода входного клока в наносекундах". Это показатель допустимой нестабильности периода опорного клока.
-
А вы уверены, что код выдает нарисованные вами сигналы ? 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-клок. И пора бы уже научиться кодами форума пользоваться, а то код смотреть неудобно.
-
Ну вот и определились с 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)
-
Сорри, совсем VHDL забыл. :) Теперь поподробнее про длительность set. Его длительность равна периоду Clk (т.е. в последовательности ...01010101... длине 01)? Или половине периода (т.е. в последовательности 01010101 длине 0, или длине 1)? Относительно clk - set синхронный сигнал, или полностью асинхронный (т.е. можно ли его анализировать по переходу сигнала clk из 0 в 1, или из 1 в 0) ?
-
Код 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;
-
Попробуйте поставить в заголовке каждого .v файла директиву `default_nettype none , запрещающую подстановку цепей 'по умолчанию', т.е. запрещает компилятору самому создавать определения wire, если таковое не указано пользователем. Возможно, поможет.
-
error
daemonDX ответил sumerik тема в Языки проектирования на ПЛИС (FPGA)
Предполагая, что 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, либо вне его. -
to andrew_b: а у меня на верхнем уровне код состоит только из подключений модулей, т.е. является шаблоном для работы с отдельно взятой серией плат, там загромождать особо нечего :). Сам проектированием PCB не занят, работаю с готовыми, причем стандартно на платах стоит 2 кристалла, один для общения с компом, а другой - "рабочий". Смена пина в "рабочем" обычно требует не только перекомпиляции проекта, но и серьезного общения с теми, из-за кого эта смена произошла, так как обычно только сменой пина это не обходится :). Ну и плюс дискуссия ведется по поводу наиболее простого и удобного способа "Как сделать по умолчанию в SPARTAN3 все выходные сигналы LVTTL", а не по поводу "как я считаю нужным проектировать" :)
-
Скорректируйте систему генерации верхнего уровня (либо создайте дополнительно скрипт/программу на 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
-
Т.е. нужна ПЛИС с поддержкой LVDS18 - это 1.8 вольта, да ? Если да, то это существенно ограничивает возможные ПЛИС. Собственно, у Xilinx такового нет ни у Spartan-3, ни у Virtex2, ни у Virtex4. Насчет Altera Cyclon2 точно сказать не могу, но на первый взгляд и у этого семейства поддержка только LVDS25 (поправьте, если эти данные неверны). Вообще, зайдите на www.altera.com, www.xilinx.com или другого производителя микросхем программируемой логики - там все на английском, ознакомитесь с возможностями CPLD/FPGA, определитесь, что вам нужно.
-
Power PC-405
daemonDX ответил axalay тема в Работаем с ПЛИС, области применения, выбор
Отнюдь :) . Процессор в Virtex-II Pro запускается на частоте до 400 МГц (speed grade -6 - 350 МГц, speed grade -7 - 400 МГц). Но ему для этого счастья нужно завести 100 МГц генератор тактовой частоты. На 350 заводил. Если завести PLB на 100 МГц , то контроллер памяти сможет передавать данные на частоте 100 МГц. При общении по этой шине возникнут потери пропускной способности за счет организации протокола шины. Т.е. скорость обмена контроллера памяти с процессором будет ниже теоретической скорости 100 МГц х 64 бита. При этом, если контроллер памяти работает на два фронта - к примеру, его использует процессор для работы + некое устройство пишет в память данные, то все равно можно будет использовать всю достижимую пропускную способность памяти. -
Virtex2PRO
daemonDX ответил axalay тема в Работаем с ПЛИС, области применения, выбор
Насколько мне известно, от платы никакой особенной поддержки не требуется. Единственно, чтоб использовать процы на полной скорости нужен клок 100 МГц - в противном случае EDK предложит несколько меньшие максимальных частоты шины и проца. Ну и интерфейсы к плисине нужны. Если выбрать что-нить стандартное, для чего в EDK найдется ipcore (ну UART например :) ), то проц можно завести очень быстро. А так к процу можно и любой интерфейсик прилепить, только разбираться чуть подольше придется.