Перейти к содержанию
    

ivan_z

Новичок
  • Постов

    2
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о ivan_z

  • День рождения 10.12.1991

Старые поля

  • skype
    Array
  • Vkontakte
    Array
  • Twitter
    Array

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Да, и с ПЛИС впервые)) В ModelSim запускаю как тестируемый модуль (нажимаю: Tools - Run Simulation Tool - RTL Simulation) и открывается ModelSim... Думал насчет сигналов тактирования и сброса, но не сообразил, как я их могу в своем алгоритме задействовать, поэтому не установил. Сейчас подключил их, но по прежнему не знаю как использовать. clk, reset : in bit; Например, сброс можно реализовать как обнуление всех регистров, (описанием отдельного параллельного process(reset), как я понимаю). Но как использовать тактирование... В примерах, которые я смотрел, сигнал тактирования использовался непосредственно для подсчета тактов... а у меня описан блок, который выполняется при изменении одно из операндов process (operand_1, operand_2) Согласен) но для сдачи курсача не жить не быть надо схему, которая сама собой должна простая получиться Спасибо, буду экспериментировать в этом направлении! Благодарю за совет, попробую) Спасибо большое за советы, буду работать дальше, по результатам отпишусь))
  2. Доброго времени суток! Спроектировал в среде Quartus на языке VHDL алгоритм быстрого умножения Бута. Входы: 2 однобайтовых регистра, числа без знака; Выход: 1 двухбайтовый регистр, без знака. Алгоритм на VHDL работает, проверку произвожу в ModelSim. Код алгоритма: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use IEEE.numeric_std.all; -- Описание точек входа и выхода ПЛИС (описание интерфейса) entity but_element is port( -- Конфигурация портов ввода-вывода input_1: in std_logic_vector (7 downto 0); -- Множимое input_2: in std_logic_vector (7 downto 0); -- Множитель output: out std_logic_vector (15 downto 0) -- Произведение ); end but_element; -- Конце описания интерфейса ПЛИС library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use IEEE.numeric_std.all; -- Описание точек входа и выхода умножителя (описание интерфейса) -- operand_1 - Множимое - целое беззнаковое число размерностью 1 байт -- operand_2 - Множитель - целое беззнаковое число размерностью 1 байт -- result - Произведение - целое беззнаковое число размерностью 2 байта entity but is port( -- Конфигурация портов ввода-вывода operand_1: in std_logic_vector (7 downto 0); -- Множимое operand_2: in std_logic_vector (7 downto 0); -- Множитель result: out std_logic_vector (15 downto 0) -- Произведение ); end but; -- Конце описания интерфейса умножителя -- Описание архитектуры элементов, входящих в умножитель architecture but_model of but is begin -- Описание параллельного процесса process (operand_1, operand_2) variable R1: std_logic_vector (7 downto 0); -- Внутренняя переменная "Множимое" variable R2: std_logic_vector (7 downto 0); -- Внутренняя переменная "Множитель" variable R3: std_logic_vector (7 downto 0); -- Регистр со старшими разрядами проиведения variable C1: std_logic; variable C2: std_logic; variable Reg: std_logic_vector (17 downto 0); -- Общий сдвиговый регистр на 18 разрядов variable counter: integer range 0 to 16; -- Счетчик begin -- Обнуление и инициализация всех переменных C1 := '0'; C2 := '0'; R1 := operand_1; R2 := operand_2; R3 := "00000000"; Reg := R3&R2&C1&C2; counter := 9; while counter > 0 loop Reg(16 downto 0) := Reg(17 downto 1); -- арифметический сдвиг вправо на 1 разряд if Reg(1) = '0' then -- Проверка C2 = 0 if Reg(0) = '1' then -- Проверка С1 = 1 -- Сложение R3 + R1 Reg(17 downto 10) := Reg(17 downto 10) + R1; end if; elsif Reg(0) = '0' then -- Вычитание R3 - R1 Reg(17 downto 10) := Reg(17 downto 10) - R1; end if; -- Счетчик counter := counter - 1; end loop; -- Запись результата в выходной регистр result <= Reg(17 downto 2); end process; -- Конец описания параллельного процесса end but_model; -- Конец описания архитектуры architecture plis of but_element is -- архитектура всего устройства component but -- умножитель как компонент port ( operand_1: in std_logic_vector (7 downto 0); -- Множимое operand_2: in std_logic_vector (7 downto 0); -- Множитель result: out std_logic_vector (15 downto 0) -- Произведение ); end component; begin mb: but -- описание работы умножителя port map (operand_1=>input_1,operand_2=>input_2,result=>output); end plis; Проблема заключается в том, что функциональная схема, которую генерирует Quartus получается очень сложной и запутанной, из нее не понятно ничего, привожу скриншот схемы: Скриншот функциональной схемы quartus т.е. на схеме разбросаны сумматоры и какие-то двухбитные регистры.. ОДно из требования к этой курсовой работе - это функциональная схема должна быть проще. Я впервые работаю с Quartus, и впервые пишу на VHDL, Возможно я делаю что-то принципиально не правильно? Сейчас пытаюсь переопределить внутренние переменные, переделать variable в signal: signal R1: std_logic_vector (7 downto 0); -- Внутренняя переменная "Множимое" signal R2: std_logic_vector (7 downto 0); -- Внутренняя переменная "Множитель" signal R3: std_logic_vector (7 downto 0); -- Регистр со старшими разрядами проиведения signal C1: std_logic; signal C2: std_logic; signal Reg: std_logic_vector (17 downto 0); -- Общий сдвиговый регистр на 18 разрядов однако при этом программа перестает работать, переменным типа signal не присваиваются значения из входных портов Подскажите, пожалуйста, в каком направлении двигаться для упрощения функциональной схемы, которую генерирует quartus.
×
×
  • Создать...