![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Программные средства foundation constant Lrotate; constant Brotate: constant Llogical: constant .logical: constant Larith: constant Karith: end barrelie; STE LDGIC ¥EGTOP. STD.LOGIC.VECTOR STD..LQCIC VECTOR STD.LOGIC. VECTOR STD.LOGIC.VECTOR STD.LOGIC.VECTOR OOQ 001 010 Oil 100 101 - Data liiput.4 - Shift amount, 0-1,5 Mode control - Data bus output - Define the coding of - the different shift modes architecture barrolie.behavioral of barrelie is subtype DATAWQRD is STD L0G1C VECT0R(15 downto 0); function Vrol (D: DATAWCRD; S; UNSIGNFD) retxim DATAWORD is variable K: ISTEGEE; variable TMPD; DATAWDRD; begin N := GONV IJiTEGER(S) ; TKPD ;= D; for i in 1 to N loop TKPD TMPD(14 dovnto 0) & TMPD(IS); end loop; return TKPD; end Vrol; process(DIN, S, C) begin case с is vhen Lrotate => DOUT <= when Rrotate -> DQUT <= when Llogical DOOT <= when Rlogical => DOUT <= when Larith => DOOT <= Khen Rarith => DOUT <= when others => null; end case; end process; end barrelle.behavioral; VroKDIM.S) Vror(Di.4,S) VslKDIM.S) Vsrl(Di. l,S) Vsla(DIN,S) Vsra(DIN,S) Табл. 6.17. Поведенческое VHDL-описание устройства быстрого сдвига, выполняющего 6 видов сдвига library IEEE; use IEEE.std logic 1164.all; use IEEE,std logic arith.all; entity barrelie is port ( DIN: in STD.LOGIC.VECTOR (15 downto 0); S: in UKSIGSED (3 downto 0); C: in STD.LOGIC.VECTOR (2 downto 0); DOOT; out STD.LOGIC.VECTOR (15 downto 0) ВАШИ СОБСТВЕННЫЕ СДВИГИ В действительности у языка VHDL-93 есть встроенные операторы свига го1, гог, sll, srl, sla и sra элементов типа array, соответствующие операциям сдвига, перечисленным в табл. 6.3. Так как этих операторов нет в языке VHDL-87, мы определили в табл. 6.17 свои собственные функции. На самом деле, в таблице приведена только одна из них (Vrol); определение остальных функций оставлено читателю в качестве задачи (задача 6.11). В табл. 6.17 полностью приведена только первая функция (Vrol); остальные подобны ей, за исключением изменения в одной строке. Используемая в цикле for переменная N является результатом преобразования величины сдвига s в целое число. Кроме того, мы присваиваем значение входного вектора D локальной переменной TMPD, которая в цикле for сдвигается N раз. Тело цикла for образует единственный оператор присваивания. В нем берется 15-битовый отрезок слова данных [TMPD (14downtoO) ] и осуществляется к(катенация [&]; результат возвращается в TMPD вместе с битом [TMPD (15) ], который выдвинулся с левого края. Подобными действиями можно описать и другие типы сдвига. Заметьте, что функции сдвига нельзя было бы определить в другом, неповеденческом описании объекта bar re 11 б, например, в структурной архитектуре. Часть параллельных операторов в этой хитекхуре исчерпывается единственным процессом, список чувствительности юторого составляют все входы объекта. Оператор case этого процесса присваивает результат выходу DOUT, вызывая соответствующую функцию в зависимости от значения сигнала С на входе выбора режима. Процесс, приведенный в табл. 6.17, является хорошим поведенческим описанием устройства быстрого сдвига, но многие средства синтеза не смогут синтезировать схему по такому описанию. Проблема заключается в том, что большин-ст программных средств требуется, чтобы диапазон цикла for бьш статическим на момент компиляции, тогда как у цикла for в функции Vrol диапазон динамический: он зависит от значения входного сигнала S во время работы схемы. Ну, действительно трудно представить себе, какую схему могла бы выдать программа синтеза даже в том случае, если бы она бьша способна обрабатывать циклы fore динамическим диапазоном. Это пример того, когда разработчику следует хотя бы немного поруководить средствами синтеза при выборе структуры схемы, если есть желание получить достаточно быстрый и эффективный результат На рис. 6.2 было показано, как может выглядеть 16-разрядное устройство быстрого сдвига, выполняющее циклические сдвиги влево, собранное из стандартных ИС средней степени интеграции. В этой схеме последовательно один за другим включены четыре 16-разрядных 2-входовых мультиплексора, осуществляющих сдвиг входных данных на О разрядов или на 1, 2, 4 и 8 разрядов в зависимости от значений сигналов S0-S3 соответственно. Подобный характер поведения и структуру такого вида можно описать средствами языка VHDL так, как это сделано в программе, приведенной в табл. 6.18. Несмотря на то, что в программе используется процесс и она написана в поведенческом стиле, можно быть более или менее уверенным в том, что для каждого оператора if в большинстве случаев синтезатор создаст по 2-входовому мультиплексору, которые образуют последовательную цепочку, подобную приведенной на рис. 6.2. Табл. 6.18. Программа на языке VHDL для 16-разрядного устройства быстрого сдвига, осуществляющего только циклический сдвиг влево library IEEE; use IEEE std.logiC.1164 all, entity rolie IS port С DIK m SrJ.LCGIC.VFCTOR (15 downto 0), - Data input;s S m STO.LOGIC.VSCTCR (3 do.nto 0), - Shift amount, 0-15 DOUT out Sn} L0GIC.VECT0R(15 dorfnto 0) - Data bus c-utput end roll6, architecture rollb.arch of roll6 is begin process(DIN, S) variable X, Y, Z SlD.LOGrC.VECTORClS downto 0), begin if S(0) = l i,hea X = 2Ша4 downto 0) & 0IN(15); else X .= D14, end if, If S(1) = I then Y := X(13 downto 0) & X(1S downto 14), else Y = X. ena if. If S(2)-l then Z = Y(ll do n+o 0) & Y(15 downto 12), else Z = Y, end ir, it 3(3)=! then DOUT < Z(7 do.nto 0) к Z(lfa aovnto 8), else DOUT <= Z, end if, end process, end roIC.arch, Ho в решаемой здесь задаче требуется, чтобы устройство быстрого сдвига могло выполнять сдвиг и влево, и вправо. В табл. 6.19 представлена исправленная предыдущая профамма, способная выполнять циклические сдвиги в любом направлении. Направление сдвига задается дополнительным входным сигналом DIR: О - для сдвига влево, 1 - для сдвига вправо. В каждом из звеньев, образующих последовательную цепочку, характер сдвига определяется оператором case, выбирающим одну из четырех возможностей по значению сигнала DIR и того бита S, который управляет этим звеном. Обратите внимание, что мы ввели локальные 2-разрядные переменные CTRLi для хранения пары значений DIR и S (i); каждый оператор case управляется одной из этих переменных. У вас может появиться желание исключить эти переменные и просто управлять каждым оператором case с помощью конкатенации DIR & S (i), но синтаксис языка VHDL не позволяет это сделать, потому что тип конкатенации бьш бы неизвестен Типичный синтезатор языка VHDL создаст 3- или 4-входовой мультиплексор для каждого оператора case в табл. 6.19. Для последнего оператора case хороший синтезатор сформирует только 2-входовой мультиплексор. Итак, теперь у нас есть устройство быстрого сдвига, которое будет выполнять циклические сдвиги влево или вправо, но мы сделали еще не все: необходимо позаботиться о логических и арифметических сдвигах в обоих направлениях. На рис. 6.14 представлен наш план завершения проекта. Согласно этому плану наше устройство начинается с блока R0LR16, разработку которого мы только что завершили, а для управления направлением сдвига, в зависимости от сигнала С, используется дополнительная логика. Теперь необходимо скорректировать некоторые из полученных битов, если выполняется логический или арифметический сдвиг При логическом или арифметическом сдвиге на и разрядов влево мы должны присвоить правым и - 1 би- ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |