![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Программные средства foundation Другим простым примером конечного автомата является автомат, считающий число единиц . Задача формулируется так: Построить тактируемый синхронный конечный автомат с двумя входами X и Y и одним выходом Z. Выходной сигнал должен равняться 1, если число единиц, поступивших на входы X и Y с момента запуска, кратно 4; в противном случае сигнал Z должен равняться 0. В табл. 7.12 имеется составленная нами для этого автомата таблица состояний. Однако мы воспользуемся возможностями счета, предоставляемыми пакетом IEEE std logic arith, и напишем VHDL-профамму для такого автомата непосредственно. Как всегда существует много способов решить эту проблему. Наше решение представлено в табл. 9.17. Мы выбраяи такой способ, который позволяет проиллюстрировать несколько различных особенностей языка. Внутри архитектуры объявлен подтип COUNTER для двухразрядных величин типа UNSIGNED. Подсчитываемое число единиц хранится в сигнале COUNT этого подтипа, а постоянная ZERO . ПГ.П-ГНПЯ нл/жня ппя инициализации и поовевкилн&ения COUNT. Табл. 9.16. Упрощенный подход к построению рассматриваемого конечного автомата средствами VHDL architecture saiexampa arch of smexamp is type Sreg type is (INIT, LOOKING. OK); signal Sreg: Sreg type; signal lastA: STD LOGIC; begin process (CLOCK) - state-machine states and transitions begin if CLOCKevent and CLOCK = Ч then lastA <- A; case Sreg is when INIT => Sreg <= LOOKING; when LOOKING => if A=lastA then Sreg <= OK; else Sreg <= LOOKING; end if; when OK => If B=l then Sreg <= OK; elsif A=lastA then Sreg <= OK; else Sreg <= LOOKING; end if; when others => Sreg <= INIT; end case; end if; end process; with Sreg select - output values based on state Z <= 4 when OK, 0 when others; end s2Eexampa arch; 9.2. Примеры проектирования на языке VHDL 947 Табл. 9.17. VHDL-программа для автомата, считающего число единиц library IEEE; use IEEE.std logic 1164.all; use IEEE.std Iogic arit3i.all; entity Vonescnt is port ( CLOCK, RESET, X, Y: in STD.LOGIC; Z: out STD.LOGIC ); end; architecture Vonescnt arch of Vonescnt is subtype COUNTER is MSIGNED (1 downto 0); signal С01ЖГ: COUNTER; constant ZERO: COUNTER ;= 00 ; begin process (CLOCK) begin if CLOCKevent and CLOCK = 1 then if RESET =4 then COUIIT <= ZERO; else COUNT <- COUNT + (0, X) + (0, X); end if; end if; end process; 2 <= 1 when COUNT = ZERO else 0; end Vonescnt arch; В процессе применен обычный метод обнаружения нарастающего фронта сигнала CLOCK. Предложением if выполняется синхронный сброс, а предложением else осуществляется простое добавление 0,1 или 2 к содержимому COUNT, в зависимости от значений X и Y. Напомним, что выражение вида (С, X) - это массив-литерал; он образован здесь двумя элементами типа std logic: нулем О и текущим значением X. Тип этого литерала совместим с типом UNSIGNED, поскольку число элементов у них и их тип одинаковы; поэтому их можно объединить операцией + , определенной в пакете std logic arith. Параллельный сигнальный оператор присваивания, расположенный вне процесса, вырабатывает 1 на выходе типа Мура Z, когда значение COUNT равно 0. С точки зрения синтеза оператор i f и оператор присваивания значения сигналу COUNT не обязательно порождают компактную и быстродействующую схему. В случае простых средств синтеза это могут быть два 2-разрядных сумматора, соединенные последовательно. В табл. 9.18 показан другой подход, при котором умные средства оказываются способными синтезировать более компактную схему инкрементирования для каждого из двух сложений. В любом случае, представление в виде альтернатив оператора case позволяет двум сумматорам или схемам инкрементирования работать параллельно, а для переключения на один из выходов в соответствии с выбираемой альтернативой можно воспользоваться мультиплексором. 948 Глава 9. Примеры проектирования последовательностных схем Табл. 9.18. Другой вариант процесса для автомата, считающего число единиц process (CLOCK) variable ONES: STD LDGIC VECTOR (1 to 2); begin if CLOCKevent aad CLOCK =4 then 0.4ES := (X, У); If RESET = -1 then СОШГГ ZERO; else case ONES is when 01 I 10 => COUNT COUNT + 01 ; when 11 => COUNT <= COUNT + 10 ; when others => null; end case; end if; end if; end process; Наш последний пример в этом разделе - конечный автомат, управляющий кодовым замком, из параграфа 7.4 (ниже выход HINT, имевшийся в исходном варианте, опущен): Построить тактируемый синхронный конечный автомат с одним входом X и одним выходом UNLK. Сигнал на выходе UNLK должен принимать значение 1 тогда и только тогда, когда X равно О и последовательность значений входного сигнала X на семи предшествующих тактах имела вид: 0110111. В табл. 7.14 приведена составленная нами таблица состояний. Но мы снова применим другой, более наглядный подход. Примем во внимание, что в данном случае сигнал на выходе автомата в любой момент времени полностью определяется значениями его входного сигнала на последних восьми тактах. Поэтому при проектировании этого автомата можно использовать так называемый принцип конечной памяти (см. помещенное в рамку замечание в конце раздела 9.1.2). В соответствии с этим принципом мы в явном виде отслеживаем семь последних значений входного сигнала и вырабатываем выходной сигнал как комбинационную функцию этих значений. В табл. 9.19 приведена VHDL-прОфамма, реализующая этот принцип. Архитектура содержит процесс, осуществляющий слежение за семью последними значениями X с помощью конструкции, являющейся, по существу, регистром сдвига, в котором бит на позиции с номером 7 представляет собой самое старое значение X. (Напомним, что оператор & в языке VHDL выполняет конкатенацию массивов.) Расположенный вне процесса параллельный сигнальный оператор присваивания вырабатывает 1 на выходе типа Мили UNLK, когда х равен О, а семь предыдущих битов согласуются с ожидаемой комбинацией. ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |