RENESAS ForgeFPGA सफ्टवेयर सिमुलेशन

RENESAS ForgeFPGA सफ्टवेयर सिमुलेशन

महत्त्वपूर्ण जानकारी

सिमुलेशन भनेको RTL कोडले इच्छित तरिकाले व्यवहार गर्छ कि गर्दैन भनी जाँच गर्न विभिन्न समयमा डिजाइनमा फरक-फरक इनपुट स्टिमुलस लागू गर्ने प्रविधि हो। यो डिजाइन को बलियोता प्रमाणित गर्न प्रयोग गरिन्छ। सिमुलेशनले प्रयोगकर्तालाई अनुमति दिन्छ view डिजाइनमा डिजाइनको वर्णन कसरी हुन्छ भनेर बुझ्न सम्बन्धित संकेतहरूको समय रेखाचित्र file व्यवहार गर्छ।

टेस्टबेन्चहरू कोडका टुक्राहरू हुन् जुन सिमुलेशनको लागि प्रयोग गरिन्छ। एक साधारण टेस्टबेन्चले एकाइ अन्डर टेस्ट (UUT) लाई इन्स्ट्यान्टियट गर्नेछ र इनपुट ड्राइभ गर्दछ। Go Configure सफ्टवेयरले Icarus Verilog (iVerilog) र GTKWave प्रयोग गर्दछ टेस्टबेन्चमा प्रदान गरिएको उत्तेजनाको साथ सिमुलेशन वेभफॉर्महरू अवलोकन गर्न।

यो कागजातले तपाइँको प्रणालीमा Icarus स्थापना गर्दा लिनु पर्ने कदमहरू र कसरी सफल सिमुलेशन चलाउने भनेर वर्णन गर्दछ।

Icarus Verilog स्थापना गर्दै

a। बाट Icarus Verilog (IVerilog) को नवीनतम संस्करण स्थापना गर्नुहोस् https://bleyer.org/icarus/
b। PATH मा IVerilog थप्न निश्चित हुनुहोस् र यसलाई GTKWave स्थापना गर्न दिनुहोस् (चित्र 1 हेर्नुहोस्)
Icarus Verilog स्थापना गर्दै

c। गो कन्फिगर सफ्टवेयर खोल्नुहोस् र फोर्ज कार्यशाला खोल्नको लागि भाग चयन गर्नुहोस्: SLG47910(Rev BB) (चित्र 2 हेर्नुहोस्)।
Icarus Verilog स्थापना गर्दै

d। माथिको उपकरणपट्टीको बीचमा रहेको FPGA सम्पादकमा क्लिक गर्नुहोस् वा प्रयोगकर्ताले सञ्झ्यालको बीचमा रहेको FPGA कोर संरचनामा डबल-क्लिक गर्न सक्नुहुन्छ।
Icarus Verilog स्थापना गर्दै

e। फोर्ज कार्यशाला भनिने नयाँ विन्डो खुल्छ। माथिको मेनु उपकरणपट्टीमा, विकल्पहरू → सेटिङहरूमा क्लिक गर्नुहोस्। सेटिङ संवाद बक्समा, प्रयोगकर्ता सेटिङ ट्याब अन्तर्गत उपकरणहरूमा जानुहोस्। Icarus Verilog र GTKWave दुवैको लागि "प्रणाली वातावरण बाकस" प्रयोग गर्नुहोस् अचयन गर्नुहोस्। Iverilog र GTKWave को मार्ग तपाईंको प्रणालीमा सुरक्षित गरिएको ठाउँमा थप्नुहोस् (चित्र 4 हेर्नुहोस्)।
Icarus Verilog स्थापना गर्दै

तपाईं सबै testbench सिमुलेट गर्न सेट हुनुहुन्छ र माथिका चरणहरूले Go Configure सफ्टवेयरमा testbench सिमुलेट गर्दा GTKWave स्वचालित रूपमा सुरु हुन्छ भन्ने कुरा सुनिश्चित गर्दछ।

टेस्टबेन्च

कुनै पनि प्रणालीलाई सफलतापूर्वक कार्यान्वयन गर्नको लागि सबैभन्दा महत्त्वपूर्ण चरण डिजाइन र यसको कार्यक्षमता प्रमाणित गर्नु हो। हार्डवेयर लागू गरेपछि जटिल प्रणाली प्रमाणित गर्नु बुद्धिमानी विकल्प होइन। यो पैसा, समय, र स्रोतको हिसाबले अप्रभावी छ। तसर्थ, FPGA को मामला मा, Verilog स्रोत कोड परीक्षण गर्न testbench प्रयोग गरिन्छ।

मानौं हामीसँग एउटा इनपुट छ जुन 11 बिटको छ, र हामी सबै सम्भावित इनपुट संयोजन मानहरू जस्तै (211) को लागि उपकरण परीक्षण गर्न चाहन्छौं। यो धेरै ठूलो संख्यामा संयोजन भएको हुनाले यसलाई म्यानुअल रूपमा परीक्षण गर्न असम्भव छ। यस्तो अवस्थामा, टेस्टबेन्चहरू धेरै उपयोगी हुन्छन् किनकि तपाईंले डिजाइनलाई सबै सम्भावित मानहरूको लागि स्वचालित रूपमा परीक्षण गर्न सक्नुहुन्छ र त्यसैले, परीक्षण डिजाइनको विश्वसनीयता पुष्टि गर्नुहोस्। भेरिलॉग टेस्टबेन्चहरू कुनै पनि भौतिक हार्डवेयर उपकरणको आवश्यकता बिना डिजाइनहरू अनुकरण र विश्लेषण गर्न प्रयोग गरिन्छ।

परीक्षण अन्तर्गत एक डिजाइन, DUT को रूपमा संक्षिप्त, हामी परीक्षण गर्न चाहन्छौं कार्यक्षमता को एक संश्लेषण मोड्युल हो। अर्को शब्दमा, यो सर्किट डिजाइन हो जुन हामी परीक्षण गर्न चाहन्छौं। हामी हाम्रो DUT वर्णन गर्न सक्छौं Verilog मा तीन मोडलिङ शैलीहरू मध्ये एक प्रयोग गरेर - गेट-स्तर, डाटाफ्लो, वा व्यवहार।

एक testbench संश्लेषण योग्य छैन, त्यसैले यो सिमुलेशन उद्देश्यका लागि मात्र प्रयोग गरिन्छ। यसले प्रयोगकर्तालाई टेस्टबेन्चहरू लेख्नका लागि "for", "$display" र "$monitor" आदि जस्ता किवर्डहरू जस्तै Verilog निर्माणहरूको पूर्ण दायरा प्रयोग गर्न अनुमति दिन्छ। एउटा साधारण टेस्टबेन्चले एकाइ अन्डर टेस्ट (UUT) वा डिभाइस अन्डर टेस्ट (DUT) र ड्राइभ इनपुटहरू इन्स्ट्यान्टियट गर्नेछ।

टेस्टबेन्च बुझ्दै

टेस्टबेन्च बुझ्दै

Testbench मा टाइमस्केल परिभाषा

अनुकरण गर्दा, सफ्टवेयरलाई समय कसरी परिभाषित गरिएको छ भनेर जान्न आवश्यक छ। ढिलाइ एकाइ `टाइमस्केल निर्देशन प्रयोग गरेर निर्दिष्ट गरिएको छ, जसले समय एकाइ र यसलाई पछ्याउने मोड्युलहरूको सटीकता निर्दिष्ट गर्दछ। `टाइमस्केलले समयको सर्तमा #1 भनेको के हो भनेर निर्धारण गर्न मद्दत गर्दछ। # टाइमस्केलमा निर्दिष्ट समय एकाइ अनुसार प्रणालीमा प्रस्तुत हुन ढिलाइ परिभाषित गर्न प्रयोग गरिन्छ। त्यसैले, #1 को मतलब 1 ns ढिलाइ हुन्छ यदि time_unit ns मा छ भने।

वाक्य रचना:
'टाइमस्केल / /

time_unit भनेको #1 को ढिलाइले प्रतिनिधित्व गर्ने समय हो। time_precision आधारले समय एकाइहरूको सापेक्ष कति दशमलव बिन्दुहरू परिशुद्धता प्रयोग गर्ने प्रतिनिधित्व गर्दछ। (चित्र 23 मा रेखा 5 हेर्नुहोस्)

हामी एउटै डिजाइनमा विभिन्न समय एकाइहरू प्रयोग गर्न टाइमस्केल निर्माणहरू प्रयोग गर्न सक्छौं। प्रयोगकर्ताले याद गर्न आवश्यक छ कि ढिलाइ निर्दिष्टीकरणहरू संश्लेषण योग्य छैनन् र हार्डवेयर तर्कमा रूपान्तरण गर्न सकिँदैन। ढिलाइ कार्यहरू सिमुलेशन उद्देश्यका लागि पूर्ण रूपमा हुन्। $समय र $वास्तविक समय प्रणाली प्रकार्यहरूले हालको समय फर्काउँछ र पूर्वनिर्धारित रिपोर्टिङ ढाँचा अर्को प्रणाली कार्य $timeformat सँग परिवर्तन गर्न सकिन्छ।

ExampLe: 

`टाइमस्केल 10us/100ns
`टाइमस्केल 1ns/1ps
#10 रिसेट = 1; // 10 एनएस द्वारा संकेत ढिलाइ गर्दछ
#0.49 $डिस्प्ले ("T = %0t समय #0.49", $रियलटाइम);

निर्दिष्ट ढिलाइ #0.49 हो जुन आधा एकाइ समय भन्दा कम छ। यद्यपि, समय परिशुद्धता 1ps हुन निर्दिष्ट गरिएको छ र त्यसैले सिम्युलेटर 1ns भन्दा सानो जान सक्दैन जसले यसलाई दिइएको ढिलाइ कथन र उपज 0ns बनाउँछ। त्यसैले, यो कथन कुनै ढिलाइ प्रदान गर्न असफल भयो।

सिमुलेशन लग: 

T = 1 समय #0.49 मा

मोड्युल घोषणा

कुनै पनि testbench मा मोड्युल घोषणा मुख्य Verilog कोड विपरीत छ। टेस्टबेन्चमा, मोड्युल कुनै पनि टर्मिनल पोर्टहरू बिना नै घोषणा गरिएको छ। (चित्र 25 मा रेखा 5 हेर्नुहोस्)

वाक्य रचना: 

मोड्युल ;

मोड्युल घोषणालाई मुख्य डिजाइनमा पहिले परिभाषित इनपुट र आउटपुट संकेतहरू परिभाषित गरेर पछ्याइएको छ। file.
हामी सिमुलेशनको समयमा ड्राइभिङ र निगरानी संकेतहरूको लागि दुई प्रकारका संकेतहरू प्रयोग गर्छौं। reg डाटाटाइपले मानलाई नयाँ मान तोकिएसम्म राख्छ। यो डाटाटाइपलाई सधैं वा प्रारम्भिक ब्लकमा मात्र मान तोक्न सकिन्छ।
तार डाटाटाइप भौतिक जडानको जस्तै हो। यसले पोर्ट, असाइन स्टेटमेन्ट वा रेगद्वारा सञ्चालित मान होल्ड गर्नेछ। यो डाटा प्रकार प्रारम्भिक वा सधैं ब्लक मा प्रयोग गर्न सकिँदैन। कुनै पनि प्यारामिटर र पूर्णांक घोषणा पनि यस खण्डमा गरिन्छ।

ExampLe:
रेग ए, बी; // HDL कोडमा इनपुटलाई testbench मा reg को रूपमा परिभाषित गरिएको छ
तार y; // HDL मा आउटपुट संकेत testbench मा तार को रूप मा परिभाषित गरिएको छ

DUT स्थापना

टेस्टबेन्चको उद्देश्य भनेको हाम्रो DUT मोड्युलले काम गरिरहेको छ कि छैन भनी प्रमाणित गर्नु हो। तसर्थ, हामीले मोड्युल परीक्षण गर्नको लागि हाम्रो डिजाइन मोड्युल इन्स्ट्याट गर्न आवश्यक छ।

वाक्य रचना: 

(। (संकेत १),। signal1>(signal1));

ExampLe:

ALU d0 (.a(a), // ALU मा संकेत "a" ALU_tb मोड्युलमा "a" मा जडान हुनुपर्छ
.b(b), // सिग्नल "b" ALU मा ALU_tb मोड्युलमा "b" मा जडान हुनुपर्छ
.c(c)) ;// ALU मा सिग्नल "c" लाई ALU_tb मोड्युलमा "c" मा जोडिएको हुनुपर्छ

हामीले परीक्षण मोड्युलमा DUT मोड्युल ALU लाई इन्स्ट्याट गरेका छौं। उदाहरण नाम (d0) प्रयोगकर्ताको रोजाइ हो। अवधि "।" संग संकेतहरू तिनीहरूको अगाडि ALU मोड्युल भित्रका संकेतहरूको नामहरू छन्, जबकि तिनीहरू परीक्षण बेन्चमा जडान भएका तार वा रेग कोष्ठक () मा संकेतको छेउमा छन्। प्रत्येक पोर्ट जडानलाई छुट्टै लाइनमा कोड गर्न सिफारिस गरिन्छ ताकि कुनै पनि सङ्कलन त्रुटि सन्देशले त्रुटि भएको लाइन नम्बरमा सही रूपमा देखाउनेछ। किनभने यी जडानहरू नामद्वारा बनाइएका छन्, तिनीहरू देखा पर्ने क्रम अप्रासंगिक छ।

DUT इन्स्ट्यान्टिएसन मोड्युलहरूको लागि पनि बनाउन सकिन्छ जहाँ testbench मोड्युलमा फरक संकेत नामहरू छन्। संकेतहरूको सही म्यापिङ भनेको इन्स्ट्यान्टियट गर्दा महत्त्वपूर्ण कुरा हो।

Exampले: 

ALU d0 (.a(A), // ALU मा संकेत "a" ALU_tb मोड्युलमा "A" मा जडान हुनुपर्छ
.clk(clock), // संकेत "clk" ALU मा "clock" ALU_tb मोड्युलमा जडान हुनुपर्छ
बाहिर (आउट)); // ALU मा संकेत "आउट" ALU_tb मोड्युलमा "OUT" मा जडान हुनुपर्छ

टेस्टबेन्चमा सधैं र प्रारम्भिक ब्लक

Verilog मा दुई क्रमिक ब्लकहरू छन्, प्रारम्भिक र सधैं। यी ब्लकहरूमा हामी प्रोत्साहन लागू गर्छौं।

प्रारम्भिक ब्लक

प्रारम्भिक ब्लक जुन एक पटक मात्र कार्यान्वयन गरिन्छ र ब्लकको अन्तिम लाइन कार्यान्वयन हुँदा समाप्त हुन्छ। उत्तेजना प्रारम्भिक ब्लकमा लेखिएको छ। (चित्र ५ मा रेखा ५४-७२ हेर्नुहोस्)

वाक्य रचना:
..
प्रारम्भिक सुरुवात
$ डम्पfile();
$dumpvars();
..(उत्तेजना प्रविष्ट गर्नुहोस्)
अन्त्य

प्रारम्भिक ब्लकले समय t = 0 मा सिमुलेशनको सुरुमा यसको कार्यान्वयन सुरु गर्दछ। सुरु र अन्त्य बीचको पहिलो रेखाबाट सुरु गर्दै, ढिलाइ नपुगेसम्म प्रत्येक रेखा माथिदेखि तलसम्म कार्यान्वयन हुन्छ। जब ढिलाइ पुग्छ, यस ब्लकको कार्यान्वयनले ढिलाइ समय (10-समय एकाइहरू) बितिसकेको नभएसम्म पर्खन्छ र त्यसपछि फेरि कार्यान्वयन गर्दछ।
प्रयोगकर्ताले सबै संयोजनहरू म्यानुअल रूपमा प्रविष्ट गर्नुको सट्टा यस प्रारम्भिक ब्लक भित्र लुपहरू (का लागि, जबकि, यदि-अन्यथा) प्रयोग गरेर उत्तेजना परिभाषित गर्न सक्छ।
प्रारम्भिक ब्लक

 

Exampले:
प्रारम्भिक सुरुवात
A = 0; b = 0; // कार्यान्वयन सुरु गर्नुहोस्
#१० ए = ०; b = 10; // कार्यान्वयन t = 0-इकाइ समयमा छ
#१० ए = ०; b = 10; // कार्यान्वयन t = 1-इकाइ समयमा छ
अन्त्य

डम्प Files

दिमागमा राख्नको लागि अर्को कुरा $ को घोषणा होडम्पfiles र $dumpvars प्रारम्भिक ब्लक भित्र (चित्र 55 मा रेखा 56- 5 हेर्नुहोस्)। डलरडम्पfile नेटका मानहरूमा भएका परिवर्तनहरू र a मा दर्ताहरू डम्प गर्न प्रयोग गरिन्छ file जसलाई यसको तर्क भनिन्छ।

पूर्वका लागिampLe:

$डम्पfile("alu_tb.vcd");

a मा परिवर्तनहरू डम्प गर्नेछ file नाम alu_tb.vcd। परिवर्तनहरू ए मा रेकर्ड गरिएका छन् file VCD भनिन्छ file जुन मूल्य परिवर्तन डम्पको लागि खडा हुन्छ। VCD (मूल्य परिवर्तन डम्प) ले मूल्य परिवर्तनहरू बारे सबै जानकारी भण्डारण गर्दछ। हामीसँग एक भन्दा बढी $ डम्प हुन सक्दैनfile Verilog सिमुलेशन मा बयान।

द $dumpvars कुन भ्यारीएबलहरू फ्याँक्ने छन् निर्दिष्ट गर्न प्रयोग गरिन्छ (मा file डम्प द्वारा उल्लेख गरिएकोfile)। यसलाई प्रयोग गर्ने सबैभन्दा सरल तरिका कुनै पनि तर्क बिना छ। $dumpvars को सामान्य वाक्य रचना हो

$dumpvars ( <, >);

हामी मूल रूपमा कुन मोड्युलहरू निर्दिष्ट गर्न सक्छौं, र मोड्युलहरूमा कुन चरहरू डम्प गरिनेछ। यसलाई प्रयोग गर्ने सरल तरिका भनेको स्तरलाई ० र मोड्युलको नामलाई शीर्ष मोड्युलको रूपमा सेट गर्नु हो (सामान्यतया शीर्ष टेस्टबेन्च मोड्युल)।

$dumpvars(0, alu_tb);

जब स्तर 0 मा सेट गरिन्छ, र केवल मोड्युल नाम निर्दिष्ट गरिएको छ, यसले त्यो मोड्युलका सबै चरहरू र यस शीर्ष मोड्युलद्वारा इन्स्ट्यान्टिएट गरिएका सबै तल्लो-स्तर मोड्युलहरूमा सबै चरहरू डम्प गर्दछ। यदि कुनै मोड्युल यस शीर्ष मोड्युलद्वारा इन्स्ट्यान्टियट गरिएको छैन भने, त्यसको चरलाई कभर गरिने छैन। अर्को कुरा, $ को घोषणाडम्पfile डम्प निर्दिष्ट गर्ने $dumpvars वा कुनै अन्य प्रणाली कार्यहरू अघि आउनै पर्छ। यी डम्प files लाई स्टिमुलस इनपुट भन्दा पहिले घोषणा गरिनु पर्छ, यी डम्पमा कुनै मान बचत हुने छैन files.

सधैं ब्लक गर्नुहोस्

प्रारम्भिक कथनहरूको विपरित, सधैँ ब्लकले बारम्बार कार्यान्वयन गर्छ, यद्यपि कार्यान्वयन t = ० मा सुरु हुन्छ। पूर्वका लागिample, घडी संकेत फ्लिप-फ्लप जस्तै अनुक्रमिक सर्किट को सञ्चालन को लागी आवश्यक छ। यो निरन्तर आपूर्ति गर्न आवश्यक छ। तसर्थ, हामीले टेस्टबेन्चमा घडीको सञ्चालनको लागि कोड लेख्न सक्छौं (चित्र 52 मा रेखा 5 हेर्नुहोस्):

सधैं
#10 clk = ~ clk;
एन्डमोड्युल

माथिको कथन t = ० बाट सुरु हुने 10 ns पछि कार्यान्वयन हुन्छ। clk को मान अघिल्लो मानबाट 0 ns पछि उल्टो हुनेछ। यसरी, 10 एनएस पल्स चौडाइको घडी संकेत उत्पन्न गर्दै। यसैले, यो कथन आवृत्ति 20 मेगाहर्ट्ज को संकेत उत्पन्न गर्दछ। यो नोट गर्न महत्त्वपूर्ण छ कि, सिग्नलको प्रारम्भिकता सधैं ब्लक गर्नु अघि गरिन्छ। यदि हामीले प्रारम्भिक भाग गरेनौं भने, clk संकेत t - 50 बाट x हुनेछ, र 0 ns पछि, यो अर्को x मा उल्टो हुनेछ।

आत्म-जाँच Testbench

एक आत्म-जाँच testbench हालको स्थिति जाँच गर्न एक बयान समावेश गर्दछ।

  • $प्रदर्शन प्रणाली कार्य मुख्यतया सिमुलेशन को प्रवाह ट्र्याक गर्न डिबग सन्देशहरू प्रदर्शन गर्न प्रयोग गरिन्छ

प्रारम्भिक सुरुवात
A = 0; b = 0; c = 0; #१०; // इनपुट लागू गर्नुहोस्, पर्खनुहोस्
यदि (y ! == 1) सुरु हुन्छ
$display ("000 असफल"); // जाँच गर्नुहोस्
c = 1; #१०; // इनपुट लागू गर्नुहोस्, पर्खनुहोस्
अन्त्य
अन्यथा यदि ( y ! == 0) सुरु हुन्छ
$display("001 असफल") // चेक
b = 1; c = 0; #१०; अन्त्य
अन्यथा यदि(y!==0)
$display ("010 असफल"); // जाँच गर्नुहोस्
अन्त्य
एन्डमोड्युल

$प्रदर्शन चर, स्ट्रिङ वा अभिव्यक्तिको मानहरू प्रदर्शन गर्न प्रयोग गरिन्छ। माथिको बाट पूर्वample, जब कुनै if-else लुप सन्तुष्ट हुन्छ, तब सिम्युलेटर लगले यसको सम्बन्धित $ प्रदर्शन गर्नेछ।प्रदर्शन कथन। स्ट्रिङको अन्त्यमा पूर्वनिर्धारित रूपमा नयाँ लाइन छ।

$प्रदर्शन ("समय = %t , A = %b, B = %b, C = % b", $समय, A, B, C);

उद्धरणहरूमा उल्लेख गरिएका क्यारेक्टरहरू तिनीहरू जस्तै छापिनेछन्। % सँगको अक्षरले स्ट्रिङ ढाँचालाई जनाउँछ। हामी बाइनरी डाटा प्रतिनिधित्व गर्न %b प्रयोग गर्छौं। हामी क्रमशः दशमलव, हेक्साडेसिमल र अक्टल प्रतिनिधित्व गर्न %d, %h, %o प्रयोग गर्न सक्छौं। %g वास्तविक संख्याहरू व्यक्त गर्न प्रयोग गरिन्छ। यी उल्लेख गरिएको क्रममा उद्धरण बाहिरका मानहरूसँग प्रतिस्थापन गरिनेछ। पूर्वका लागिample, माथिको कथन सिमुलेशन लगमा यसरी प्रदर्शित हुनेछ: समय = 20, A = 0, B =1, C = 0

तालिका 1. Verilog तालिका ढाँचाहरू

तर्क विवरण
%h, %H हेक्साडेसिमल ढाँचामा प्रदर्शन गर्नुहोस्
%d, %D दशमलव ढाँचामा प्रदर्शन गर्नुहोस्
%b, %B बाइनरी ढाँचामा प्रदर्शन गर्नुहोस्
%m, %M पदानुक्रमिक नाम प्रदर्शन गर्नुहोस्
%s, %S स्ट्रिङको रूपमा प्रदर्शन गर्नुहोस्
%t, % T समय ढाँचामा प्रदर्शन गर्नुहोस्
%f, %F दशमलव ढाँचामा 'वास्तविक' प्रदर्शन गर्नुहोस्
%e, %E घातीय ढाँचामा 'वास्तविक' प्रदर्शन गर्नुहोस्

$प्रदर्शन मुख्यतया डाटा वा चर प्रिन्ट गर्दछ जुन त्यो समयको तत्कालमा हुन्छ जस्तै C मा printf। हामीले $ उल्लेख गर्नुपर्छ।प्रदर्शन हामीसँग जे पनि पाठको लागि view सिमुलेशन लग मा।

  • $समय

$समय सिमुलेशनको हालको समय फर्काउने प्रणाली कार्य हो।

  • $निगरानी

$निगरानी डेटा वा चल जसको लागि यो लेखिएको छ त्यसलाई निगरानी गर्नेछ र जब पनि चर परिवर्तन हुन्छ, यसले छाप्नेछ
बदलिएको मूल्य। यसले प्रत्येक पटक यसको कुनै पनि तर्कहरू प्राप्त गरेपछि $display कल गर्ने समान प्रभाव प्राप्त गर्दछ
अद्यावधिक गरियो। $निगरानी एक कार्य जस्तै हो जुन मुख्य थ्रेड को पृष्ठभूमि मा चलाउन को लागी उत्पन्न गरिएको छ जसले मोनिटर गर्दछ र
यसको आर्गुमेन्ट चरको मान परिवर्तनहरू देखाउँछ। $निगरानी $ को समान वाक्य रचना छप्रदर्शन.

$निगरानी("समय = %t, A = %b, B = %b, C = % b", $समय, A, B, C);
आत्म-जाँच Testbench

चित्र 7 बाट तपाईले देख्न सक्नुहुन्छ कि कोडहरूको नयाँ लाइनहरू testbench को आत्म-मूल्याङ्कन गर्न थपिएको छ। $ को नियुक्तिप्रदर्शन र $निगरानी टेस्टबेन्चका विभिन्न खण्डहरूमा भएका कथनहरूले फरक परिणामहरू दिनेछन् (चित्र 8 हेर्नुहोस्)। $समय यी कथनहरूमा उल्लेख गरिएको समय प्रिन्ट गर्दछ जुन मूल्यको लागि छापिएको छ। एकै समयमा एकाइ 170000 भन्नुहोस्, हामी $ को कारणले A र B को मूल्यमा कसरी भिन्नता छ भनेर देख्न सक्छौं।प्रदर्शन र $निगरानी कथनहरू।
आत्म-जाँच Testbench

GTKWave सफ्टवेयर

GTKWave एक पूर्ण रूपमा चित्रित GTK+ तरंग हो viewer Unix, Win32, र Mac OSX को लागि जसले LXT, LXT2, VZT, FST, र GHW पढ्छ files साथै मानक VCD/EVCD files र तिनीहरूको अनुमति दिन्छ viewing। यसको आधिकारिक webसाइट मा छ http://gtkwave.sourceforge.net/ । GTKWave सिफारिस गर्नुभयो viewer Icarus Verilog सिमुलेशन उपकरण द्वारा।

एकपटक प्रयोगकर्ताले सफलतापूर्वक डिजाइनको कार्यक्षमता परीक्षण गर्न टेस्टबेन्च सिर्जना गरेपछि, प्रयोगकर्ताले अब GTKWave सफ्टवेयर प्रयोग गर्न सक्छ। view तरंग रूपहरू।

GTKWave सफ्टवेयर सुरु गर्न को लागी view वेभफर्महरूमा, प्रयोगकर्ताले उपकरणपट्टीको शीर्षमा वा मुख्य मेनु उपकरणहरू → सिमुलेशन → सिमुलेट टेस्टबेन्चबाट सिमुलेट टेस्टबेन्च बटनमा क्लिक गर्न आवश्यक छ। यदि त्यहाँ कुनै सिन्ट्याक्स त्रुटिहरू छैनन् भने डिजाइनको आधारमा, GTKWave स्वचालित रूपमा सुरू गरिनुपर्छ वा testbench मा उत्तेजनाको नतिजा सञ्झ्यालको Logger खण्डमा प्रदर्शित हुनेछ।

GTKWave सफ्टवेयरले .vcd ढाँचा डम्प खोल्छfile स्वचालित रूपमा। GTKWave सञ्झ्यालले खोल्दा वेभफॉर्म प्रदर्शन गर्दैन। यसले प्रयोगकर्तालाई आफूले चाहेको संकेतहरू चयन गर्ने अवसर दिन्छ view र अवलोकन गर्नुहोस्। संकेत छनोट गर्न, प्रयोगकर्ताले प्रदर्शन गर्न आवश्यक छ, प्रयोगकर्ताले SST ट्याब अन्तर्गत विन्डोको बायाँ छेउमा रहेको आफ्नो मोड्युल/उदाहरणको नाममा क्लिक गर्न आवश्यक छ। प्रत्येक दृष्टान्तको + मा क्लिक गरेर, तपाईले तलको खण्डमा त्यस उदाहरणसँग सम्बन्धित बुद्धि भएका संकेतहरू देख्न सक्नुहुन्छ। त्यसपछि तपाईले इच्छित संकेत तान्नुहोस् र ड्रप गर्न सक्नुहुन्छ वा सिग्नल विन्डोमा प्रदर्शन गर्न तिनीहरूलाई डबल-क्लिक गर्नुहोस्। तपाईं सबै (CTRL + A) चयन गर्न सक्नुहुन्छ र तिनीहरूलाई संकेत विन्डोमा सम्मिलित गर्न सक्नुहुन्छ (चित्र 9 हेर्नुहोस्)।
GTKWave सफ्टवेयर

संकेतहरू अब सिग्नल सञ्झ्यालमा थपिएका छन् तर यसको सिमुलेट हुन बाँकी छ। संकेत विन्डोमा इच्छित संकेतहरू थपेपछि, क्लिक गर्नुहोस्प्रतीक सञ्झ्यालको हालको चौडाइमा संकेतहरू फिट गर्न र त्यसपछि पुन: लोडबाट संकेतहरू पुन: लोड गर्नुहोस्प्रतीक उपकरणपट्टीमा अवस्थित प्रतीक। तपाईं अब तिनीहरूको सम्बन्धित मान संग संकेतहरू हेर्न सक्नुहुन्छ।

सिग्नल मानहरू

पूर्वनिर्धारित रूपमा, संकेतहरूको मानहरू हेक्साडेसिमल ढाँचामा छन् र सबै तरंगहरू हरियो रंगका हुन्छन् (यदि सही रूपमा चलिरहेको छ भने)।

प्रयोगकर्ताले सिग्नलमा दायाँ क्लिक गरेर डेटा ढाँचा वा रङ ढाँचा छनौट गरेर यी संकेतहरूको गुणहरू परिवर्तन गर्न सक्छ। प्रयोगकर्ताले सिग्नलहरूको समूह बीचको खण्डहरू बनाउन खाली संकेत पनि घुसाउन सक्छ। जब तपाइँसँग इच्छित अप्टिकल परिणाम छ, तपाइँ आफ्नो कन्फिगरेसनहरू गएर बचत गर्न सक्नुहुन्छ File → बचत लेख्नुहोस् File.

GTKWave उपकरणपट्टी

उपकरणपट्टी (चित्र 10 हेर्नुहोस्) ले प्रयोगकर्तालाई संकेतका लागि आधारभूत कार्यहरू गर्न अनुमति दिन्छ। हामी बायाँ देखि दायाँ बाट उपकरणपट्टीमा प्रत्येक विकल्प छलफल गरौं।
GTKWave उपकरणपट्टी

  1. मेनु विकल्पहरू: यो विकल्प अन्तर्गत हामी सक्छौं view सफ्टवेयरको सबै बिभिन्न सुविधाहरू जुन सफ्टवेयरको साथ वरिपरि प्ले गर्न प्रयोग गर्न सकिन्छ। यस मेनु विकल्प अन्तर्गतका विवरणहरू यस प्रयोगकर्ता गाइडको खण्ड 8 अन्तर्गत समेटिएका छन्।
  2. ट्रेसहरू काट्नुहोस्: यो सिग्नल सञ्झ्यालबाट चयन संकेत मेटाउन / काट्न प्रयोग गरिन्छ
  3. ट्रेसहरू प्रतिलिपि गर्नुहोस्: यो सिग्नल सञ्झ्यालबाट चयन गरिएको संकेत प्रतिलिपि गर्न प्रयोग गरिन्छ
  4. ट्रेसहरू टाँस्नुहोस्: प्रतिलिपि/कट ट्रेस सिग्नल विन्डोमा फरक स्थानमा टाँस्न सकिन्छ
  5. जुम फिट: यो प्रयोगकर्ताले प्रदर्शन गर्न रोजेको विन्डोको आकार अनुसार संकेतहरू फिट गर्न प्रयोग गरिन्छ
  6. जुम इन गर्नुहोस्: यो सिग्नल विन्डोमा जुम गर्न प्रयोग गरिन्छ
  7. जुम आउट गर्नुहोस्: यो संकेत विन्डो जुम आउट गर्न प्रयोग गरिन्छ
  8. जुम अन्डू गर्नुहोस्: यो संकेत विन्डोमा जुम इन/आउट अनडू गर्न प्रयोग गरिन्छ
  9. सुरु गर्न जुम गर्नुहोस्: यसले संकेत सञ्झ्याल जुम गर्नेछ, संकेतहरूको सुरु हुने समय देखाउँदै।
  10. अन्त्यमा जुम गर्नुहोस्: यसले संकेतको अन्त्य समय देखाउने संकेत विन्डोलाई जुम गर्नेछ
  11. अघिल्लो किनारा फेला पार्नुहोस्: यसले मार्करलाई बायाँ छेउमा सार्छ जुन अघिल्लो किनारालाई संकेत गर्दछ
  12. अर्को किनारा फेला पार्नुहोस्: यसले अर्को किनारालाई संकेत गर्दै मार्करलाई दायाँतिर सार्छ
  13. तल्लो / माथिल्लो बन्ड स्क्रोल गर्नुहोस्: यो प्रयोग गरेर हामी प्रयोगकर्ताले प्रदर्शन गर्न चाहेको समय सीमा सेट गर्न सक्छौं। पूर्वका लागिample, हामी 0 सेकेन्ड देखि 500 ​​ns मा समय फ्रेम सेट गर्न सक्छौं, यसले त्यो अवधि अन्तर्गत मात्र संकेतहरू प्रदर्शन गर्नेछ।
  14. पुन: लोड गर्नुहोस्: रिलोड थिचिन्छ जब प्रदर्शित संकेतमा परिवर्तन हुन्छ। यसले नयाँ प्यारामिटरहरू अनुसार संकेत पुन: लोड र प्रदर्शन गर्नेछ। पूर्वका लागिample, सिग्नलको समय सीमा परिवर्तन गरेपछि, हामीले नयाँ सेट समय फ्रेममा सिग्नल प्रदर्शन गर्न सिग्नललाई पुन: लोड गर्न आवश्यक छ।

मेनु विकल्पहरू

GTKWave सफ्टवेयरको बायाँ माथिल्लो कुनाबाट, प्रयोगकर्ताले तीन ठाडो रेखाहरूमा क्लिक गरेर मेनु विकल्पहरू पहुँच गर्न सक्छन् (चित्र 11 हेर्नुहोस्)। प्रयोगकर्ताले मेनु विकल्पहरू अन्तर्गत निम्न विकल्पहरू फेला पार्न सक्छ:
मेनु विकल्पहरू

File

द File उपमेनुमा पहुँचसँग सम्बन्धित विभिन्न वस्तुहरू छन् files, VCD आयात-निर्यात files, मुद्रण, र पठन/लेखन files र बाहिर निस्कन्छ।

सम्पादन गर्नुहोस्

सम्पादन उपमेनु विभिन्न उपयोगिता कार्यहरू प्रदर्शन गर्न प्रयोग गरिन्छ जस्तै तरंग सबविन्डोमा मानहरूको डेटा प्रतिनिधित्व परिवर्तन गर्न। सम्पादन उपमेनु अन्तर्गतका विकल्पहरू प्रयोग गरेर, प्रयोगकर्ताले संकेतहरूको डेटा ढाँचा परिवर्तन गर्न, तिनीहरूलाई पुन: व्यवस्थित गर्न, तिनीहरूलाई सिफ्ट गर्न, यसलाई ट्रिम गर्न, हाइलाइट गर्न, समूह संकेतहरू, संकेतहरूमा टिप्पणी गर्न, संकेतहरूको रंग परिवर्तन गर्न, आदि गर्न सक्छ।

खोज

खोज उपमेनु शुद्ध नाम र मानहरूमा खोजहरू प्रदर्शन गर्न प्रयोग गरिन्छ। यसले VCD मा संकेतहरू र उदाहरणहरूको विभिन्न पदानुक्रम स्तरहरूमा कार्यहरू गर्न मद्दत गर्दछ। file.

समय

समय उपमेनुले नेभिगेसनहरू र स्थिति प्यानल बटनहरूद्वारा प्रदर्शन गर्ने कार्यहरूको सुपरसेट समावेश गर्दछ।
यसले सरल, समय सम्बन्धित, कार्यहरू जस्तै जुमिङ, एक विशेष समय बिन्दुमा सार्ने, संकेतलाई निश्चित दिशामा सार्ने, इत्यादि सक्षम गर्दछ।

मार्कर

मार्कर उपमेनुलाई मार्करमा विभिन्न हेरफेर गर्नका साथै अफस्क्रिन स्क्रोलिङ नियन्त्रण गर्न प्रयोग गरिन्छ।
यसले सिग्नल सञ्झ्यालमा धेरै मार्करहरू थप्ने कार्यक्षमतालाई सक्षम बनाउँछ। अधिकतम 26 नाम मार्करहरूलाई अनुमति छ र सबैको लागि समय फरक हुनुपर्छ।

a। संकेत विन्डोमा मार्करहरू थप्न
आवश्यक बिन्दुमा बायाँ क्लिक गर्नुहोस् जहाँ तपाई मार्कर राख्न चाहनुहुन्छ र ALT + N थिच्नुहोस्। यसले आवश्यक बिन्दुमा नामित मार्कर (A, B, C, आदि) राख्नेछ। प्रयोगकर्ताले 26 फरक समय स्थानहरूको लागि यो गर्न जारी राख्न सक्छ।
सबै स्थान मार्करहरूमा समय मान तुलना गर्न, मेनु → मार्करहरू → मार्कर डेटा परिवर्तन देखाउनुहोस्।
यसले प्रत्येक मार्करमा समय मानको सञ्झ्याल खोल्नेछ। प्रयोगकर्ताले म्यानुअल रूपमा राखिएको प्रत्येक मार्करमा समय मान नोट गर्न सक्छ र 2 मार्करहरू बीचको समय भिन्नता गणना गर्न तिनीहरूलाई घटाउन सक्छ।
b। संकेत विन्डोमा मार्कर हटाउन

प्रयोगकर्ताले मेनु → मार्कर → कलेक्ट नाम मार्करमा जान सक्छ। यसले संकेत सञ्झ्यालमा राखिएको अन्तिम-नाम मार्कर हटाउनेछ। प्रयोगकर्ताले मेनु → मार्करहरू → सबै नामित मार्कर सङ्कलन (चित्र 12) मा गएर सबै नामित मार्करहरू हटाउन सक्नुहुन्छ।
मेनु विकल्पहरू

चित्र 13 मा, हामी संकेत रङ कसरी परिवर्तन गरिएको छ भनेर देख्न सक्छौं। तपाईले सिग्नल विन्डोमा थपिएको खाली सिग्नल अवलोकन गर्न सक्नुहुन्छ साथै टिप्पणी - खाली सिग्नल।
साथै 6 नामित मार्करहरू (A – E) को उपस्थिति र ps मा यी मार्करहरू बीचको समय मूल्यको कम्पर्गेशनलाई पनि ध्यान दिनुहोस्।
मेनु विकल्पहरू

View

द View उपमेनुलाई स्थिति वस्तुहरूको ग्राफिकल रेन्डरिङका साथै सिग्नल उप सञ्झ्यालमा मानहरू नियन्त्रण गर्न विभिन्न विशेषताहरू नियन्त्रण गर्न प्रयोग गरिन्छ। यस मेनुबाट, तपाईले सिग्नल विन्डोलाई कालो र सेतो वा रंगीनमा रूपान्तरण गर्न सक्नुहुन्छ। द View सबमेनुले तपाईंलाई सेकेन्ड (सेकेन्ड) देखि फिकोसेकेन्ड (fs) सम्मको समय आयाम परिवर्तन गर्न सक्षम बनाउँछ। प्रयोगकर्ताले यो विकल्प फेला पार्न सक्छ View → समय आयाम → fs मा स्केल।

मद्दत गर्नुहोस्

मद्दत उपमेनुमा अन-लाइन मद्दत सक्षम गर्नका साथै कार्यक्रम संस्करण जानकारी प्रदर्शन गर्ने विकल्पहरू छन्।

निष्कर्ष

यो कागजात प्रयोगकर्तालाई तिनीहरूको डिजाइन सफलतापूर्वक अनुकरण गर्न र आवश्यक टेस्टबेन्चको मस्यौदा सच्याउन र वेभफॉर्महरू प्रदर्शन गर्न र परिणामहरू अवलोकन गर्न GTKWave सँग Icarus Verilog प्रयोग गरेर कार्यक्षमता प्रमाणित गर्न मद्दत गर्न सिर्जना गरिएको थियो।

संशोधन इतिहास

संशोधन मिति विवरण
1.00 मे ४, २०२४ प्रारम्भिक रिलीज।

R19US0011EU0100 Rev.1.0
मे ४, २०२४
© 2024 रेनेसास इलेक्ट्रोनिक्स
लोगो

कागजातहरू / स्रोतहरू

RENESAS ForgeFPGA सफ्टवेयर सिमुलेशन [pdf] प्रयोगकर्ता गाइड
REN_r19us0011eu0100, ForgeFPGA Software Simulation, ForgeFPGA Software, ForgeFPGA, ForgeFPGA सिमुलेशन, सफ्टवेयर सिमुलेशन, सिमुलेशन, सफ्टवेयर

सन्दर्भहरू

एक टिप्पणी छोड्नुहोस्

तपाईंको इमेल ठेगाना प्रकाशित गरिने छैन। आवश्यक क्षेत्रहरू चिन्ह लगाइएका छन् *