people-courses-142-summary of verilog syntax.pdf

Post on 09-Sep-2015

227 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

  • Copyright1997,Hon -ChiNg.

    Permissiontoduplicateanddistributethisdocumentisherewithgrantedforsoleeducationalpurposewithoutanycommercialadvantage,providedthiscopyrightmessageisaccompanied inalltheduplicatesdistributed.Allotherrightsreserved.AllCadencestoolsreferredaretrademarksorregisteredtrademarksofCadenceDesignSystems,Inc.Allothertrademarksbelongtotheirrespectiveowners.

    SummaryofVerilogSyntax

    1.Module&InstantiationofInstances

    AModule in Verilogisdeclaredwithinthepairofkeywords moduleand endmodule.Followingthekeyword modulearethe modulename and portinterfacelist .

    modulemy_module(a,b,c, d); inputa,b; outputc,d; ...

    endmodule

    All instances mustbe namedexcepttheinstancesofprimitives.Onlyprimitivesin Verilogcanhave anonymousinstances ,i.e. and, or, nand, nor, xor, xnor, buf, not,bufif1, bufi0, notif1, notif0, nmos, pmos, cmos, tran, tranif1, tranif0,rnmos, rpmos, rcmos, rtran, rtranif1, rtranif0.

    PortConnectionsatInstantiations In Verilog,thereare2waysofspecifyingconnectionsamongportsofinstances.

    a) Byorderedlist (positionalassociation) Thisisthemoreintuitivemethod,wherethesignalstobeconnectedmustappearinthe

    moduleinstantiationinthesameorderastheportslistedinmoduledefinition.

    b) Byname (namedassociation) Whentherearetoomanyportsinthelargemodule, itbecomesdifficulttotracktheorder.

    Connectingthesignalstotheportsbytheportnamesincreases readability andreducespossibleerrors.

    moduletop; regA,B; wireC,D;

    my_modulem1(A,B,C,D); //Byorder my_modulem2(.b(B), .d(D),.c(C),.a(A)); //Byname ...

    endmodule

    ParameterizedInstantiations Thevaluesofparameterscanbe overriddenduringinstantiation,sothateachinstancecan

    becustomizedseparately.Alternatively, defparamstatementcanbeusedforthe samepurpose.

  • CprE305LaboratoryTutorial VerilogSyntax Page 2of 2

    LastUpdated: 02/07/01 4:24 PM

    modulemy_module(a,b,c,d); parameterx=0;

    inputa,b; outputc,d;

    parametery=0,z=0; ...

    endmodule

    moduletop; regA,B; wireC,D;

    my_module#(2,4,3)m1(A,B,C,D); //x=2,y=4,z =3ininstancem1

    my_module#(5,3,1)m2(.b(B),.d(D),.c(C),.a(A)); //x=5,y=3,z=1ininstancem2

    defparamm3.x=4,m3.y=2,m3.z=5; my_modulem3(A,B,C,D); //x=4,y=2,z=5ininstancem3 ...

    endmodule

    2.Da taTypes

    Thereare2groupsofdatatypesin Verilog,namely physical and abstract.

    a) Physicaldatatype Net( wire, wand, wor, tri, triand, trior).Defaultvalueis z.Usedmainlyin

    structuralmodeling. Register( reg).Defaultvalueis x.Usedindataflow/RTLandbehavioralmodelings. Chargestoragenode( trireg).Defaultvalueis x.Usedingate -levelandswitch -

    level modelings.

    b) Abstractdatatype usedonlyinbehavioralmodelingandtestfixture. Integer( integer)st ores32 -bitsignedquantity. Time( time)stores64 -bitunsignedquantityfromsystemtask $time. Real( real)storesfloating -pointquantity. Parameter( parameter)substitutesconstant. Event( event)isonlynamereference doesnotholdva lue.

    Unfortunately,thecurrentstandardof Verilogdoesnotsupportuser -definedtypes,unlikeVHDL.

    3.Values&Literals

    Verilogprovides4basicvalues, a) 0 logiczeroorfalsecondition b) 1 logicone,ortruecondition c) x unkno wn/undefinedlogicvalue.Onlyforphysicaldatatypes.

  • CprE305LaboratoryTutorial VerilogSyntax Page 3of 3

    LastUpdated: 02/07/01 4:24 PM

    d) z high -impedance/floatingstate.Onlyforphysicaldatatypes.

    Constantsin Verilogareexpressedinthefollowingformat: width 'radix value width Expressedindecimalinteger.Opt ional,defaultisinferredfromvalue. 'radix Binary(b),octal( o),decimal( d),orhexadecimal( h).Optional,defaultisdecimal.

    value Anycombinationofthe4basicvaluescanbedigitsforradixoctal,decimalorhexadecimal.

    4'b1011 //4 -bitbinaryofvalue1011 234 //3 -digitdecimalofvalue234 2'h5a //2 -digit(8 -bit)hexadecimalofvalue5A 3'o671 //3 -digit(9 -bit)octalofvalue671 4b'1x0z //4 -bitbinary.2ndMSBisunknown.LSBisHi -Z. 3.14 //Floatingpoint 1.28e5 //Sc ientificnotation

    Thereare8differentstrengthlevelsthatcanbeassociatedbyvalues0and1.

    StrengthLevel Abbreviation Type Degree

    supply0supply1

    Su0Su1 driving strongest

    strong0strong1

    St0St1 driving

    pull0pull1

    Pu0Pu1 driving

    large0large1

    La0La1 chargestorage

    weak0weak1

    We0We1 driving

    medium0medium1

    Me0Me1 chargestorage

    small0small1

    Sm0Sm1 chargestorage

    highz0highz1

    HiZ0HiZ1

    weakest

    Inthecaseof contention,the strongersignaldominates .Combinationof2o ppositevaluesofsamestrengthresultsinavalueof x.

    St0, Pu1 St0 Su1, La1 Su1 Pu0, Pu1 PuX

    4.Nets&Registers

    Netisthe connectionbetweenportsofmoduleswithinahighermodule.Netisusedintestfixturesandallmodelingabst ractionincludingbehavioral.Defaultvalueofnetis high-Z(z).Netsjustonly passvalues fromoneendtotheother,i.e.itdoesnotstorethevalue.Oncetheoutputdevicediscontinuesdrivingthenet,thevalueinthenetbecomeshigh -Z( z).Besidestheusualnet( wire), Verilogalsoprovidesspecialnets( wor, wand)toresolvethe

  • CprE305LaboratoryTutorial VerilogSyntax Page 4of 4

    LastUpdated: 02/07/01 4:24 PM

    finallogicwhenthereislogiccontentionbymultipledrivers. tri, triorand triandarejustthealiasesfor wire, worand wandforreadabilityreason.

    Registeris the storagethatretains(remembers)thevaluelastassignedtoit,therefore,unlike wire,itneedsnottobecontinuouslydriven.Itisonlyusedinthetestfixture,behavioral,anddataflowmodelings.Thedefaultvalueofaregisteris unknown ( x).

    Otherspecialnetsin VerilogarethesupplieslikeV CC/VDD( supply1),Gnd( supply0),pullup( pullup)andpulldown( pulldown),resistivepullup( tri1)andresistivepulldown( tri0),andchargestorage/capacitivenode( trireg)whichhas storagestrengtha ssociatedwithit.

    5.Vectors&Arrays

    Physicaldatatypes ( wire, reg, trireg)canbedeclaredas vector/bus(multiplebitwidths).An Arrayisachunkofconsecutivevaluesofthesametype.Datatypes reg,integerand timecanbedeclaredasanarra y.Multidimensionalarraysarenotpermittedin Verilog,however,arrayscanbedeclaredforvectoredregistertype.

    wire[3:0]data; //4 -bitwidevector regbit[1:8]; //arrayof81 -bitscalar reg[3:0]mem[1:8]; //arrayof84 -bitvector

    The rangeofvectorsandarraysdeclaredcanstartfromanyinteger,andineitherascendingordescendingorder.However,whenaccessingthevectororarray,the slice(subrange)specifiedmustbewithintherangeandinthesameorderasdeclared.

    data[4] //Out -of-range bit[5:2] //Wrongorder

    Thereisnosyntaxavailabletoaccessabitsliceofanarrayelement thearrayelementhastobestoredtoa temporaryvariable .

    //Can'tdomem[7][2] reg[3:0]tmp; //Needtemporaryvariable tmp=mem[7]; tmp[2];

    6.Tasks&Functions

    Tasksandfunctionsin Verilogcloselyresembletheproceduresandfunctionsinprogramminglanguages.Bothtasksandfunctionsare definedlocally inthemoduleinwhichthetasksandfunctionswillbeinvo ked.No initialor alwaysstatementmaybedefinedwithineithertasksorfunctions.

    Tasksandfunctionsaredifferent taskmayhave0ormoreargumentsoftype input,outputor inout; functionmusthaveatleastoneinputargument.Tasksdonotreturnvaluebutpassvaluesthrough outputand inoutarguments;functionsalwaysreturnasinglevalue,butcannothave output or inoutarguments.Tasksmaycontain

  • CprE305LaboratoryTutorial VerilogSyntax Page 5of 5

    LastUpdated: 02/07/01 4:24 PM

    delay,eventortimingcontrolstatements;functionsmaynot.Taskscaninvokeothertasksandfunctions;functionscanonlyinvokeotherfunctions,butnottasks.

    modulem;reg[1:0]r1;reg[3:0]r2;regr3;

    ...

    alwaysbegin...

    r2=my_func(r1); //Invokefunction...

    my_task(r2,r3); //Invoketask...

    end

    taskmy_task;input[3:0]i;outputo;begin...

    endendtask...

    function[3:0]my_func;input[1:0]i;begin...

    my_func=...; //Returnvalueendendfunction...

    endmodule

    7.SystemTasks &CompilerDirectives

    Systemtasksarethe built-intasks standardin Verilog.Allsystemtasksareprecededwith$.Someusefulsystemtaskscommonlyusedare:

    $display("format", v1, v2,...); //Similarformattoprintf()inC$write("format", v1, v2,...); //$displayappendsnewlineattheend, //but$writedoesnot.$strobe("format", v1, v2,...); //$strobealwaysexecuteslastamong //assignmentstatementsofthesame //time.Orderfor$displayamong //as signmentstatementsofthesame //timeisunknown.

    $monitor("format", v1, v2,...); //Invokeonlyonce,andexecute(print) //automaticallywhenanyofthe //variableschangevalue.$monitoron; //Enablemonitoringfromhe re$monitoroff; //Disablemonitoringfromhere

    $stop; //Stopthesimulation$finish; //Terminateandexitthesimulation

    $time; //Returncurrentsimulationtimein64 -bitinteger$stime; //Returncurrentsimulationtimein32 -bitinteger

  • CprE305LaboratoryTutorial VerilogSyntax Page 6of 6

    LastUpdated: 02/07/01 4:24 PM

    $realtime; //Returncurrentsimulationtimein64 -bitreal

    $random(seed); //Returnrandomnumber.Seedisoptional.

    Compilerdirectivesareinstructionsto Verilogduring compilationinsteadofsimulation.Allcompilerdirectivesareprecededwith `.

    `define alias text //Createanalias.Aliasesarereplaced/substituted //priortocompilation.

    `include file //Insertanotherfileaspartofthecurrentfile.

    `ifdef cond //Ifcondisdefined,compilethefollowing.`else`endif

    8.Opera tors

    OperatorSymbol Function Group Operands

    PrecedenceRank

    ! logicalnegation Logical unary 1~ bitwisenegation Bitwise unary& reductionand Reduction unary| reductionor Reduction unary^ reductionxor Reduction unary~& reductionnand Reduction unary~| reductionnor Reduction unary~^ reductionxnor reduction unary+ unarypositive arithmetic unary- unarynegative arithmetic unary

    * multiplication arithmetic binary 2/ division arithmetic binary% modulus arithmetic binary

    + addition arithmetic binary 3- subtraction arithmetic binary

    > rightshift shift binary

    < lessthan relational binary 5 greaterthan relational binary>= greaterthanorequal relational binary

    == equality equality binary 6!= inequality equality binary=== caseequality equality binary!== caseinequality equality binary

    & bitwiseand bitwise binary 7

    ^ bitwisexor bitwise binary 8^~ bitwisexnor bitwise binary

  • CprE305LaboratoryTutorial VerilogSyntax Page 7of 7

    LastUpdated: 02/07/01 4:24 PM

    | bitwiseor bitwise binary 9

    && logicaland logical binary 10

    || logicalor logical binary 11

    ?: conditional ternary 12

    = blockingassignment assignment binary 13

  • CprE305LaboratoryTutorial VerilogSyntax Page 8of 8

    LastUpdated: 02/07/01 4:24 PM

    a) Sequentialblock Sequentialblocksaredelimitedbythepairofkeywords beginand end.The

    statementsinsequentialblocksareexecutedinthe order theyarespecified,exceptnon -blockingassignments.

    b) Parallelblock Parallelblocksaredelimitedbythepairofkeywords forkand join.Thestatementsin

    parallelblocksareexecuted concurrently.Hence,theorderofthestatementsinparallelblocksareimmaterial.

    11.Assignments

    a) Continuousassignment Continuousassignmentsarealways active changesinRHS(righthandside)

    expressionisassignedtoisLHS(lefthandside)net.

    LHSmustbeascalarorvectorof nets,andassignment mustbeperformed outsideprocedurestatements.

    assign#delaynet=expression;

    Delaymaybeassociatedwiththeassignment,wherenewchangesinexpressionisassignedtonetafterthedelay.However,notethatsuchdelayiscalled inertialdelay ,i .e.iftheexpressionchangesagainwithinthedelayafterthe1stchange,onlythelatestchangeisassignedtonetafterthedelayfrom2ndchange.The1stchangewithinthedelayisnotassignedtonet.

    b) Proceduralassignment LHSmustbeascalar orvectorof registers,andassignmentmustbeperformed inside

    procedurestatements( initialor always).Assignmentisonlyactive(evaluatedandloaded)whencontrolistransferredtoit.Afterthat,thevalueofregisterremainsuntilitisreassigne dbyanotherproceduralassignment.

    Thereare2typesofproceduralassignments: Blockingassignment Blockingassignmentsareexecutedintheorderspecifiedinthesequentialblock,i.e.a

    blockingassignmentwaitsforpreviousblockingassignme ntofthesametimetocompletebeforeexecuting.

    register=expression;

    Nonblockingassignment Nonblockingassignmentsareexecutedconcurrentlywithinthesequentialblocks,i.e.a

    nonblockingassignmentexecuteswithoutwaitingforothernonblo ckingassignmentsofoccurringatthesametimetocomplete.

    register

  • CprE305LaboratoryTutorial VerilogSyntax Page 9of 9

    LastUpdated: 02/07/01 4:24 PM

    Theexpressionisevaluatedimmediately,butthevalueisassignedtor egisterafterthedelay.Thisisequivalentto

    regtemporary; temporary=expression; #delayregister=temporary;

    c) Quasi-continuous (proceduralcontinuous) assignment TheLHSmustbeascalarorvectorof registers,andassignmentmustbe inside

    procedurestatements.

    Similartoproceduralassignment,howeverquasi -continuousassignmentbecomes activeand staysactive fromthepointoftheassignmentuntilitis deactivatedthroughdeassignment.Whenactive,quasi -continuousassignment overridesanyproceduralassignmenttotheregister.

    begin ...

    assignregister=expression1; //Activatequasi -continuous ...

    register=expression2; //Noeffect.Overriddenbyactive //quasi -continuous ...

    assignregister =expression3; //Becomesactiveandoverrides //previousquasi -continuous ...

    deassignregister; //Disablequasi -continuous ...

    register=expression4; //Executed. ...

    end

    Thereis nodelay associatedwithquasi -continuousassignment..Onlytheactivationmaybedelayed.However,onceitis activated,anychangesinexpressionwillbeassignedtotheregister immediately.

    12.TimingControls

    a) Delay-based Executionofastatementcanbedelayedbyafixed -timeperiodusingthe#operator.

    #numstatement; //Delaynumtimefrompreviousstatementbefore //executing

    Intra-assignmentdelay ThisevaluatestheRHSexpressionimmediately,butdelaysforafixed -timeperiodbefore

    assigningtoLHS,whic hmustbearegister.

    register=#numexpr; //Evaluateexprnow,butdelaynumtimeunit //beforeassigningtoregister

    b) Event-based

  • CprE305LaboratoryTutorial VerilogSyntax Page 10of 10

    LastUpdated: 02/07/01 4:24 PM

    Executionofastatementistriggeredbythechangeofvalueinaregisteroranet.The @operatorcapt uressuchchangeofvaluewithinits recognizinglist .Toallowmultipletriggers,use orbetweeneachevent.

    @(signal)statement; //Executewheneversignalchangesvalues @(posedgesignal)statement;//Executeatpositiveedgeofsignal @(negedges ignal)statement;//Executeatnegativeedgeofsignal register=@(signal)expr; //Similartointra -assignment always@(s1ors2ors3) //Enteralwaysblockwheneithers1,s2 ... //ors3changesvalue

    Level-sensitive The @isedge -sensitive.Toachievelevel -sensitive,useadditional ifstatementtocheck

    thevaluesofeachevent.

    always@(signal) if(signal) ...

    else ...

    Alternatively,combinationof alwaysand waitcanbeused.But,notethat waitisablockingstatement,i.e. waitblocksfollowingstatementuntiltheconditionistrue.

    always wait(event)statement; //Executestatementwheneventistrue

    c) Named-event Eventis explicitlytriggered (with -> operator)and recognized(with @operator).

    Notethatthenamedeventcannotholdanydata.

    eventmy_event; //Declareanevent

    always@(my_event) //Executewhenmy_eventistriggered begin ...

    end

    always begin ...

    if(...) ->my_event; //Triggermy_event ...

    end13.ConditionalStatements

    Thebodyonlyallowsasinglestatement.Ifmultiplestatementsaredesired,blockstatementsmaybeusedtoenclosemultiplestatementsinplaceofthebody.

    a) If-Then-Else if(expr) statement;

    if(expr)

  • CprE305LaboratoryTutorial VerilogSyntax Page 11of 11

    LastUpdated: 02/07/01 4:24 PM

    statemen t; else statement;

    if(expr)statement; elseif(expr)statement; elseif(expr)statement; elsestatement;

    b) Case case(expr) value1:statement; value2:statement; value3:statement; ...

    default:statement; endcase

    14.LoopStatements

    Thebodyonlyallowsasinglestatement.Ifmultiplestatementsaredesired,blockstatementsmaybeusedtoenclosemultiplestatementsinplaceofthebody.

    a) While while(expr) statement;

    b) For for(init;expr; step) statement;

    c) Repeat Iterationsarebasedonaconstantinsteadofconditionalexpression.

    repeat(constant) //Fixnumberofloops statement;

    d) Forever forever //Sameaswhile(1) statement;

    References:

    [1] "Verilog-XLReferenceManualver2.2."OpenBook,CadenceDesignSystems,1995.[2] SamirPalnitkar."VerilogHDL:AGuidetoDigitalDesignandSynthesis."SunSoftPress,

    1996.[3] DonaldThomas,PhilMoorby."TheVerilogHardwareDescriptionLanguage,2nded."

    KluwerAcademicPublishers,1994.[4] EliSternheim,RajvirSingh,RajeevMadhavan,YatinTrivedi."DigitalDesignand

    SynthesiswithVerilogHDL."AutomataPublishingCompany,1993.

top related