![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Программные средства foundation оставлено таким же, как и в табл. 6.17. В архитектуре объявлены два компонента: rolrie и fixup, для которых используются наши предыдущие определения объектов. Обращение к этим компонентам происходит в части программы, содержащей исполняемые операторы. Там же имеется несколько операторов присваивания, которые вырабатывают необходимые управляющие сигналы (то есть реализуют дополнительную логику , указанную на рис. 6.14). Табл. 6.22. Структурная VHDL-архитектура устройства быстрого сдвига с 6-ю режимами работы architecture barrel16 struc of barrelie is component rolrl6 port ( DIK: in STD L0GIC VECTQR(15 downto 0); - Data inputs S: in raSIGSEDO downto 0); - Shift a.-Bount, 0-15 DIR: in STD.LOGIC; - Shift direction, 0=>L, 1=>R DOUT: out STD.LOGIC.VECTORClS dosnto 0) - Data bus output ); end component; component fixup port ( DIN: in STD.LOGIC.VECTOR(IS downto 0); - Data inputs s; in USSIGKED(3 downto 0); - Shift aaount, 0-15 FE.N: in STD.LOGIC; - Fixup enable FDAT: in STD.LOGIC; Fixup data DOUT: out STD.LOGIC.VECTORClS downto 0) - Data bus output ); end component; signal DIR.RIGHT, FIX.RIGHT, FIX RIGHT.DAT, FIX.LEFT, FIX.LEFT.DAT: STD.LOGIC; signal ROUT, FOUT, RFIXIN, RFIXOOT; STD.LOGIC.VECTORClS downto 0); begin DIR.RIGHT <= 1 when С = Rrotate or С = Rlogical or С Rarith else 0; .IX.LEfT <= when DIR.EIGHT=0 and (C = Llogical or С = Larith) else 0; FIX.RIGHT <= 1 when DIR..RIGHT= 1 and <C = Rlogical or С = Rarith) else 0; FIX.LEFT.DAT <= DIK(O) when С = Larith else 0; FIX.EIGHT.DAT <- DIKCiS) when C = Rarith else 0; У1; rolrie port шар (DIM, S, DIR.RIGHT, ROUT); U2: fixup port map (ROLIT, S, FIX.LEFT, FIX.LEFT.DAT, FOUT); U3: for i in 0 to IS generate RFIXISCi) <= FDUT(15-i); end generate; U4: fixup port map CRFIXIK, S, FIX.RIGHT, FIX.RIGHT.DAT, RFTXOUT); U5: for i in 0 to 15 generate DOLT(i) <= RFIXOLT(lS-i) ; end generate; end barrelle.struc; Например, первый оператор присваивания устанавливает единичное значение сигнала DIR right, когда значением с задается один из сдвигов вправо. При логических и арифметических сдвигах влево и вправо вырабатываются сигналы разрешения для схем коррекции fix left и fix right. Значениям корректирующих битов присвоены имена fix left dat и fix right dat. Хотя все операторы в этой архитектуре выполняются одновременно, для удобства чтения они перечислены в табл. 6.22 в порядке фактического потока данных. Сначала вызвается компонент rolrl б для выполнения основного циклического сдвига влево или вправо. Результат этого сдвига подается на вход первого компонента fixup (U2) для осуществления коррекции битов при логическом и арифметическом сдвигах влево. Затем следует оператор generate (U3), который изме- СТИЛЬ УПРЯТЫВАНИЯ ИНФОРМАЦИИ Зная, как кодрфуется управляющий сигнал С, вы, возможно, захотите написать первый оператор присваивания в табл. 6.22 в виде DIR RIGHT<=C (0), что гарантировало бы более эффективную реализащпо схемы, которая вырабатывает этот управляющий сигнал: схема состояла бы всего лишь из одного соединения! Но при этом нарушился бы профаммистский стиль упрятывания ин-формащш, и это могло бы привести к появлению конструктивных недостатков. Мы в явном виде записали коды сдвигов в объявлении объекта ЬаггеИб посредством определения констант Архитектуре не нужно знать детали кодирования. Предположим, однако, что в нашей архитектуре произведена все же предложенная выше замена. Если бы кто-то другой (или мы сами!) захотел позднее изменить определения constant в объявлении объекта ЬаггеИб, задавая коды сдвигов иначе, то при новом способе кодирования уже нельзя бьшо бы воспользоваться данной архитектурой! В задаче 6.13 требуется так изменить определения, чтобы объявление объекта позволяло уменьшить стоимость проекта, осуществив предложенную нами замену. няет порядок следования битов данных для следующего обращения к компоненту f ixup (U4), производящему коррекцию при логическом и арифметическом сдвигах вправо. Наконец, другой оператор generate (U5) возвращает прежний порядок следования битов, измененный оператором U3. Заметьте, что исполнение из и U5 заключается в простом изменении порядка соединений. Для исходного объекта barrel 16 можно написать много других архитектур. В задаче 6.14 мы предлагаем архитектуру, которая позволяет выполнять циклический сдвиг с помощью объекта roll б, использующего только 2-вхо-довые мультиплексоры, а не с помощью более дорогого объекта го1г1б. 6.3.2. Простой шифратор для получения чисел с плавающей точкой В разделе 6.1.2 мы определили простой формат числа с плавающей точкой и изложили задачу проектирования преобразователя числа с фиксированной точкой в число с плавающей точкой. Задача нахождения показателя экспоненты числа с плавающей точкой легко решается с помощью приоритетного шифратора, выполненного в виде ИС средней степени интефации. При профаммировании на любом из языков описания схем решение той же самой задачи отображается в виде вложенных операторов if . В табл. 6.23 приведена поведенческая VHDL-npo-фамма шифратора для получения чисел с плавающей точкой. В пределах архитектуры fpenc arch с помощью вложенного оператора if проверяется величина входной переменной В и устанавливаются соответствующие значения М и Е. Обратите внимание, что в программе используется пакет IEEE std logic arith; это сделано для того, чтобы у нас были тип UNSIGNED и операции сравнения, которые сопровождают его, как было объяснено в разделе 5.9.6. Ради представления профаммы в компактном виде введена переменная BU, выражающая значение переменной в в формате типа UNSIGNED; в принципе, в каждом вложенном операторе 1 f вместо BU можно написать UNSIGNED (В). Табл. 6.23. Поведенческая VHDL-программа для преобразования чисел фиксированной точкой в числа с плавающей точкой library IEEE; use IEEE.std.logic li64.all; use IEEE.std logic arith.all; entity fpenc is port ( B: in STD L0GIC VECT0R(10 downto 0); - fixed-point number M: out STD L0GIC VECrr0R(3 downto 0); - floating-point mantissa E: out STD L0GIC VECT0R(2 downto 0) - floating-point exponent end fpenc; architecture fpenc arch of fpenc is begin process(B) variable BU: UNSIGNED(10 downto 0); begin BU := OTJSIGSED(B); if BU < 16 then M <= B( 3 downto 0); E <= ООО ; elsif BU < 32 then M <= B( 4 dovnto 1); E <= 001 ; elsif BU < 64 then M <= B( 5 downto 2); E 010 ; elsif BU < 128 then M <= B( 6 downto 3); E <== Oil ; elsif BU < 256 then M <= B( 7 downto 4); E <= 100 ; elsif BU < 512 then M <= B( 8 downto 5); E <= 101 ; elsif B*U < 1024 then M <=в( 9 downto 6); E <- 110 ; else M <= B(10 downto 7); E <= 111 ; end if; end process; end fpenc arch; переменная в he моего типа В табл. 6.23 мы использовали выражение UNSIGNED (В) для преобразования переменной В; массив типа STD LOGIC VECTOR преобразуется в массив типа UNSIGNED. Эта операция называется явным преобразованием типов. Язык VHDL позволяет преобразовывать тесно связанные между собой типы, записывая желаемый тип, за которым в круглых скобках следует преобразуемая величина. Два типа массивов считаются тесно связанными , если у них один и тот же тип элементов, одна и та же размерность и одинаковые типы индексов (обычно INTEGER), а также те массивы, тип которых можно преобразовать. Элементы старого массива размещаются в новом массиве на соответствующих позициях в том же порядке слева направо. ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |