Teres-1t.ru

Инженерные решения
18 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Делитель частоты — Frequency divider

Делитель частоты — Frequency divider

Делитель частоты , также называется делителем тактовой частоты или пересчеткой или предделителем , является схемой , которая принимает входной сигнал с частотой , и формирует выходной сигнал частоты: ж я п < displaystyle f_ >

где — целое число. Фазовой автоподстройки частоты синтезаторы частоты делают использование делителей частоты , чтобы генерировать частоту , которая является кратным опорной частоты. Делители частоты могут быть реализованы как для аналоговых, так и для цифровых приложений. п

The 1-bit shift register with generic depth

Let’s first have a look at different methods of creating a one-bit shift register. The input and output of this shift register is a single bit, a std_logic value. The depth is configurable through a generic constant.

We will use the entity declaration shown below for all of the following examples involving one-bit shift registers. To keep it simple, we’re going to use the same entity for multiple architectures, even though the rst and enable inputs are unused by some of them.

The three implementations that follow will synthesize into the same logic. These are the resources consumed for Xilinx, Intel (Altera), and Lattice FPGAs with the sr_depth generic set to 128.

  • Xilinx Vivado (Zynq): 4 LUTs (LUTRAM) + 2 FFs
  • Intel Quartus II (Cyclone V): 11 ALMs + 1 BRAM
  • Lattice IceCube2 (iCE40): 128 FFs

Even though the shift register should require 128 flip-flops (FFs), we see that the resource usage reported by Vivado and Quartus is far less. Instead of using expensive FFs, the synthesis tools have used special built-in features of the logic blocks.

Lookup tables (LUTs) used in such a way are counted as “LUTRAM” in the Vivado resource usage report. In the Intel FPGA, adaptive logic modules (ALMs) and one block RAM (BRAM) is used instead of flip-flops. Intel uses a technology that they call ALTSHIFT_TAPS for implementing RAM-based shift registers.

The Lattice iCE40 FPGA, which I used in this example, doesn’t have an alternative option for packing 1-bit shift register, so it’s implemented entirely in 128 FFs. However, we shall see later in this article that the Lattice device can pack wider shift registers into block RAM.

Читайте так же:
Счетчик топлива vzo 4 oem

Slicing the vector

The most straightforward way to create a shift register is to use vector slicing. Insert the new element at one end of the vector, while simultaneously shifting all of the others one place closer to the output side. Put the code in a clocked process and tap the last bit in the vector, and you have your shift register.

Using a for-loop

Just like vector slicing, the for-loop also works in all revisions of the VHDL language. This approach requires an additional line of code to assign the input to the vector. Remember that every iteration of the for-loop is executed in zero time in RTL code because there’s no wait-statement inside of it. Therefore, this code is logically equivalent to the previous example.

Using the shift_left function

While the previous examples work for vectors as well as arrays of any kind, using the shift_left function only works with bit vectors. The definition of the shift_left function and it’s complementary shift_right function appears in the ieee.numeric_std package. It requires an unsigned vector as the first parameter, and that’s why it’s not suitable for arrays of arbitrary data types.

Enable input

ilinx FDCE-flip-flop

Most FPGA architectures have flip-flops with an optional enable (E) or clock enable (CE) input. This functionality can’t be utilized by any other logic when you are using it for the shift register. Thus, the additional enable input won’t consume extra resources.

Wrap the code that’s responsible for shifting with an if enable = ‘1’ then statement. Then, input and output from the shift register will still occur on the rising edge of the clock, but only when the enable input is asserted.

Читайте так же:
Сертификат соответствия счетчики норма

The code below shows the previous example with the enable input added to the implementation.

3. RTL описание

Для описания комплексных чисел будет использоваться пользовательский тип t_iq, который объявлен в пакете pkg_rtl_modem_types и включает в себя два поля: i и q типа signed. VHDL 2008 позволяет объявлять данные поля без ограничений.

Листинг 1 – Объявление типа t_iq

Объявим интерфейс комплексного умножителя:

Листинг 2 – Интерфейс комплексного умножителя

Порт iCLK – сигнал тактирования модуля, iV– сигнал валидности входных данных, iAи iB– входные комплексные числа, oV– валидность выходных данных, oC– результат умножения.

Параметры g_a_dwи g_b_dwзадают разрядность соответствующих входов Aи B. Параметр g_typeопределяет, какая из схем умножения будет реализована: 1 – «схема 1», 2 – «схема 2».

Объявим сигналы для приема данных с входных и выдачи данных на выходные порты:

Листинг 3 – Описание основных сигналов

Сигнал pipe_v предназначен для задержки сигнала валидности со входа на выход, длина конвейера при этом определяется латентностью схемы (напомним, у обеих реализация умножителя она равна четырем).

Разрядность выходных данных определяется операциями умножения и сложения. Тело основного процесса, реализующего умножитель по «схеме 1» имеет вид:

Листинг 4 – Исходный код основного процесса «Схемы 1»

По сути, в теле описаны преобразования всех триггеров, представленных на рисунке 3. Аналогичным образом описывается «схема 2»:

Листинг 5 – Исходный код основного процесса «Схемы 2»

Предопределенные подтипы integer

Подтип данного типа ограничивает диапазон типа. Как показано на рисунке 2, " integer " имеет два предопределенных подтипа:

Значение integer’high представляет наибольшее значение целого числа. Подтип “ natural ” (натуральный) создает сигнал, который может принимать все неотрицательные целые числа (т.е. 0, 1, 2, 3, . ), а подтип “ positive ” (положительный) создает сигнал, который может принимать все положительные целые числа (1, 2, 3, . ). Хотя эта реализация последовательна в контексте VHDL, имейте в виду, что математическое сообщество не соглашается с тем, включен ли ноль в набор натуральных чисел.

Читайте так же:
Как сделать ввод мимо счетчика

Следует аккуратно, придерживая плату рукой, подключить кабель питания (USB-blaster, поставляется в комплекте) к слоту USB 2.0 ПЭВМ и к USB Blaster Port выходу платы (см. рис. 2). Далее необходимо нажать кнопку включения Power ON/OFFSwitch (см. рис. 2). Характерным признаком того, что плата включилась корректно, является мигание диодов и семисегментных индикаторов. В случае, если этого не произошло, следует попробовать перезагрузить плату и, в случае повторного возникновения неисправности, обратиться к техническим специалистам.

Чтобы сменить прошивку платы на необходимую со стороны ПЭВМ необходимо свободно распространяемое программное обеспечение Quartus II и программное обеспечение «RC5 VHDL», разработанное в рамках данного программно-аппаратного комплекса. Открыв «RC5 VHDL» в Quartus II штатными средствами ПЭВМ, следует произвести следующие действия:

  • Зайти в меню «Tools»;
  • Выбрать пункт меню «Programmer»;
  • В появившемся диалоговом окне нажать кнопку «Hardware Setup»;
  • В появившемся диалоговом окне выбрать пункт «USB Blaster»;
  • Нажать кнопку «Close»;
  • Нажать кнопку «Start».

Для использования изделия необходимо подключить USB-COM переходник к ПЭВМ и плате соответственно. На плате следует пользоваться слотом RS-232 Serial Port (см. рис. 2). На ПЭВМ – любым из доступных USB-портов. Взаимодействие платы с ЭВМ осуществляется при помощи последовательного порта. Программа осуществляет открытие и настройку COM-порта. Так же она обеспечивает пересылку и прием сообщений средствами COM-порта.

Передача большее → меньшее

Диод, замыкающий сигнал на линию питания

Простейший вариант, при котором вся схема сопряжения сводится до одного резистора.

Например, мы используем микросхему которая питается от 3.3В, а снаружи приходит 5 вольт. В одном из моих недавних проектов я использовал микросхему приёмника интерфейса RS-423, у которой на выходе было напряжение 5 вольт, и мне нужно было подключить её к МК STM32, который питается от 3.3В. Минимальное напряжение питания приёмника составляло 4.5 вольта, так что я не мог запитать её от тех же 3.3В.

Внутри STM32 около каждого вывода стоят защитные «диодные вилки» — последовательно включенные диоды (часто это диоды Шоттки), которые предохраняют пин от напряжений выше Vcc и ниже GND.

Читайте так же:
Боксы встраиваемые под счетчик

protection_diodes

При попадании 5В на такой 3.3В вход, верхний диод открывается, пропуская ток с пина на Vcc, при этом на диоде падает напряжение порядка 0.3В.

Этот диод довольно слаб, в даташите даже не приводятся его параметры. Если вы попытаетесь подавать на вход больше 3.6В в течение даже небольшого времени — диод сгорит, ваши 5 вольт попадут дальше в схему и в итоге сгорит всё.

Однако можно обеспечить этому диоду гораздо более мягкие условия, и таким образом использовать его как элемент нашей схемы конвертера уровня. Для этого достаточно просто поставить резистор последовательно с входной цепью. Номинал не очень важен, но можно начать с 4.7кОм.

conv_res-diodes

Теперь в первый момент времени на вход попадают 5 вольт, спустя несколько десятков микросекунд диод открывается и даёт этому высокому напряжению стечь в цепь Vcc. Ток мог бы очень сильно вырасти, но ему мешает резистор, который ограничивает ток всего до каких-то полутора миллиампер. Конечно, в таком режиме диод может работать неограниченно долго.

Таким образом, для ввода большего напряжения в цепь меньшего — убедитесь что в приёмнике стоят защитные диоды, и просто поставьте последовательно резистор в 1кОм.

conv_limiting-res

Если же этих диодов нет — поставьте снаружи свой.

conv_external-diodes

Расчёт сопротивления резистора можно провести, если знать предельный ток защитных диодов. Они представляют собой обычные интегральные диоды, значит что ток через них вряд ли может превышать 1мА. В даташитах очень редко приводят этот параметр, но можно найти значения порядка 0.5-1мА.

Также нам нужно вычислить напряжение, которое должно падать на резисторе: приходит 5 вольт, должно остаться 3.3В, минус падение напряжения на диоде 0.3В, итого 1.4В. Исходя из этого, номинал токоограничивающего резистора составит 1.4В / 0.5мА = 2.8кОм. Чтобы гарантированно остаться в щадящем режиме, возьмём резистор побольше: например 3.3кОм или 4.7кОм.

Резисторный делитель

Тоже часто используемый вариант, в котором высокое напряжение делится на делителе, рассчитанном так чтобы получить напряжение низковольтной части. Большая точность подбора номиналов не нужна: более высокое напряжение уйдёт в защитный диод (но номиналы резисторов не дадут ему пробиться), а более низкое по-прежнему будет детектироваться входной цепью.

Читайте так же:
Какой счетчик для сада

conv_divider

Стабилитрон

Ещё одна простая схема, в которой напряжение ограничивает стабилитрон. Возьмите стабилитрон на 3.3 вольта, например BZX84C3V3. Точность подбора ограничивающего напряжения опять же неважна, можете взять стабилитрон на 3 вольта, если они окажутся доступнее. Токоограничивающий резистор — любой, номиналом от 1 до 10 кОм.

conv_zener

Три диода последовательно

Три стандартных кремниевых диода последовательно дадут падение напряжения 0.6 В * 3 = 1.8 В. Таким образом, с 5 вольт напряжение упадёт до 3.2.

conv_3-diodes

Экзотический вариант, в промышленной электронике я такого не видел.

MII- Media Independent Interface.

pic2

MII (Media Independent Interface — независящий от среды передачи интерфейс) — стандартизованный интерфейс для подключения MAC-блока сети Fast Ethernet к блоку PHY. Интерфейс MII может быть выведен на разъём для подключения внешнего приемопередатчика или может просто соединять две микросхемы на одной печатной плате. Независимость от среды передачи означает, что существует возможность использования любых PHY-устройств без необходимости смены или переработки аппаратуры MAC-блока. Интерфейс MII состоит из двух частей: канала приема-передачи данных (MII) и служебного канала управления (MDIO и MDC). Все операции интерфейса MII выполняются в синхронном режиме.

Алгоритм Евклида – эффективный метод нахождения наибольшего общего делителя двух чисел. Это самый старый алгоритм, который делит большее число на меньшее и берет остаток. Опять же, он делит меньшее число от остатка, и этот алгоритм непрерывно делит число, пока остаток не станет 0.

Например, предположим, что мы хотим вычислить HCF двух чисел, 60 и 48. Затем мы делим 60 на 48; он возвращает остаток 12. Теперь мы снова делим число 24 на 12, а затем он возвращает остаток 0. Таким образом, мы получаем HCF равным 12.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector