Разработка RTL-модели расширителя линий ввода-вывода микроконтроллера

Тип работы:
Курсовая
Предмет:
Коммуникации, связь, цифровые приборы и радиоэлектроника


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Введение

При проектировании сложных современных устройств используются различные технологии. В настоящее время применение больших интегральных схем (БИС) и сверхбольших интегральных схем (СБИС) при разработке радиоэлектронной аппаратуры (РЭА) позволяет достичь высокой степени интеграции и уменьшить количество используемых корпусов микросхем. При этом повышаются функциональные характеристики аппаратуры, такие как надежность, скорость работы, а также снижается стоимость и потребляемая мощность. В этих условиях все более широкое применение в современной РЭА находит относительно новый кристалла в корпус. Время метод разработки БИС и СБИС — метод программируемых логических интегральных схем (ПЛИС).

ПЛИС (англ. programmable logic device, PLD)-электронный компонент, используемый для создания цифровых интегральных схем. В отличие от обычных цифровых микросхем, логика работы ПЛИС не определяется при изготовлении, а задаётся посредством программирования (проектирования). Для программирования используются программаторы и отладочные среды, позволяющие задать желаемую структуру цифрового устройства в виде принципиальной электрической схемы или программы на специальных языках описания аппаратуры (тип компьютерных языков для формального описания электрических цепей, особенно цифровой логики. Он описывает структуру и функционирование цепи): «Verilog», «VHDL», «AHDL» и др.

Основное преимущество ПЛИС перед другими специализированными схемами — это малое время изготовления требуемых заказных вариантов схем. Исчезает необходимость обращаться к изготовителям интегральных микросхемы (ИМС) для нанесения металлической маски и установки получения нужной интегральной схемы (ИС) из стандартной ПЛИС измеряется секундами и минутами.

Всё это обеспечивает ряд преимуществ применения ПЛИС в современной РЭА:

1. Уменьшение габаритов устройства;

2. Повышение технических характеристик. За счёт малого времени задержки на вентиль, благодаря чему повышается системное быстродействие, сокращается потребляемая мощность устройства;

3. Гибкость конфигурации устройств. Изменяя внутренние связи ПЛИС, можно быстро и без лишних затрат на модернизацию аппаратной части вводить новые признаки в аппаратуру.

4. Обеспечение эффективного программирования работы устройства с применением языка «VHDL» или «Verilog».

Таким образом, логическое проектирование в упрощенном понимании заключается в разработке поведенческой (behavioral) модели на языке HDL и последующем автоматическом преобразовании программного кода в модель устройства, описанную с помощью абстракции регистровых передач сигналов (RegisterTransferLevel, RTL- Уровень).

Функциональные возможности описания на уровне регистровых передач моделируются и верифицируются относительно исходных технических требований, которая используется как эталонная модель (golden model) для верификации проекта на каждом уровне абстракции. Данный этап и называется функциональной верификацией модели.

По описанию на уровне RTL с помощью программы логического синтеза формируется список цепей (gate level netlist), учитывающий задержки на элементах (но, как правило, не учитывающий временные задержки на межсоединениях), который используется для временной верификации проекта (timing verification). Цель временного моделирования — проверить, удовлетворяет ли разрабатываемая БИС заданным временным ограничениям (timing constraints).

Описание модели на уровне регистровых передач использует компоненты типа сумматоров, перемножителей, регистров, мультиплексоров и т. п., чтобы представить структуру проекта и его межсоединения. Описание на уровне RTL моделируется, как правило, выполняется событийное моделирование (eventdriven simulation) с целью верификации функциональности и основных временных характеристик. Верифицированная функциональная модель служит основой для синтеза на уровне логических вентилей. Логический синтез представляет собой методологию проектирования для оптимизации на уровне логических элементов (gate-level).

Постановка задачи

В данном курсовом проекте необходимо разработать RTL-модель расширителя линий ввода-вывода, описать его работу и последовательность входных воздействий на языке Verilog, промоделировать работу поведенческой модели и устранить ошибки проектирования, создать в САПР XilinxISE реализацию построенной модели в базисе ПЛИС CoolRunner-II.

Для выполнения данной задачи необходимо изучить работу расширителя ввода-вывода, ПЛИС, синтаксис языка Verilog, а также САПР.

Рис. 1

Интерфейс расширителя ввода-вывода

Sda — последовательные двунаправленные данные

А0: А2 — адресный вход

Int_A, Int_B — входы портов прерывания, А и В

Разработка расширителя портов ввода-вывода

Применение расширителя ввода — вывода

При разработке промышленных контроллеров и других устройств часто требуется реализовать некоторое количество линий цифрового ввода-вывода. Таких линий может потребоваться довольно много, поэтому задействовать для каждой линии отдельный порт микроконтроллера не всегда возможно. В такой ситуации может помочь расширитель ввода-вывода.

Наиболее предпочтительными для этих целей являются последовательные интерфейсы I2C и SPI, которые обладают высокой скоростью, требуют минимального количества линий связи и широко распространены в различной аппаратуре.

Конечно, данную задачу можно решить, применив недорогой микроконтроллер, имеющий встроенный интерфейс I2C или SPI. В этом случае микроконтроллер под управлением программы сможет принимать данные по последовательному интерфейсу и транслировать их через параллельные порты ввода-вывода, а также выполнять обратную передачу данных. Такой микроконтроллер должен иметь большое число выводов, или к нему придётся подключить дополнительные регистры.

Однако поставленную задачу можно решить и более простым способом, не требующим использования микроконтроллера, а также создания и отладки программы. Данным способом является преобразователь последовательного интерфейса I2C в два параллельных 8-разрядных порта ввода-вывода.

Архитектура CPLD

CPLD (англ. complex programmable logic device — сложные программируемые логические устройства) содержат относительно крупные программируемые логические блоки — макроячейки (англ. macrocells), соединённые с внешними выводами и внутренними шинами.

CPLD — ПЛИС, содержащие несколько логических блоков, объединенных коммутационной матрицей. Каждый логический блок представляет собой структуру типа программируемой логической матрицы (ПЛМ), т. е. программируемую матрицу «И» и фиксированную матрицу «ИЛИ». ПЛИС типа CPLD, как правило, имеют довольно высокую степень интеграции (до 10 000 эквивалентных вентилей, до 256 макроячеек).

Функциональность CPLD кодируется в энергонезависимой памяти, поэтому нет необходимости их перепрограммировать при включении. Может применяться для расширения числа входов/выходов рядом с большими кристаллами, или для предобработки сигналов (например, контроллер COM-порта, USB, VGA).

Программируемая логическая интегральная схема CPLD состоит из нескольких макроячеек, расположенных на одном кристалле. Каждая макроячейка соединена с блоками ввода-вывода, осуществляющими формирование необходимого вида входов или выходов для работы с внешними схемами. Кроме того, все макроячейки и блоки ввода-вывода связаны между собой внутренними параллельными шинами. Пример внутренней схемы CPLD приведен на рисунке 2.

Рис. 2

Пример внутренней схемы CPLD

Приведенная на рисунке микросхема CPLD состоит из четырех макроячеек, которые связаны между собой внутренними шинами и соединяются с блоками ввода-вывода. Обычно фирмы-изготовители указывают максимально возможное число входных и выходных линий.

Разработка цифровых устройств на программируемых логических интегральных схемах CPLD практически не отличается от разработки обычных цифровых устройств. Разработчики ПЛИС предоставляют пакет САПР в составе которого можно вести разработку цифрового устройства в виде обычных схем в схемном редакторе, а затем транслировать эту схему в файл коммутаций внутренней матрицы межсоединений CPLD. Этот файл загружается в ПЗУ микросхемы CPLD и микросхема превращается в разработанное нами цифровое устройство, фактически в заказную СБИС.

В настоящее время разработка цифровых устройств чаще ведется с применением языков программирования схем, таких как AHDL или VHDL. Применение языков программирования вместо примитивов, являющихся аналогами микросхем средней интеграции, позволяет значительно оптимизировать внутреннюю структуру прошивки микросхемы.

порт ввод листинг модуль

ПЛИС CoolRunner-II

Семейство ПЛИС CoolRunner-II является оптимальным для применения в системах с напряжением питания 1,8 В. Кристаллы этой серии обладают целым рядом новых возможностей, которые обусловлены применением передовых методов технологии EEPROM 0,18 мкм.

Основные особенности

сочетание высокого быстродействия и низкой потребляемой мощности;

ультранизкое значение мощности, потребляемой в статическом режиме (не более 100 мкА);

логическая емкость кристаллов составляет от 32 до 512 макроячеек (соответственно от 800 до 12 800 эквивалентных логических вентилей);

оптимизированная архитектура, обеспечивающая повышение эффективности процесса логического синтеза;

одновременная поддержка операций ввода-вывода с различными стандартами по напря-жению — от 1,5 до 3,3 В;

возможность высокоскоростного программирования в системе с напряжением питания 1,8 В, используя стандарт IEEE 1532;

программирование в процессе функционирования (налету) On-The-Fly (OTF);

полная поддержка протокола периферийного сканирования в соответствии со стандартом IEEE 1149.1 (JTAG);

возможность выборочной установки во входных цепях блоках ввода-вывода триггеров Шмитта;

непревзойденные методы снижения потребляемой мощности проектируемых устройств;

применение технологии DataGATE для управления внешними (входными) сигналами;

гибкая система синхронизации, обеспечивающая поддержку нескольких режимов тактирования:

возможность применения триггеров, тактируемых фронтом и спадом сигнала синхронизации;

наличие встроенного делителя тактового сигнала с коэффициентами деления 2, 4, 6, 8, 10, 12, 14, 16;

использование методики CoolCLOCK;

применение технологии FZP (Fast Zero Power), направленной на достижение мини-мального уровня потребляемой мощности при сохранении высокого быстродействия;

функция раздельного управления длительностью фронтов выходных сигналов для каждого вывода ПЛИС;

применение усовершенствованной коммутационной матрицы Advanced Interconnect Matrix (AIM), обеспечивающей высокую скорость переключений при низкой потребляемой мощности;

организация блоков ввода-вывода в виде банков в кристаллах с большим количеством ячеек;

передовая система защиты конфигурационных данных от несанкционированного копирования;

расширенные возможности фиксации пользовательских выводов перед выполнением этапа реализации (Implementation) в сочетании с полной трассировкой проекта;

наличие сигнала разрешения синхронизации в каждой макроячейке;

возможность асинхронного сброса или установки триггера макроячейки;

возможность комплексного асинхронного тактирования элементов проектируемого устройства с использованием тактовых сигналов, формируемых внутри логического блока, и четырех глобальных тактовых сигналов, поступающих с выводов кристалла;

ресурс кристаллов гарантирует не менее 1 тыс. циклов стирания и перепрограммирования;

гарантированный срок хранения запрограммированной конфигурации составляет не менее 20 лет;

совместимость блоков ввода-вывода с логическими уровнями стандартов цифровых сигналов 1,5, 1,8, 2,5 и 3,3 В;

возможность формирования выходов с от-крытым стоком;

расширенный типовой ряд используемых корпусов, включающий Chip Scale Package (CSP), BGA, Fine Line BGA, TQFP, PQFP, VQFP и PLCC;

напряжение питания ядра кристалла составляет 1,8 В.

Состав и основные характеристики семейства CoolRunner-II:

Количество макроячеек

Макс. число пользовательских контактов

Макс. системная частота, МГц

XC2C32

32

33

333

XC2C64

64

64

270

XC2C128

128

100

263

XC2C256

256

184

238

XC2C384

384

240

217

XC2C512

512

270

217

Рис. 3 — Структурная схема CPLD CoolRunner-II

Рис. 4 — Блок BSC and ISP имеет JTAG-контроллер

Рис. 5 — Функциональная схема, реализующая расширитель портов ввода-вывода

Листинг модулей на языке Verilog

Module fifo (clk, rst, sda, A0_A2, Int_A, Int_B, Gpb, Gpa);

input clk;

input rst;

input sda;

input [3: 0] A0_A2;

input Int_A;

output [1: 0] Int_B;

output Gpb;

output Gpa;

wire [2: 0] awr;

wire [2: 0] ard;

wire [3: 0] rout;

wire wGpb;

wire sdampty;

count count1 (. clk (clk),. rst (rst),. inc (sda),. dec (0),. lockinc (wGpb),. lockdec (1),. out (awr));

count count2 (. clk (clk),. rst (rst),. inc (Int_A),. dec (0),. lockinc (sdampty),. lockdec (1),. out (ard));

ram ram1 (. clk (clk),. rst (rst),. awr (awr),. ard (ard),. Gpb (wGpb),. Gpa (sdampty),. sda (sda),. A0_A2(A0_A2),. Int_A (Int_A),. Int_B (rout));

compare_logic compare_logic1 (. clk (clk),. rst (rst),. awr (awr),. ard (ard),. Gpb (wGpb),. Gpa (sdampty));

assign Int_B = rout;

assign Gpb = wGpb;

assignGpa = sdampty;

endmodule

module count (clk, rst, inc, dec, lockinc, lockdec, out);

inputclk;

inputrst;

inputinc;

inputdec;

inputlockinc;

inputlockdec;

output [2: 0] out;

reg [2: 0] state;

always@(posedgeclk)

begin

if (rst)

state<= 0;

else

if (clk)

if (inc& & !lockinc)

state<= state + 1;

else

if (dec& & !lockdec)

state<= state — 1;

end

assign out = state;

endmodule

module count (clk, rst, inc, dec, lockinc, lockdec, out);

inputclk;

inputrst;

inputinc;

inputdec;

inputlockinc;

inputlockdec;

output [2: 0] out;

reg [2: 0] state;

always@(posedgeclk)

begin

if (rst)

state<= 0;

else

if (clk)

if (inc& & !lockinc)

state<= state + 1;

else

if (dec& & !lockdec)

state<= state — 1;

end

assign out = state;

endmodule

module ram (clk, rst, awr, ard, Gpb, Gpa, sda, A0_A2, Int_A, Int_B);

inputclk;

inputrst;

input [2: 0] awr;

input [2: 0] ard;

input Gpb;

input Gpa;

input sda;

input [3: 0] A0_A2;

inputInt_A;

output [3: 0] Int_B;

reg [3: 0] state [7: 0];

integeri;

always@(posedgeclk)

begin

if (rst)

for (i=0; i< 7; i=i+1)

state [i] <= 4'b0000;

else

if (sda & & !Gpb)

state [awr] <= A0_A2;

end

assignInt_B = state [ard];

endmodule

modulecompare_logic (clk, rst, awr, ard, Gpb, Gpa);

inputclk;

inputrst;

input [2: 0] awr;

input [2: 0] ard;

output Gpb;

output Gpa;

// предварительно

regrGpb;

regrGpa;

// окончательно

regendGpb;

regendGpa;

always@(posedgeclk, rst)

begin

if (awr == ard)

begin

// чтобы в начале был обозначен как пустой

if (!rGpb& & !rGpa)

begin

endGpb = 0;

endGpa = 1;

end

else

begin

// в зависимости от предыдущего состояния

endGpb = rGpb;

endGpa = rGpa;

end;

end

else

begin

endGpb = 0;

endGpa = 0;

if ((awr — ard == 1) || (ard — awr == 7))

rGpa = 1;

else

rGpa = 0;

if ((ard — awr == 1) || (awr — ard == 7))

rGpb = 1;

else

rGpb = 0;

end;

end;

assign Gpb = endGpb;

assign Gpa = endGpa;

endmodule

moduletest_fifo;

// Inputs

regclk;

regrst;

reg sda;

reg [3: 0] A0_A2;

regInt_A;

// Outputs

wire [3: 0] Int_B;

wire Gpb;

wire Gpa;

// Instantiate the Unit Under Test (UUT)

fifouut (

. clk (clk),

. rst (rst),

. sda (sda),

. A0_A2(A0_A2),

. Int_A (Int_A),

. Int_B (Int_B),

. Gpb (Gpb),

. Gpa (Gpa)

);

// Clock Generator

parameter PERIOD = 1;

parameter DUTY_CYCLE = 0. 4;

initial

forever

begin

clk = 1'b0;

#(PERIOD-(PERIOD*DUTY_CYCLE)) clk = 1'b1;

#(PERIOD*DUTY_CYCLE);

end

//------------------------------------------

// Init. Reset startup pulse

initial

begin

rst = 1;

#10 rst = 0;

end

initial begin

// Initialize Inputs

A0_A2 = 4'b1001;

sda = 0;

Int_A = 0;

#10;

@(posedgeclk);

#2;

A0_A2 = 4'b1001;

sda = 1;

#1;

sda = 0;

#2;

A0_A2 = 4'b0101;

sda = 1;

#1;

sda = 0;

#2;

A0_A2 = 4'b1111;

sda = 1;

#1;

sda = 0;

#2;

A0_A2 = 4'b1110;

sda = 1;

#1;

sda = 0;

#2;

A0_A2 = 4'b1001;

sda = 1;

#1;

sda = 0;

#2;

A0_A2 = 4'b0001;

sda = 1;

#1;

sda = 0;

#2;

A0_A2 = 4'b0000;

sda = 1;

#1;

sda = 0;

#2;

A0_A2 = 4'b1001;

sda = 1;

#1;

sda = 0;

#1;

sda = 0;

Int_A = 0;

#3;

sda = 0;

Int_A = 1;

#1;

sda = 0;

Int_A = 0;

#3;

sda = 0;

Int_A = 1;

#1;

sda = 0;

Int_A = 0;

#3;

sda = 0;

Int_A = 1;

#1;

sda = 0;

Int_A = 0;

#3;

sda = 0;

Int_A = 1;

#1;

sda = 0;

Int_A = 0;

#3;

sda = 0;

Int_A = 1;

#1;

sda = 0;

Int_A = 0;

#3;

sda = 0;

Int_A = 1;

#1;

sda = 0;

Int_A = 0;

#3;

sda = 0;

Int_A = 1;

#1;

sda = 0;

Int_A = 0;

#3;

sda = 0;

Int_A = 1;

#1;

sda = 0;

Int_A = 0;

end

endmodule

Временная диаграмма

Временная диаграмма, полученная в результате выполнения курсового проекта, приведена на рисунке.

Рис. 6

Внутреннее содержание модуля

Рис. 7

Заключение

В ходе курсового проекта была разработана RTL-модель расширителя входа-выхода. Также была описана его работа и последовательность входных воздействий на языке Verilog. В САПР XilinxISE была реализована построенная модель в базисе ПЛИС CoolRunner-II.

Список литературы

1. И. Е. Тарасов, Е. Ф. Певцов. Основы проектирования цифровых устройств с использованием языка Verilog. МИРЭА, М., 2011.

2. Documentation // http: //www. xilinx. com/ (Дата обращения 16. 12. 2012).

3. Xilinx All Programmable. 2012. URL: http: //www. xilinx. com/support/documentation/data_sheets/ds090. pdf. (Дата обращения 16. 12. 2012).

ПоказатьСвернуть
Заполнить форму текущей работой