О найденных ошибках и опечатках просьба сообщать на ripopov@gmail.com
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 и создайте новый проект.
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-разрядных слова. Интерфейс модуля:
| ||||||||||||||||||||||||||||||||||||||||
2 | Память с интерфейсом LIFO (стек) на 1024 32-разрядных слова. Интерфейс модуля:
| ||||||||||||||||||||||||||||||||||||||||
3 | Многотактный 8-разрядный целочисленный умножитель. При реализации не допускается использование умножителей. (Простейший возможный алгоритм - умножение “столбиком”, допускается использование другого алгоритма на ваш выбор) Интерфейс модуля:
| ||||||||||||||||||||||||||||||||||||||||
4 | АЛУ с аккумулятором (регистр, хранящий результат предыдущей операции), Список поддерживаемых операций: 1) Загрузить входные данные в аккумулятор 2) Сложить аккумулятор с операндом на входе 3) Вычесть из аккумулятора операнд на входе 4) Логический сдвиг данных в аккумуляторе на значение операнда на входе Интерфейс модуля:
| ||||||||||||||||||||||||||||||||||||||||
5 | Сумматор для чисел с плавающей запятой одинарной точности (32-разрядные числа (float)). Формат данных IEEE754 http://en.wikipedia.org/wiki/IEEE_floating_point (флаг потери значимости underflow можно не реализовывать) Интерфейс модуля:
|