![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Программные средства foundation Табл. 5.58. Поведенческая VHDL-программа для комбинационного умножителя 8x8 library IEEE; use IEEE.std logic 1164.all; entity vmul8x8p is port ( X: in STD.LOGIC.VECTOR (7 downto 0); Y: in STD.LOGIC.VECTOR (7 downto 0); P: out STD.LOGIC.VECTOR (15 downto 0) ); end vmul8x8p; architecture vmul8x8p arch of vmul8x8p is function MAJ (II, 12, 13: STD.LOGIC) return STD.LOGIC is begin return ((II and 12) or (II and 13) or (12 and 13)); end MAJ; begin process (X, Y) type array8x8 is array (0 to 7) of STD.LOGIC.VECTOR (7 downto 0); variable PC: array8x8; - product component bits variable PCS: array8x8; - full-adder sum bits variable FCC: array8x8; - full-adder carry output bits variable RAS, RAC: STD.LOGIC.VECTOR (7 downto 0); - ripple adder sum begin - and carry bits for i in 0 to 7 loop for j in 0 to 7 loop PC(i)(j) := Y(i) and X(j); ~ compute product component bits end loop; end loop; for j in 0 to 7 loop PCS(0)(j) := PC(0)(j); ~ initialize first-row virtual PCC(0)(j) := 0; - adders (not shown in figure) end loop; for i in 1 to 7 loop ~ do all full adders except last row for j in 0 to 6 loop PCS(i)(j) := PC(i)(j) xor PCS(i-l) (j + 1) xor PCC(i-l)(j); PCC(i)(j) := MAJ(PC(i)(j), PCS(i-l)(j+l), PCC(i-l)(j)); PCS(i)(7) := PC(i)(7); - leftmost virtual adder sum output end loop; end loop; RAC(O) := 0; for i in 0 to 6 loop - final ripple adder RAS(i) := PCS(7)(i+l) xor PCC(7)(i) xor RAC(i); RAC(i+l) := MAJ(PCS(7)(i+l), PCC(7)(i), RAC(i)); end loop; for i in 0 to 7 loop P(i) <= PCS(i)(0); -- first 8 product bits from full-adder sums end loop; for i in 8 to 14 loop P(i) <= RAS(i-8); - next 7 bits from ripple-adder sums end loop; P(15) <= RAC(7); -- last bit from ripple-adder carry end process; end vmul8x8p.arcb; РСЗ(в)С7) - PCS(7)(7) шшшт PCS(O)O) - P0S(1)(7) -РСС(1)(6) PCS(1)(e) - PCS(2)(7) - [ *. >ft 1 11л* . (4(0) PCC PCS >cs (2)(0) 14 PCS (7)(0) POS (3K0) PCS (2K0) D3/ED/S/E/D3 03 Й Ш/Ш Ш m ED Ш Ш Ш и RA0(7) RAC(6) RAC(5) RAS(3) RAS(2) RAS(1) RAC(1) BAC(O) Рис. 5.100. Имена переменных в VHDL-программе для умножителя 8x8 В программе предпринята попытка показать логические вентили, которые использовались бы в реализации, точно соответствующей рис. 5.99, хотя синтезатор имеет право на основе этой поведенческой программы создать совершенно другую структуру. Если вы хотите задать определенную структуру, то необходимо написать структурную VHDL-программу, о чем речь пойдет ниже. В первом вложенном операторе for в программе выполняются 64 операции И, в результате которых получаются биты компонентов произведения. Следующий оператор цикла for инициализирует граничные условия вверху умножителя, используя понятие 0-й строки виртуальных полных сумматоров, не показанных на рисунке, у которых выходы сумм равны первой строке битов в массиве PC, а выходы переносов равны 0. Третий вложенный цикл for соответствует основному массиву сумматоров, изображенных на рис. 5.99 во всех строках, кроме последней, которая реализуется четвертым циклом for. В последних двух циклах for сигналам на выходах умножителя присваиваются значения, ввзникающие на выходах сумматора со сквозным переносом. Применяя структурный подход можно написать другую VHDL-профамму, как показано в табл. 5.59. Этот подход позволяет разработчику полностью задавать структуру синтезируемой схемы, например, в том случае, когда желательно реализовать ее в специализированной ИС. В программе предполагается, что архитектуры AND2, X0R3 и MAJ3 определены в другом месте, например, в библиотеке данной специализированной ИС. В одномерных массивах RAS и RAC хранятся суммы и переносы сумматора со сквозным переносом. На рис. 5.100 приведены обозначения и нумерация переменных. Целые переменные i и j используются в качестве индексов циклов по строкам и столбцам соответственно. Табл. 5.59. Структурная VHDL-архитектура для 8x8 комбинационного умножителя architecture vmul8x8s arch of vmul8x8s is component AND2 portC 10, II: in STD.LOGIC; 0: out STD.LOGIC ); end component; component X0R3 port( 10, II, 12: in STD.LOGIC; 0: out STD.LOGIC ); end component; component MAJ - Majority function. 0 = 10*11 + 10*12 + 11*12 port( 10, II, 12: in STD.LOGIC; 0: out STD.LOGIC ); end component; type array8x8 is array (0 to 7) of STD.LOGIC.VECTOR (7 downto 0); signal PC: array8x8; - product-component bits signal PCS: array8x8; - full-adder sum bits signal PCC: array8x8; - full-adder carry output bits signal RAS, RAC; STD.LOGIC.VECTOR (7 downto 0); - sum, carry begin gl: for i in 0 to 7 generate - product-component bits g2: for j in 0 to 7 generate Ul: AND2 port map (VCi), X(j) , PC(i)(j)); end generate; end generate; g3: for j in 0 to 7 generate PCS(0)(j) <= PC(0)(j); - initialize first-row virtual adders PCC(0)(j) <= 0; end generate; g4: for i in 1 to 7 generate - do full adders except the last row g5: for j in 0 to 6 generate U2: XORS port шар (PC(i) (j) ,PCS(i-l) (j+l) ,PCC(i-l) (j) ,PCS(i.Kj)); US: MAJ port map (PC(i)(j),PCS(i-l)(J+1),PCC(i-l)(j),PCC(i)(j)); PCS(i)(7) <= PC(i)(7); - leftmost virtual adder sum output end generate; end generate; RAC(O) <= 0; gB: for i in 0 to 6 generate - final ripple adder U7: X0R3 port map (PCS(7)(i+1), PCC(7)(i). RAC(i), RAS(i)); US: MAJ port map (PCS(7) (i+1), PCC(7)(i), RAC(i), RAC(i+l)); end generate; g7: for i in 0 to 7 generate P(i) <= PCS(i)(0); - get first 8 product bits from full-adder sums end generate; g8-. for i in 8 to 14 generate P(i) <= RAS(i-8); - get next 7 bits from ripple-adder sums end generate; P(15) <= RAC(7); ~ get last bit from ripple-adder carry end vmul8x8s arch; ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |