Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Языки VHDL и VERILOG в проектировании цифровой аппаратуры

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Глава 6. Реализация шифроалгоритма RC4 на ПЛИС 201
input [addr_width -1:0]addr ; output [data_width -1 : 0] do; reg[data_width -1 : 0] mem[0: depth-1 ]
/* synthesis sin_ramstyle="register" */;//блок памяти
reg [addr_width -1:0]addr_reg ; integer i; always @ (posedge clk ) begin
if( en==1) begin
if (rst )addr_reg=0;
else addr_reg=addr;
if (we ==1)begin mem[addr_reg] = #(TW)di ; do=di; end else begin do=#(TR) mem[addr_reg]; end
end
end
assign #(TR) do= mem[addr_reg];
endmodule //RAM
// ниже автомат----------------------
`define REG_DELAY 1 // условная задержка регистров `define IDLE_ST 1 //последовательность кодов состояний `define R_SI_ST 2// автомата `define R_SJ_ST 3// `define W_SJ_ST 4// `define W_SI_ST 5// `define R_SIJ_ST 6// `include "c:\synplicity\synplify\lib\xilinx\virtex.v" module rc4_ver_pol (clk, rst,datain,dataout,done );
input rst, clk ; input [7:0] datain;//входной байт output [7:0] dataout;//результат шифрования-дешифрования output done;//сигнал готовности результата reg done;reg [7:0] dataout;reg [7:0] i_reg,next_i_reg,j_reg,next_j_reg; reg [7:0] tmp_si,next_tmp_si,tmp_sj,next_tmp_sj;//tmp_output; reg [5:0] state,next_state; reg [7:0] addr; reg we,en,next_en; reg[7:0]di;wire [7:0]do;
wire [8:0]addr_w={ 1'b0,addr};
//НИЖЕ КОНКРЕТИЗАЦИЯ КОМПОНЕНТЫ ramb4_s8p
/* ramb4_s8p ss (.we( we),.en(en),.rst(rst),.clk(clk),
.addr(addr_w),.di(di),.do(do)); */ //НИЖЕ КОНКРЕТИЗАЦИЯ КОМПОНЕНТЫ RAMB4_S8 //из библиотеки синтезатора Sinplyfy - она подключена include
RAMB4_S8 ss (.WE( we),.EN(en),.RST(rst),.CLK(clk),
.ADDR(addr_w),.DI(di),.DO(do)); //FSM always @(state or do or rst or en or tmp_si or
i_reg or j_reg or datain or tmp_sj) begin next_state=state; next_i_reg=i_reg;next_j_reg=j_reg; next_tmp_si=tmp_si;
202 Глава 6. Реализация шифроалгоритма RC4 на ПЛИС
next_tmp_sj=tmp_sj;
next_en =en ;done=0;we=0;dataout=0;
addr=0;di=0; if (rst==0)begin case(state)
`IDLE_ST:begin
next_state=`R_SI_ST; addr=i_reg; we=0; next_en=1; next_i_reg=1; next_j_reg=0; end
`R_SI_ST: begin
next_state=`R_SJ_ST;
we=0;//далее read пойдет
next_tmp_si= do; //tmp=S[i]
addr= j_reg + do ;//J=J+S[i]
next_j_reg=addr;
end
`R_SJ_ST: begin
next_state=`W_SJ_ST;
next_tmp_sj = do; //tmp=S[ j]
addr=i_reg;
di= do;
we=1;//далее запись пойдет
end
`W_SJ_ST: begin
next_state=`W_SI_ST; // S[ j]=S[i] addr= j_reg; //j_reg; di= tmp_si;
we=1;//далее запись пойдет
end
`W_SI_ST: begin
next_state=`R_SIJ_ST; // S[ i]=S[j] addr= tmp_si +tmp_sj; //S[ j]+S[i]
we=0;//read next_i_reg= i_reg +1 ; end
`R_SIJ_ST: begin
next_state=`R_SI_ST;
we=0 ; // далее read пойдет
dataout= datain ^ do;// кодирование ^ xor
// $display( "dataout=%b,time=%t",dataout,$time);
done= 1;//выход готов,вход заблокирован //i_reg= #(`REG_DELAY) i_reg +1 ;
addr= i_reg ;
end
default: begin next_state=`IDLE_ST; // $display("ERROR STATE \n ");
end
Глава 6. Реализация шифроалгоритма RC4 на ПЛИС 203
endcase end//rst
end //fsm // ниже смена состояния автомата always @( posedge clk)begin
if (rst==1)begin state=`IDLE_ST;
//next_state=`IDLE_ST;
i_reg=1;j_reg=0;en=1; end else begin state=next_state;
i_reg=next_i_reg; en=next_en;
j_reg=next_j_reg; tmp_si= next_tmp_si; tmp_sj=next_tmp_sj;
end
end
endmodule
6.5.2. Òåñò
При тестировании простым заполнением массива S адресами использован
прием доступа из внешнего модуля к внутренним переменным компоненты.
`timescale 1ns/100ps module tb_rc4_ver_pol; parameter debug=1; reg rst, clk ; reg [7:0] datain;//входной байт
wire [7:0] dataout;//результат шифрования-дешифрования wire done;//сигнал готовности результата
//ниже конкретизация компоненты
rc4_ver_pol uut (clk, rst,datain,dataout,done );
integer i; initial begin clk =0 ;repeat (100 )begin #10;clk=~clk;end end initial begin rst =0 ; #10;rst=1; #42; rst=0; end initial datain=8'b00001111;
initial for (i=0;i<=255;i=i+1)begin
uut.ss.mem[i]=i;
// uut.ss.RAMB4_S8[i]=i;
if( debug==1)
$display(" i=%d,uut.ss.mem[i]=%d",i,uut.ss.mem[i]);//mem load
// $display("mem[i]=%0d",mem[i]);
end
endmodule//tb_rc4_ver_pol
Упражнения
1. Добавьте в VERILOG-описание автомата инициализацию массива S.
2. Постройте иной тест проверки VERILOG-описания автомата.
204 Глава 6. Реализация шифроалгоритма RC4 на ПЛИС
6.5.3. Peзультаты синтеза
Ниже фрагмент протокола системы синтеза при использовании блочной па-
мяти кристалла.
@I::"c:\synplicity\synplify\examples\verilog\xilinx\rc4_ver_pol_las\rc4_ver_pol.v" @I:"c:\synplicity\synplify\examples\verilog\xi­linx\rc4_ver_pol_las\rc4_ver_pol.v":"c:\synplicity\synplify\lib\xilinx\virtex.v" Verilog syntax check successful! File c:\synplicity\synplify\examples\verilog\xilinx\rc4_ver_pol_las\rc4_ver_pol.v changed
- recompiling Selecting top level module rc4_ver_pol Synthesizing module RAMB4_S8 Synthesizing module rc4_ver_pol Extracted state machine for register state State machine has 6 reachable states with original encodings of:
000001 000010 000011 000100 000101
000110 @END Process took 0.38 seconds realtime, 0.38 seconds cputime Setting fanout limit to 100 List of partitions to map:
view:work.rc4_ver_pol(verilog) Encoding state machine work.rc4_ver_pol(verilog)-state_h.state[5:0] original code -> new code // новая кодировка состояний !!!!!!
000001 -> 000001
000010 -> 000010
000011 -> 000100
000100 -> 001000
000101 -> 010000
000110 -> 100000 @N:"c:\synplicity\synplify\examples\verilog\xi­linx\rc4_ver_pol_las\rc4_ver_pol.v":138:0:138:5|Found counter in view:work.rc4_ver_pol(verilog) inst i_reg[7:0] Clock Buffers:
Inserting Clock buffer for port clk, TNM=clk Net buffering Report for view:work.rc4_ver_pol(verilog): No nets needed buffering. Found clock clk with period 8.3333ns
##### START TIMING REPORT ##### Performance Summary
*********************
Requested Estimated Requested Estimated
Clock Frequency Frequency Period Period Slack
clk 120.0 MHz 85.8 MHz 8.3 11.7 -3.3
============================================
Resource Usage Report Mapping to part: xcv1000cg560-4
Глава 6. Реализация шифроалгоритма RC4 на ПЛИС 205
Cell usage: FDE 25 uses FD 2 uses GND 1 use VCC 1 use XORCY 22 uses MUXCY_L 21 uses FDRE 8 uses FDR 5 uses RAMB4_S8 1 use I/O primitives: OBUF_F_24 9 uses IBUF 9 uses BUFGP 1 use I/O Register bits: 0 Register bits not including I/Os: 40 (0%) RAM/ROM usage summary BlockRams:1of32(3%) //îäèí áëîê èç 32 Global buffer usage summary BUFGs + BUFGPs: 1 of 4 (25%) Mapping Summary: Total LUTs: 94 (0%) Found clock clk with period 8.3333ns Mapper successful!
Выводы
Результаты синтеза упрощенного VERILOG-проекта RC4 удовлетворительны.
При реализации памяти на блочной памяти затрачено: один блок памяти (512 × 8) и 94 LUT (<1 % от ресурсов кристалла), а тактовая частота выше 85 мегагерц при 5 тактах на один байт шифрируемого кода. При реализации памяти автомата на триггерах получаются худшие результаты — затрачено 2800 LUT и тактовая часто­та 38 мегагерц.
Глава 7. Функциональная модель
микросхемы двухпортовой синхронной
памяти
В данной главе рассматривается разработка и верификация высокопараметри­зированной функциональной модели микросхемы памяти, иллюстрируются во­просы описания сложных процессов с контролем временных соотношений (VHDL-пакет Vital_Timng, VERILOG-блок specify), рассмотрена тестирующая программа с развитым набором процедур, позволяющих иммитировать различные режимы работы двух блоков VHDL и двух блоков VERILOG-моделей микросхем.
Показано, что сложность тестирующей программы в реальных проектах со­вместима со сложностью модели моделируемой системы. Трудоемкость такого проекта примерно 1,5 человеко-месяца (при тиражировании общих фрагментов в серии моделей, подобных RAM, она снижается в 3—4 раза.
7.1. Cостояние вопроса
Функциональные модели микросхем памяти: RAM, FIFO и т. п., доступные вне фирм-разработчиков микросхем, обычно не являются синтезабельными и в основном предназначаются для использования при верификации моделей систем, включающих эти компоненты.
Различают два типа функциональных моделей памяти:
— VITAL-совместимые, пригодные для верификации схем после этапа трас­сировки с учетом задержек в проводниках;
— модели уровня шинного интерфейса (будем называть их просто функцио­нальными или моделями уровня шинного интерфейса (bus functional model), в основном предназначенные для функциональной верификации RTL-описаний.
Некоторые производители микросхем памяти включают в число свободно рас­пространяемых через Интернет ресурсов не только технические описания (data sheet), но также и функциональные VERILOG- и VHDL-модели своих микросхем. В табл. 7.1 в качестве примера приведены данные на конец 2000 года о HDL-моде­лях микросхем памяти произвольного доступа (RAM) на веб-сайтах таких компа­ний, как Cypress (www.cypress.com), IDT (www.idt.com) и Micron (www.micron.com
Многие другие компании предоставляют подобный продукт лишь платно. В их числе компания DENALYsoft — разработчик моделей микросхем памяти, про­изводимых ведущими фирмами. Ее библиотека включает более 3000 моделей RAM, FIFO и т. п.
Бесплатные модели привлекательны, но лишь при определенных гарантиях их надежности и точности. Подобные гарантии мы в первую очередь ожидаем от мо­делей, получаемых от производителей микросхем. Однако в этой части ожидания как «халявных», так и платных пользователей не всегда оправдываются. Pазработ­чики микросхем, боясь утечки секретов, не дают потребителям свои синтезабель­ные модели и разрабатывают функциональные отдельно, часто независимо от синтезабельных и соответственно не всегда полностью функционально совмести мые с реальными схемами.
).
-
Глава 7. Функциональная модель микросхемы двухпортовой памяти 207
Хотя для части микросхем (особенно последнего выпуска) модели отсутству­ют (см. табл. 7.1), но имеющиеся обычно высоко параметризированы и каждая модель покрывает несколько функционально подобных микросхем разной емко­сти или быстродействия. В табл. 7.2 приведены параметры моделей RAM.
Таблица 7.1. Функциональные HDL-модели микросхем RAM
Фирма
Cypress 200 50 50
IDT 150 30 VHDL — не разрабатывают
Micron 200 60 30
Общее число типов
производимых RAM
Таблица 7.2. Некоторые параметры функциональных моделей RAM
Количество
VERILOG-моделей
Количество VHDL-моделей
Параметр модели/Фирма-разработчик Cypress IDT(ver) Micron
Объем памяти + (ver) — +
Длина слова, длина адреса + (ver) — +
Значения задержек + + +
Время выборки + + +
Контроль нарушений рабочих условий (включен постоянно)
Возможность варьирования задержек внутренних регистров
Модель выходных задержек max max max
Наличие отладочного режима — — —
Управление выдачей отладочных сообщений на печать
Наличие неопределенного (Х) значения на выходе во время переходных процессов
«+» — означает наличие легко варьиируемого параметра; «–» — означает отсутствие такого параметра; «on» — параметр присутствует постоянно; (ver) — имеется только в VERILOG-моделях; max — модель отражает только максимальную задержку (наихудшим считается максимальная задержка памяти.
åñòü åñòü åñòü
—— —
—— —
—— —
Параметр «размер памяти» (Memory size) полезен тем, что помогает, напри­мер, моделировать неполный объем памяти кристалла и, соответственно, снизить требования к памяти инструментальной ЭВМ.
Параметр «режим отладки» (debug, message on/off) представляется полезным, так как во многих случаях не исключено, что модель памяти неверно работает в особых условиях.
Интересно, что несмотря на усилия по стандартизации HDL-описаний моде­лей памяти, в том числе разработке новой версии VHDL-стандарта VITAL-2000, включающей пакеты моделирования RAM , общий стиль пока не наблюдается. VITAL-пакеты используются в моделях RAM нечасто (см. табл. 7.3). Возможная причина — вносимое ими снижение скорости моделирования.
208 Глава 7. Функциональная модель микросхемы двухпортовой памяти
Таблица 7.3. Характеристики VHDL-моделей RAM
Характеристика /Производитель
VHDL-моделей
Применение Vital íåò íåò
Применение Vital memory package íåò íåò
Отображение слова памяти типом Std_logic_vector Std_logic_vector
Характеристика /Производитель
моделей
Применение системных процедур типа $setuphold для контроля временных соот­ношений
Применение системных процедур для вы­числения задержек на путях сигналов
Cypress Micron
Таблица 7.4. Характеристики VERILOG-моделей RAM
Cypress Idt Micron
Äà Äà Äà
Íåò Äà Äà
Как видно из табл. 7.3 и 7.4, Verilog-модели относительно Vital более стандар­тизованы.
7.2. Некоторые свойства моделей RAM
Защита фирменных секретов не способствует надежности моделей
Модели плохо работают в граничных режимах.
Постоянное отставание сроков выпуска моделей от сроков выпуска микросхем
В частности, оно определяется большой трудоемкостью их создания и вери­фикации (четырехпoртовые RAM с встроенными функциями JTAG требуют 2—4 человекомесяца).
Привязка модели к одному из компиляторов
Например, Cypress Verilog-модели с трехстабильными выходными буферами, описанными без применения Verilog-примитивов типа buff, bufif, pmos, не прохо­дят на Verilog-XL-симуляторе.
Неэффективное использование памяти инструментальной ЭВМ VHDL-моделями
Verilog-модели расходуют 2 разряда на представление одного бита массива па­мяти.
VHDL-модели обычно тратят 8 разрядов (байт) на каждый бит моделируемой памяти при отображении массива как переменной и еще больше в случае отобра­жения сигналом (Cadence-NC VHDL и ModelTech-Modelsim), хотя 4 бит кажется вполне достаточным даже при использовании 9-значного алфавита std_logic_1164 (см. табл. 7.5). Например, модель 9 mbit RAM (256 k*36) требует 10 000—12 000 килобайт памяти с учетом дополнительных затрат, вызванных неэффективной ра­ботой супервизора управления памятью операционной системы.
Одним из методов преодоления этого ограничения является моделирование слова памяти не вектором, а целым значением.
Глава 7. Функциональная модель микросхемы двухпортовой памяти 209
Таблица 7.5. Способы отображения слова памяти средствами VHDL
Способ отображения слова
n-разрядного памяти
STD_LOGIC_VECTOR 8*n высшая высшая
BIT_VECTOR 8*n низкая высшая
INTEGER 1*n низкая низкая
LONGX_INTEGER 1*n +1 средняя низкая
Требуемое число
áèò
Точность
модели
Скорость
моделирования
(Низкая скорость означает, что присваивание при наличии функции преобра­зования типа примерно в 20 раз медленнее) variable sdram: mem_std_logic;
sdram( I):=IO;
type mem_int is array (0 t0 10) of integer;
type mem_std_logic is array (0 t0 10) of std_logic_vector( 10 to 0);
variable int_sdram:mem_int;
int_sdram(I):=STD_MEMDATA_TO_longx_integer(IO);
Для большей точности моделирования можно один из разрядов при отобра­жении слова памяти целым (например знаковый) отводить под признак неопреде­ленности. LONGX_INTEGER — это название подразумевает использование по­добного приема.
Если хоть один из разрядов записываемого в память слова равен Х, в память записывается целое число < 0. При чтении такое число конвертируется в код «все Х» (OTHERS=>'X').
Ниже пример конвертирования
При записи:
Std_logic_vector значение “00000111” конвертируется â 7
“00001X01” â -1(initial'U' ) “00XX1101” â -1
При чтении:
Integer значение 7 â “00000111”
-1 â “XXXXXXXX”
Если слово памяти больше 31 разряда, то можно использовать структуру из нескольких целых. Пример реализации такого пакета см. ниже.
Нестандартные методы контроля запрещенных режимов
и реализации задержек
Примеры реализации контроля времени предустановки/удержания входного сигнала средствами HDL.
VHDL
В примере: CLK-тактовый сигнал, IO-шина данных, Tdh-время предустанов ки данных на шине, Tdh- время удержания, (CE_n = '0') и (WR = '0') и (MRST_n ='1')--условие записи в память.
-
210 Глава 7. Функциональная модель микросхемы двухпортовой памяти
VHDL
a) Без использования пакета Vital_timing
Текст взят из модели микросхемы памяти фирмы Cypress.
-- проверка удержания Process (CLK'DELAYED(Tdh))
-- процесс запускается задержанным сигналом CLK BEGIN
IF (CLK'DELAYED(Tdh) = '1') AND (CLK'DELAYED(Tdh)'EVENT)
THEN ASSERT (IO'LAST_EVENT = 0 ns) OR (IO'LAST_EVENT > Tdh) REPORT "Hold time violation on Data" SEVERITY Error;
END IF;
END Process;
-- проверка времени предустановки Process (CLK) BEGIN
ASSERT (IO'LAST_EVENT >= Tds) REPORT "Setup time violation on Data bus" SEVERITY Error;
END IF;
END Process;
Это вариант самой быстродействующей проверки, но зато требующий опреде­ленной квалификации от программиста и иногда не свободен от ошибок. Напри­мер, если IO — это порт типа INOUT, то эти процессы запускаются не только при записи в память, но и при чтении. Поэтому возможны ложные выдачи преду­преждений о нарушении временных соотношений при чтении.
b) Вариант с использованием стандартной процедуры пакета Vital_Timing.
TimingChecks: PROCESS ( CLK, IO)
--ниже обьявлены вспомогательные переменные
VARIABLE Tviol_IO_CLK : X01 := '0';------set to 'X' when violation VARIABLE TD_IO_CLK : VitalTimingDataType;
BEGIN
IF (TimingChecksOn) THEN -- если проверка включена
VitalSetupHoldCheck (
TestSignal => IO,-- проверяемый сигнал TestSignalName => "IO",--имя для сообщения о нарушении RefSignal => CLK,-- опорный сигнал RefSignalName => "CLK",--èìÿ SetupHigh => Tds, --время предустановки 1 SetupLow => Tds,-- время предустановки 0 HoldHigh => Tdh,--время удержания 1 -hold time HoldLow => Tdh, CheckEnabled => (CE_n = '0') AND (WR = '0')AND (MRST_n ='1'),
--условие записи в память RefTransition => '/', --проверять при фронте CLK HeaderMsg => HeaderMsgText,
--значение этой переменной добавляется к сообщению TimingData => TD_IO_CLK, XOn => XOn,--включен режим записи Х при нарушении
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]