Современная электроника №3/2023
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 14 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА • № 3 / 2023 как эталонные используются системы « большой тройки » – Siemens, Cadence, Synopsys, и в некоторых случаях систе - ма моделирования XSIM, встроенная в САПР ПЛИС Vivado от Xilinx. Сложные тесты Помимо наборов тестов , предназна - ченных для проверки системы моде - лирования Simtera и покрывающих язык Verilog, приходится разрабаты - вать тесты , охватывающие синтеза - бельное подмножество языка , по типу Beacon-RTL-Verilog. Такие тесты при - годны также для верификации систем синтеза и имплементации логических схем . В таких тестах в виде отдельных модулей , а также отдельных файлов , Рис . 3. Результаты проверки работы Simtera на тесте bitsel2.v ( тесты IcarusVerilog) Рис . 4. Модифицированное описание микросхемы из четырёх элементов 2 ИНЕ Рис . 5. Тестбенч для верификации синтеза и имплементации разделяются описания синтезируемо - го объекта и использующего его тест - бенча . В качестве примера ниже ( рис . 4) приводится модифицирован - ное ( оригинал – тест из библиоте - ки IceChips Тима Руди [4]) описание микросхемы из четырёх элементов 2 ИНЕ ( микросхема 4-2 ИНЕ , в серии 74 обозначаемая как 7400) и её тестбен - ча ( соответственно файлы ttl_7400.v и ttl_7400_tb.v). Описание микросхемы 7400 параметризировано , что позволя - ет при желании настраивать модель на значения задержек разных серий микросхем при поведенческом модели - ровании . Подобные модели , например , можно включать в библиотеку схемо - технического моделирования Simtera и Delta Design [5]. Приведённый ниже тестбенч ( рис . 5) нами параметризирован и может использоваться не только для верификации системы моделирования Simtera, но и для верификации синтеза и имплементации . В последнем случае при временном или посттрассировоч - ном моделировании параметры задер - жек DELAY_RISE = 5, DELAY_FALL = 3 схемы 4-2 ИНЕ заменяются в тестбен - че на задержки , рассчитываемые САПР после трассировки сигналов в импле - ментируемой схеме . Результаты прогона теста на Simtera выведенными ( осциллограф ) времен - ными диаграммами и данными на кон - соли представлены на рис . 6. На момент написания статьи синтез ttl_7400.v ещё не поддерживался в Simtera, тем не менее в системе регрессионного тестирования заложены тесты поведен - ческого и логического синтеза . На рис . 7 представленырезультатысинтеза поведен - ческого Verilog описания полного сумма - тора (test ex4_7.v) ( описание заимствовано из книги Дэвида и Сары Харриссов [6]) с использованиемдвух синтезаторов – син - тезатора , встроенного в Simtera, HDL опе - раторов синтезатора с открытым кодом . Заключение Система моделирования Delta Design Simtera в настоящее время находится на стадии бета - тестирования подсистем поведенческого моделирования и синте - за на базе языков Verilog и SystemVerilog. `Ɵmescale 1ns / 1ps // Company: NIIVK // Engineer: POLIAKOV // Design Name: 74XX LIB // Module Name: TTL_7400 4 nand gates module Ʃl_7400 #( parameter BLOCKS = 4 , WIDTH_IN = 2 , DELAY_RISE = 5 , DELAY_FALL = 3 ) ( input [ BLOCKS * WIDTH_IN - 1:0 ] A , output [ BLOCKS - 1:0 ] Y ); reg [ BLOCKS - 1:0 ] computed ; reg tmp3 [ 0:BLOCKS - 1 ]; integer i , j , k ; reg tmp , tmp1 ; always @(*) begin k = 0 ; for ( i = 0 ; i < BLOCKS * WIDTH_IN ; i = i + WIDTH_IN ) begin tmp = A [ i ]; for ( j = 0 ; j < WIDTH_IN ; j = j + 1 )begin tmp = tmp & A [ i + j ]; end tmp1 = ~ tmp ; tmp3 [ k ]= tmp1 ; k = k + 1 ; end computed ={ tmp3 [ 3 ], tmp3 [ 2 ], tmp3 [ 1 ], tmp3 [ 0 ]}; end assign #( DELAY_RISE , DELAY_FALL ) Y = computed ; endmodule `Ɵmescale 1ns / 1ps `include "Ʃl_7400_tb.v" // Company: NIIVK // Engineer: POLIAKOV // Module Name: test // Project Name:SIMTERA testsuit and 74XX_ LIBRARIES model DESIGN // Target Devices: TTL_7400 four nand gates unit module test #( parameter BLOCKS = 4 , WIDTH_IN = 2 , DELAY_RISE = 5 , DELAY_FALL = 3 ) () ; // DUT inputs reg [ BLOCKS * WIDTH_IN - 1:0 ] A ; // DUT outputs wire [ BLOCKS - 1:0 ] Y ; integer i ; integer FAILED = 0 ; Ɵme DELAY_MAX ; // task task MAX_DEL ; if ( DELAY_FALL > DELAY_RISE ) DELAY_MAX = DELAY_FALL ; else DELAY_MAX = DELAY_RISE ; endtask reg [ WIDTH_IN - 1:0 ] Block1 ; reg [ WIDTH_IN - 1:0 ] Block2 ; reg [ WIDTH_IN - 1:0 ] Block3 ; reg [ WIDTH_IN - 1:0 ] Block4 ; ///////////////////////////////////////////////// . // DUT- UUT-ИНСТАЛЛЯЦИЯ модуля Ʃl_7400 Ʃl_7400 dut ( . A ( A ),. Y ( Y )); initial begin # 100 ; //задержка на начальный период установки сигналов // в кристалле ПЛИС // все входы микросхемы в 1,ожидается выходы=0 Block1 = { WIDTH_IN { 1'b1}} ; Block2 = { WIDTH_IN { 1'b1}} ; Block3 = { WIDTH_IN { 1'b1}} ; Block4 = { WIDTH_IN { 1'b1}} ; A = { Block4 , Block3 , Block2 , Block1 }; # DELAY_FALL ; # 0.1 ; for ( i = 0 ; i < BLOCKS ; i = i + 1 ) begin if ( Y[i] !== 1'b0) $display("FAILED"); end # 0 // all zeroes -> 1, enough Ɵme for output to rise Block1 = { WIDTH_IN { 1'b0}} ; Block2 = { WIDTH_IN { 1'b0}} ; Block3 = { WIDTH_IN { 1'b0}} ; Block4 = { WIDTH_IN { 1'b0}} ; A = { Block4 , Block3 , Block2 , Block1 }; # DELAY_RISE ; # 0.1 ; for ( i = 0 ; i < BLOCKS ; i = i + 1 ) begin // if ( Y[i] !== 1'b1) $display("FAILED"); end # 0 /// Остальные тестовые наборы для сокращения объёма статьи опущены # 100 $display ( " PASSED " ); end endmodule
RkJQdWJsaXNoZXIy MTQ4NjUy