Designing Digital Systems With SystemVerilog Dr. Brent E. Nelson Department of Electrical and Computer Engineering Brigham Young University Provo, UT, 84602 [email protected] April2018 Version 1.0 2 Copyright(cid:13)c 2003-2018BrentE.Nelson Allrightsreserved. Contents 1 IntroductiontoDigitalSystemsDesign 13 1.1 Digitalvs. Analog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.2 PositionalNumberSystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3 Digitalvs. AnalogContinued . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3.1 Analogvs. DigitalDataStorage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.3.2 Analogvs. DigitalDataProcessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.3.3 Analogvs. Digital-ASummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.4 Combinationalvs. SequentialDigitalCircuits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.5 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2 NumberSystemsandBinaryEncodings 19 2.1 PositionalNumberNotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.1.1 ConversionfromDecimaltoOtherBases . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2 Hexadecimal(Base-16)Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3 Binary-CodedDecimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4 OtherCodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4.1 ASCIICodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.4.2 GrayCodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.5 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3 SignedNumberRepresentations,Negation,andArithmetic 27 3.1 AdditionofUnsignedNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1.1 OverflowinUnsignedAddition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2 SignedNumbers: Sign-Magnitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2.1 NegatingSign-MagnitudeNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.3 SignedNumbers: 2’sComplement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.3.1 Sign-Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.2 Negatinga2’sComplementNumber. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.3 Adding2’sComplementNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.3.4 Subtracting2’sComplementNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.4 SignedNumbers: 1’sComplement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.5 Summary—Numberrepresentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.6 MoreonOverflowandUnderflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.6.1 DetectingandHandlingOverflowandUnderflow-SomeIdeas. . . . . . . . . . . . . . . . . 32 3.7 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4 BooleanAlgebraandTruthTables 37 4.1 IntroductiontoBooleanAlgebraandTruthTables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2 TruthTablesforArbitraryFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.3 ConvertingTruthTablestoBooleanEquations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.4 ConvertingBooleanFunctionstoTruthTables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3 CONTENTS 4 4.5 BooleanIdentitiesandTheorems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.5.1 Single-VariableTheorems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.5.2 Two-VariableTheorems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.5.3 Commutative,Associative,andDistributiveTheorems . . . . . . . . . . . . . . . . . . . . . 42 4.5.4 TheSimplificationTheorems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.5.5 TheConsensusTheorems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.6 SummaryoftheBooleanTheorems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.7 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5 Gates 47 5.1 BasicGateTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.2 Transistors-TheBuildingBlocksofGates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.2.1 BuildingAnInverterUsingFET’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.3 Other2-InputGates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.3.1 NANDGates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.3.2 NORGates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.3.3 AnExclusive-ORGate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.3.4 AnEquivalenceGate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.4 Multi-InputGates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.5 AlternativeGateSymbology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 5.6 Multi-LevelLogic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.6.1 SpeedofOperation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.6.2 CircuitArea. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.6.3 SpeedandAreaComparisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.6.4 FactoringandMultiplyingOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.7 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6 BooleanAlgebra-PartII 61 6.1 InvertingaFunction-DeMorgan’sRules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6.2 Sum-of-ProductsandProduct-of-SumsForms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6.3 CanonicalForms-MintermExpansionandMaxtermExpansion . . . . . . . . . . . . . . . . . . . . 64 6.4 BooleanMinimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.4.1 WhatisaMinimalFormforanExpression? . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.4.2 MinimizationByApplyingBooleanTheorems . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.4.3 ProvingEqualitiesUsingBooleanTheorems . . . . . . . . . . . . . . . . . . . . . . . . . . 68 6.5 IncompletelySpecifiedFunctionsandBooleanMinimization . . . . . . . . . . . . . . . . . . . . . . 69 6.6 SummaryofBooleanMinimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 6.7 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7 Gates-PartII 73 7.1 NAND-NANDandNOR-NORLogic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.2 FunctionallyCompleteLogicSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.3 GateSymbology—MatchingBubbles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 7.3.1 BubbleMatchingandReconvergentFanout . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 7.4 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 7.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 CONTENTS 5 8 AnIntroductiontoGate-LevelDesignUsingSystemVerilog 81 8.1 ThreeImportantRulesRegardingDesigningusinganHDLForDigitalSystemsDesign . . . . . . . . 82 8.2 LevelsofDesignAbstractioninSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 8.3 BasicStructuralSystemVerilogDesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 8.3.1 StructuralGateInstantiationsareConcurrentStatements . . . . . . . . . . . . . . . . . . . . 84 8.4 DeclaringWiresinSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 8.5 CADToolDesignFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 8.6 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 8.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 9 Gate-LevelArithmetic 89 9.1 AHardwareAdder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 9.2 AnAdder/SubtracterModule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 9.3 AddingandSubtracting1’sComplementandSign-MagnitudeNumbers . . . . . . . . . . . . . . . . 91 9.4 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 9.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 10 HigherLevelBuildingBlocks: Multiplexers,Decoders,andLookupTables 93 10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 10.2 Multiplexers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 10.2.1 A4:1Multiplexer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 10.3 Multi-BitWiresinSchematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 10.4 UsingMultiplexersforLogic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 10.5 Decoders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 10.6 WhentoUseMultiplexersandDecoders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 10.7 Read-OnlyMemories(LookupTables) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 10.8 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 10.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 11 ContinuingonWithSystemVerilog-HierarchicalDesign,Constants,andMulti-BitSignals 107 11.1 CreatingHierarchyViaStructuralInstantiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 11.1.1 SemanticsofModuleInstantiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 11.2 SpecifyingConstantsinSystemVerilog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 11.3 AccessingBitsofMulti-BitWiresinSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 11.4 MoreonNaming-Modules,InstanceNames,andWires . . . . . . . . . . . . . . . . . . . . . . . . 110 11.5 HierarchicalDesignFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 11.6 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 12 KarnaughMaps 113 12.1 TruthTablestoKMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 12.2 Three-VariableKMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 12.3 MintermandMaxtermExpansionsandKMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 12.3.1 CirclingMoreThanTwo1’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 12.4 Four-VariableKMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 12.5 PlottingaBooleanEquationonaKMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 12.6 DerivingProductofSumExpressionsfromKMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 12.7 SolvingaKMapWithDon’tCares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 12.8 FindingOptimalSolutionsUsingKMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 12.9 AWorkedExample—ABCDto7-SegmentConverter . . . . . . . . . . . . . . . . . . . . . . . . . 126 12.10ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 12.11Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 CONTENTS 6 13 GateDelaysandTiminginCombinationalCircuits 129 13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 13.2 BasicGateDelays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 13.3 CriticalPathAnalysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 13.4 LevelsofDetailinTimingAnalysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 13.5 InputGlitches,Timing,andGateBehavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 13.6 APulseGenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 13.7 FalseOutputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 13.7.1 FalseOutputsandHazards: Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 13.8 GateDelayVariations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 13.8.1 GateDelayVariation: Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 13.9 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 13.10Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 14 DataflowSystemVerilog 141 14.1 ABasic2:1MUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 14.2 DataflowOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 14.2.1 Bitwisevs. LogicOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 14.2.2 ReductionOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 14.2.3 ConcatenationandReplicationOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 14.2.4 OperatorPrecedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 14.2.5 MatchingWireWidths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 14.3 Example-a2:4Decoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 14.4 ParameterizationinDataflowSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 14.4.1 MixingDataflowandStructuralSystemVerilogDesign . . . . . . . . . . . . . . . . . . . . . 146 14.5 SystemVerilogandArithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 14.6 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 14.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 15 LatchesandFlipFlops 149 15.1 BistabilityandStorage: TheSRLatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 15.2 TheGatedLatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 15.3 TheMaster/SlaveFlipFlop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 15.3.1 Rising-EdgeTriggeredFlipflop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 15.4 TimingCharacteristicsOfFlipFlops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 15.5 FlipFlopsWithAdditionalControlInputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 15.6 ANoteonTimingDiagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 15.7 ANoteonMetastability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 15.8 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 15.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 16 RegistersandRTL-BasedDesign 171 16.1 FlipFlop-BasedRegisters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 16.1.1 LoadableRegisters-FirstAttempt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 16.1.2 LoadableRegisters-TheCorrectMethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 16.2 ShiftRegisters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 16.3 MiniCaseStudy: AnAccumulator-BasedAveragingCircuit . . . . . . . . . . . . . . . . . . . . . . 177 16.4 AnIntroductiontoRegisterTransferLevel(RTL)Design . . . . . . . . . . . . . . . . . . . . . . . . 178 16.4.1 TheLoadableRegisterofFigure16.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 16.4.2 TheClearableUpCounterofFigure16.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 16.4.3 TheShiftRegisterofFigureFigure16.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 16.4.4 TheAveragingCircuitofFigure16.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 16.4.5 MoreComplexExamplesofRTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 16.5 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 CONTENTS 7 16.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 17 BehavioralSystemVerilogforRegisters 183 17.1 IntroductiontoBehavioralSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 17.2 Thealways ffBlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 17.3 ShiftRegisterDesignUsingBehavioralSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . 185 17.4 TheSemanticsofthealways ff Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 17.5 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 17.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 18 ModelingCombinationalLogicUsingBehavioralSystemVerilog 191 18.1 CombinationalalwaysBlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 18.2 TheProblemWithLatches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 18.3 AvoidingLatchesWhenUsingcaseStatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 18.3.1 Summary: AvoidingLatchesinalways combBlocks . . . . . . . . . . . . . . . . . . . . . . 198 18.4 MappingSystemVerilogProgramstoaSpecificTechnology . . . . . . . . . . . . . . . . . . . . . . 200 18.5 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 18.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 19 Memories 203 19.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 19.2 RegisterFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 19.3 RegisterFileDesignUsingBehavioralSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . 204 19.4 Multi-PortedRegisterFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 19.5 Multi-PortedRegisterFileDesignusingSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . 206 19.6 Multi-PortedRegisterFilesWithBypass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 19.7 LargerMemories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 19.8 Read-OnlyMemories(ROM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 19.9 ConsultingToolDocumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 19.10ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 19.11Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 20 SimpleSequentialCircuits: Counters 213 20.1 ATwo-BitBinaryCounter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 20.2 ATwo-BitGrayCodeCounter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 20.3 ACounterExampleWithAnIncompleteTransitionTable . . . . . . . . . . . . . . . . . . . . . . . 216 20.4 CountersWithStaticOutputSignals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 20.5 DelayCharacteristicsofCounters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 20.5.1 MooreOutputDelayCharacteristicsofCounters . . . . . . . . . . . . . . . . . . . . . . . . 220 20.6 CountersWithAdditionalInputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 20.7 Mealy(Dynamic)Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 20.7.1 Mealyvs. MooreOutputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 20.8 CounterDesignUsingBehavioralSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 20.9 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 20.10Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 21 StateGraphs 227 21.1 AnExampleStateGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 21.2 StateGraphsForCountersWithInputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 21.3 StateGraphsForCountersWithMultipleInputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 21.4 DesignProcedureUsingStateGraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 21.5 RepresentingCounterOutputsinStateGraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 21.5.1 Moore(Static)Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 21.5.2 Mealy(Dynamic)Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 21.6 ProperlyFormedStateGraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 CONTENTS 8 21.7 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 21.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 22 FiniteStateMachines 235 22.1 ASimpleStateMachine-ASequenceRecognizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 22.1.1 AContinuous’011’Detector-MooreVersion . . . . . . . . . . . . . . . . . . . . . . . . . 238 22.1.2 AContinuous’011’Detector-MealyVersion . . . . . . . . . . . . . . . . . . . . . . . . . . 239 22.2 FiniteStateMachineExample-CarWashController . . . . . . . . . . . . . . . . . . . . . . . . . . 241 22.2.1 ImplementationDetails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 22.2.2 ACarWashWithTwoDifferentWashSettings . . . . . . . . . . . . . . . . . . . . . . . . . 242 22.3 ResettingStateMachines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 22.4 CompletenessandConflictsinStateGraphsRevisited . . . . . . . . . . . . . . . . . . . . . . . . . . 245 22.5 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 22.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 23 StateMachineDesignUsingSystemVerilog 249 23.1 SystemVerilogFeaturesforCodingStateMachines . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 23.2 StateMachineCodingStyles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 23.2.1 ADefensiveCodingStyleforFiniteStateMachines . . . . . . . . . . . . . . . . . . . . . . 252 23.3 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 24 AsynchronousInputHandling 257 24.1 AsynchronousInputsandMetastability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 24.2 AnExampleAsynchronousInputProblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 24.3 SynchronizingAsynchronousInputs-TheEasiestandPreferredApproach. . . . . . . . . . . . . . . 259 24.4 HazardFreeDesignCombinedWithAdjacentStateEncodings-AnotherApproach(AdvancedTopic) 260 24.4.1 AdjacentStateEncodings-APartialSolution . . . . . . . . . . . . . . . . . . . . . . . . . . 260 24.4.2 FalseOutputsandHazards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 24.4.3 TheCompleteSolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 24.5 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 24.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 25 FieldProgrammableGateArrays(FPGAs)-AnIntroduction 265 25.1 LookupTables-UniversalFunctionGenerators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 25.1.1 MappingLargerCombinationalCircuitstoLUTs . . . . . . . . . . . . . . . . . . . . . . . . 266 25.1.2 MappingGate-LevelCircuitstoLUTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 25.2 FPGALogicElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 25.3 GlobalFPGAArchitecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 25.3.1 AMappingExample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 25.4 ConfiguringanFPGADevice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 25.4.1 ConfiguringaLUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 25.4.2 ConfiguringtheFabric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 25.5 MoreAdvancedFPGAArchitectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 25.5.1 ConfigurableInput/Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 25.5.2 ConfigurationTechnology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 25.5.3 Carry/CascadeChains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 25.5.4 ProgrammableInterconnections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 25.5.5 SegmentedandHierarchicalRouting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 25.5.6 ClusteredLEs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 25.5.7 EmbeddedFunctionalUnits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 25.6 FPGAvs. ASICTechnology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 25.7 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 25.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 CONTENTS 9 26 CaseStudy-DebouncingSwitchesandDetectingEdges 281 26.1 DebouncingaSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 26.1.1 DesignoftheDebouncerUsingSystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . 283 26.2 AOne-Shot(AlsoKnownasPulseGenerator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 26.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 27 CaseStudy: ASodaMachineController 289 27.1 Step1-UnderstandtheCompleteSystemRequirementsandOrganization . . . . . . . . . . . . . . . 289 27.1.1 UnderstandingtheCoinMechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 27.1.2 UnderstandingtheDispenseModule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 27.1.3 UnderstandingtheUserInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 27.2 Step2: DetermineaSystemArchitecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 27.3 Step3-DesigntheSystemParts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 27.3.1 DesignoftheTimerSubsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 27.3.2 DesignoftheKeypadInterfaceSubsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 27.3.3 DesignoftheCentralControlSubsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 27.3.4 DesignoftheAccumulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 27.3.5 DesignoftheCentralControlSubsystemStateMachine . . . . . . . . . . . . . . . . . . . . 302 27.3.6 ACompleteandConflict-FreeStateGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 27.3.7 ImplementingtheStateMachineUsingSystemVerilog . . . . . . . . . . . . . . . . . . . . . 305 27.3.8 AsynchronousInputs,AdjacentStateEncodings,andGlitch-FreeOutputs . . . . . . . . . . . 307 27.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 27.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 28 CaseStudy: TheDesignofaUART 309 28.1 UARTProtocolDesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 28.1.1 ProtocolSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 28.2 DesigningtheUART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 28.3 DesignofaUARTTransmitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 28.3.1 Host-UARTHandshaking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 28.3.2 TheTransmitterDatapath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 28.3.3 TheTransmitterControlSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 28.3.4 AnAlternateTransmitterCodingStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 28.4 DesignofaUARTReceiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 28.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 29 SystemVerilogvs. Verilog 325 29.1 SystemVerilogvs. Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 29.2 Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 29.2.1 ThelogicVariableType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 29.2.2 EnumeratedTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 29.3 EnhancedalwaysBlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 29.4 Verilog,SystemVerilog,andVHDLInteroperability . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 29.5 MovingForward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 A ASCIITable 327