как создать clocksignal для моего fpga

Мой вопрос просто в том, что у меня есть часы с частотой 200 МГц на моей плате Xilinx sp605, и, поскольку мой дизайн может работать только на частоте 100 МГц, я хочу, чтобы входные часы были 100 МГц, поэтому для достижения этого: мне нужно просто записать значение часов в файл UCF. и это все, или мне нужно создать компонент VHDL, который занимает 200 МГц, и сделать его 100 МГц?

Вот файл mu ucf:

#  Spartan-6 SP605 Evaluation Platform
Net fpga_0_RS232_Uart_1_RX_pin LOC = H17  |IOSTANDARD=LVCMOS25;
Net fpga_0_RS232_Uart_1_TX_pin LOC = B21  |IOSTANDARD=LVCMOS25;
Net fpga_0_DIP_Switches_4Bit_GPIO_IO_pin<0> LOC=C18  |IOSTANDARD=LVCMOS25;
Net fpga_0_DIP_Switches_4Bit_GPIO_IO_pin<1> LOC=Y6  |IOSTANDARD=LVCMOS25;
Net fpga_0_DIP_Switches_4Bit_GPIO_IO_pin<2> LOC=W6  |IOSTANDARD=LVCMOS25;
Net fpga_0_DIP_Switches_4Bit_GPIO_IO_pin<3> LOC=E4  |IOSTANDARD=LVCMOS15;
NET LED<0> LOC = "D17"; ## 2 on DS3 LED
NET LED<1> LOC = "AB4"; ## 2 on DS4 LED
NET LED<2> LOC = "D21"; ## 2 on DS5 LED
NET LED<3> LOC = "W15"; ## 2 on DS6 LED
Net fpga_0_Ethernet_MAC_PHY_tx_clk_pin LOC=L20  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_rx_clk_pin LOC=P20  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_crs_pin LOC=N15  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_dv_pin LOC=T22  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_rx_data_pin<0> LOC=P19  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_rx_data_pin<1> LOC=Y22  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_rx_data_pin<2> LOC=Y21  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_rx_data_pin<3> LOC=W22  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_col_pin LOC=M16  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_rx_er_pin LOC=U20  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_rst_n_pin LOC=J22  |IOSTANDARD = LVCMOS25  |TIG;
Net fpga_0_Ethernet_MAC_PHY_tx_en_pin LOC=T8  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_tx_data_pin<0> LOC=U10  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_tx_data_pin<1> LOC=T10  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_tx_data_pin<2> LOC=AB8  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_tx_data_pin<3> LOC=AA8  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_MDC_pin LOC=R19  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_PHY_MDIO_pin LOC=V20  |IOSTANDARD = LVCMOS25;
Net fpga_0_Ethernet_MAC_MDINT_pin LOC=J20  |IOSTANDARD = LVCMOS25  |TIG;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<0> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<1> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<2> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<3> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<4> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<5> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<6> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<7> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<8> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<9> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<10> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<11> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_addr_pin<12> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_ba_pin<0> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_ba_pin<1> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_ba_pin<2> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_ras_n_pin IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_cas_n_pin IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_we_n_pin IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_cke_pin IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_clk_pin IOSTANDARD = DIFF_SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_clk_n_pin IOSTANDARD = DIFF_SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<0> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<1> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<2> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<3> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<4> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<5> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<6> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<7> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<8> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<9> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<10> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<11> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<12> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<13> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<14> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dq_pin<15> IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dqs_pin IOSTANDARD = DIFF_SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_dqs_n_pin IOSTANDARD = DIFF_SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_udqs_pin IOSTANDARD = DIFF_SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_udqs_n_pin IOSTANDARD = DIFF_SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_udm_pin IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_ldm_pin IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_odt_pin IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_mcbx_dram_ddr3_rst_pin IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_rzq_pin IOSTANDARD = SSTL15_II;
Net fpga_0_MCB_DDR3_zio_pin IOSTANDARD = SSTL15_II;
Net fpga_0_clk_1_sys_clk_p_pin TNM_NET = sys_clk_pin;
TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 200000 kHz;
Net fpga_0_clk_1_sys_clk_p_pin LOC = K21  |IOSTANDARD=LVDS_25  |DIFF_TERM = TRUE;
Net fpga_0_clk_1_sys_clk_n_pin LOC = K22  |IOSTANDARD=LVDS_25  |DIFF_TERM = TRUE;
Net fpga_0_rst_1_sys_rst_pin TIG;
Net fpga_0_rst_1_sys_rst_pin LOC = H8  |IOSTANDARD=LVCMOS15  |PULLUP  |TIG;

LOC K21 и k22 были взяты microblaze, и я не могу их использовать, проблема даже в документации, я не могу получить глобальные тактовые контакты и их частоту (кстати, я имею в виду эту документацию (аппаратный дизайн Xilinx), а также почему этот файл EDK ucf не содержит LOC контактов DDR3 ?? и кажется работать нормально , ​​fpga сам разбирается!?

Изменить: хорошо, вот это изображение из графического интерфейса плана, оно показывает все порты ввода-вывода в моем спартанском 6, теперь, как вы видите, все шестиугольные формы - это GCLK (глобальные часы), которые можно использовать в качестве часов для моего дизайна, проблема в том, что я не знаю, какова частота каждого из этих часов!! введите здесь описание изображения


person Omar shaaban    schedule 09.06.2013    source источник
comment
В этом документе SP605 Master UCF показывает все контакты DDR3 с именами MEM1_* и их LOC.   -  person Joachim Isaksson    schedule 10.06.2013
comment
хм, так это была ошибка, что edk создал файл ucf без контактов ddr3, но опять же, как получить контакты глобальных часов и их частоты   -  person Omar shaaban    schedule 10.06.2013
comment
@Omarshaaban - что вы имеете в виду, проблема в том, что я не знаю, какова частота каждого из этих часов !!? Посмотрите на схему платы и посмотрите, что там подключено. Согласно руководству пользователя на плате есть несколько тактовых сетей. Два идут либо к осциллятору, либо к сокету для осциллятора (не стесняйтесь сбрасывать в сокет все, что хотите). В противном случае у вас есть разъемы SMA. Еще раз: xilinx.com/support/documentation/boards_and_kits/ug526.pdf. стр. 28.   -  person Doov    schedule 10.06.2013


Ответы (2)


Вы не должны писать свой собственный делитель часов. Вы должны использовать внутренний DCM, который может на самом деле маршрутизироваться к глобальной сети часов. Проще всего это сделать с помощью инструментов coregen, которые позволяют использовать шаблон для создания экземпляра DCM. Вы можете делить, умножать, сдвигать фазу и т. д. ваш тактовый сигнал практически на что угодно в пределах разумного. Подробнее см. в техническом описании. Если вы просто разделите часы (скажем, с помощью триггера), то у вас будет действительно плохой перекос часов и, вероятно (почти гарантированно), возникнут серьезные проблемы с синхронизацией. Вы хотите воспользоваться сетью маршрутизации часов fpga.

person Doov    schedule 10.06.2013
comment
Может ли DCM опускаться до диапазона 100 кГц? Честный вопрос, никогда не проверял. РЕДАКТИРОВАТЬ: О, вопрос был отредактирован до 100 МГц, так что теперь это скорее академический вопрос :) - person Joachim Isaksson; 10.06.2013
comment
ВСЕ, что я хочу знать, это расположение глобальных выводов и их частота ... вот и все, документация по ресурсам тактирования ничего об этом не говорит, это все теоретические разговоры ..... - person Omar shaaban; 10.06.2013
comment
@Omarshaaban На странице 28 pdf, на который я дал ссылку в своем ответе, есть информация на каких контактах какие часы на этой плате. - person Joachim Isaksson; 10.06.2013
comment
@Joachim Isaksson правда, это 3 доступных входных тактовых сигнала, но я хотел расположение и частоту контактов глобальных тактовых сигналов, Spartan 6 имеет 16 глобальных часов, которые можно использовать и настраивать на частоту clk, я думаю ...... я вижу большинство из них используют графический интерфейс планирования, но я все еще изучаю, как их использовать - person Omar shaaban; 10.06.2013

Вам придется написать предварительный делитель, чтобы разделить тактовую частоту на 2. (или, возможно, 2000, поскольку частота тактовой частоты SP605 составляет 200 МГц, а не 200 кГц)

Значение в файле UCF только сообщает ISE частоту ваших существующих внешних часов, оно не генерирует эту частоту для вас автоматически.

person Joachim Isaksson    schedule 09.06.2013
comment
так что использование временных ограничений и выбор частоты ничего не делают .... хм странно, так как у меня только часы 1200 кГц - person Omar shaaban; 09.06.2013
comment
@Omarshaaban Кажется, на SP605 есть несколько вариантов синхронизации, я не эксперт по этой плате, поэтому вам, вероятно, лучше ознакомиться с главой 7 это руководство. Кажется, есть возможность поместить свой собственный источник часов в сокет. - person Joachim Isaksson; 09.06.2013
comment
На самом деле кажется, что когда я ввожу файл ucf вручную или использую ограничение по времени, мне нужны часы с частотой 10 МГц, например, это заставит одну из глобальных линий часов производить эту частоту, это правда? Кстати, по поиску я знал, что k21 и k22 - это LOC OF 200mhz Clock, но в руководстве вообще ничего не сказано, я имею в виду, как это называется руководством, когда оно даже не говорит вам местоположение ваших часов? - person Omar shaaban; 09.06.2013
comment
Нет - когда вы устанавливаете тактовую частоту в UCF, вы сообщаете инструментам, что это частота, которую ВЫ будете поставлять; инструменты просто следят за тем, чтобы дизайн был достаточно быстрым для этой скорости (или сообщают, что не могут). Вы должны сгенерировать правильные часы. Существуют такие блоки, как DCM (Digital Clock Manager), которые вы можете использовать для преобразования, например, из От 200 МГц до 100 МГц (не знаю насчет кГц!) - person user_1818839; 10.06.2013
comment
Брайан Драммонд прав. Почему вы используете SP605 для чего-то, что работает на частоте 100 кГц? Что так медленно работает? Я предполагаю, что вы либо имеете в виду МГц, либо вам следует использовать более быстрые часы (DCM, по крайней мере, на spartan 3 может работать с минимальной частотой в несколько МГц) с логикой включения. Руководство пользователя: xilinx.com/support/documentation/boards_and_kits/ug526.pdf содержит всю информацию, о которой вы спрашиваете, включая источники тактовых импульсов и расположение выводов на FPGA. Страница 29 под заголовком Генерация часов. Для получения информации об ограничениях вы должны прочитать руководство по ограничениям. - person Doov; 10.06.2013
comment
извините, это была большая ошибка, я имею в виду, что 200 МГц исправил это, но не отображал на веб-сайте (я думаю, у меня было плохое соединение) в любом случае я обновил свой пост, я ищу, как узнать, каковы имена моих глобальных часов и их частота, а также чтобы узнать, как microblaze использует DDR3, когда расположение выводов ddr3 не указано в файле ucf - person Omar shaaban; 10.06.2013
comment
Просто в моем проекте у меня есть свой собственный код vhdl, а также я использую microblaze, теперь я реализовал свой код vhdl рядом с microblaze в том же верхнем файле vhdl, теперь ввод часов microblaze осуществляется непосредственно с вывода генератора, который является тактовой частотой 200 МГц, и для мой код vhdl мне нужны часы 100 МГц, так как из моего 1 тактового генератора я могу генерировать различные тактовые сигналы с разными частотами? - person Omar shaaban; 11.06.2013