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. గో కాన్ఫిగర్ సాఫ్ట్వేర్ని తెరిచి, ఫోర్జ్ వర్క్షాప్ను తెరవడానికి భాగాన్ని ఎంచుకోండి: SLG47910(Rev BB) (మూర్తి 2 చూడండి).
d. ఎగువన ఉన్న టూల్బార్ మధ్యలో ఉన్న FPGA ఎడిటర్పై క్లిక్ చేయండి లేదా వినియోగదారు విండో మధ్యలో ఉన్న FPGA కోర్ స్ట్రక్చర్పై కూడా డబుల్ క్లిక్ చేయవచ్చు.
e. ఫోర్జ్ వర్క్షాప్ అనే కొత్త విండో తెరుచుకుంటుంది. ఎగువన ఉన్న మెను టూల్బార్లో, ఎంపికలు → సెట్టింగ్లపై క్లిక్ చేయండి. సెట్టింగ్ల డైలాగ్ బాక్స్లో, వినియోగదారు సెట్టింగ్ల ట్యాబ్లోని సాధనాలకు వెళ్లండి. Icarus Verilog మరియు GTKWave రెండింటి కోసం "సిస్టమ్ ఎన్విరాన్మెంట్ బాక్స్"ని ఉపయోగించండి ఎంపికను తీసివేయండి. మీ సిస్టమ్లో సేవ్ చేయబడిన Iverilog మరియు GTKWaveకి పాత్ను ఇవ్వబడిన స్థలంలో జోడించండి (మూర్తి 4 చూడండి).
మీరు టెస్ట్బెంచ్ను అనుకరించటానికి సిద్ధంగా ఉన్నారు మరియు పైన పేర్కొన్న దశలు గో కాన్ఫిగర్ సాఫ్ట్వేర్లో టెస్ట్బెంచ్ను అనుకరిస్తున్నప్పుడు GTKWave స్వయంచాలకంగా ప్రారంభించబడుతుందని నిర్ధారిస్తుంది.
పరీక్షా బల్ల
ఏదైనా వ్యవస్థను విజయవంతంగా అమలు చేయడంలో అత్యంత కీలకమైన దశ డిజైన్ మరియు దాని కార్యాచరణను ధృవీకరించడం. హార్డ్వేర్ను అమలు చేసిన తర్వాత సంక్లిష్ట వ్యవస్థను ధృవీకరించడం తెలివైన ఎంపిక కాదు. డబ్బు, సమయం మరియు వనరుల పరంగా ఇది అసమర్థమైనది. అందువల్ల, FPGA విషయంలో, వెరిలాగ్ సోర్స్ కోడ్ను పరీక్షించడానికి టెస్ట్బెంచ్ ఉపయోగించబడుతుంది.
మనకు 11 బిట్ల ఇన్పుట్ ఉందని అనుకుందాం మరియు మేము పరికరాన్ని అన్ని సాధ్యమైన ఇన్పుట్ కలయిక విలువల కోసం పరీక్షించాలనుకుంటున్నాము అంటే (211). ఇది చాలా పెద్ద సంఖ్యలో కలయికలు కాబట్టి, దీన్ని మాన్యువల్గా పరీక్షించడం అసాధ్యం. అటువంటి సందర్భాలలో, టెస్ట్బెంచ్లు చాలా ఉపయోగకరంగా ఉంటాయి, ఎందుకంటే మీరు డిజైన్ను అన్ని సాధ్యమైన విలువల కోసం స్వయంచాలకంగా పరీక్షించవచ్చు మరియు అందువల్ల, పరీక్ష రూపకల్పన యొక్క విశ్వసనీయతను నిర్ధారించండి. వెరిలాగ్ టెస్ట్బెంచ్లు ఎలాంటి భౌతిక హార్డ్వేర్ పరికరం అవసరం లేకుండా డిజైన్లను అనుకరించడానికి మరియు విశ్లేషించడానికి ఉపయోగించబడతాయి.
పరీక్షలో ఉన్న డిజైన్, DUT అని సంక్షిప్తీకరించబడింది, ఇది మేము పరీక్షించాలనుకుంటున్న కార్యాచరణ యొక్క సింథసైజ్ చేయదగిన మాడ్యూల్. మరో మాటలో చెప్పాలంటే, ఇది మేము పరీక్షించాలనుకుంటున్న సర్క్యూట్ డిజైన్. వెరిలాగ్లోని మూడు మోడలింగ్ స్టైల్లలో ఒకదానిని ఉపయోగించి మేము మా DUTని వివరించవచ్చు - గేట్-లెవల్, డేటాఫ్లో లేదా బిహేవియరల్.
టెస్ట్బెంచ్ సింథసైజ్ చేయబడదు, కాబట్టి ఇది అనుకరణ ప్రయోజనాల కోసం మాత్రమే ఉపయోగించబడుతుంది. ఇది వినియోగదారుని పూర్తి స్థాయి Verilog నిర్మాణాలను ఉపయోగించడానికి అనుమతిస్తుంది ఉదా, "for", "$display" మరియు "$monitor" మొదలైన కీలకపదాలు టెస్ట్బెంచ్లను వ్రాయడం కోసం. ఒక సాధారణ టెస్ట్బెంచ్ యూనిట్ అండర్ టెస్ట్ (UUT) లేదా డివైస్ అండర్ టెస్ట్ (DUT) మరియు డ్రైవ్ ఇన్పుట్లను ఇన్స్టాంటియేట్ చేస్తుంది.
టెస్ట్బెంచ్ను అర్థం చేసుకోవడం
టెస్ట్బెంచ్లో టైమ్స్కేల్ నిర్వచనం
అనుకరణ చేస్తున్నప్పుడు, సమయం ఎలా నిర్వచించబడిందో సాఫ్ట్వేర్ తెలుసుకోవాలి. ఆలస్యం యూనిట్ `టైమ్స్కేల్ డైరెక్టివ్ను ఉపయోగించి పేర్కొనబడింది, ఇది టైమ్ యూనిట్ను మరియు దానిని అనుసరించే మాడ్యూల్ల ఖచ్చితత్వాన్ని నిర్దేశిస్తుంది. టైమ్ పరంగా #1 అంటే ఏమిటో నిర్ణయించడంలో టైమ్స్కేల్ సహాయపడుతుంది. టైమ్స్కేల్లో పేర్కొన్న టైమ్ యూనిట్కు అనుగుణంగా సిస్టమ్లో ప్రవేశపెట్టాల్సిన ఆలస్యాన్ని నిర్వచించడానికి # ఉపయోగించబడుతుంది. కాబట్టి, #1 అంటే సమయం_యూనిట్ nsలో ఉంటే 1 ns ఆలస్యం.
సింటాక్స్:
కాల ప్రమాణం / /
time_unit అనేది #1 ఆలస్యాన్ని సూచించే సమయం. టైమ్_ప్రెసిషన్ బేస్ అనేది టైమ్ యూనిట్లకు సంబంధించి ఎన్ని దశాంశ పాయింట్ల ఖచ్చితత్వాన్ని సూచిస్తుంది. (చిత్రం 23లో లైన్ 5 చూడండి)
ఒకే డిజైన్లో వేర్వేరు సమయ యూనిట్లను ఉపయోగించడానికి మనం టైమ్స్కేల్ నిర్మాణాలను ఉపయోగించవచ్చు. ఆలస్యం స్పెసిఫికేషన్లు సింథసైజ్ చేయలేవని మరియు హార్డ్వేర్ లాజిక్గా మార్చబడదని వినియోగదారు గుర్తుంచుకోవాలి. ఆలస్యం విధులు పూర్తిగా అనుకరణ ప్రయోజనాల కోసం. $సమయం మరియు $నిజ సమయంలో సిస్టమ్ విధులు ప్రస్తుత సమయాన్ని తిరిగి పొందుతాయి మరియు డిఫాల్ట్ రిపోర్టింగ్ ఆకృతిని మరొక సిస్టమ్ టాస్క్తో మార్చవచ్చు $timeformat .
Exampలే:
టైమ్స్కేల్ 10US/100ns
టైమ్స్కేల్ 1ns/1ps
#10 రీసెట్ = 1; // సిగ్నల్ను 10 ns ఆలస్యం చేస్తుంది
#0.49 $display( “T = %0t at time #0.49”, $realtime) ;
పేర్కొన్న ఆలస్యం #0.49, ఇది సగం యూనిట్ సమయం కంటే తక్కువ. ఏదేమైనప్పటికీ, సమయ ఖచ్చితత్వం 1psగా పేర్కొనబడింది మరియు అందువల్ల సిమ్యులేటర్ 1ns కంటే తక్కువగా వెళ్లదు, ఇది ఇచ్చిన ఆలస్యం స్టేట్మెంట్ను పూర్తి చేసి 0nsని ఇస్తుంది. కాబట్టి, ఈ ప్రకటన ఎటువంటి ఆలస్యాన్ని అందించడంలో విఫలమైంది.
అనుకరణ లాగ్:
T = 1 సమయం #0.49 వద్ద
మాడ్యూల్ డిక్లరేషన్
ఏదైనా టెస్ట్బెంచ్లో మాడ్యూల్ డిక్లరేషన్ ప్రధాన వెరిలాగ్ కోడ్లా కాకుండా ఉంటుంది. టెస్ట్బెంచ్లో, మాడ్యూల్ దానితో పాటు ఎటువంటి టెర్మినల్ పోర్ట్లు లేకుండా ప్రకటించబడుతుంది. (చిత్రం 25లో లైన్ 5 చూడండి)
సింటాక్స్:
మాడ్యూల్ ;
ప్రధాన రూపకల్పనలో ముందుగా నిర్వచించిన ఇన్పుట్ మరియు అవుట్పుట్ సిగ్నల్లను నిర్వచించడం ద్వారా మాడ్యూల్ డిక్లరేషన్ అనుసరించబడుతుంది file.
అనుకరణ సమయంలో సిగ్నల్లను డ్రైవింగ్ చేయడానికి మరియు పర్యవేక్షించడానికి మేము రెండు సిగ్నల్ రకాలను ఉపయోగిస్తాము. రెగ్ డేటాటైప్ దానికి కొత్త విలువ కేటాయించబడే వరకు విలువను కలిగి ఉంటుంది. ఈ డేటాటైప్ ఎల్లప్పుడూ లేదా ప్రారంభ బ్లాక్లో మాత్రమే విలువను కేటాయించబడుతుంది.
వైర్ డేటాటైప్ భౌతిక కనెక్షన్ లాగా ఉంటుంది. ఇది పోర్ట్ ద్వారా నడిచే విలువను కలిగి ఉంటుంది, స్టేట్మెంట్ను కేటాయించండి లేదా రెగ్. ఈ డేటా రకం ప్రారంభ లేదా ఎల్లప్పుడూ బ్లాక్లో ఉపయోగించబడదు. ఏదైనా పరామితి మరియు పూర్ణాంక ప్రకటన కూడా ఈ విభాగంలో చేయబడుతుంది.
Exampలే:
రెగ్ ఎ,బి; // HDL కోడ్లోని ఇన్పుట్ టెస్ట్బెంచ్లో రెగ్గా నిర్వచించబడింది
వైర్ y; // HDLలోని అవుట్పుట్ సిగ్నల్ టెస్ట్బెంచ్లోని వైర్గా నిర్వచించబడింది
DUT తక్షణం
టెస్ట్బెంచ్ యొక్క ఉద్దేశ్యం మా DUT మాడ్యూల్ పనిచేస్తుందో లేదో ధృవీకరించడం. కాబట్టి, మాడ్యూల్ని పరీక్షించడానికి మేము మా డిజైన్ మాడ్యూల్ను తక్షణమే చేయాలి.
సింటాక్స్:
(. (సిగ్నల్1), . సిగ్నల్1>(సిగ్నల్2));
Exampలే:
ALUలో ALU d0 (.a(a), // సిగ్నల్ “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”కి కనెక్ట్ చేయబడాలి
.clk(గడియారం), // ALUలోని “clk” సిగ్నల్ “గడియారం” ALU_tb మాడ్యూల్కి కనెక్ట్ చేయబడాలి
.out(OUT)) ; // ALUలోని “ఔట్” సిగ్నల్ ALU_tb మాడ్యూల్లోని “OUT”కి కనెక్ట్ చేయబడాలి
టెస్ట్బెంచ్లో ఎల్లప్పుడూ & ప్రారంభ బ్లాక్
వెరిలాగ్లో రెండు సీక్వెన్షియల్ బ్లాక్లు ఉన్నాయి, ప్రారంభ మరియు ఎల్లప్పుడూ. ఈ బ్లాక్లలోనే మేము ఉద్దీపనను వర్తింపజేస్తాము.
ప్రారంభ బ్లాక్
ప్రారంభ బ్లాక్ ఒక్కసారి మాత్రమే అమలు చేయబడుతుంది మరియు బ్లాక్ యొక్క చివరి పంక్తి అమలు చేయబడినప్పుడు ముగించబడుతుంది. ఉద్దీపన ప్రారంభ బ్లాక్లో వ్రాయబడింది. (చిత్రం 54లో లైన్ 72-5 చూడండి)
వాక్యనిర్మాణం:
..
ప్రారంభ ప్రారంభం
$ డంప్file();
$dumpvars();
..(ఉద్దీపనను నమోదు చేయండి)
ముగింపు
ప్రారంభ బ్లాక్ t = 0 సమయంలో అనుకరణ ప్రారంభంలో దాని అమలును ప్రారంభిస్తుంది. ప్రారంభం మరియు ముగింపు మధ్య మొదటి పంక్తితో ప్రారంభించి, ఆలస్యం చేరుకునే వరకు ప్రతి పంక్తి పై నుండి క్రిందికి అమలు అవుతుంది. ఆలస్యాన్ని చేరుకున్నప్పుడు, ఈ బ్లాక్ యొక్క అమలు ఆలస్యం సమయం (10-సమయ యూనిట్లు) గడిచే వరకు వేచి ఉండి, ఆపై మళ్లీ అమలును ప్రారంభిస్తుంది.
వినియోగదారు అన్ని కలయికలను మాన్యువల్గా నమోదు చేయడానికి బదులుగా ఈ ప్రారంభ బ్లాక్లో లూప్లను (కోసం, అయితే, ఉంటే-ఎలా) ఉపయోగించి ఉద్దీపనలను నిర్వచించవచ్చు.
Exampలే:
ప్రారంభ ప్రారంభం
A = 0; b = 0; // అమలును ప్రారంభించండి
#10 a = 0; b = 1; // అమలు t = 10-యూనిట్ సమయంలో ఉంది
#10 a = 1; b = 0; // అమలు t = 20-యూనిట్ సమయంలో ఉంది
ముగింపు
డంప్ Files
గుర్తుంచుకోవలసిన మరో విషయం ఏమిటంటే $ డిక్లరేషన్డంప్files మరియు $dumpvars ప్రారంభ బ్లాక్ లోపల (Figure 55 లో లైన్ 56- 5 చూడండి). $డంప్file a లో నెట్స్ మరియు రిజిస్టర్ల విలువలలో మార్పులను డంప్ చేయడానికి ఉపయోగించబడుతుంది file అని దాని వాదనగా పేరు పెట్టారు.
ఉదాహరణకుampలే:
$డంప్file(“alu_tb.vcd”);
a లో మార్పులను డంప్ చేస్తుంది file alu_tb.vcd అని పేరు పెట్టబడింది. మార్పులు a లో నమోదు చేయబడ్డాయి file VCD అని file అంటే విలువ మార్పు డంప్. VCD (విలువ మార్పు డంప్) విలువ మార్పుల గురించి మొత్తం సమాచారాన్ని నిల్వ చేస్తుంది. మేము ఒకటి కంటే ఎక్కువ $dumpలను కలిగి ఉండకూడదుfile వెరిలాగ్ అనుకరణలో ప్రకటనలు.
$dumpvars ఏ వేరియబుల్స్ డంప్ చేయాలో పేర్కొనడానికి ఉపయోగించబడుతుంది (లో file $dump ద్వారా ప్రస్తావించబడిందిfile) దీన్ని ఉపయోగించడానికి సులభమైన మార్గం ఎటువంటి వాదన లేకుండా. $dumpvars యొక్క సాధారణ వాక్యనిర్మాణం
$dumpvars ( <, >);
మేము ప్రాథమికంగా ఏ మాడ్యూల్స్ మరియు మాడ్యూల్స్లోని వేరియబుల్స్ డంప్ చేయబడతాయో పేర్కొనవచ్చు. దీన్ని ఉపయోగించడానికి సులభమైన మార్గం స్థాయిని 0కి సెట్ చేయడం మరియు మాడ్యూల్ పేరును టాప్ మాడ్యూల్గా (సాధారణంగా టాప్ టెస్ట్బెంచ్ మాడ్యూల్) సెట్ చేయడం.
$dumpvars(0, alu_tb);
స్థాయిని 0కి సెట్ చేసినప్పుడు మరియు మాడ్యూల్ పేరు మాత్రమే పేర్కొనబడినప్పుడు, అది ఆ మాడ్యూల్ యొక్క అన్ని వేరియబుల్స్ మరియు ఈ టాప్ మాడ్యూల్ ద్వారా ఇన్స్టాంటియేట్ చేయబడిన అన్ని దిగువ-స్థాయి మాడ్యూల్స్లోని అన్ని వేరియబుల్స్ను డంప్ చేస్తుంది. ఈ టాప్ మాడ్యూల్ ద్వారా ఏదైనా మాడ్యూల్ ఇన్స్టంట్ చేయకపోతే, దాని వేరియబుల్ కవర్ చేయబడదు. ఇంకొక విషయం, $ యొక్క ప్రకటనడంప్file తప్పనిసరిగా $dumpvars లేదా డంప్ని పేర్కొనే ఏదైనా ఇతర సిస్టమ్ టాస్క్ల ముందు రావాలి. ఇవి డంప్ fileలు తప్పనిసరిగా ఉద్దీపన ఇన్పుట్ల కంటే ముందే ప్రకటించబడాలి, ఈ డంప్లో విలువ ఏదీ సేవ్ చేయబడదు files.
ఎల్లప్పుడూ నిరోధించు
ప్రారంభ స్టేట్మెంట్లకు విరుద్ధంగా, ఎల్లప్పుడూ బ్లాక్ పదేపదే అమలు చేయబడుతుంది, అయితే అమలు సమయం t = 0 వద్ద ప్రారంభమవుతుంది. ఉదాహరణకుampఅలాగే, ఫ్లిప్-ఫ్లాప్స్ వంటి సీక్వెన్షియల్ సర్క్యూట్ల ఆపరేషన్కు క్లాక్ సిగ్నల్ అవసరం. ఇది నిరంతరం సరఫరా చేయాలి. కాబట్టి, మేము గడియారం యొక్క ఆపరేషన్ కోసం ఒక టెస్ట్బెంచ్లో కోడ్ను ఇలా వ్రాయవచ్చు (మూర్తి 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; // ఇన్పుట్ని వర్తింపజేయండి, వేచి ఉండండి
if(y! == 1) ప్రారంభం
$డిస్ప్లే ("000 విఫలమైంది") ; // తనిఖీ చేయండి
c = 1; #10 ; //ఇన్పుట్ వర్తించు, వేచి ఉండండి
ముగింపు
లేకపోతే (y! == 0) ప్రారంభమైతే
$display(“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. మనం తప్పనిసరిగా $ని పేర్కొనాలిప్రదర్శన ఏ వచనం కోసం మనం చేయవలసి ఉంటుంది view అనుకరణ లాగ్లో.
- $సమయం
$సమయం అనుకరణ యొక్క ప్రస్తుత సమయాన్ని అందించే సిస్టమ్ టాస్క్.
- $మానిటర్
$మానిటర్ ఇది వ్రాయబడిన డేటా లేదా వేరియబుల్ను పర్యవేక్షిస్తుంది మరియు వేరియబుల్ మారినప్పుడల్లా, అది ముద్రిస్తుంది
మారిన విలువ. దాని వాదనలు ఏవైనా వచ్చిన ప్రతిసారీ $displayకి కాల్ చేయడం ద్వారా ఇది సారూప్య ప్రభావాన్ని సాధిస్తుంది
నవీకరించబడింది. $మానిటర్ ప్రధాన థ్రెడ్ని పర్యవేక్షించే నేపధ్యంలో అమలు చేయడానికి రూపొందించబడిన పని లాంటిది
దాని ఆర్గ్యుమెంట్ వేరియబుల్స్ యొక్క విలువ మార్పులను ప్రదర్శిస్తుంది. $మానిటర్ $ వలె అదే వాక్యనిర్మాణాన్ని కలిగి ఉందిప్రదర్శన.
$మానిటర్(“సమయం = %t, A = %b, B = %b, C = % b”, $సమయం, A,B,C);
మూర్తి 7 నుండి టెస్ట్బెంచ్ను స్వీయ-మూల్యాంకనం చేయడానికి కొత్త లైన్ల కోడ్లు జోడించబడిందని మీరు గమనించవచ్చు. $ యొక్క స్థానంప్రదర్శన మరియు $మానిటర్ టెస్ట్బెంచ్లోని వివిధ విభాగాలలోని స్టేట్మెంట్లు వేర్వేరు ఫలితాలను ఇస్తాయి (మూర్తి 8 చూడండి). $సమయం ఈ స్టేట్మెంట్లలో పేర్కొనబడిన విలువ ముద్రించబడే సమయాన్ని ముద్రిస్తుంది. అదే సమయంలో యూనిట్ 170000 అని చెప్పినప్పుడు, $ కారణంగా A మరియు B విలువలో తేడా ఎలా ఉందో మనం చూడవచ్చుప్రదర్శన మరియు $మానిటర్ ప్రకటనలు.
GTKWave సాఫ్ట్వేర్
GTKWave పూర్తిగా ఫీచర్ చేయబడిన GTK+ వేవ్ viewLXT, LXT32, VZT, FST మరియు GHW చదివే Unix, Win2 మరియు Mac OSX కోసం er fileలు అలాగే ప్రామాణిక VCD/EVCD fileలు మరియు వాటిని అనుమతిస్తుంది viewing. దాని అధికారిక webసైట్ వద్ద ఉంది http://gtkwave.sourceforge.net/ . GTKWave సిఫార్సు చేయబడింది viewer Icarus Verilog అనుకరణ సాధనం ద్వారా.
డిజైన్ యొక్క కార్యాచరణను పరీక్షించడానికి వినియోగదారు విజయవంతంగా టెస్ట్బెంచ్ను సృష్టించిన తర్వాత, వినియోగదారు ఇప్పుడు GTKWave సాఫ్ట్వేర్ను ఉపయోగించవచ్చు view తరంగ రూపాలు.
GTKWave సాఫ్ట్వేర్ను ప్రారంభించేందుకు view వేవ్ఫారమ్లలో, వినియోగదారు టూల్బార్ పైభాగంలో లేదా ప్రధాన మెను నుండి టూల్స్→ సిమ్యులేషన్→ టెస్ట్బెంచ్ను అనుకరించండి బటన్ను అనుకరించండి. సింటాక్స్ లోపాలు లేనట్లయితే, డిజైన్పై ఆధారపడి, GTKWave స్వయంచాలకంగా ప్రారంభించబడాలి లేదా టెస్ట్బెంచ్లోని ఉద్దీపనల ఫలితాలు విండోలోని లాగర్ విభాగంలో ప్రదర్శించబడతాయి.
GTKWave సాఫ్ట్వేర్ .vcd ఫార్మాట్ డంప్ను తెరుస్తుందిfile స్వయంచాలకంగా. GTKWave విండో తెరుచుకున్నప్పుడు తరంగ రూపాన్ని ప్రదర్శించదు. ఇది వినియోగదారుకు ఏ సిగ్నల్స్ కావాలో ఎంచుకోవడానికి అవకాశం ఇస్తుంది view మరియు గమనించండి. సిగ్నల్ను ఎంచుకోవడానికి, వినియోగదారు ప్రదర్శించాల్సిన అవసరం ఉంది, వినియోగదారు SST ట్యాబ్ కింద విండో యొక్క ఎడమ వైపున వారి మాడ్యూల్/ఉదాహరణ పేరుపై క్లిక్ చేయాలి. ప్రతి సందర్భం యొక్క +ని క్లిక్ చేయడం ద్వారా, దిగువ విభాగంలో ఆ సందర్భానికి సంబంధించిన తెలివితేటలను మీరు చూడవచ్చు. ఆపై మీరు కోరుకున్న సిగ్నల్ను లాగి వదలవచ్చు లేదా సిగ్నల్స్ విండోలో ప్రదర్శించబడటానికి వాటిని డబుల్ క్లిక్ చేయండి. మీరు అన్నింటినీ (CTRL + A) కూడా ఎంచుకోవచ్చు మరియు వాటిని సిగ్నల్స్ విండోకు చొప్పించవచ్చు (మూర్తి 9 చూడండి).
సిగ్నల్స్ ఇప్పుడు సిగ్నల్ విండోకు జోడించబడ్డాయి, అయితే ఇది ఇంకా అనుకరించబడలేదు. సిగ్నల్ విండోకు కావలసిన సంకేతాలను జోడించిన తర్వాత, క్లిక్ చేయండి విండో యొక్క ప్రస్తుత వెడల్పుకు సిగ్నల్లను అమర్చడానికి మరియు మళ్లీ లోడ్ నుండి సిగ్నల్లను మళ్లీ లోడ్ చేయడానికి
టూల్బార్లో ఉన్న చిహ్నం. మీరు ఇప్పుడు సంకేతాలను వాటి సంబంధిత విలువలతో చూడవచ్చు.
సిగ్నల్ విలువలు
డిఫాల్ట్గా, సిగ్నల్స్ విలువలు హెక్సాడెసిమల్ ఫార్మాట్లో ఉంటాయి మరియు అన్ని తరంగాలు ఆకుపచ్చ రంగులో ఉంటాయి (సరిగ్గా నడుస్తున్నట్లయితే).
వినియోగదారు సిగ్నల్పై కుడి-క్లిక్ చేసి, డేటా ఫార్మాట్ లేదా రంగు ఆకృతిని ఎంచుకోవడం ద్వారా ఈ సిగ్నల్ లక్షణాలను మార్చవచ్చు. సిగ్నల్ల సమూహం మధ్య విభాగాలను చేయడానికి వినియోగదారు ఖాళీ సిగ్నల్ను కూడా చొప్పించవచ్చు. మీకు కావలసిన ఆప్టికల్ ఫలితం ఉన్నప్పుడు, మీరు వెళ్లడం ద్వారా మీ కాన్ఫిగరేషన్లను సేవ్ చేయవచ్చు File → సేవ్ వ్రాయండి File.
GTKWave టూల్బార్
టూల్ బార్ (మూర్తి 10 చూడండి) సిగ్నల్ కోసం ప్రాథమిక విధులను నిర్వహించడానికి వినియోగదారుని అనుమతిస్తుంది. టూల్బార్లోని ప్రతి ఎంపికను ఎడమ నుండి కుడికి చర్చిద్దాం.
- మెను ఎంపికలు: ఈ ఎంపిక కింద మనం చేయవచ్చు view సాఫ్ట్వేర్తో ఆడుకోవడానికి ఉపయోగించే సాఫ్ట్వేర్ యొక్క అన్ని విభిన్న లక్షణాలు. ఈ మెను ఎంపిక క్రింద ఉన్న వివరాలు ఈ యూజర్ గైడ్లోని సెక్షన్ 8 క్రింద కవర్ చేయబడ్డాయి.
- జాడలను కత్తిరించండి: ఇది సిగ్నల్ విండో నుండి ఎంచుకున్న సిగ్నల్ను తొలగించడానికి/కట్ చేయడానికి ఉపయోగించబడుతుంది
- జాడలను కాపీ చేయండి: ఇది సిగ్నల్ విండో నుండి ఎంచుకున్న సిగ్నల్ను కాపీ చేయడానికి ఉపయోగించబడుతుంది
- జాడలను అతికించండి: కాపీ చేయబడిన/కట్ చేసిన ట్రేస్ సిగ్నల్ విండోలో వేరే ప్రదేశంలో అతికించబడుతుంది
- జూమ్ ఫిట్: ఇది వినియోగదారు ప్రదర్శించడానికి ఎంచుకున్న విండో పరిమాణం ప్రకారం సిగ్నల్లను అమర్చడానికి ఉపయోగించబడుతుంది
- జూమ్ ఇన్ చేయండి: ఇది సిగ్నల్ విండోలో జూమ్ చేయడానికి ఉపయోగించబడుతుంది
- జూమ్ అవుట్ చేయండి: ఇది సిగ్నల్ విండోను జూమ్ చేయడానికి ఉపయోగించబడుతుంది
- జూమ్ అన్డు: ఇది సిగ్నల్ విండోలో జూమ్ ఇన్/అవుట్ని అన్డు చేయడానికి ఉపయోగించబడుతుంది
- ప్రారంభించడానికి జూమ్ చేయండి: ఇది సిగ్నల్ విండోను జూమ్ చేస్తుంది, సిగ్నల్స్ ప్రారంభ సమయాన్ని ప్రదర్శిస్తుంది.
- జూమ్ టు ఎండ్: ఇది సిగ్నల్స్ ముగింపు సమయాన్ని ప్రదర్శించే సిగ్నల్ విండోను జూమ్ చేస్తుంది
- మునుపటి అంచుని కనుగొనండి: ఇది మునుపటి అంచుని సూచించే మార్కర్ను ఎడమ వైపుకు మారుస్తుంది
- తదుపరి అంచుని కనుగొనండి: ఇది తదుపరి అంచుని సూచించే మార్కర్ను కుడివైపుకి మారుస్తుంది
- దిగువ/ఎగువ బంధాన్ని స్క్రోల్ చేయండి: దీన్ని ఉపయోగించి మనం వినియోగదారు ప్రదర్శించాలనుకుంటున్న టైమ్ ఫ్రేమ్ని సెట్ చేయవచ్చు. ఉదాహరణకుample, మేము టైమ్ ఫ్రేమ్ను 0 సెకను నుండి 500 ns వరకు సెట్ చేయవచ్చు, అది ఆ వ్యవధిలో మాత్రమే సిగ్నల్లను ప్రదర్శిస్తుంది.
- రీలోడ్: ప్రదర్శించబడే సిగ్నల్కు మార్పు వచ్చినప్పుడల్లా రీలోడ్ నొక్కబడుతుంది. ఇది కొత్త పారామితుల ప్రకారం సిగ్నల్ను రీలోడ్ చేస్తుంది మరియు ప్రదర్శిస్తుంది. ఉదాహరణకుample, సిగ్నల్ యొక్క సమయ ఫ్రేమ్ను మార్చిన తర్వాత, కొత్త సెట్ టైమ్ ఫ్రేమ్లో సిగ్నల్ను ప్రదర్శించడానికి మేము సిగ్నల్ను మళ్లీ లోడ్ చేయాలి.
మెను ఎంపికలు
GTKWave సాఫ్ట్వేర్ యొక్క ఎడమ ఎగువ మూలలో నుండి, వినియోగదారు మూడు నిలువు వరుసలను క్లిక్ చేయడం ద్వారా మెను ఎంపికలను యాక్సెస్ చేయవచ్చు (మూర్తి 11 చూడండి). వినియోగదారు మెను ఎంపికల క్రింద క్రింది ఎంపికలను కనుగొనవచ్చు:
File
ది File ఉపమెను యాక్సెస్కి సంబంధించిన వివిధ అంశాలను కలిగి ఉంది fileలు, దిగుమతి-ఎగుమతి VCD fileలు, ప్రింటింగ్ మరియు చదవడం/రాయడం fileలు మరియు నిష్క్రమించడం.
సవరించు
వేవ్ సబ్విండోలో విలువల డేటా ప్రాతినిధ్యాన్ని మార్చడం వంటి వివిధ యుటిలిటీ ఫంక్షన్లను నిర్వహించడానికి సవరణ ఉపమెను ఉపయోగించబడుతుంది. సవరణ ఉపమెను క్రింద ఉన్న ఎంపికలను ఉపయోగించి, వినియోగదారు సిగ్నల్ల డేటా ఆకృతిని మార్చవచ్చు, వాటిని క్రమాన్ని మార్చవచ్చు, వాటిని మార్చవచ్చు, ట్రిమ్ చేయవచ్చు, హైలైట్ చేయవచ్చు, గ్రూప్ సిగ్నల్లు, సిగ్నల్లపై వ్యాఖ్యానించవచ్చు, సిగ్నల్ల రంగును మార్చవచ్చు.
శోధన
నికర పేర్లు మరియు విలువలపై శోధనలను నిర్వహించడానికి శోధన ఉపమెను ఉపయోగించబడుతుంది. ఇది VCDలోని సిగ్నల్స్ మరియు ఇన్స్టాన్స్ల యొక్క వివిధ క్రమానుగత స్థాయిలపై విధులను నిర్వహించడానికి సహాయపడుతుంది file.
సమయం
సమయ ఉపమెను నావిగేషన్లు మరియు స్టేటస్ ప్యానెల్ బటన్ల ద్వారా నిర్వహించబడే ఫంక్షన్ల సూపర్సెట్ను కలిగి ఉంది.
ఇది సరళమైన, సమయ సంబంధిత, జూమ్ చేయడం, నిర్దిష్ట సమయ బిందువుకు వెళ్లడం, సిగ్నల్ను నిర్దిష్ట దిశలో మార్చడం వంటి ఫంక్షన్లను ప్రారంభిస్తుంది.
మార్కర్
మార్కర్ సబ్మెను మార్కర్లో వివిధ మానిప్యులేషన్లను నిర్వహించడానికి అలాగే ఆఫ్స్క్రీన్ స్క్రోలింగ్ను నియంత్రించడానికి ఉపయోగించబడుతుంది.
ఇది సిగ్నల్ విండోలో అనేక మార్కర్లను జోడించే కార్యాచరణను ప్రారంభిస్తుంది. గరిష్టంగా 26 పేర్ల మార్కర్లు అనుమతించబడతాయి మరియు అన్నింటికీ సమయాలు తప్పనిసరిగా భిన్నంగా ఉండాలి.
a. సిగ్నల్ విండోలో మార్కర్లను జోడించడానికి
మీరు మార్కర్ను ఉంచాలనుకుంటున్న అవసరమైన పాయింట్ వద్ద ఎడమ క్లిక్ చేసి, ALT + N నొక్కండి. ఇది అవసరమైన పాయింట్ వద్ద పేరు పెట్టబడిన మార్కర్ను (A,B,C, మొదలైనవి) ఉంచుతుంది. వినియోగదారు 26 వేర్వేరు సమయ స్థానాల కోసం దీన్ని కొనసాగించవచ్చు.
అన్ని స్థలాల మార్కర్ల వద్ద సమయ విలువను సరిపోల్చడానికి, మెనూ → మార్కర్లు → మార్పు మార్కర్ డేటాను చూపించు.
ఇది ప్రతి మార్కర్ వద్ద సమయ విలువతో విండోను తెరుస్తుంది. వినియోగదారు ఉంచిన ప్రతి మార్కర్ వద్ద సమయ విలువను మాన్యువల్గా గమనించవచ్చు మరియు 2 మార్కర్ల మధ్య సమయ వ్యత్యాసాన్ని లెక్కించడానికి వాటిని తీసివేయవచ్చు.
b. సిగ్నల్ విండోలో మార్కర్ను తీసివేయడానికి
వినియోగదారు మెనూ → మార్కర్లు → నేమ్డ్ మార్కర్కు వెళ్లవచ్చు. ఇది సిగ్నల్ విండోలో ఉంచిన చివరి పేరు గల మార్కర్ను తీసివేస్తుంది. మెనూ → మార్కర్లు → అన్ని పేరున్న మార్కర్లను సేకరించండి (మూర్తి 12)కి వెళ్లడం ద్వారా వినియోగదారు పేరున్న మార్కర్లన్నింటినీ తీసివేయవచ్చు.
మూర్తి 13 లో, సిగ్నల్ రంగులు ఎలా మార్చబడ్డాయో మనం చూడవచ్చు. మీరు సిగ్నల్ విండోకు జోడించిన ఖాళీ సిగ్నల్ను అలాగే ఒక వ్యాఖ్యతో గమనించవచ్చు - ఖాళీ సిగ్నల్.
6 పేరున్న మార్కర్ల ఉనికిని (A - E) మరియు psలో ఈ మార్కర్ల మధ్య సమయ విలువ యొక్క కంపర్గేషన్ను కూడా గమనించండి.
View
ది View సిగ్నల్ సబ్ విండోలో స్టేటస్ ఐటెమ్ల గ్రాఫికల్ రెండరింగ్తో పాటు విలువలతో వ్యవహరించే వివిధ లక్షణాలను నియంత్రించడానికి సబ్మెను ఉపయోగించబడుతుంది. ఈ మెను నుండి, మీరు సిగ్నల్ విండోను నలుపు & తెలుపు లేదా రంగులోకి మార్చవచ్చు. ది View సెకనుల (సెకన్లు) నుండి ఫికోసెకన్ల (ఎఫ్ఎస్) వరకు సమయ పరిమాణాన్ని మార్చడానికి ఉపమెను మిమ్మల్ని అనుమతిస్తుంది. వినియోగదారు ఈ ఎంపికను కనుగొనవచ్చు View → స్కేల్ టు టైమ్ డైమెన్షన్ → fs.
సహాయం
సహాయ ఉపమెను ఆన్లైన్ సహాయాన్ని ప్రారంభించడంతోపాటు ప్రోగ్రామ్ వెర్షన్ సమాచారాన్ని ప్రదర్శించడం కోసం ఎంపికలను కలిగి ఉంది.
తీర్మానం
అవసరమైన టెస్ట్బెంచ్ను సరిదిద్దడం ద్వారా మరియు తరంగ రూపాలను ప్రదర్శించడానికి మరియు ఫలితాలను గమనించడానికి GTKWaveతో పాటు Icarus Verilogని ఉపయోగించడం ద్వారా వారి డిజైన్ను విజయవంతంగా అనుకరించడంలో మరియు కార్యాచరణను ధృవీకరించడంలో వినియోగదారుకు సహాయపడటానికి ఈ పత్రం సృష్టించబడింది.
పునర్విమర్శ చరిత్ర
పునర్విమర్శ | తేదీ | వివరణ |
1.00 | మే 20, 2024 | ప్రారంభ విడుదల. |
R19US0011EU0100 Rev.1.0
మే 20, 2024
© 2024 రెనెసాస్ ఎలక్ట్రానిక్స్
పత్రాలు / వనరులు
![]() |
RENESAS ForgeFPGA సాఫ్ట్వేర్ అనుకరణ [pdf] యూజర్ గైడ్ REN_r19us0011eu0100, ForgeFPGA సాఫ్ట్వేర్ అనుకరణ, ForgeFPGA సాఫ్ట్వేర్, ForgeFPGA, ForgeFPGA అనుకరణ, సాఫ్ట్వేర్ అనుకరణ, అనుకరణ, సాఫ్ట్వేర్ |