Материал: Ковригин Теория автоматов Лабораторный практикум 2012

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Теоретические основы, основные этапы и подходы к проектированию

Пусть дано большое число N, состоящее из ||N|| разрядов, и число K. Необходимо проверить, делится ли N на K без остатка.

Если размерность N заранее не известна, и код числа последовательно поступает на анализирующее устройство, начиная со старших разрядов, то, при сравнительно небольших K, данная задача может быть эффективно решена при помощи ДКА (за количество тактов O(||N||), параллельно с поступлением кода на анализирующее устройство). Накладные временные расходы в этом случае составляют O(1), т.е. не зависят от размера N. При этом число состояний данного автомата не превышает K, а число переходов из каждого состояния не превышает M, где M – основание системы счисления, в которой задаются числа N и K.

Очевидно, что каждое состояние автомата, проверяющего делимость, соответствует остатку от деления старшей (уже проанализированной) части числа N на K. Такой автомат фактически реализует классический алгоритм поразрядного деления, начиная со старших разрядов. Число N делится на К, если автомат при анализе последнего разряда числа N переключится в состояние, соответствующее остатку от деления, равному 0. Если автомат находится в любом другом состоянии, то данное число N нацело на K не делится.

Синтез подобного автомата сводится к определению переходов из текущего состояния Si(t) в следующее состояние Sj(t+1) в зависимости от текущего анализируемого разряда числа Nk..

Условное графическое обозначение синтезируемого автомата приведено на рис. 5.1.

На вход DATA поступает число N со старших разрядов в заданном представлении. На вход READ поступает признак наличия корректных данных на входе DATA (0 – данные на входе DATA игнорируются, 1 – данные на входе DATA анализируются конечным автоматом). На вход CLOCK поступают синхроимпульсы. На вход RESET подается сигнал сброса конечного автомата в начальное состояние. На выходе RESULT формируется признак делимости числа N на К для текущего разряда N (1 – делится без остатка, 0 – не делится без остатка). При этом, так как разрядность числа заранее

56

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

DATA

 

 

state

 

READ

 

 

 

 

 

 

 

machine

 

 

 

 

 

RESULT

CLOCK

 

 

‘div by K’

 

 

 

 

 

 

RESET

 

 

 

 

 

 

 

 

 

Рис. 5.1. Условное графическое обозначение автомата проверки делимости на K

В случае если число K представимо в виде K = k1×k2×…×km, где ki – взаимно простые числа, то можно минимизировать количество состояний ДКА (D), разбив его на m отдельных ДКА (D1,…Dm), которые проверяют число N на делимость на ki, и комбинационную схему с m входами и одним выходом, реализующую логическую функцию И, на вход которой подаются выходы с Di. При этом суммарное количество состояний будет равно k1+k2+…+km, а количество переходов между состояниями не превышает M×(k1+k2+…+km), что, в общем случае, значительно меньше, чем количество состояний и переходов между ними в исходном конечном автомате (k1×k2×…×km и M×( k1×k2×…×km) соответственно). Например, для числа K=42 схема проверки делимости будет выглядеть так, как представлена на рис. 5.2. При этом суммарное количество состояний автоматов будет равно 12 = 7 + 3 + 2 вместо 42.

57

DATA

READ

CLOCK RESET DATA

READ

CLOCK

RESET DATA

READ

CLOCK RESET

state

 

 

 

 

machine

&

‘div by

7’

 

RESULT

state machine

‘div by 3’

state machine

‘div by 2’

Рис. 5.2. Схема проверки делимости числа на 42

В случае если число K представимо как K= k1×k2×…×km, где k1 = k2 = … = km, то для сокращения числа состояний конечного автомата можно воспользоваться следующим приемом: преобразовать конечный автомат в устройство, которое, помимо результата проверки делимости, возвращает и результат деления; соединить устройства последовательно, при этом сигнал корректности данных и результат делимости должны передаваться на очередной этап обработки с задержкой в один такт (задержка реализуется при помощи D-триггеров). На рис. 5.3 представлена схема проверки делимости числа на 25: результат целочисленного деления первой ступени в виде последовательного кода (выход DNEXT) подается на вход второго автомата.

Отметим, что количество состояний автомата для устройств, формирующих и не формирующих результат деления, одинаково;

58

результат деления формируется при выполнении переходов, т.е. зависит не только от текущего состояния, но и от предыдущего. Следовательно, при проектировании данного устройства, вопервых, надо описать дополнительно M×K условий формирования сигнала, т.е. возрастает сложность проектирования. Во-вторых, результат нужно сохранить в буферных регистрах (опция Registered, при указании типа выхода в FSM Editor), т.е. в данном автомате необходим один дополнительный элемент памяти.

 

 

DATA

 

 

 

 

 

 

RESULT

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

state

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

READ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

machine

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CLK

 

‘div by 5’

 

 

 

 

D

&

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R

DNEXT

D

 

 

state

 

 

 

 

 

 

machine

 

 

CLK

 

 

 

‘div by

5’

 

 

 

 

 

 

 

 

 

 

RESULT

 

 

 

 

 

 

 

R

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 5.3. Схема проверки делимости числа на 25

В случае если один из компонентов, на которые раскладывается K, является основанием системы счисления, в которой представлены числа (либо является степенью основания системы счисления), то целесообразно использовать внедрение проверки на делимость на этот компонент в принимающее состояние одного из ДКА для компонента разложения K на взаимно простые сомножители. В этом случае суммарное количество состояний автомата уменьшается на kM logM(kM), где kM – член разложения K на простые сомножители, являющийся степенью M. В этом случае, например, схема проверки делимости на 42 будет содержать 11 = 7 + (3 + 1) состояний вместо 42. Данная схема представлена на рис. 5.4.

59

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

 

DATA

 

 

 

 

 

 

 

 

 

 

 

state

 

 

 

 

 

 

 

 

 

 

 

 

READ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

machine

 

&

 

 

 

 

 

 

 

 

 

CLOCK

 

 

‘div by 7’

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RESULT

 

 

 

 

 

 

 

 

 

RESET

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DATA

 

 

 

 

 

 

 

 

 

 

state

 

 

 

 

 

 

 

 

 

 

 

READ

 

 

 

 

 

 

 

 

 

 

machine

 

 

 

 

 

 

 

 

 

 

 

 

CLOCK

 

‘div by 6

 

 

 

 

 

 

 

 

as (3*2)’

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RESET

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 5.4. Схема проверки делимости числа на 42 (оптимизированный вариант)

Пример

Постановка задачи. Спроектировать устройство, определяющее, делится ли нацело на 36 двоичный код большой размерности, поступающий последовательно со старших разрядов (число 0 также принимается устройством).

60

Источник: https://studfile.net/preview/16708773/