Лабораторная работа №1

О найденных ошибках и опечатках просьба сообщать  на ripopov@gmail.com

Цель работы:

  1. Изучение основ языка Verilog HDL
  2. Освоение принципов работы в среде Xilinx ISE.

Краткие теоретические сведения

https://docs.google.com/presentation/d/192UsWtq75xomX0d7lqmPXvgCxydbW4jH1p2GDjefhO0/pub?start=false&loop=false&delayms=3000

https://drive.google.com/file/d/0B3f0QtUNvV1kaFlKMmdJWkF0M0k/edit?usp=sharing

http://www.asic-world.com/verilog/veritut.html

http://www-inst.eecs.berkeley.edu/~cs150/fa06/Labs/verilog-ieee.pdf

Порядок выполнения работы

1. Загрузите ISE Design Suite 14.7 c сайта Xilinx.   http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools.html  (Требуется регистрация и последующая генерация бесплатной WebPack лицензии). Установите пакет на ваш ПК.

2.  Запустите ISE Design Suite и создайте новый проект.

  1. File->New Project
  2. В качестве целевой микросхемы выберите XC3S700AN

3. Добавьте в проект новый Verilog-модуль с именем top.v

4. В качестве примера, опишите 32-разрядный двоичный счетчик с асинхронным сбросом (по уровню лог. 0) на синтезируемом подмножестве Verilog HDL.

`timescale 1ns / 1ps

module top(

        input              clk,

        input                   rstn,

        output [31:0] count

);

reg [31:0]        cnt_reg;

assign count = cnt_reg;

always @(posedge clk or negedge rstn) begin

        if (~rstn)

                cnt_reg <= 0;

        else

                cnt_reg <= cnt_reg + 1;

end

endmodule

5. Добавьте к проекту новый Verilog-модуль top_tb.v для тестирования счетчика (в списке типов файлов выберите Verilog test fixture).

`timescale 1ns / 1ps

module top_tb;

        // Inputs

        reg clk;

        reg rstn;

        // Outputs

        wire [31:0] count;

        // Instantiate the Unit Under Test (UUT)

        top uut (

                .clk(clk),

                .rstn(rstn),

                .count(count)

        );

        

        initial begin

                clk = 0;

                forever #10 clk = ~clk;

        end

        initial begin

                rstn = 0;

                @(posedge clk);

                @(posedge clk);

                rstn = 1;

        end

     

        integer i;

        initial begin

                @(posedge rstn);

                @(posedge clk);

                

                for (i = 0; i < 10; i= i + 1) begin

                        if (i != count)

                                $display("ERROR count %d != %d", count, i);

                        else

                                $display("PASSED count %d == %d", count, i);                        

                        @(posedge clk);                        

                end

                $stop();

                

        end        

                

endmodule

6. Проведите поведенческую симуляцию проекта. По временной диаграмме и текстовому выводу убедитесь в корректной работе счетчика.

7. Добавьте к проекту constraints-файл  top.ucf, задающий нефункционльные требования к проекту.   ( Тип файла - Implementation constrants file)

Добавьте ограничение на период тактового сигнала

NET "clk" PERIOD=5ns;

7. Запустите синтез, отображение и трассировку проекта для микросхемы FPGA (Implement Design).

8.

Запустите:

- View RTL Schematic для просмотра схемы синтезированного модуля на уровне регистровых передач.

- View Technology Schematic для просмотра схемы проекта, отображенного на ресурсы, имеющиеся на микросхеме FPGA

-  View/Edit Routed Design для просмотра проекта, размещенного и разведенного на микросхеме FPGA

9. Откройте Design Summary/Reports  для получения информации об использованных ресурсах и временных параметрах работы полученной схемы.  В разделе Staic Timing, Timing Constraints убедитесь что схема будет корректно работать с периодом тактового сигнала 5 ns.

10. Выполните задания по вариантам. Для каждой заданной схемы спроектируйте тестовое окружение.

Варианты заданий

Номер варианта

Описание задания

1

Память с интерфейсом FIFO (очередь) на 1024 32-разрядных слова.

Интерфейс модуля:

Имя

Направление

Ширина

Описание

clk

input

1

Сигнал синхронизации

rstn

input

1

Синхронный сброс по уровню лог. 0

data_in

input

32

Входные данные на запись

write_en

input

1

Разрешение записи

read_en

input

1

Разрешение чтения

data_out

output

32

Прочитанные данные

full

output

1

“Память заполнена”

empty

output

1

“Память пуста”

error

output

1

Признак ошибки, устанавливается при попытки записи в полною память или чтения из пустой памяти.

2

Память с интерфейсом LIFO (стек) на 1024 32-разрядных слова.

Интерфейс модуля:

Имя

Направление

Ширина

Описание

clk

input

1

Сигнал синхронизации

rstn

input

1

Синхронный сброс по уровню лог. 0

data_in

input

32

Входные данные на запись

write_en

input

1

Разрешение записи

read_en

input

1

Разрешение чтения

data_out

output

32

Прочитанные данные

full

output

1

“Память заполнена”

empty

output

1

“Память пуста”

error

output

1

Признак ошибки, устанавливается при попытки записи в полною память или чтения из пустой памяти.

3

Многотактный 8-разрядный целочисленный умножитель. При реализации не допускается использование умножителей. (Простейший возможный алгоритм - умножение “столбиком”, допускается использование другого алгоритма на ваш выбор)

Интерфейс модуля:

Имя

Направление

Ширина

Описание

clk

input

1

Сигнал синхронизации

rstn

input

1

Синхронный сброс по уровню лог. 0

a_in

input

8

Первый операнд

b_in

input

8

Второй операнд

start

input

1

стартовый импульс (запуск вычислений)

data_out

output

16

Результат умножения

ready

output

1

Признак завершения вычислений, сигнализирует что на data_out установлен результат умножения

4

АЛУ с аккумулятором (регистр, хранящий результат предыдущей операции),

Список поддерживаемых операций:

1) Загрузить входные данные в аккумулятор

2) Сложить аккумулятор с операндом на входе

3) Вычесть из аккумулятора операнд на входе

4) Логический сдвиг данных в аккумуляторе на значение операнда на входе

Интерфейс модуля:

Имя

Направление

Ширина

Описание

clk

input

1

Сигнал синхронизации

rstn

input

1

Синхронный сброс по уровню лог. 0

a_in

input

32

Входное значение ( второй операнд  для операций с АЛУ), число со знаком в двоичном дополнительном коде

op_code

input

2

Код операции

en

input

1

Разрешение выполнения операции

acc_out

output

32

Значение аккумулятора

5

Сумматор для чисел с плавающей запятой одинарной точности (32-разрядные числа (float)).   Формат данных IEEE754 http://en.wikipedia.org/wiki/IEEE_floating_point

(флаг потери значимости underflow можно не реализовывать)

Интерфейс модуля:

Имя

Направление

Ширина

Описание

a_in

input

32

Первый операнд

b_in

input

32

Второй операнд

result

output

1

Результат сложения

acc_out

output

32

Значение аккумулятора

overflow

output

1

Флаг переполнения