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

Amal

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Amal

  • День рождения 01.06.1975

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Спасибо. Я ориентировался на образец проектирования у Pong Chu - там он делит на два модуля , автомат состояния и выходная логика. Буду читать про иерархические модули.
  2. Спасибо за ответ. Тогда проистекает вопрос, если приращение счетчиков "загнать" в один процесс - будет ли эквивалентно? Т.e. s_sck1 <= SCK; process(CLK, RESET) begin if (rising_edge (CLK)) then if RESET = '1' then s_sck2 <= '1'; s_sck3 <= '1'; state <= IDLE; else s_sck2 <= s_sck1; s_sck3 <= s_sck2; state <= state_next; if (not s_sck2) and s_sck3 then fall_counter <= fall_counter + 1; end if; if s_sck2 and (not s_sck3) then rise_counter <= rise_counter + 1; end if; end if; end if; end process;
  3. Привет Всем! Есть модуль SPI со входным CLK = 40 МГц и шинами данных, запросов записи-чтения и прочим. Тактовая SPI не больше 1.5 МГц. Данные идут по 16 бит. Т.е. за один цикл обмена я, и получаю адрес внутреннего регистра и записываю/читаю данные 8-битного регистра. Поэтому у меня в машине состояния есть обращения в регистры по середине обмена (естественно на 40 МГц) и для этого есть подсчет сколько бит получено/ отправлено. Собственно, синтезатор ругается/информирует на сигналы выделения фронтов, спадов - он их посчитал тактовыми +---------------------+--------------+------+------+------------+-------------+ | Clock Net | Resource |Locked|Fanout|Net Skew(ns)|Max Delay(ns)| +---------------------+--------------+------+------+------------+-------------+ | s_CLK | Local| | 275 | 0.047 | 0.117 | +---------------------+--------------+------+------+------------+-------------+ |Inst_SPI_7v0/fall_ed | | | | | | | ge | Local| | 19 | 0.010 | 1.699 | +---------------------+--------------+------+------+------------+-------------+ |Inst_SPI_7v0/rise_ed | | | | | | | ge | Local| | 6 | 0.098 | 1.842 | +---------------------+--------------+------+------+------------+-------------+ s_sck1 <= SCK; process(CLK, RESET) begin if (rising_edge (CLK)) then if RESET = '1' then s_sck2 <= '1'; s_sck3 <= '1'; state <= IDLE; else s_sck2 <= s_sck1; s_sck3 <= s_sck2; state <= state_next; -- ....... fall_edge <= (not s_sck2) and s_sck3; rise_edge <= s_sck2 and (not s_sck3); end if; end if; end process; process (fall_edge, rise_edge, state) begin if state /= IDLE then if rising_edge (rise_edge) then rise_counter <= rise_counter + 1; end if; if rising_edge (fall_edge) then fall_counter <= fall_counter + 1; end if; else fall_counter <= (others => '0'); rise_counter <= (others => '0'); end if; end process; Регистры fall_counter и rise_counter сбрасываются в машине состояния по IDLE. Вопрос - что здесь не правильно?
  4. Получаются на одной DCM: CLKIN_IN = 20 МГц, 40 Мгц из CLK2X_OUT, а 80 Мгц из CLKFX_OUT. Вот к примеру вырезка из очередного отчета синтезатора: ========================================================================= Timing constraint: Default period analysis for Clock 'CLK' Clock period: 53.632ns (frequency: 18.646MHz) Total number of paths / destination ports: 48960 / 440 ------------------------------------------------------------------------- Delay: 13.408ns (Levels of Logic = 10) Source: Inst_SPI_3v1/state_FSM_FFd2_1 (FF) Destination: Inst_SPI_3v1/w_reg_1 (FF) Source Clock: CLK rising 4.0X Destination Clock: CLK rising 4.0X Data Path: Inst_SPI_3v1/state_FSM_FFd2_1 to Inst_SPI_3v1/w_reg_1 Gate Net Cell:in->out fanout Delay Delay Logical Name (Net Name) ---------------------------------------- ------------ FDR:C->Q 6 0.591 0.748 state_FSM_FFd2_1 (state_FSM_FFd2_1) LUT3_D:I1->LO 1 0.704 0.104 state_FSM_Out1211 (N45) LUT4:I3->O 14 0.704 1.004 adr_out_or00001 (data_out_receive<7:0>_not0000_inv) LUT4:I3->O 3 0.704 0.610 adr_out<1>LogicTrst1 (adr_out<1>) end scope: 'Inst_SPI_3v1' LUT3_D:I1->O 17 0.704 1.055 Inst_Control_unit_3v0/dec_out<8>21 (N20) LUT4_D:I3->LO 1 0.704 0.104 Inst_Control_unit_3v0/dec_out<8>_SW0 (N167) LUT4:I3->O 18 0.704 1.072 Inst_Control_unit_3v0/dec_out<8>_1 (Inst_Control_unit_3v0/dec_out<8>1) LUT4_D:I3->O 15 0.704 1.021 local_bus<0>LogicTrst1 (N19) LUT4:I3->O 1 0.704 0.455 s_from_CTRL_to_SPI_data<6>LogicTrst1 (s_from_CTRL_to_SPI_data<6>) begin scope: 'Inst_SPI_3v1' LUT3:I2->O 1 0.704 0.000 w_reg_next_6_mux0001111 (w_reg_next_6_mux000111) FDRS:D 0.308 w_reg_6 ---------------------------------------- Total 13.408ns (7.235ns logic, 6.173ns route) (54.0% logic, 46.0% route) На что обратить внимание (в плане оптимизации) в этом отчете? И кстати, вопрос - вот "тотальная" задержка 13.408 и как получили 53.632 ? Спасибо.
  5. Привет! Делаю маленький проект на SPARTAN-3E VHDL. Прием данных с АЦП - 40 MSPS по параллельной шине, поиск необходимого фрагмента (на большей частоте 80 МГц) и медленная пересылка данных в МК по SPI. А также управление по этой же SPI (прием по спаду - передача по фронту). Два тактовых: 40 МГц - АЦП (внешний) + часть блоков в ПЛИС 80 МГц - ФИФО+анализатор+управление+SPI Ввод тактового 20 МГЦ - > DCM -> умноженный на 2 и синтезированный 80 МГЦ. -> дает мин.период 32 МГц. Почему? А если один тактовый использовать без DCM (для проверки) дает мин. период 132 МГц. Констрейн только один NET "CLK" PERIOD = 20 MHz INPUT_JITTER 50 ps; Подскажите, как победить ?
  6. Загрузчик в ROM AT91RM9200

    А есть ли его исходники? Посмотреть (как обычно всё начинается :-) ) как организуются загрузки(из ПЗУ, УСБ,RS232). И вообще строение начальных загрузчиков АРМов
×
×
  • Создать...