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 જુઓ)
c. Go Configure Software ખોલો અને ફોર્જ વર્કશોપ ખોલવા માટે ભાગ પસંદ કરો: SLG47910(Rev BB) (આકૃતિ 2 જુઓ).
d. ટોચ પર ટૂલબારની મધ્યમાં FPGA એડિટર પર ક્લિક કરો અથવા વપરાશકર્તા વિન્ડોની મધ્યમાં FPGA કોર સ્ટ્રક્ચર પર ડબલ-ક્લિક પણ કરી શકે છે.
e. ફોર્જ વર્કશોપ નામની નવી વિન્ડો ખુલે છે. ટોચ પરના મેનુ ટૂલબારમાં, વિકલ્પો → સેટિંગ્સ પર ક્લિક કરો. સેટિંગ્સ સંવાદ બોક્સમાં, વપરાશકર્તા સેટિંગ્સ ટેબ હેઠળ સાધનો પર જાઓ. Icarus Verilog અને GTKWave બંને માટે "સિસ્ટમ એન્વાયર્નમેન્ટ બોક્સ" નો ઉપયોગ કરો નાપસંદ કરો. આપેલ જગ્યામાં તમારી સિસ્ટમમાં સાચવેલ Iverilog અને GTKWave નો પાથ ઉમેરો (આકૃતિ 4 જુઓ).
તમે ટેસ્ટબેન્ચનું અનુકરણ કરવા માટે તૈયાર છો અને ઉપરોક્ત પગલાંઓ સુનિશ્ચિત કરે છે કે Go Configure સોફ્ટવેર પર ટેસ્ટબેન્ચનું અનુકરણ કરતી વખતે GTKWave આપમેળે શરૂ થાય છે.
ટેસ્ટ બેન્ચ
કોઈપણ સિસ્ટમને સફળતાપૂર્વક અમલમાં મૂકવા માટેનું સૌથી નિર્ણાયક પગલું એ ડિઝાઇન અને તેની કાર્યક્ષમતાને ચકાસવાનું છે. હાર્ડવેરને અમલમાં મૂક્યા પછી જટિલ સિસ્ટમની ચકાસણી કરવી એ યોગ્ય પસંદગી નથી. તે પૈસા, સમય અને સંસાધનોની દ્રષ્ટિએ બિનઅસરકારક છે. તેથી, એફપીજીએના કિસ્સામાં, વેરિલોગ સ્રોત કોડને ચકાસવા માટે ટેસ્ટબેન્ચનો ઉપયોગ કરવામાં આવે છે.
ધારો કે અમારી પાસે એક ઇનપુટ છે જે 11 બિટ્સનું છે, અને અમે તમામ સંભવિત ઇનપુટ સંયોજન મૂલ્યો એટલે કે (211) માટે ઉપકરણને ચકાસવા માંગીએ છીએ. આ સંયોજનોની ખૂબ મોટી સંખ્યા હોવાથી, તેને જાતે જ ચકાસવું અશક્ય છે. આવા કિસ્સાઓમાં, ટેસ્ટબેન્ચ ખૂબ જ ઉપયોગી છે કારણ કે તમે તમામ સંભવિત મૂલ્યો માટે ડિઝાઇનનું આપમેળે પરીક્ષણ કરી શકો છો અને તેથી, પરીક્ષણ ડિઝાઇનની વિશ્વસનીયતાની પુષ્ટિ કરો. વેરિલોગ ટેસ્ટબેન્ચનો ઉપયોગ કોઈપણ ભૌતિક હાર્ડવેર ઉપકરણની જરૂરિયાત વિના ડિઝાઇનનું અનુકરણ અને વિશ્લેષણ કરવા માટે થાય છે.
પરીક્ષણ હેઠળની ડિઝાઇન, DUT તરીકે સંક્ષિપ્તમાં, અમે ચકાસવા માંગીએ છીએ તે કાર્યક્ષમતાનું સંશ્લેષણ કરી શકાય તેવું મોડ્યુલ છે. બીજા શબ્દોમાં કહીએ તો, તે સર્કિટ ડિઝાઇન છે જેને આપણે ચકાસવા માંગીએ છીએ. અમે વેરિલોગ - ગેટ-લેવલ, ડેટાફ્લો અથવા બિહેવિયરલમાં ત્રણ મોડેલિંગ શૈલીઓમાંથી એકનો ઉપયોગ કરીને અમારા DUTનું વર્ણન કરી શકીએ છીએ.
ટેસ્ટબેન્ચ સિન્થેસાઇઝ કરી શકાય તેવું નથી, તેથી તેનો ઉપયોગ માત્ર સિમ્યુલેશન હેતુઓ માટે થાય છે. આ વપરાશકર્તાને ટેસ્ટબેન્ચ લખવા માટે વેરિલોગ રચનાઓની સંપૂર્ણ શ્રેણીનો ઉપયોગ કરવાની પરવાનગી આપે છે, ઉદાહરણ તરીકે, કીવર્ડ્સ જેમ કે “માટે”, “$ડિસ્પ્લે” અને “$મોનિટર” વગેરે. એક સરળ ટેસ્ટબેન્ચ યુનિટ અંડર ટેસ્ટ (UUT) અથવા ડિવાઇસ અંડર ટેસ્ટ (DUT) અને ડ્રાઇવ ઇનપુટ્સને ઇન્સ્ટન્ટ કરશે.
ટેસ્ટબેન્ચને સમજવું
ટેસ્ટબેન્ચમાં ટાઇમસ્કેલ વ્યાખ્યા
સિમ્યુલેટ કરતી વખતે, સૉફ્ટવેરને જાણવાની જરૂર છે કે સમય કેવી રીતે વ્યાખ્યાયિત કરવામાં આવ્યો છે. વિલંબ એકમ `ટાઇમસ્કેલ ડાયરેક્ટિવનો ઉપયોગ કરીને નિર્દિષ્ટ કરવામાં આવે છે, જે સમય એકમ અને તેને અનુસરતા મોડ્યુલો માટે ચોકસાઇ દર્શાવે છે. `ટાઇમસ્કેલ સમયની દ્રષ્ટિએ #1 નો અર્થ શું છે તે નક્કી કરવામાં મદદ કરે છે. # નો ઉપયોગ ટાઇમસ્કેલમાં ઉલ્લેખિત સમય એકમ અનુસાર સિસ્ટમમાં દાખલ થવાના વિલંબને વ્યાખ્યાયિત કરવા માટે થાય છે. તેથી, #1 એટલે 1 ns વિલંબ જો સમય_એકમ ns માં હોય.
વાક્યરચના:
`ટાઇમસ્કેલ / /
time_unit એ સમયનો જથ્થો છે જે #1 નો વિલંબ દર્શાવે છે. સમય_ચોકસાઇનો આધાર સમયના એકમોની સાપેક્ષમાં કેટલા દશાંશ બિંદુઓનો ઉપયોગ કરવો તે દર્શાવે છે. (આકૃતિ 23 માં લીટી 5 જુઓ)
અમે સમાન ડિઝાઇનમાં વિવિધ સમય એકમોનો ઉપયોગ કરવા માટે ટાઇમસ્કેલ રચનાઓનો ઉપયોગ કરી શકીએ છીએ. વપરાશકર્તાએ યાદ રાખવાની જરૂર છે કે વિલંબ સ્પષ્ટીકરણો સંશ્લેષણ કરી શકાય તેવા નથી અને તેને હાર્ડવેર તર્કમાં રૂપાંતરિત કરી શકાતા નથી. વિલંબના કાર્યો સંપૂર્ણપણે સિમ્યુલેશન હેતુઓ માટે છે. $સમય અને $વાસ્તવિક સમય સિસ્ટમ કાર્યો વર્તમાન સમય પરત કરે છે અને ડિફૉલ્ટ રિપોર્ટિંગ ફોર્મેટ અન્ય સિસ્ટમ કાર્ય $timeformat સાથે બદલી શકાય છે.
Exampલે:
`ટાઇમસ્કેલ 10us/100ns
`ટાઇમસ્કેલ 1ns/1ps
#10 રીસેટ = 1; // સિગ્નલને 10 એનએસ દ્વારા વિલંબિત કરે છે
#0.49 $ડિસ્પ્લે( "T = %0t સમય #0.49", $realtime) ;
ઉલ્લેખિત વિલંબ #0.49 છે જે અડધા એકમ સમય કરતાં ઓછો છે. જો કે, સમયની ચોકસાઈ 1ps તરીકે નિર્દિષ્ટ કરવામાં આવી છે અને તેથી સિમ્યુલેટર 1ns કરતા નાનું જઈ શકતું નથી જે તેને આપેલ વિલંબના નિવેદનને પૂર્ણ કરે છે અને 0ns ઉપજ આપે છે. તેથી, આ નિવેદન કોઈપણ વિલંબ પ્રદાન કરવામાં નિષ્ફળ જાય છે.
સિમ્યુલેશન લોગ:
T = 1 સમયે #0.49
મોડ્યુલ ઘોષણા
કોઈપણ ટેસ્ટબેન્ચમાં મોડ્યુલ ઘોષણા મુખ્ય વેરિલોગ કોડથી વિપરીત છે. ટેસ્ટબેન્ચમાં, મોડ્યુલ તેની સાથે કોઈપણ ટર્મિનલ પોર્ટ વિના જાહેર કરવામાં આવે છે. (આકૃતિ 25 માં લીટી 5 જુઓ)
વાક્યરચના:
મોડ્યુલ ;
મોડ્યુલ ઘોષણા મુખ્ય ડિઝાઇનમાં અગાઉ વ્યાખ્યાયિત ઇનપુટ અને આઉટપુટ સિગ્નલોને વ્યાખ્યાયિત કરીને અનુસરવામાં આવે છે. file.
અમે સિમ્યુલેશન દરમિયાન ડ્રાઇવિંગ અને મોનિટરિંગ સિગ્નલો માટે બે સિગ્નલ પ્રકારોનો ઉપયોગ કરીએ છીએ. reg ડેટાટાઇપ વેલ્યુને પકડી રાખશે જ્યાં સુધી તેને નવી કિંમત સોંપવામાં ન આવે. આ ડેટાટાઈપને માત્ર હંમેશા અથવા પ્રારંભિક બ્લોકમાં મૂલ્ય અસાઇન કરી શકાય છે.
વાયર ડેટાટાઇપ ભૌતિક જોડાણની જેમ છે. તે મૂલ્યને પકડી રાખશે જે પોર્ટ, અસાઇન સ્ટેટમેન્ટ અથવા રેગ દ્વારા ચલાવવામાં આવે છે. આ ડેટા પ્રકારનો પ્રારંભિક અથવા હંમેશા બ્લોકમાં ઉપયોગ કરી શકાતો નથી. કોઈપણ પરિમાણ અને પૂર્ણાંક ઘોષણા પણ આ વિભાગમાં કરવામાં આવે છે.
Exampલે:
રેગ a,b; // એચડીએલ કોડમાં ઇનપુટ ટેસ્ટબેન્ચમાં રેગ તરીકે વ્યાખ્યાયિત થયેલ છે
વાયર વાય; // HDL માં આઉટપુટ સિગ્નલ ટેસ્ટબેન્ચમાં વાયર તરીકે વ્યાખ્યાયિત થયેલ છે
DUT સંસ્થાપન
ટેસ્ટબેન્ચનો હેતુ અમારું DUT મોડ્યુલ કાર્યરત છે કે કેમ તે ચકાસવાનો છે. આથી, અમે મોડ્યુલને ચકાસવા માટે અમારા ડિઝાઇન મોડ્યુલને ઇન્સ્ટન્ટ કરવાની જરૂર છે.
વાક્યરચના:
(. (સિગ્નલ1), . સિગ્નલ1>(સિગ્નલ2));
Exampલે:
ALU d0 (.a(a), // ALU માં સિગ્નલ "a" એ ALU_tb મોડ્યુલમાં "a" સાથે જોડાયેલ હોવું જોઈએ
.b(b), // ALU માં સિગ્નલ "b" એ ALU_tb મોડ્યુલમાં "b" સાથે જોડાયેલ હોવું જોઈએ
.c(c)) ;// ALU માં સિગ્નલ "c" એ ALU_tb મોડ્યુલમાં "c" સાથે જોડાયેલ હોવું જોઈએ
અમે ટેસ્ટ મોડ્યુલ માટે DUT મોડ્યુલ ALU ને ત્વરિત કર્યું છે. ઉદાહરણ નામ (d0) એ વપરાશકર્તાની પસંદગી છે. સમયગાળા સાથેના સંકેતો "." તેમની સામે ALU મોડ્યુલની અંદરના સિગ્નલોના નામ છે, જ્યારે તેઓ ટેસ્ટ બેન્ચમાં જે વાયર અથવા રેગ સાથે જોડાય છે તે કૌંસ () માં સિગ્નલની બાજુમાં છે. દરેક પોર્ટ કનેક્શનને એક અલગ લાઇનમાં કોડ કરવાની ભલામણ કરવામાં આવે છે જેથી કરીને કોઈપણ સંકલન ભૂલ સંદેશો જ્યાં ભૂલ આવી હોય તે લાઇન નંબર પર યોગ્ય રીતે નિર્દેશ કરે. કારણ કે આ જોડાણો નામ દ્વારા બનાવવામાં આવ્યા છે, તેઓ જે ક્રમમાં દેખાય છે તે અપ્રસ્તુત છે.
DUT ઇન્સ્ટેન્ટિએશન મોડ્યુલો માટે પણ કરી શકાય છે જ્યાં ટેસ્ટબેન્ચ મોડ્યુલમાં અલગ-અલગ સિગ્નલ નામ હોય છે. સિગ્નલોનું સાચું મેપિંગ એ છે જે ઇન્સ્ટન્ટિએશન કરતી વખતે મહત્વપૂર્ણ છે.
Exampલે:
ALU d0 (.a(A), // ALU માં સિગ્નલ "a" એ ALU_tb મોડ્યુલમાં "A" સાથે જોડાયેલ હોવું જોઈએ
ALU માં .clk(clock), // સિગ્નલ "clk" એ "ક્લોક" ALU_tb મોડ્યુલ સાથે જોડાયેલ હોવું જોઈએ
.આઉટ(આઉટ)); // ALU માં "આઉટ" સિગ્નલ ALU_tb મોડ્યુલમાં "OUT" સાથે જોડાયેલ હોવું જોઈએ
ટેસ્ટબેન્ચમાં હંમેશા અને પ્રારંભિક બ્લોક
વેરિલોગમાં બે ક્રમિક બ્લોક્સ છે, પ્રારંભિક અને હંમેશા. તે આ બ્લોક્સમાં છે કે અમે ઉત્તેજના લાગુ કરીએ છીએ.
પ્રારંભિક બ્લોક
પ્રારંભિક બ્લોક કે જે ફક્ત એક જ વાર ચલાવવામાં આવે છે અને જ્યારે બ્લોકની છેલ્લી લાઇન એક્ઝિક્યુટ થાય ત્યારે સમાપ્ત થાય છે. ઉત્તેજના પ્રારંભિક બ્લોકમાં લખવામાં આવે છે. (આકૃતિ 54 માં લીટી 72-5 જુઓ)
વાક્યરચના:
..
પ્રારંભિક શરૂઆત
$ડમ્પfile();
$dumpvars();
..(ઉત્તેજના દાખલ કરો)
અંત
પ્રારંભિક બ્લોક તેના અમલીકરણની શરૂઆત t = 0 સમયે સિમ્યુલેશનની શરૂઆતમાં કરે છે. શરૂઆત અને અંત વચ્ચેની પ્રથમ લાઇનથી શરૂ કરીને, વિલંબ થાય ત્યાં સુધી દરેક લાઇન ઉપરથી નીચે સુધી એક્ઝિક્યુટ કરે છે. જ્યારે વિલંબ થાય છે, ત્યારે આ બ્લોકનો અમલ વિલંબનો સમય (10-સમયના એકમો) પસાર ન થાય ત્યાં સુધી રાહ જુએ છે અને પછી ફરીથી અમલ શરૂ કરે છે.
વપરાશકર્તા જાતે જ તમામ સંયોજનો દાખલ કરવાને બદલે આ પ્રારંભિક બ્લોકની અંદર લૂપ્સ (માટે, જ્યારે, જો-બીજું) નો ઉપયોગ કરીને ઉત્તેજનાને વ્યાખ્યાયિત કરી શકે છે.
Exampલે:
પ્રારંભિક શરૂઆત
A = 0; b = 0; // અમલ શરૂ કરો
#10 એ = 0; b = 1; // એક્ઝેક્યુશન t = 10-યુનિટ સમયે છે
#10 એ = 1; b = 0; // એક્ઝેક્યુશન t = 20-યુનિટ સમયે છે
અંત
ડમ્પ Files
ધ્યાનમાં રાખવાની બીજી બાબત એ છે કે $ ની ઘોષણાડમ્પfiles અને $ડમ્પવર્સ પ્રારંભિક બ્લોકની અંદર (આકૃતિ 55 માં લીટી 56- 5 જુઓ). આ $ડમ્પfile એમાં નેટ અને રજીસ્ટરના મૂલ્યોમાં થતા ફેરફારોને ડમ્પ કરવા માટે વપરાય છે file જેને તેની દલીલ તરીકે નામ આપવામાં આવ્યું છે.
માજી માટેampલે:
$ડમ્પfile(“alu_tb.vcd”);
a માં ફેરફારો ડમ્પ કરશે file નામ alu_tb.vcd. ફેરફારો એમાં નોંધાયેલા છે file VCD કહેવાય છે file જે મૂલ્ય પરિવર્તન ડમ્પ માટે વપરાય છે. VCD (વેલ્યુ ચેન્જ ડમ્પ) મૂલ્યના ફેરફારો વિશેની તમામ માહિતી સંગ્રહિત કરે છે. અમારી પાસે એક કરતાં વધુ $ડમ્પ હોઈ શકે નહીંfile વેરિલોગ સિમ્યુલેશનમાં નિવેદનો.
આ $ડમ્પવર્સ કયા ચલો ડમ્પ કરવાના છે તે સ્પષ્ટ કરવા માટે વપરાય છે (માં file $dump દ્વારા ઉલ્લેખિતfile). તેનો ઉપયોગ કરવાની સૌથી સરળ રીત કોઈપણ દલીલ વિના છે. $dumpvars નો સામાન્ય વાક્યરચના છે
$ડમ્પવર્સ ( <, >);
અમે મૂળભૂત રીતે સ્પષ્ટ કરી શકીએ છીએ કે કયા મોડ્યુલો, અને મોડ્યુલોમાં કયા ચલોને ડમ્પ કરવામાં આવશે. આનો ઉપયોગ કરવાની સૌથી સરળ રીત એ છે કે સ્તરને 0 અને મોડ્યુલનું નામ ટોચના મોડ્યુલ તરીકે સેટ કરવું (સામાન્ય રીતે ટોચનું ટેસ્ટબેન્ચ મોડ્યુલ).
$ડમ્પવર્સ(0, alu_tb);
જ્યારે સ્તર 0 પર સેટ કરવામાં આવે છે, અને માત્ર મોડ્યુલનું નામ નિર્દિષ્ટ કરવામાં આવે છે, ત્યારે તે તે મોડ્યુલના તમામ ચલોને અને આ ટોચના મોડ્યુલ દ્વારા ઇન્સ્ટન્ટેટ કરાયેલા તમામ નીચલા-સ્તરના મોડ્યુલોમાંના તમામ ચલોને ડમ્પ કરે છે. જો આ ટોચના મોડ્યુલ દ્વારા કોઈપણ મોડ્યુલ ઇન્સ્ટન્ટ નથી, તો તેનું ચલ આવરી લેવામાં આવશે નહીં. એક વધુ વસ્તુ, $ ની ઘોષણાડમ્પfile $dumpvars અથવા અન્ય કોઈપણ સિસ્ટમ કાર્યો કે જે ડમ્પને સ્પષ્ટ કરે છે તે પહેલાં આવવું જોઈએ. આ ડમ્પ fileઉત્તેજના ઇનપુટ્સ પહેલાં s જાહેર કરવું આવશ્યક છે, અન્યથા આ ડમ્પમાં કોઈ મૂલ્ય સાચવવામાં આવશે નહીં files.
હંમેશા અવરોધિત કરો
પ્રારંભિક નિવેદનોથી વિપરીત, હંમેશા બ્લોક વારંવાર એક્ઝિક્યુટ કરે છે, જો કે એક્ઝેક્યુશન t = 0 સમયે શરૂ થાય છે. ભૂતપૂર્વ માટેample, ઘડિયાળ સિગ્નલ ફ્લિપ-ફ્લોપ્સ જેવા ક્રમિક સર્કિટના સંચાલન માટે આવશ્યક છે. તેને સતત સપ્લાય કરવાની જરૂર છે. તેથી, આપણે ટેસ્ટબેન્ચમાં ઘડિયાળના સંચાલન માટે કોડ લખી શકીએ છીએ (આકૃતિ 52 માં લાઇન 5 જુઓ):
હંમેશા
#10 clk = ~ clk;
એન્ડમોડ્યુલ
ઉપરોક્ત વિધાન t = 10 થી શરૂ થતા 0 ns પછી એક્ઝિક્યુટ થાય છે. clk ની કિંમત પહેલાની કિંમતથી 10 ns પછી ઊંધી થઈ જશે. આમ, 20 ns પલ્સ પહોળાઈનું ઘડિયાળ સિગ્નલ જનરેટ કરે છે. તેથી, આ વિધાન 50 MHz ફ્રિકવન્સીનું સિગ્નલ જનરેટ કરે છે. એ નોંધવું અગત્યનું છે કે, સિગ્નલની શરૂઆત હંમેશા બ્લોક કરતા પહેલા કરવામાં આવે છે. જો આપણે શરૂઆતનો ભાગ ન કરીએ, તો clk સિગ્નલ t – 0 થી x હશે, અને 10 ns પછી, તે બીજા x પર ઊંધુ થઈ જશે.
સ્વ-તપાસ ટેસ્ટબેન્ચ
સ્વ-ચેકિંગ ટેસ્ટબેન્ચમાં વર્તમાન સ્થિતિ તપાસવા માટેનું નિવેદન શામેલ છે.
- $પ્રદર્શન સિસ્ટમ કાર્યનો ઉપયોગ મુખ્યત્વે સિમ્યુલેશનના પ્રવાહને ટ્રૅક કરવા માટે ડિબગ સંદેશાઓ પ્રદર્શિત કરવા માટે થાય છે
પ્રારંભિક શરૂઆત
A = 0 ; b = 0 ; c = 0; #10; // ઇનપુટ લાગુ કરો, રાહ જુઓ
જો( y ! == 1) શરૂ કરો
$ડિસ્પ્લે ("000 નિષ્ફળ"); //ચેક
c = 1; #10; //ઇનપુટ લાગુ કરો, રાહ જુઓ
અંત
બાકી જો ( y ! == 0) શરૂ કરો
$ડિસ્પ્લે("001 નિષ્ફળ") // ચેક
b = 1; c = 0; #10; અંત
બાકી જો(y!==0)
$ડિસ્પ્લે ("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. વેરિલોગ ટેબલ ફોર્મેટ્સ
દલીલ | વર્ણન |
%h, %H | હેક્સાડેસિમલ ફોર્મેટમાં દર્શાવો |
%d, %D | દશાંશ સ્વરૂપમાં દર્શાવો |
%b, %B | બાઈનરી ફોર્મેટમાં દર્શાવો |
%m, %M | અધિક્રમિક નામ દર્શાવો |
%s, %S | શબ્દમાળા તરીકે દર્શાવો |
%t, %T | સમય ફોર્મેટમાં દર્શાવો |
%f, %F | દશાંશ ફોર્મેટમાં 'રિયલ' દર્શાવો |
%e, %E | ઘાતાંકીય ફોર્મેટમાં 'રિયલ' દર્શાવો |
$પ્રદર્શન મુખ્યત્વે ડેટા અથવા વેરીએબલને પ્રિન્ટ કરે છે કારણ કે તે તે સમયે તે સમયે હોય છે જેમ કે C માં printf. આપણે $ નો ઉલ્લેખ કરવો જોઈએપ્રદર્શન આપણી પાસે જે પણ લખાણ હોય તેના માટે view સિમ્યુલેશન લોગમાં.
- $સમય
$સમય એ એક સિસ્ટમ કાર્ય છે જે સિમ્યુલેશનનો વર્તમાન સમય પરત કરશે.
- $મોનિટર
$મોનિટર તે ડેટા અથવા વેરીએબલને મોનિટર કરશે જેના માટે તે લખાયેલ છે અને જ્યારે પણ વેરીએબલ બદલાશે, તે પ્રિન્ટ કરશે
બદલાયેલ મૂલ્ય. તે દર વખતે તેની કોઈપણ દલીલો મેળવ્યા પછી $ડિસ્પ્લેને કૉલ કરવાની સમાન અસર પ્રાપ્ત કરે છે
અપડેટ કર્યું. $મોનિટર એક કાર્ય જેવું છે જે મુખ્ય થ્રેડની પૃષ્ઠભૂમિમાં ચલાવવા માટે પેદા થાય છે જે મોનિટર કરે છે અને
તેના દલીલ ચલોના મૂલ્ય ફેરફારો દર્શાવે છે. $મોનિટર $ જેવો જ સિન્ટેક્સ ધરાવે છેપ્રદર્શન.
$મોનિટર("સમય = %t, A = %b, B = %b, C = % b", $સમય, A, B, C);
આકૃતિ 7 થી તમે જોઈ શકો છો કે ટેસ્ટબેન્ચનું સ્વ-મૂલ્યાંકન કરવા માટે કોડની નવી લાઇન ઉમેરવામાં આવી છે. $ ની પ્લેસમેન્ટપ્રદર્શન અને $મોનિટર ટેસ્ટબેન્ચના જુદા જુદા વિભાગોમાંના નિવેદનો વિવિધ પરિણામો આપશે (આકૃતિ 8 જુઓ). $સમય આ નિવેદનોમાં ઉલ્લેખિત સમયને છાપે છે કે જેના માટે મૂલ્ય છાપવામાં આવી રહ્યું છે. તે જ સમયે એકમ 170000 કહે છે, અમે જોઈ શકીએ છીએ કે $ ને કારણે A અને B માટે મૂલ્યમાં કેટલો તફાવત છે.પ્રદર્શન અને $મોનિટર નિવેદનો
GTKWave સોફ્ટવેર
GTKWave એ સંપૂર્ણ વૈશિષ્ટિકૃત GTK+ તરંગ છે viewયુનિક્સ, વિન32 અને મેક ઓએસએક્સ માટે er જે LXT, LXT2, VZT, FST અને GHW વાંચે છે files તેમજ પ્રમાણભૂત VCD/EVCD files અને તેમની પરવાનગી આપે છે viewing તેના અધિકારી webસાઇટ પર છે http://gtkwave.sourceforge.net/ . GTKWave ભલામણ કરેલ છે viewઇકારસ વેરિલોગ સિમ્યુલેશન ટૂલ દ્વારા.
એકવાર વપરાશકર્તાએ ડિઝાઇનની કાર્યક્ષમતા ચકાસવા માટે સફળતાપૂર્વક ટેસ્ટબેન્ચ બનાવી લીધા પછી, વપરાશકર્તા હવે GTKWave સોફ્ટવેરનો ઉપયોગ કરી શકે છે. view તરંગ સ્વરૂપો.
માટે GTKWave સોફ્ટવેર લોન્ચ કરવા માટે view વેવફોર્મ્સમાં, વપરાશકર્તાને ટૂલબારની ટોચ પર અથવા મુખ્ય મેનુ ટૂલ્સ → સિમ્યુલેશન → સિમ્યુલેટ ટેસ્ટબેન્ચમાંથી સિમ્યુલેટ ટેસ્ટબેન્ચ બટન પર ક્લિક કરવાની જરૂર છે. જો ત્યાં કોઈ વાક્યરચના ભૂલો ન હોય તો ડિઝાઇનના આધારે, GTKWave આપોઆપ શરૂ થવી જોઈએ અથવા ટેસ્ટબેન્ચમાં ઉત્તેજનાના પરિણામો વિન્ડોના લોગર વિભાગમાં પ્રદર્શિત થશે.
GTKWave સોફ્ટવેર .vcd ફોર્મેટ ડમ્પ ખોલે છેfile આપમેળે. GTKWave વિન્ડો જ્યારે તે ખુલે છે ત્યારે વેવફોર્મ પ્રદર્શિત કરતું નથી. આ વપરાશકર્તાને તે પસંદ કરવાની તક આપે છે કે તે કયા સંકેતો મેળવવા માંગે છે view અને અવલોકન કરો. સિગ્નલ પસંદ કરવા માટે, વપરાશકર્તાને પ્રદર્શિત કરવાની જરૂર છે, વપરાશકર્તાને SST ટેબ હેઠળ વિન્ડોની ડાબી બાજુએ તેમના મોડ્યુલ/ઇન્સ્ટન્સના નામ પર ક્લિક કરવાની જરૂર છે. દરેક ઇન્સ્ટન્સના + પર ક્લિક કરીને, તમે નીચેના વિભાગમાં તે ઇન્સ્ટન્સ સાથે સંબંધિત સિગ્નલો જોઈ શકો છો. પછી તમે ઇચ્છિત સિગ્નલને ડ્રેગ અને ડ્રોપ કરી શકો છો અથવા સિગ્નલ્સ વિન્ડોમાં પ્રદર્શિત કરવા માટે તેને ડબલ-ક્લિક કરી શકો છો. તમે બધા (CTRL + A) પણ પસંદ કરી શકો છો અને તેમને સિગ્નલ વિંડોમાં દાખલ કરી શકો છો (આકૃતિ 9 જુઓ).
સિગ્નલો હવે સિગ્નલ વિન્ડોમાં ઉમેરવામાં આવ્યા છે પરંતુ તેનું અનુકરણ કરવાનું બાકી છે. સિગ્નલ વિંડોમાં ઇચ્છિત સંકેતો ઉમેર્યા પછી, પર ક્લિક કરો સિગ્નલોને વિન્ડોની વર્તમાન પહોળાઈમાં ફિટ કરવા અને પછી રીલોડમાંથી સિગ્નલોને ફરીથી લોડ કરવા
ટૂલબાર પર હાજર પ્રતીક. હવે તમે સિગ્નલોને તેમના સંબંધિત મૂલ્યો સાથે જોઈ શકો છો.
સિગ્નલ મૂલ્યો
મૂળભૂત રીતે, સિગ્નલોના મૂલ્યો હેક્સાડેસિમલ ફોર્મેટમાં હોય છે અને તમામ તરંગો લીલા રંગના હોય છે (જો યોગ્ય રીતે ચાલી રહ્યા હોય તો).
વપરાશકર્તા સિગ્નલ પર જમણું-ક્લિક કરીને અને ડેટા ફોર્મેટ અથવા કલર ફોર્મેટ પસંદ કરીને આ સિગ્નલના ગુણધર્મો બદલી શકે છે. સંકેતોના જૂથ વચ્ચે વિભાગો બનાવવા માટે વપરાશકર્તા ખાલી સિગ્નલ પણ દાખલ કરી શકે છે. જ્યારે તમારી પાસે ઇચ્છિત ઓપ્ટિકલ પરિણામ હોય, ત્યારે તમે જઈને તમારી ગોઠવણીઓને સાચવી શકો છો File → સાચવો લખો File.
GTKWave ટૂલબાર
ટૂલબાર (આકૃતિ 10 જુઓ) વપરાશકર્તાને સિગ્નલ માટે મૂળભૂત કાર્યો કરવા દે છે. ચાલો ટૂલબાર પરના દરેક વિકલ્પની ડાબેથી જમણે ચર્ચા કરીએ.
- મેનુ વિકલ્પો: આ વિકલ્પ હેઠળ આપણે કરી શકીએ છીએ view સોફ્ટવેરની તમામ વિવિધ સુવિધાઓ કે જેનો ઉપયોગ સોફ્ટવેર સાથે રમવા માટે થઈ શકે છે. આ મેનુ વિકલ્પ હેઠળની વિગતો આ વપરાશકર્તા માર્ગદર્શિકાના વિભાગ 8 હેઠળ આવરી લેવામાં આવી છે.
- નિશાનો કાપો: તેનો ઉપયોગ સિગ્નલ વિન્ડોમાંથી સિલેક્ટ સિગ્નલને કાઢી નાખવા/કાપવા માટે થાય છે
- ટ્રેસની નકલ કરો: તેનો ઉપયોગ સિગ્નલ વિન્ડોમાંથી પસંદ કરેલ સિગ્નલની નકલ કરવા માટે થાય છે
- ટ્રેસ પેસ્ટ કરો: કોપી કરેલ/કટ કરેલ ટ્રેસને સિગ્નલ વિન્ડોમાં અલગ સ્થાન પર પેસ્ટ કરી શકાય છે
- ઝૂમ ફિટ: વપરાશકર્તા પ્રદર્શિત કરવા માટે પસંદ કરે છે તે વિંડોના કદ અનુસાર સિગ્નલોને ફિટ કરવા માટે તેનો ઉપયોગ થાય છે
- ઝૂમ ઇન કરો: તેનો ઉપયોગ સિગ્નલ વિન્ડોમાં ઝૂમ કરવા માટે થાય છે
- ઝૂમ આઉટ: તેનો ઉપયોગ સિગ્નલ વિન્ડોને ઝૂમ આઉટ કરવા માટે થાય છે
- ઝૂમ પૂર્વવત્ કરો: તેનો ઉપયોગ સિગ્નલ વિન્ડો પર ઝૂમ ઇન/આઉટને પૂર્વવત્ કરવા માટે થાય છે
- શરૂ કરવા માટે ઝૂમ કરો: આ સિગ્નલ વિન્ડોને ઝૂમ કરશે, સિગ્નલોનો પ્રારંભ સમય પ્રદર્શિત કરશે.
- ઝૂમ ટુ એન્ડ: આ સિગ્નલનો અંતિમ સમય દર્શાવતી સિગ્નલ વિન્ડોને ઝૂમ કરશે
- અગાઉની ધાર શોધો: આ માર્કરને ડાબી બાજુએ ખસેડે છે જે અગાઉની ધાર દર્શાવે છે
- આગલી ધાર શોધો: આ માર્કરને જમણી તરફ ખસેડે છે જે આગળની ધાર દર્શાવે છે
- લોઅર/અપર બોન્ડ સ્ક્રોલ કરો: આનો ઉપયોગ કરીને અમે સમયમર્યાદા સેટ કરી શકીએ છીએ જેમાં વપરાશકર્તા પ્રદર્શિત કરવા માંગે છે. માજી માટેample, અમે સમય ફ્રેમને 0 સેકન્ડથી 500 એનએસ સુધી સેટ કરી શકીએ છીએ, તે ફક્ત તે સમયગાળા હેઠળ સિગ્નલો પ્રદર્શિત કરશે.
- ફરીથી લોડ: જ્યારે પણ પ્રદર્શિત સિગ્નલમાં ફેરફાર થાય છે ત્યારે ફરીથી લોડ દબાવવામાં આવે છે. તે ફરીથી લોડ કરશે અને નવા પરિમાણો અનુસાર સિગ્નલ પ્રદર્શિત કરશે. માજી માટેample, સિગ્નલની સમયમર્યાદા બદલ્યા પછી, અમારે નવી સેટ સમય ફ્રેમમાં સિગ્નલ પ્રદર્શિત કરવા માટે સિગ્નલને ફરીથી લોડ કરવાની જરૂર છે.
મેનુ વિકલ્પો
GTKWave સોફ્ટવેરના ડાબા ટોચના ખૂણેથી, વપરાશકર્તા ત્રણ ઊભી રેખાઓ પર ક્લિક કરીને મેનુ વિકલ્પોને ઍક્સેસ કરી શકે છે (આકૃતિ 11 જુઓ). વપરાશકર્તા મેનુ વિકલ્પો હેઠળ નીચેના વિકલ્પો શોધી શકે છે:
File
આ File સબમેનુમાં એક્સેસિંગ સંબંધિત વિવિધ વસ્તુઓ શામેલ છે files, આયાત-નિકાસ વીસીડી 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 | 20 મે, 2024 | પ્રારંભિક પ્રકાશન. |
R19US0011EU0100 Rev.1.0
20 મે, 2024
© 2024 રેનેસાસ ઇલેક્ટ્રોનિક્સ
દસ્તાવેજો / સંસાધનો
![]() |
RENESAS ForgeFPGA સોફ્ટવેર સિમ્યુલેશન [પીડીએફ] વપરાશકર્તા માર્ગદર્શિકા REN_r19us0011eu0100, ForgeFPGA સૉફ્ટવેર સિમ્યુલેશન, ForgeFPGA સૉફ્ટવેર, ForgeFPGA, ForgeFPGA સિમ્યુલેશન, સૉફ્ટવેર સિમ્યુલેશન, સિમ્યુલેશન, સૉફ્ટવેર |