Разработка АЛУ на микросхеме ПЛИС
Описание логики работы разрабатываемого устройства на основе программируемых логических интегральных схем. Описание функционирования арифметико-логического устройства с помощью языка VerilogHDL. Анализ структуры программы, ее тела и принципа работы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 09.06.2014 |
Размер файла | 408,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Вологодский государственный технический университет»
«Электроэнергетический факультет»
Курсовой проект
Дисциплина: «Программируемая логика»
Наименование темы: «Разработка АЛУ на микросхеме ПЛИС »
Руководитель
Королев Т.В.
Выполнил
Студент Долговязов Н .А.
Группа, курс ЭВ-21
Вологда, 2013
Оглавление
Введение
1. Задание на курсовой проект
2. Описание логики работы разрабатываемого устройства
3. Описание функционирования АЛУ
4. Структура программы
5. Тело программы
6. Работа программы
Список используемой литературы
Введение
ПЛИС (программируемые логические интегральные схемы) представляют собой цифровые интегральные микросхемы, состоящие из программируемых логических блоков и программируемых соединений между этими блоками. Возможность кофигурировать эти устройства позволяет инженерам-разработчикам решать множество программироваться различных задач. В зависимости от способа изготовления ПЛИС могут либо один раз, либо многократно. Устройства, которые могут программироваться только один раз, называется однократно программируемые. Программирование в ПЛИС выполняется на месте, «в полевых условиях» и кофигурируются в лабораторных условиях. Если устройство может быть запрограммированно, оставаясь в состав системы более высокого уровня, оно называется внутрисистемно программируемым. В отличие от обычных цифровых микросхем, логика работы ПЛИС не определяется при изготовлении, а задается посредством программирования. Для этого используются программаторы и отладочные среды, позволяющую задать желаемую структуру цифрового устройства в виде принципиальной электрической схемы или программы на специальных языках описания аппаратуры: Verilog, VHDL, AHDL и др. ПЛИС широко используется для построения различных по сложности и по возможностям цифровых устройств. Это приложения, где необходимо большое количество портов ввода-вывода, цифровая обработка сигнала, цифровая видеоаппаратура, высокоскоростная передача данных и т. д. В современных периферийных и основных компьютерных устройствах платы расширения в системе Plug & Play имеют специальную микросхему - ПЛИС, которая позволяет плате сообщать свой идентификатор и список требуемых и поддерживаемых ресурсов.
1. Задание на курсовой проект
Разработать на микросхеме ПЛИС арифметико-логическое устройство, описать его с помощью языка VerilogHDL. После реализации прототипа АЛУ добавить дополнительную команду в соответствии с вариантом.
3 вариант программа логический интегральный схема
Реализовать RS триггер. Младшие биты входов a и b - соответственно значения входов R и S. Выход Q младший бит выхода АЛУ. Если на входе подается значение 11, все биты выхода АЛУ должны устанавливаться в 1.
2. Описание логики работы разрабатываемого устройства
Арифметико-логическое устройство предназначено для выполнения различных операций над числами. Рассматриваемое в данном задании АЛУ выполняет над числами простейшие операции: сложение, вычитание, деление без остатка(нацело), поразрядные операции «И», «ИЛИ», и инвертирование. Это АЛУ позволяет передавать без изменения входную информацию на выход.
После операции на входе устанавливаются соответствующие флаги: флаги переполнения, отрицательного результата и нулевого результата.
Рисунок 1 - Схема АЛУ
3. Описание функционирования АЛУ
Входные порты устройства:
Выходные порты устройства:
На входы Operand1 и Operand2 АЛУ поступают два четырехразрядных операнда Xdata и YData, над которыми выполняется арифметическая или логическая операция.
Каждый операнд задается четырьмя разрядами. Минимальное значение операнда - 0(0000), а максимальное - 15(1111). Если хотим работать с числами по значению с большими, чем 15, необходимо увеличивать разрядность входных операндов до соответствующего уровня.
Сама операция задается входным сигналом Command_code, состоящим из трех разрядов. Подача определенной комбинации нулей и единиц на эти разряды соответствуют определенной операции над операндами. Такое соответствие определено в таблице 1.
Таблица 1 - Коды команд АЛУ
Код команды |
Операция |
|
000(0) |
Пропуск |
|
001(1) |
Арифметическое сложение |
|
010(2) |
Арифметическое вычитание |
|
011(3) |
Арифметическое умноежение |
|
100(4) |
Деление (целая часть) |
|
101(5) |
Логическое «И» |
|
110(6) |
Логическое «ИЛИ» |
|
111(7) |
Поразрядное инвертирование |
Среди имеющихся операций можно выделить двухоперадные и однооперадные. К первым относятся сложение, вычитание, умножение, деление, логическое «И» и «ИЛИ». Ко вторым - пропуск и поразрядное инвертирование. В однооперадных командах используется только первый операнд Operand1 независимо от второго Operand2.
Выходной сигнал Result имеет разрядность в два раза больше, чем входные операнды. Это необходимо в случае умножения, так как данная операция может привести к удвоению разрядности результата и предотвращает переполнение.
Каждый выходной результат сопровождается установкой соответствующих бит-флагов переполнения, нуля и отрицательного значения.
Флаг переполнения Flag0 устанавливается в состояние «1», если произошло переполнение результата. Эта ситуация возникает при делении на нуль, т.е. когда на вход второго операнда подать «0» и выбрать операцию деления. Результат будет неизвестен. Во всех остальных случаях флаг сбрасывается в нулевое состояние.
Флаг нуля FlagZ устанавливается в «1», если полученный результат принимает нулевое значение. Такая ситуация возникает, когда происходит деление нуля на число, отличное от нуля, или вычитание двух одинаковых чисел, а также в результате побитовых операций. Если в результате не нуль, то устанавливается в нуль.
Флаг отрицательного значения FlagN устанавливается в «1», если результат операции отрицательный. При этом выходное значение Result имеет положительное значение, равное по модулю полученному отрицательному. Нулевое значение этот флаг принимает, если значение Result является положительным.
Сигнал Clock используется для синхронизации. По его положительному фронту выдается на выход результат и флаги.
Разработка RS триггера
Для реализации RS триггера необходимо добавить еще одну операцию, которая будет выполнять роль данного триггера. При подаче на входе 00 значение будет сохраняться, при подаче на один из входов единицы выходное значение будет меняться, а при подаче 11 все биты будут устанавливаться в 1. Описание операции будет представлено ниже.
4. Структура программы
Программа имеет следующую структуру: главный модуль ALU ВЫЗЫВАЕТ задачи-обработчики операндов, т.е. соответствующие части программы, которые описывают соответствующую операцию. Задача вызывается главным модулем как функция с передачей соответствующих параметров главного модуля.
По результату вызова задачи главный модуль производит установку соответствующих флагов.
По положительному фронту сигнала clock результат и флаги подаются на выход устройства.
5. Тело программы
module ALU (command_code, xdata, ydata,clock,result, flagZ, flagO, flagN);
parameter numbits=3;
input [3:0] command_code;
input clock;
input [numbits:0] xdata, ydata;
output [2*numbits+1:0] result;
output flagZ, flagO, flagN;
reg [2*numbits+1:0] res;
reg z,o,n,temp;
task Disable;
output [2*numbits+1:0] Disable;
input [numbits:0] x,y;
begin
y=x;
Disable=x;
end
endtask
task Summator;
output [2*numbits+1:0] Summator;
input [numbits:0] x,y;
input c_in;
integer i;
reg a,b,c,d,a1,b1,c1,bit,summa;
begin
for (i=0; i<=numbits; i=i+1)
begin
a= ~x[i]&y[i]&c_in;
b= ~x[i]&y[i]&~c_in;
c= c_in&x[i]&y[i];
d= x[i]&~y[i]&~c_in;
Summator[i]=a|b|c|d;
a1=x[i]&y[i]&~c_in;
b1=x[i]&~y[i]&c_in;
c1=~x[i]&y[i]&c_in;
bit=c|a1|b1|c1;
c_in=bit;
end
Summator[numbits+1]=bit;
for (i=numbits+2; i<=2*numbits+1; i=i+1)
Summator[i]=0;
end
endtask
task Substance;
output [2*numbits+1:0] Substance;
input [numbits:0] x,y;
begin
if (x>=y)
Substance=x-y;
else
Substance=y-x;
end
endtask
task Multiple;
output [2*numbits+1:0] Multiple;
input [numbits:0] x,y;
begin
if ((x>=0 && y>=0)||(x<=0 && y<=0))
Multiple=x*y;
if ((x>0 && y<0)||(x<0 && y>0))
Multiple=-x*y;
end
endtask
task Divide;
output [2*numbits+1:0] Divide;
input [numbits:0] x,y;
begin
if (!y)
Divide='bx;
else
begin
if ((x>=0 && y>0)||(x<=0 && y<0))
Divide= x/y;
if ((x>0 && y>0)||(x<0 && y>0))
Divide=-x/y;
end
end
endtask
task Operation_and;
output [2*numbits+1:0] Operation_and;
input [numbits:0] x,y;
integer i;
begin
for (i=0; i<=numbits; i=i+1)
Operation_and[i]=x[i]&&y[i];
for (i=numbits+1; i<=2*numbits+1; i=i+1)
Operation_and[i]=0;
end
endtask
task Operation_or;
output [2*numbits+1:0] Operation_or;
input [numbits:0] x,y;
integer i;
begin
for (i=0; i<=numbits; i=i+1)
Operation_or[i]=x[i]||y[i];
for (i=numbits+1; i<=2*numbits+1; i=i+1)
Operation_or[i]=0;
end
endtask
task Operation_not;
output [2*numbits+1:0] Operation_not;
input [numbits:0] x,y;
integer i;
begin
y=x;
for (i=0; i<=numbits; i=i+1)
Operation_not[i]=~x[i];
for (i=numbits+1; i<=2*numbits+1; i=i+1)
Operation_not[i]=0;
end
endtask
task Operation_RS;
output [2*numbits+1:0] Operation_RS;
input [numbits:0] x,y;
integer i;
reg temp;
begin
if ((x[0]==1)&&(y[0]==0))
Operation_RS[0]=0;
if ((x[0]==0)&&(y[0]==1))
Operation_RS[0]=1;
if ((x[0]==0)&&(y[0]==0))
Operation_RS[0]=Operation_RS[0];
if ((x[0]==1)&&(y[0]==1))
Operation_RS[0]=1;
for (i=1; i<=2*numbits+1; i=i+1)
Operation_RS[i]=0;
end
endtask
always @(posedge clock)
begin
case (command_code)
'b0000:
begin
Disable (res,xdata,ydata);
z = (res==0) ? 1 : 0;
if (res<0)
n=1;
else
n=0;
o=0;
end
'b0001:
begin
Summator (res,xdata,ydata,0);
z = (res==0) ? 1 : 0;
if (res<0)
n=1;
else
n=0;
o=0;
end
'b0010:
Begin
10
Substance (res,xdata,ydata);
z = (res==0) ? 1 : 0;
if (xdata<ydata)
n=1;
else
n=0;
o=0;
end
'b0011:
begin
Multiple (res,xdata,ydata);
z = (res==0) ? 1 : 0;
if (res<0)
n=1;
else
n=0;
if ((xdata<0&&ydata>0)||(xdata>0&&ydata<0))
n=1;
else
n=0;
o=0;
end
'b0100:
begin
Divide (res,xdata,ydata);
o = (ydata==0) ? 1 : 0;
z = (res==0) ? 1 : 0;
if ((xdata<0&&ydata>0)||(xdata>0&&ydata<0))
n=1;
else
n=0;
end
'b0101:
begin
Operation_and(res,xdata,ydata);
z = (res==0) ? 1 : 0;
n=0;
o=0;
end
'b0110:
begin
Operation_or(res,xdata,ydata);
z = (res==0) ? 1 : 0;
n=0;
11
о=0;
end
'b0111:
begin
Operation_not (res,xdata,ydata);
z = (res==0) ? 1 : 0;
n=0;
o=0;
end
'b1111:
begin
Operation_RS (res,xdata,ydata);
z = (res==0) ? 1 : 0;
if (res<0)
n=1;
else
n=0;
o=0;
end
default: res='bx;
endcase
end
assign result=res;
assign flagZ=z;
assign flagN=n;
assign flagO=o;
endmodule
6. Работа программы
1. Компиляция
При компиляции ошибок не обнаружено.
2. Симуляция.
При симуляции ошибок также не обнаружено.
В итоге мы получаем АЛУ, которое выполняет ряд операций, в том числе и реализует действие RS триггера.
Список используемой литературы
1. Амосов В.В. Схемотехника и средства проектирования цифровых устройств. - СПб.:БХВ-Петербург, 2007. - 560 с.: ил. (учебное пособие).
2. Максфилд К. Проектирование на ПЛИС. Курс молодого бойца. - М.: Издательский дом “Додека -XXI”, 2007. 408 С.: ил. (серия “Программируемые системы”)/
3. Комолов Д.А. Системы автоматизированного проектирования фирмы Alters Max+plus II и Quartus II. Краткое описание и самоучитель. - М.: ИП РадиоСофт, 2002 - 352 с.: ил.
4. http://ru.wikipedia.org/wiki/%D2%F0%E8%E3%E3%E5%F0
5. http://ru.wikipedia.org/wiki/%CF%CB%C8%D1
Размещено на Allbest.ru
...Подобные документы
Разработка на программируемой логической интегральной микросхеме арифметико-логического устройства для выполнения операций над числами. Описание его функционирования. Коды команд АЛУ. Реализация действия RS триггера. Структура, тело и работа программы.
курсовая работа [697,1 K], добавлен 16.12.2014Определение принципов работы с САПР Xilinx WebPACK. Особенности проектирования простейших комбинационных схем на базе ПЛИС. Описание устройства на языке VHDL, набор тестовых воздействий и временные диаграммы его работы. Размещение устройства на кристалле.
лабораторная работа [318,7 K], добавлен 28.05.2012Изготовление устройства управления шаговым двигателем на базе микросхем дискретной логики ТТЛ. Временные диаграммы работы устройства. Условное графическое изображение и уровни реализации структуры ПЛИС. Расчет энергопотребления с помощью утилиты xPower.
курсовая работа [1,1 M], добавлен 28.12.2012Изучение логических операций и правил их преобразований. Моделирование цифровых схем, состоящих из логических вентилей. Способы описания работы логического устройства - таблицы истинности, временные диаграммы, аналитические функции, цифровые схемы.
лабораторная работа [2,1 M], добавлен 02.03.2011Операционный блок микропроцессора, арифметические операции с целыми операндами. Пути увеличения производительности арифметико-логического устройства за счет параллельной обработки различных команд выполняемой программы. Сумматор частичных произведений.
контрольная работа [56,5 K], добавлен 05.09.2010Алгоритм реализации арифметической операции и разработка блок-схемы устройства. Составление и минимизация логических выражений работы блоков. Логическая схема регистра, сумматора, сдвига и мультиплексора. Анализ и синхронизация работы устройства.
курсовая работа [1,2 M], добавлен 27.02.2014Наименование разрабатываемого устройства. Назначение разрабатываемого устройства в городском транспорте. Обзорный анализ найденных аналогов. Обоснование актуальности разработки устройства. Разработка функциональной схемы разрабатываемого устройства.
курсовая работа [175,6 K], добавлен 04.07.2008Моделирование арифметико-логического устройства для вычитания УДЦ для 18 разрядов. Операционная и аксиоматическая семантика команды ассемблера. Верификация линейного участка программы, участка, содержащего ветвления, цикла. Сети Петри для подпрограммы.
курсовая работа [121,2 K], добавлен 13.07.2012Проблема охлаждения в компьютере. Выбор и описание прототипов разрабатываемого устройства. Разработка структурной и принципиальной схемы. Разработка программного обеспечения, его выбор и обоснование. Моделирование работы исследуемого устройства.
курсовая работа [2,7 M], добавлен 10.11.2014Описание устройства и принципа работы составных элементов компьютера: системного блока, платы, центрального процессора, кеш-памяти, материнской платы BIOS и CMOS, запоминающего устройства RAM, компьютерной шины, логических контроллеров, аппаратных портов.
реферат [61,0 K], добавлен 10.01.2012Основные понятия алгебры логики. Логические основы работы ЭВМ. Вычислительные устройства как устройства обработки информации. Основные формы мышления. Обзор базовых логических операций. Теоремы Булевой алгебры. Пути минимизации логических функций.
контрольная работа [62,8 K], добавлен 17.05.2016Функциональная схема и алгоритм работы устройства. Техническое обоснование выбора серии ИМС. Состав и описание работы узлов устройства. Расчёт необходимых сопротивлений резисторов, потребляемой мощности и тока. Построение и анализ временных диаграмм.
курсовая работа [311,7 K], добавлен 19.05.2011Назначение и применение микроконтроллеров - интегральных микросхем, предназначенных для управления электронными схемами. Описание способа адресации. Разработка программы, описание электрической и структурной схемы разрабатываемого микроконтроллера.
курсовая работа [177,6 K], добавлен 30.06.2014Описание алгоритма работы устройства. Составление и минимизация комбинационных схем регистра. Представление основных элементов в требуемом базисе. Работа сумматора и компаратора, описание ее принципа и назначение. Составление временной диаграммы.
курсовая работа [717,0 K], добавлен 19.06.2014Разработка алгоритма работы устройства, описание выбора элементной базы и работы принципиальной схемы. Текст программы, инициализация указателя стека, структура системы и ресурсов микроконтроллера. Запись кодов при программировании данного устройства.
контрольная работа [18,4 K], добавлен 24.12.2010Описание алгоритма функционирования устройства сопряжения, которое подключается к системной шине ISA. Принципиальная и функциональная схемы интерфейсной и операционной части устройства. Моделирование схемы операционной части, построение диаграммы работы.
курсовая работа [50,7 K], добавлен 13.11.2009Разработка текстового редактора для работы с текстовыми приложениями. Описание работы программы, использование языка С++ для ее создания. Описание работы программы, ее простота и надежность, как для начинающих программистов, так и для профессионалов.
курсовая работа [872,8 K], добавлен 25.11.2010Описание области применения устройства релаксационного воздействия на человека "Лампа хорошего настроения". Выбор микроконтроллера устройства. Алгоритм функционирования программы, её тестирование. Правила и нормы охраны труда при работе с компьютером.
дипломная работа [5,8 M], добавлен 28.09.2015Разработка функциональной и принципиальной схемы. Выбор управляющего контроллера. Описание МК PIC16F626, МК AVR, МК 51. Выбор элементной базы. Разработка управляющей программы. Описание алгоритма работы программы. Схема устройства, листинг программы.
курсовая работа [492,9 K], добавлен 28.12.2012Создание электрической схемы проектируемого устройства с помощью графического интерфейса. Улучшение кодовой базы с помощью рефакторинга. Разработка алгоритма работы программы. Использование методики Test driven development, написание тестового покрытия.
курсовая работа [1,3 M], добавлен 15.02.2016