Îõ³h&Îû‰–½      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂ Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ €!�!‚!ƒ!„!…!†!‡!ˆ!‰!Š!‹!Œ!�!Ž!�!�!‘!’!“!”!•!–!—!˜!™!š!›!œ!�!ž!Ÿ! !¡!¢!£!¤!¥!¦!§!¨!©!ª!«!¬!­!®!¯!°!±!²!³!´!µ!¶!·!¸!¹!º!»!¼!½!¾!¿!À!Á!Â!Ã!Ä!Å!Æ!Ç!È!É!Ê!Ë!Ì!Í!Î!Ï!Ð!Ñ!Ò!Ó!Ô!Õ!Ö!×!Ø!Ù!Ú!Û!Ü!Ý!Þ!ß!à!á!â!ã!ä!å!æ!ç!è!é!ê!ë!ì!í!î!ï!ð!ñ!ò!ó!ô!õ!ö"÷"ø"ù"ú"û"ü"ý"þ"ÿ"€ "� #‚ #ƒ #„ #… #† #‡ #ˆ #‰ #Š #‹ $Œ $� $Ž $� $� $‘ $’ $“ $” $• $– $— $˜ $™ $š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á  %à %Ä %Å %Æ &Ç &È &É &Ê &Ë &Ì &Í &Î &Ï &Ð &Ñ &Ò &Ó &Ô &Õ &Ö &× &Ø &Ù &Ú &Û &Ü &Ý &Þ 'ß 'à 'á 'â 'ã 'ä 'å 'æ 'ç 'è 'é 'ê 'ë 'ì 'í 'î 'ï (ð (ñ (ò (ó (ô (õ (ö (÷ (ø (ù (ú (û (ü (ý (þ (ÿ (€ (� (‚ (ƒ („ (… († (‡ (ˆ (‰ (Š (‹ (Œ (� (Ž (� (� (‘ ’ )“ )” )• )– )— *˜ *™ *š *› *œ *� *ž *Ÿ *  *¡ *¢ *£ *¤ *¥ *¦ *§ *¨ *© *ª *« *¬ *­ *® *¯ *° *± *² *³ *´ *µ *¶ *· *¸ *¹ *º *» *¼ *½ *¾ *¿ *À *Á * *à *Ä *Å *Æ *Ç *È *É *Ê *Ë *Ì +Í +Î +Ï +Ð +Ñ ,Ò ,Ó ,Ô ,Õ ,Ö ,× ,Ø ,Ù ,Ú ,Û ,Ü ,Ý ,Þ ,ß ,à ,á ,â ,ã ,ä ,å ,æ ,ç ,è ,é ,ê ,ë ,ì ,í ,î ,ï ,ð ,ñ ,ò ,ó ,ô ,õ ,ö ,÷ ,ø ,ù ,ú ,û -ü -ý -þ -ÿ -€ -� -‚ .ƒ .„ .… .† .‡ .ˆ .‰ .Š .‹ .Œ .� .Ž .� .� /‘ /’ /“ /” /• /– /— /˜ /™ /š /› /œ /� /ž /Ÿ /  /¡ /¢ /£ /¤ /¥ /¦ /§ /¨ /© /ª /« /¬ /­ /® /¯ /° /± /² /³ /´ /µ /¶ /· /¸ /¹ /º /» /¼ /½ /¾ /¿ /À /Á / /à /Ä /Å /Æ /Ç /È /É /Ê /Ë /Ì /Í /Î /Ï 0Ð 1Ñ 1Ò 1Ó 1Ô 1Õ 1Ö 1× 1Ø 1Ù 1Ú 1Û 1Ü 1Ý 1Þ 1ß 1à 1á 1â 1ã 1ä 1å 1æ 1ç 1è 1é 1ê 1ë 1ì 1í 1î 1ï 1ð 1ñ 1ò 1ó 1ô 1õ 1ö 1÷ 1ø 1ù 1ú 1û 1ü 1ý 1þ 1ÿ 1€ 1� 1‚ 1ƒ 1„ 1… 1† 1‡ 1ˆ 1‰ 1Š ‹ Œ � Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á  à Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á  à Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ €�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒ2Ó2Ô2Õ2Ö3×3Ø3Ù3Ú3Û3Ü3Ý3Þ3ß3à3á3â3ã3ä3å3æ3ç3è3é3ê3ë3ì3í3î3ï3ð3ñ3ò3ó3ô3õ3ö3÷3ø3ù3ú3û3ü3ý3þ3ÿ3€3�3‚3ƒ3„3…3†3‡3ˆ3‰3Š3‹3Œ3�3Ž3�3�3‘3’3“3”3•3–3—3˜3™3š3›3œ3�3ž3Ÿ3 3¡3¢4£4¤4¥4¦4§4¨4©4ª5«5¬5­5®5¯5°5±5²5³5´5µ5¶5·5¸5¹5º5»5¼5½5¾5¿5À5Á5Â5Ã5Ä6Å6Æ7Ç7È7É7Ê7Ë7Ì7Í7Î8Ï9Ð:Ñ:Ò:Ó:Ô:Õ:Ö;×<Ø=Ù=Ú=Û=Ü=Ý=Þ=ß=à=á=â>ã>ä>å>æ>ç>è>é>ê>ë>ì>í>î?ï?ð?ñ?ò?ó?ô?õ@ö@÷@ø@ù@ú@û@ü@ý@þ@ÿ@€@�@‚@ƒ@„@…@†@‡@ˆ@‰@Š@‹@Œ@� Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £A¤A¥B¦B§B¨B©BªB«B¬B­B®C¯C°D±E²E³E´EµE¶E·E¸E¹EºE»E¼E½E¾E¿EÀEÁEÂEÃEÄEÅEÆEÇEÈEÉEÊEËEÌEÍEÎEÏEÐEÑEÒEÓEÔEÕEÖE×EØEÙEÚEÛEÜEÝEÞEßEàEáEâEãEäEåEæEçEèEéEêEëEìEíEîEïEðEñEòEóEôEõEöE÷EøEùEúEûEüEýEþEÿE€E�E‚EƒE„E…E†E‡EˆE‰EŠF‹FŒF�FŽF�F�F‘F’F“F”F•F–F—F˜F™FšF›FœF�FžFŸF F¡F¢F£F¤F¥F¦F§F¨F©FªG«H¬I­J®J¯K°K±K²K³K´KµK¶K·K¸K¹KºK»K¼K½K¾K¿KÀKÁKÂKÃKÄKÅKÆKÇKÈKÉKÊKËKÌKÍKÎKÏKÐKÑKÒKÓLÔLÕLÖL×LØLÙLÚDÛDÜDÝDÞDßDàDáDâDãDäDåDæDçDèDéDêDëDìDíDîDïDðDñDòDóDôõö÷øMùMúMûMüMýMþMÿM€M�M‚MƒM„M…M†M‡MˆM‰MŠM‹MŒM�MŽN�N�N‘O’O“O”O•O–O—P˜P™PšP›PœQ�QžRŸR R¡R¢R£S¤S¥S¦S§S¨S©SªS«S¬S­T®T¯T°T±T²T³U´UµU¶U·U¸U¹6º6»6¼V½V¾V¿VÀVÁVÂVÃVÄVÅVÆVÇVÈVÉAÊAËAÌAÍAÎAÏAÐAÑAÒAÓBÔBÕBÖB×BØBÙBÚBÛBÜWÝXÞXßXàXáXâXãXäXåXæXçXèXéXêXëXìXíXîXïXðXñXòXóXôXõXöX÷XøXùXúXûXüXýXþXÿX€X�X‚XƒX„X…X†X‡XˆX‰XŠX‹XŒX�XŽX�X�X‘X’X“X”X•X–X—X˜Y™YšY›YœY�YžYŸY Y¡Y¢Y£Y¤Y¥Y¦Y§Z¨Z©ZªZ«[¬[­[®[¯[°[±[²[³[´[µ[¶[·[¸[¹[º[»[¼[½[¾[¿[À[Á[Â[Ã[Ä[Å[Æ[Ç[È[É[Ê[Ë[Ì[Í[Î[Ï[Ð[Ñ[Ò[Ó[Ô[Õ[Ö[×[Ø[Ù[Ú[Û[Ü[Ý[Þ[ß[à[á[â[ã[ä[å[æ[ç[è[é[ê[ë[ì[í[î[ï[ð[ñ[ò[ó[ô[õ\ö\÷\ø\ù]ú]û]ü]ý]þ]ÿ]€]�]‚]ƒ]„]…^†^‡^ˆ^‰^Š^‹^Œ^�^Ž^�^�^‘^’_“_”_•_–_—_˜_™_š_›_œ_�_ž_Ÿ_ _¡_¢_£_¤_¥_¦_§_¨_©_ª_«_¬_­_®_¯_°_±_²`³`´`µ`¶a·a¸a¹bºb»b¼bî(C) 2022, Google Inc.,BSD2 (see the file LICENSE)%QBayLogic B.V. None%&/02356789:;<ÉÐÑÖ×Ùâì8  clash-lib3Verilog timescale. Influences simulation precision.  clash-lib(Time step in wait statements, e.g. `#1`. clash-libÀSimulator precision - all units will get rounded to this period. clash-lib:Verilog time period. A combination of a length and a unit. clash-libVerilog time units clash-lib Pretty print   to Verilog `timescale4scaleToString (Scale (Period 100 Ps) (Period 10 Fs))"`timescale 100ps/10fs" clash-libConvert  to Verilog time unitperiodToString (Period 100 Fs)"100fs" clash-libConvert  to Verilog time unitunitToString Ms"ms" clash-lib1Parse string representing a Verilog time unit to .parseUnit "ms"Just MsparseUnit "xs"Nothing clash-libParse a VerilogparsePeriod "100ms"Just (Period 100 Ms)parsePeriod "100xs"NothingparsePeriod "100"NothingparsePeriod "ms"Nothing clash-libàConvert a period to a specific time unit. Will always output a minimum of 1, even if the given  is already of the right .convertUnit Ps (Period 100 Ps)100convertUnit Fs (Period 100 Ps)100000convertUnit Ns (Period 100 Ps)1convertUnit Ms (Period 0 Ms)1    None&/02356789;<ÉÐÑÖ×Ùâì8´1 clash-lib0Performs trace when first argument evaluates to ½¾¿ÀÁÂÃÄÅÆÇÈÉÊ0101(C) 2024, Martijn BastiaanBSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<ÉÐÑÖ×Ùâì9l245367245367(C) 2020, QBayLogicBSD2 (see the file LICENSE)%QBayLogic B.V.  Safe-Inferred &/02356789;<ÉÐÑÖ×Ùàâì> W clash-libíTool-specific configuration used by Edalize. Currently only tools which are supported by Clash are provided.^ clash-lib´A subset of the file types recognized by Edalize. The supported formats are largely from IP-XACT 2014 (IEEE 1685-2014), although Edalize extends this with other types, e.g. QSYS.8Only file types which are generated by Clash are listed._ clash-libUnknown file type.` clash-lib VHDL source.a clash-libVerilog source.b clash-libSystemVerilog source.c clash-libTool Command Language source.d clash-libQSys system source.e clash-lib#Synopsys Design Constraints source.f clash-lib�Information about each file in the project. This does not include is_include_file or include_path, as these are not currently used by Clash.k clash-libÆEDAM data structure to be given to an Edalize backend. This contains all information needed to generate a project scaffolding. Note that hooks and VPI modules are currently not specified by clash.1ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq1klmnopfghij^_`abcdeWXYZ[\]STUVOPQRKLMNDEFGHIJABCq (C) 2024, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<>ÇÉÐÑÖ×Ùâèì?.˜ clash-libType of signal“”•–—˜™—˜–“”•™ (C) 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ÇÉÐÑÖ×ÙâìBôœ clash-lib>Compare two values using pointer equality. If that fails, use Ë÷ to determine equality. Note that this function will only shortcut for values that are the same, but will always use Ë for values that differ.ŠValues are evaluated to WHNF before comparison. This function can therefore not be used if any of its arguments is expected to be bottom.� clash-libîCompare two values using pointer equality. If that fails, use given function to determine equality. Note that this function will only shortcut for values that are the same, but will always use the given function for values that differ.ŠValues are evaluated to WHNF before comparison. This function can therefore not be used if any of its arguments is expected to be bottom.œ�œ� È(C) 2019-2022, QBayLogic B.V. 2013 , Nikita VolkovBSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ÉÐÑÖ×ÙàâìF=Ÿ clash-libiÝ will reflow the quasi-quoted text to 90 columns wide. If an interpolation variable is on its own line and expands to a multi-line string, the interpolated text will be indented the same as the interpolation variable was: ã:set -XQuasiQuotes :{ a = "Multi\nLine\nString" b = [i| This line will be reflowed and the interpolated multi-line string here: #{a} will be indented. This text is outdented again. |] :} putStrLn b•This line will be reflowed and the interpolated multi-line string here: Multi Line String will be indented. This text is outdented again.žŸ Ÿž  None&/02356789;<ÉÐÑÖ×ÙâìGŸ£ clash-lib A variant of Prettyí that is not polymorphic on the type of annotations. This is needed to derive instances from Clash's pretty printer (PrettyPrec), which annotates documents with Clash-specific information and, therefore, fixes the type of annotations.£¤¥¦§¨©¥¦§¨£¤©None &/02356789;<ÉÎÐÑÖ×ÙâìPÒª clash-libA map indexed by a —ˆ. Typically the elements of this map are also uniqueable and provide their own key, however a unique can be associated with any value.­ clash-lib An empty map.® clash-libÂA map containing a single value indexed by the given key's unique.¯ clash-lib>A map containing a single value indexed by the value's unique.° clash-libCheck if the map is empty.± clash-lib)Insert a new key-value pair into the map.² clash-libÊInsert a new value into the map, using the unique of the value as the key.³ clash-lib‹Insert a new key-value pair into the map, using the given combining function if there is already an entry with the same unique in the map.´ clash-lib.Insert a list of key-value pairs into the map.µ clash-lib=Lookup an item in the map, using the unique of the given key.¶ clash-lib÷Lookup and item in the map, using the unique of the given key. If the item is not found in the map an error is raised.· clash-libÈCheck if there is an entry in the map for the unique of the given value.¸ clash-libÍCheck if there is not an entry in the map for the unique of the given value.¹ clash-lib;Filter all elements in the map according to some predicate.º clash-libÔApply a function to all elements in the map, keeping those where the result is not Nothing.» clash-lib8Lazily right-fold over the map using the given function.¼ clash-lib9Strictly left-fold over the map using the given function.½ clash-libÅDelete the entry in the map indexed by the unique of the given value.¾ clash-libÉDelete all entries in the map indexed by the uniques of the given values.¿ clash-libòMerge two unique maps, using the given combining funcion if a value with the same unique key exists in both maps.À clash-libÊFilter the first map to only contain keys which are not in the second map.Á clash-lib3Check if there are no common keys between two maps. clash-lib(Check if one map is a submap of another.à clash-lib+Convert a list of key-value pairs to a map.Ä clash-lib.Convert a map to a list of unique-value pairs.Å clash-libGet the unique keys of a map.Æ clash-libGet the values of a map.ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆ(C) 2011-2013 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett  provisionalportable Trustworthy&/02356789;<ÇÉÐÑÖ×ÙâèìTÐ clash-lib/A user managed globally unique variable supply.Ñ clash-libÎGrab a new supply. Any two supplies obtained with newSupply are guaranteed to return disjoint sets of identifiers. Replaying the same sequence of operations on the same Supply will yield the same results.Ò clash-lib Obtain a fresh Id from a Supply.Ó clash-libÆSplit a supply into two supplies that will return disjoint identifiersÔ clash-libAn unboxed version of freshIdÕ clash-lib!An unboxed version of splitSupplyÐÑÒÓÔÕÐÑÒÓÔÕÌ5c Safe-Inferred&/02356789;<ÉÐÑÖ×ÙâìTld Safe-Inferred&/02356789;<ÉÐÑÖרÙâìX�Í clash-libMonadic version of efÎ clash-libMonadic version of egÏ clash-libMonadic version of Ð. A carbon copy (iterateM1) would not terminate, hence the first argument.Ñ clash-lib&Applicative version of 'GHC.Types.(:)'Ò clash-libSafe indexing, returns a Ó if the index does not existÔ clash-libLike Õ8, but the predicate operates over two lists. Asserts to Ö& when the lists are of unequal length× clash-lib1Return number of occurrences of an item in a listØ clash-libZip two lists of equal lengthÉNB Errors out for a 1 compiler when the two lists are not of equal lengthÏ clash-lib Only iterate n times. Note that nè is the length of the resulting list, _not_ the number of times the iteration function has been invoked clash-libIteration function clash-lib Start value× clash-libHaystack clash-lib"Times needle was found in haystackÑÙÚÛÜÝÞßàáâãäåæçèéêëìíîïÕðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÐÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�ÍÎÏÑÒžŸÔרÑ5hNone&/02356789;<ÉÐÑÖ×ÙâìZgi Safe-Inferred&/02356789;<>ÀÁÂÉÐÑÖ×ÙâìZ´jNone&/02356789;<ÉÐÑÖ×ÙâìZñµ(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc., 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<>ÀÁÂÉÐÑÖ×Ùâì\Lß clash-lib Term Literalßëîàáâãäåæçèéêìíïðßëîàáâãäåæçèéêìíïðk(C) 2019,2021, QBayLogic B.VBSD2 (see the file LICENSE)$QBayLogic B.V None&/02356789;<ÉÐÑÖ×Ùâì]- ¡l Safe-Inferred&/02356789;<ÉÐÑÖ×Ùâì]v¢£(C) 2020-2021, QBayLogic B.V.BSD2 (see the file LICENSE)$QBayLogic B.V. ÀÉÐÑÖ×Ùâì_<9 ‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º9‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º ž6?(C) 2017, Google Inc. 2023, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ÉÐÑÖ×Ùâìañ¼ clash-libDetermine whether given ¤$ is NOINLINE or more strict (OPAQUE)½ clash-libDetermine whether given ¤ç is OPAQUE. If this function is used on a GHC that does not support OPAQUE yet (<9.4), it will return ½ if given ¤ is NOINLINE instead.¼½¼½m(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij None&/02356789;<ÉÐÑÖ×Ùâìb•(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij None &/02356789:;<>ÀÁÂÉÐÑÖ×Ùâìc;ÁÂÄÃÅÆÇËÈÉÊÌÍÎÏÁÂÄÃÅÆÇËÈÉÊÌÍÎÏÿ(C) 2012-2016, University of Twente, 2017-2018, Google Inc. 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None%&'(/02356789:;<ÉÐÑÔÖ×Ùâìeû è clash-lib Type variableé clash-lib Term variableí clash-libVariables in CoreHWî clash-libConstructor for type variablesï clash-libConstructor for term variablesñ clash-lib6Invariant: forall x . varUniq x ~ nameUniq (varName x)ô clash-libChange the name of a variableõ clash-libMake a type variableö clash-libMake a term variableèéêëìíïîðòñóôõö÷øùúûíïîðòñóêëìéèö÷øõûôùú€(C) 2012-2016, University of Twente, 2017, Google Inc., 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<>ÀÁÂÉÐÑÖ×Ùâìj^ � clash-libDataCon reference‘ clash-lib:Syntactical position of the DataCon in the type definition’ clash-libData Constructor” clash-libName of the DataCon• clash-lib4Invariant: forall x . dcUniq x ~ nameUniq (dcName x)– clash-lib+Syntactical position in the type definition— clash-libType of the 'DataCon˜ clash-libìUniversally quantified type-variables, these type variables are also part of the result type of the DataCon™ clash-lib„Existentially quantified type-variables, these type variables are not part of the result of the DataCon, but only of the arguments.š clash-libArgument types› clash-libArgument strictnessœ clash-libÊNames of fields. Used when data constructor is referring to a record type.�Ž��‘’“—–š”•˜™›œ’“—–š”•˜™›œ�‘�Ž�Ò(C) 2012-2016, University of Twente 2021-2024, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<>ÀÁÂÉÐÑÖ×Ùâìo1ß clash-libTyCon referenceà clash-libType Constructor© clash-lib The RHS of an Algebraic Datatype¬ clash-libThe DataCons of a TyCon­ clash-libThe newtype DataCon® clash-lib²The argument type of the newtype DataCon in eta-reduced form, which is just the representation of the TyCon. The TyName's are the type-variables from the corresponding TyCon.° clash-libAlgorithmic DataCons² clash-lib$Function TyCons (e.g. type families)³ clash-libPrimitive TyConsµ clash-libName of the TyCon¶ clash-libKind of the TyCon· clash-libNumber of type arguments¸ clash-libDataCon definitions¹ clash-libIs this a class dictionary?º clash-libDataCon which is promoted» clash-lib&List of: ([LHS match types], RHS type)¼ clash-lib Create a Kind out of a TyConName½ clash-lib&Does the TyCon look like a tuple TyCon¾ clash-lib%Get the DataCons belonging to a TyConßರ±³µ¶·´¸¹º»©ª«¬­®¯¼½¾¿ÀÁರ±³µ¶·´¸¹º»ß¯©ª«¬­®¼½¿ÀÁ¾n Safe-Inferred&/02356789;<ÉÐÑÖ×Ùâìo⥦§¨©ª«¬#(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij None &/02356789;<>ÀÇÉÐÑÔÖ×Ùâìw9 Ì clash-lib(A class that can generate unique numbersÍ clash-libGet a new uniqueØ clash-libÞCreate a TH expression that returns the a formatted string containing the name of the module Ø4 is spliced into, and the line where it was spliced.Ù clash-lib$Cache the result of a monadic actionÚ clash-lib-Cache the result of a monadic action using a ªÛ clash-lib-Cache the result of a monadic action using a ­Ü clash-libSame as Ý with last two arguments swappedÝ clash-libÂUnsafe indexing, return a custom error message when indexing failsß clash-lib*x y -> floor (logBase x y), x > 1 && y > 0à clash-lib,x y -> ceiling (logBase x y), x > 1 && y > 0á clash-lib)Get the package id of the type of a value$pkgIdFromTypeable (0 :: Unsigned 32)"clash-prelude-...ã clash-libLeft-biased choice on maybesÔ clash-libTrigger warning? clash-lib File name clash-lib Line number clash-libMessage clash-libPass value (like trace)Ù clash-lib%The key the action is associated with clash-lib)The Lens to the HashMap that is the cache clash-libThe action to cacheÚ clash-lib!Key the action is associated with clash-libLens to the cache clash-libAction to cacheÛ clash-lib!Key the action is associated with clash-libLens to the cache clash-libAction to cacheÜ clash-libError message to display clash-libIndex n clash-lib List to index clash-libError or element nÝ clash-libError message to display clash-lib List to index clash-libIndex n clash-libError or element nÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçoÍ(C) 2015-2016, University of Twente 2024, QBayLogic B.V.BSD2 (see the file LICENSE)-Christiaan Baaij None &/02356789;<ÉÐÑÖ×Ùâì|‚® clash-libSee ¯…. A line map maps "virtual" lines to a range of "real" lines. E.g., a map of {0: (0, 3), 1: (4, 5)} would mean that line 0 in the virtual JSON (i.e., the one with newlines replaced) file map to lines 0 up to and including 3 in the original user-supplied one.¯ clash-lib‡Aeson versions <1.5.0 accept unescaped newlines in JSON strings. This is in violation of RFC 7159. Aeson 1.5.0 fixes this bug. Unfortunately, "Clash JSON" files rely on the old behavior. This function replaces newlines (in strings) with their escaped variants.° clash-lib/Pretty print part of json file related to errorë clash-lib×Parse a ByteString according to the given JSON template. Throws exception if it fails.ì clash-lib×Parse a ByteString according to the given JSON template. Throws exception if it fails.ë clash-lib"Path read from (for error message) clash-libBytestring to parseì clash-lib"Path read from (for error message) clash-libBytestring to parse®¯±°ëì´(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc. 2021-2024, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None" %&/02356789:;<>ÀÁÂÇÉÐÑÖ×ÙâìŠ&á clash-libReference to a Kindâ clash-libReference to a Typeã clash-libThe level above typesä clash-lib/Types in CoreHW: function and polymorphic typeså clash-libMake a Type out of a TyConí clash-libEither a Kind or a Typeî clash-lib Literal Typesò clash-libType Constantsó clash-lib TyCon typeô clash-lib Function typeõ clash-libAn easier view on typesö clash-lib Function type÷ clash-lib Applied TyConø clash-libNeither of the aboveù clash-lib Type variableú clash-lib Type constantû clash-libPolymorphic Typeü clash-libType Applicationý clash-lib Type literalþ clash-lib9Annotated type, see Clash.Annotations.SynthesisAttributes€ clash-libAn easier view on typesNote [Arrow arguments]·Clash' Arrow type can either have 2 or 4 arguments, depending on who created it. By default it has two arguments: the argument type of a function, and the result type of a function.«So when do we have 4 arguments? When in Haskell/GHC land the arrow was unsaturated. This can happen in instance heads, or in the eta-reduced representation of newtypes. So what are those additional 2 arguments compared to the "normal" function type? They're the kinds of argument and result type.� clash-lib�A view on types in which newtypes are transparent, the Signal type is transparent, and type functions are evaluated to WHNF (when possible).ÉStrips away ALL layers. If no layers are found it returns the given type.‚ clash-lib�A view on types in which newtypes are transparent, the Signal type is transparent, and type functions are evaluated to WHNF (when possible).Only strips away one "layer".ƒ clash-lib3Make a function type of an argument and result type„ clash-libÄMake a TyCon Application out of a TyCon and a list of argument types… clash-lib6Split a TyCon Application in a TyCon and its arguments† clash-libIs a type polymorphic?‡ clash-lib4Split a function type in an argument and result type‰ clash-libÞSplit a poly-function type in a: list of type-binders and argument types, and the result typeŠ clash-libìMake a polymorphic function type out of a result type and a list of quantifiers and function argument types‹ clash-libîSplit a poly-function type in a: list of type-binders and argument types, and the result type. Looks through Signal and type functions.Œ clash-lib)Is a type a polymorphic or function type?� clash-lib/Is a type a polymorphic or function type under ‚?Ž clash-lib‡Extract attributes from type. Will return an empty list if this is an AnnType with an empty list AND if this is not an AnnType at all.� clash-libIs a type a function type?� clash-libÁApply a function type to an argument type and get the result type“ clash-lib• clash-lib6Normalize a type, looking through Signals and newtypes For example: %Signal a (Vec (6-1) (Unsigned (3+1))) normalizes to Vec 5 (Unsigned 4)Š clash-lib Result type clash-lib/List of quantifiers and function argument types0áâãäþüûýúùåèíîðïñòóôõ÷öøÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–0äþüûýúùõ÷öøòóôîðïñãíáâè€�‚僊„‡ˆ‰‹…Œ�†“�–�‘’”•ÿŽˆ(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2021-2024, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<ÇÉÐÑÖ×Ùâì‹é«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁ«¬­®¯°±º²³´»¼½¾¿Àµ¶·¸¹Áÿ(C) 2012-2016, University of Twente, 2017, Google Inc. 2021-2024, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None!&/02356789:;<>ÀÁÂÉÐÑÖ×ÙàâèìŸy?æ clash-libTerm referenceç clash-libÄTerm representation in the CoreHW language: System F + LetRec + Case clash-lib A list of  CoreContextÙ describes the complete navigation path from the top-level to a specific sub-expression.à clash-libContext in which a term appearsÄ clash-lib#Function position of an applicationÅ clash-lib£Argument position of an application. If this is an argument applied to a primitive, a tuple is defined containing (name of the primitive, #type args, #term args)Æ clash-lib'Function position of a type applicationÇ clash-lib)RHS of a Let-binder with the sibling LHS'È clash-lib)Body of a Let-binding with the bound LHS'É clash-lib2Body of a lambda-term with the abstracted variableÊ clash-lib9Body of a TyLambda-term with the abstracted type-variableË clash-lib;RHS of a case-alternative with the bound pattern on the LHSÌ clash-libSubject of a case-decompositionÍ clash-libBody of a CastÎ clash-libBody of a TickÐ clash-lib+Patterns in the LHS of a case-decompositionÑ clash-libÖDatatype pattern, '[TyVar]' bind existentially-quantified type-variables of a DataConÒ clash-libLiteral patternÓ clash-libDefault pattern× clash-libBinding in a LetRec constructÙ clash-lib-Ignores its arguments, and outputs a constantÚ clash-libNever adds any workÛ clash-lib)Does work when the arguments are variableÜ clash-libüPerforms work regardless of whether the variables are constant or variable; these are things like clock or reset generatorsÝ clash-libA more restrictive version of Úô, where the value is the argument at the given position if all arguments for the given list of positions are also Ýë clash-lib‰Primitive with multiple return values. Useful for primitives that cannot return their results as a single product type, due to limitation of synthesis tooling. It will be applied to its normal arguments, followed by the variables it should assign its results to.See: pqð clash-lib>Tag to indicate which instance/register name modifier was usedñ clash-lib Clash.Magic.prefixNameò clash-lib Clash.Magic.suffixNameó clash-lib Clash.Magic.suffixNamePô clash-lib Clash.Magic.setNameö clash-lib=Source tick, will get added by GHC by running clash with `-g`÷ clash-libçModifier for naming module instantiations and registers, are added by the user by using the functions +Clash.Magic.[prefixName,suffixName,setName]ø clash-libÅDeduplicate, i.e. try to share expressions between multiple branches.ù clash-libDo not deduplicate, i.e. keepæ, an expression inside a case-alternative; do not try to share expressions between multiple branches.ú clash-libVariable referenceû clash-libDatatype constructorü clash-libLiteralý clash-lib Primitiveþ clash-libTerm-abstractionÿ clash-libType-abstraction€ clash-lib Application� clash-libType-application‚ clash-libRecursive let-bindingƒ clash-libÅCase-expression: subject, type of alternatives, list of alternatives„ clash-lib$Cast a term from one type to another… clash-libAnnotated term‡ clash-lib6Get the list of term-binders out of a DataType pattern‰ clash-lib6Abstract a term over a list of term and type variablesŠ clash-lib-Abstract a term over a list of type variables‹ clash-lib(Abstract a term over a list of variablesŒ clash-lib)Apply a list of types and terms to a term� clash-libApply a list of terms to a termŽ clash-libApply a list of types to a term� clash-lib1Is the Context a Lambda/Term-abstraction context?‘ clash-libIs the Context a Tick context?“ clash-libLike ’+ but removes all ticks from subexpressions.” clash-lib>Split a (Type)Application in the applied term and it arguments— clash-libÈSplit a (Type)Abstraction in the bound variables and the abstracted term˜ clash-lib�Given a function application, find the primitive it's applied. Yields Nothing if given term is not an application or if it is not a primitive.™ clash-lib1Partition ticks in source ticks and nameMod ticksš clash-libâVisit all terms in a term, testing it with a predicate, and returning a list of predicate yields.œ clash-libÎMake a term variable out of a variable reference or ticked variable reference˜ clash-libFunction application clash-libIf Term= was a primitive: (name of primitive, #type args, #term args)™ clash-lib(source ticks, nameMod ticks)Ýæç†üúû€ƒþ‚„…ý�ÿÂÃËÇÄÅÆÈÉÊÌÍÎÏÐÒÑÓÔÕÖרÙÚÛÜÝÞßâàáãåäæçèëéêìíîïðñòóôõö÷øù‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œÞç†üúû€ƒþ‚„…ý�ÿ†‰Š‹ŒŽ��æœÔÕÖ×ÐÒÑÓ‡ˆÏõö÷øù’“™ðñòóôæçèëéêìãåäíîïÞßâàáØÙÚÛÜÝÃËÇÄÅÆÈÉÊÌÍÎÂ�‘š”–•›—˜î(C) 2012-2016, University of Twente, 2017 , Myrtle Software Ltd, 2021-2022, QBayLogic B.V. 2022 , LUMI GUIDE FIETSDETECTIE B.V. 2022 , Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<ÉÐÑÖ×Ùâì¹2Ü clash-lib’Component instantiation hole. First argument indicates which function argument to instantiate. Third argument corresponds to output and input assignments, where the first element is the output assignment, and the subsequent elements are the consecutive input assignments.åThe LHS of the tuple is the name of the signal, while the RHS of the tuple is the type of the signalÞ clash-libæElements of a blackbox context. If you extend this list, make sure to update the following functions: 'Clash.Netlist.BlackBox.Types.prettyElem'Clash.Netlist.BlackBox.Types.renderElem&Clash.Netlist.BlackBox.Types.renderTag#Clash.Netlist.BlackBox.Types.setSym%Clash.Netlist.BlackBox.Util.inputHole-Clash.Netlist.BlackBox.Types.getUsedArguments*Clash.Netlist.BlackBox.Types.usedVariables2Clash.Netlist.BlackBox.Types.verifyBlackBoxContext(Clash.Netlist.BlackBox.Types.walkElementß clash-lib*Dumps given text without processing in HDLà clash-libComponent instantiation holeá clash-lib Output hole;â clash-lib Input holeã clash-libÚLike Arg, but its first argument is the scoping level. For use in in generated code only.ä clash-lib,Like Arg, but input hole must be a constant.å clash-lib*Like Arg, but input hole must be a literalæ clash-lib Name holeç clash-libÝLike Arg but only insert variable reference (creating an assignment elsewhere if necessary).è clash-lib Symbol holeé clash-libType declaration holeê clash-libType root holeë clash-libError value holeì clash-lib+Select element type from a vector-like typeí clash-libÈHole for the name of the component in which the blackbox is instantiatedï clash-libÀIndex data type hole, the field is the (exclusive) maximum indexð clash-libSize of a type holeñ clash-libLength of a vector-like holeò clash-libDepth of a tree holeó clash-lib!Max index into a vector-like typeô clash-lib*Hole containing a filepath for a data fileõ clash-libCreate data file  HOLE0 with contents HOLE1ö clash-libÆHole marking beginning (True) or end (False) of a generative constructù clash-libHole indicating whether IntWordInteger are 64-Bitú clash-libCompare less-or-equalû clash-lib=Hole indicating which synthesis tool we're generating HDL forü clash-lib*Convert to (True)/from(False) a bit-vectorý clash-libRecord selector of a type€ clash-libWhether element is scalar� clash-libÌWhether a domain's reset lines are active high. Errors if not applied to a  KnownDomain or KnownConfiguration.‚ clash-libTag of a domain.ƒ clash-lib/Period of a domain. Errors if not applied to a  KnownDomain or KnownConfiguration.„ clash-libÓLongest period of all known domains. The minimum duration returned is 100 ns, see  8https://github.com/clash-lang/clash-compiler/issues/2455.… clash-libÕTest active edge of memory elements in a certain domain. Errors if not applied to a  KnownDomain or KnownConfiguration.† clash-libÌWhether a domain's reset lines are synchronous. Errors if not applied to a  KnownDomain or KnownConfiguration.‡ clash-libªWhether the initial (or "power up") value of memory elements in a domain are configurable to a specific value rather than unknown/undefined. Errors if not applied to a  KnownDomain or KnownConfiguration.ˆ clash-libêWhether given enable line is active. More specifically, whether the enable line is NOT set to a constant ½.‰ clash-libáWhether argument is undefined. E.g., an XException, error call, removed argument, or primitive that is undefined. This template tag will always return 0 (False) if `-fclash-aggressive-x-optimization-blackboxes` is NOT set.Ž clash-libRepeat  hole n times� clash-lib Evaluate  hole but swallow output‘ clash-lib The "context name", name set by rs-, defaults to the name of the closest binder’ clash-libßA BlackBox Template is a List of Elements TODO: Add name of function for better error messages“ clash-libÐA BlackBox function generates a blackbox template, given the inputs and result type of the function it should provide a blackbox for. This is useful when having a need for blackbox functions, ... TODO: docs” clash-libSee tæ for documentation on this record's fields. (They are intentionally renamed to prevent name clashes.)¢ clash-libÕWhether this primitive should be rendered when its result type is void. Defaults to ¤.£ clash-lib,Render blackbox, even if result type is void¤ clash-libÆDon't render blackbox result type is void. Default for all blackboxes.¥ clash-libêUse this value in your blackbox template function if you do want to accept the defaults as documented in t.Ý clash-lib0Argument position of the function to instantiate clash-libÁSubposition of function: blackboxes can request multiple instances to be rendered of their given functions. This subposition indicates the nth function instance to be rendered (zero-indexed).‡This is a hack: the proper solution would postpone rendering the function until the very last moment. The blackbox language has no way to indicate the subposition, and every ~INST will default its subposition to zero. Haskell blackboxes can use this data type. clash-lib (name of signal, type of signal)“ clash-libœIndicates whether caller needs a declaration. If set, the function is still free to return an expression, but the caller will convert it to a declaration. clash-libName of primitive clash-lib Arguments clash-lib Result typesÎØÛÙÚÜÝÞæßöáåäøôâ‚ðñòëã�Žàû…ƒüéìçèêíîïóõ÷ùúýþÿ€�„†‡ˆ‰Š‹Œ��‘’“”•�—–˜™š›œžŸ¡ ¢£¤¥Δ•�—–˜™š›œž¥“’Ÿ¡ Þæßöáåäøôâ‚ðñòëã�Žàû…ƒüéìçèêíîïóõ÷ùúýþÿ€�„†‡ˆ‰Š‹Œ��‘ÜÝØÛÙÚ¢£¤Û(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd 2018 , Google Inc. 2021 , QBayLogic B.V. 2022 , Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789:;<>ÀÉÐÑÖ×ÙâìÊ¡Æ clash-libExternally defined primitiveÇ clash-libÂPrimitive template written in a Clash specific templating languageÈ clash-libÌPrimitive template rendered by a Haskell function (given as raw source code)É clash-lib÷A primitive that carries additional information. These are "real" primitives, hardcoded in the compiler. For example:  mapSignal in GHC2Core.coreToTerm.Ê clash-libName of the primitiveË clash-lib9Whether the primitive does any work, i.e. takes chip areaÌ clash-libÕWhether this primitive should be rendered when its result type is void. Defaults to ¤.Í clash-libÅWether this blackbox assigns its results to multiple variables. See pqÎ clash-lib6Whether this results in an expression or a declarationÏ clash-lib¼A warning to be outputted when the primitive is instantiated. This is intended to be used as a warning for primitives that are not synthesizable, but may also be used for other purposes.Ð clash-lib»How the result is assigned in HDL. This is used to determine the type of declaration used to render the result (wire/reg or signal/variable). The default usage is continuous assignment.Ñ clash-libVHDL only: add library! declarations for the given namesÒ clash-libVHDL only: add use! declarations for the given namesÓ clash-lib�Indicates how often a function will be instantiated in a blackbox. For example, consider the following higher-order function that creates a tree structure:%fold :: (a -> a -> a) -> Vec n a -> aöIn order to generate HDL for an instance of fold we need log2(n) calls to the first argument, `a -> a -> a` (plus a few more if n is not a power of two). Note that this only targets multiple textual instances of the function. If you can generate the HDL using a for-loop and only need to call ~INST once, you don't have to worry about this option. See the blackbox for uv for an example of this.�Right now, option can only be generated by BlackBoxHaskell. It cannot be used within JSON primitives. To see how to use this, see the Haskell blackbox for uw.Ô clash-lib�Create files to be included with the generated primitive. The fields are ((name, extension), content), where content is a template of the file Defaults to [] when not specified in the  .primitives fileÕ clash-lib0(Maybe) Control the generated name of the resultÖ clash-lib8(Maybe) Control the initial/power-up value of the result× clash-libÕUsed to indiciate type of template (declaration or expression). Will be filled with Template or an Either decl expr.Ø clash-libÊArguments used by blackbox. Used to remove arguments during normalization.Ú clash-lib×Holds blackbox function and its hash, (Int, BlackBoxFunction), in a CompiledPrimitive.Û clash-libAdditional informationÜ clash-lib=Data type to indicate what arguments are in use by a BlackBoxÝ clash-libOnly these are usedÞ clash-libAll but these are usedã clash-lib,Template source stored in file on filesystemä clash-libTemplate stored inlineå clash-libÿA BBFN is a parsed version of a fully qualified function name. It is guaranteed to have at least one module name which is not Main.ç clash-libA PrimMap maps primitive names to a  Primitiveê clash-libÈA compiled primitive has compiled all templates and functions from its ResolvedPrimitiveÓ counterpart. The Int in the tuple is a hash of the (uncompiled) BlackBoxFunction.í clash-libàA parsed primitive does not contain pointers to filesystem files anymore, but holds uncompiled BlackBoxTemplates and BlackBoxFunctions.î clash-lib9An unresolved primitive still contains pointers to files.,Ÿ¡ ÆÉÇÈÚÙÊ×ÔØÎËÌÍÏÐÑÒÓÕÖÛÜÝÞßàáâãäåæçèéêëìíî,âã䟡 ßàá忯ÉÇÈÚÙÊ×ÔØÎËÌÍÏÐÑÒÓÕÖÛÜÝÞéìçîíëêè±(C) 2012-2016, University of Twente, 2017 , Myrtle Software Ltd, 2021-2022, QBayLogic B.V. 2022 , Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<ÉÐÑÖ×ÙâìÌç� clash-libÓParse a text as a BlackBoxTemplate, returns a list of errors in case parsing fails��ˆ(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<>ÀÉÐÑÖ×ÙàâìÐÆ Ž clash-lib'PrettyPrec printing Show-like typeclass‘ clash-libClash's specialized Doc type holds metadata of type ClashAnnotation.’ clash-lib&Specific places in the program syntax.™ clash-lib+Annotations carried on pretty-printed code.š clash-lib)marking navigation to a different context› clash-lib!marking a specific sort of syntaxœ clash-libÃOptions for the pretty-printer, controlling which elements to hide.ž clash-lib%whether to display unique identifiersŸ clash-lib#whether to display type information  clash-lib$whether to display module qualifiers¡ clash-libwhether to display ticks¥ clash-lib$Print a PrettyPrec thing to a StringŽ��‘’•–—“”˜™š›œ�žŸ ¡¢£¤¥¦§¨Ž��œ�žŸ ¡‘™š›’•–—“”˜¢£¥¦§¨¤ None &/02356789:;<>ÀÉÐÑÖ×Ùâìä+8 clash-lib-Rename environment for e.g. alpha equivalence!When going under binders for e.g.  x -> e1 aeq y -> e2 We want to rename [x -> y] or [y -> x]8, but we have to pick a binder that is neither free in e1 nor e2 or we risk accidental capture.So we must maintain: A renaming for the left termA renaming for the right termA set of in scope variablesà clash-lib/Set of variables that is in scope at some pointThe ²Ï is a kind of hash-value used to generate new uniques. It should never be zeroÕSee "Secrets of the Glasgow Haskell Compiler inliner" Section 3.2 for the motivationÄ clash-libSet of variablesÅ clash-libMap indexed by variablesÆ clash-lib Empty mapÇ clash-lib3Environment containing a single variable-value pairÈ clash-lib%Look up a value based on the variableÉ clash-lib0Lookup a value based on the unique of a variableÊ clash-lib$Lookup a value based on the variable+Errors out when the variable is not presentË clash-lib1Remove a variable-value pair from the environmentÌ clash-lib:Remove a list of variable-value pairs from the environmentÍ clash-libâAdd a variable-value pair to the environment; overwrites the value if the variable already existsÎ clash-lib€Add a variable-value pair to the environment; if the variable already exists, the two values are merged with the given functionÏ clash-libÔAdd a list of variable-value pairs; the values of existing keys will be overwrittenÐ clash-libIs the environment emptyÑ clash-lib/Get the (left-biased) union of two environmentsÒ clash-lib÷Get the union of two environments, mapped values existing in both environments will be merged with the given function.Ó clash-libÐFilter the first varenv to only contain keys which are not in the second varenv.Ô clash-lib5Create an environment given a list of var-value pairsÕ clash-lib4Apply a function to every element in the environmentÖ clash-libÝApply a function to every element in the environment; values for which the function returns Ó! are removed from the environment× clash-libÝStrict left-fold over an environment using both the unique of the the variable and the valueØ clash-libExtract the elementsÙ clash-lib*Does the variable exist in the environmentÚ clash-lib.Does the variable not exist in the environmentÛ clash-lib The empty setÜ clash-libThe set of a single variableÝ clash-libUnion two setsÞ clash-libTake the difference of two setsß clash-lib%Is the variable an element in the setà clash-lib)Is the variable not an element in the setá clash-lib5Is the set of variables A a subset of the variables Bâ clash-lib"Are the sets of variables disjointã clash-libCheck whether a varset is emptyä clash-lib,Remove a variable from the set based on its —å clash-lib%Create a set from a list of variablesç clash-lib The empty setè clash-lib Add a list of variables in scopeé clash-lib$Union two sets of in scope variablesê clash-lib Is the set of variables in scopeë clash-libLook up a variable in the Ã7. This gives you the canonical version of the variableì clash-libIs the variable in scopeí clash-lib8Check whether an element exists in the set based on the — contained in that elementî clash-libIs the variable not in scopeï clash-lib"Create a set of variables in scopeð clash-lib The empty setñ clash-libEnsure that the —% of a variable does not occur in the Ãó clash-lib$Create an empty renaming environmentô clash-libÄLook up the renaming of an type-variable occurrence in the left termõ clash-libÅLook up the renaming of an type-variable occurrence in the right termö clash-lib1Simultaneously go under the type-variable binder bTvL and type-variable binder bTvR, finds a new binder newTvB%, and return an environment mapping [bTvL -> newB] and [bTvR -> newB]÷ clash-libApplies öÇ to several variables: the two variable lists must be of equal length.ø clash-lib6Look up the renaming of an occurrence in the left termù clash-lib6Look up the renaming of an occurrence in the left termú clash-lib#Simultaneously go under the binder bL and binder bR, finds a new binder newTvB$, and return an environment mapping  [bL -> newB] and  [bR -> newB]û clash-libApplies úÇ to several variables: the two variable lists must be of equal length.á clash-libSet of variables A clash-libSet of variables Bò clash-libUnique in scope test clash-libSeed:ÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúû:ÅÐÈÊÉÆÇÔÍÏÎËÌÑÒÓÕÖ×ÙÚØÄÛÜäÝÞãßàáâåæÃðëïçèéìíîêñòÂóúöû÷øùôõ!å(C) 2013-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017 , QBayLogic, Google Inc., 2020-2022, QBayLogic, 2022 , Google Inc.,BSD2 (see the file LICENSE)%QBayLogic B.V. None #$&/02356789:;https://peterfab.com/ref/vhdl/vhdl_renerta/source/vhd00037.htm Ähttps://peterfab.com/ref/verilog/verilog_renerta/source/vrg00018.htm˜ clash-libæForce all generated basic identifiers to lowercase. Among others, this affects module and file names.™ clash-libçPerform a high-effort compile, trading improved performance for potentially much longer compile times.#Name inspired by Design Compiler's  compile_ultra flag.š clash-libNothing!: generate undefined's in the HDL Just NothingÑ: replace undefined's by a constant in the HDL; the compiler decides what's best Just (Just x): replace undefined's by x in the HDL› clash-lib!Check whether paths specified in ” exists on the filesystem.œ clash-libøEnable aggressive X optimization, which may remove undefineds from generated HDL by replaced with defined alternatives.� clash-libŒEnable aggressive X optimization, which may remove undefineds from HDL generated by blackboxes. This enables the ~ISUNDEFINED template tag.ž clash-libÀAt what size do we cache normalized work-free top-level binders.Ÿ clash-lib+Generate an EDAM file for use with Edalize.  clash-libòRender sum types with all zero-width fields as enums where supported, as opposed to rendering them as bitvectors.¡ clash-libÜTimescale precision set in Verilog files. E.g., setting this would sets the second part of `timescale 100fs/100fs.¢ clash-lib"Options related to debugging. See ƒ¤ clash-lib�Check that the results of applied transformations do not violate the invariants for rewriting (e.g. no accidental shadowing, or type changes).+Command line flag: -fclash-debug-invariants¥ clash-libÂThe information to show when debugging a transformation. See the «# type for different configurations.ÞCommand line flag: -fclash-debug-info (None|FinalTerm|AppliedName|AppliedTerm|TryName|TryTerm)¦ clash-libëList the transformations that are being debugged. When the set is empty, all transformations are debugged.;Command line flag: -fclash-debug-transformations t1[,t2...]§ clash-lib›Count how many times transformations are applied and provide a summary at the end of normalization. This includes all transformations, not just those in ¦.6Command line flag: -fclash-debug-count-transformations¨ clash-libúDebug transformations applied after the nth transformation applied. This includes all transformations, not just those in ¦.7Command line flag: -fclash-debug-transformations-from=N© clash-lib”Debug up to the nth applied transformation. If this limit is exceeded then Clash will error. This includes all transformations, not just those in ¦.8Command line flag: -fclash-debug-transformations-limit=Nª clash-libÓSave information about all applied transformations to a history file for use with  clash-term./Command line flag: -fclash-debug-history[=FILE]« clash-lib=Information to show about transformations during compilation.NB: The Ord, instance compares by amount of information.¬ clash-lib*Show no information about transformations.­ clash-lib6Show the final term after all applied transformations.® clash-lib6Show the name of every transformation that is applied.¯ clash-libÁShow the name and result of every transformation that is applied.° clash-libñShow the name of every transformation that is attempted, and the result of every transformation that is applied.± clash-libùShow the name and input to every transformation that is applied, and the result of every transformation that is applied.³ clash-libGlobal function bindersÃGlobal functions cannot be mutually recursive, only self-recursive.¶ clash-lib%The core identifier for this binding.· clash-libÀThe source location of this binding in the original source code.¸ clash-libÇthe inline specification for this binding, in the original source code.¹ clash-lib§Is the binding a core term corresponding to a primitive with a known implementation? If so, it can potentially be inlined despite being marked as NOINLINE in source.º clash-lib¾The term representation for this binding. This is polymorphic so alternate representations can be used if more appropriate (i.e. in the evaluator this can be Value for evaluated bindings).» clash-lib!Whether the binding is recursive.ƒTODO Ideally the BindingMap would store recursive and non-recursive bindings in a way similar to Let / Letrec. GHC also does this.½ clash-lib-The binding is the unfolding for a primitive.¾ clash-lib$The binding is an ordinary function.Ë clash-lib’Check whether the debugging options mean the compiler is debugging. This is true only if at least one debugging feature is enabled, namely one ofchecking for invariants showing info for transformations counting applied transformations&limiting the number of transformationsïOther flags, such as writing to a history file or offsetting which applied transformation to show information from do not affect the result, as it is possible to enable these but still not perform any debugging checks in functions like  applyDebugÈ. If this is no longer the case, this function will need to be changed.Ì clash-libôCheck whether the requested information is available to the specified transformation according to the options. e.g. ÖtraceIf (hasDebugInfo AppliedName name opts) ("Trace something using: " <> show name) ƒThis accounts for the set of transformations which are being debugged. For a check which is agnostic to the a transformation, see Í.Í clash-lib‹Check that the transformation info shown supports the requested info. If the call-site is in the context of a particular transformation, Ì should be used instead.Î clash-libfclash-debug DebugNoneÏ clash-libfclash-debug DebugSilentÐ clash-libfclash-debug DebugFinalÑ clash-libfclash-debug DebugCountÒ clash-libfclash-debug DebugNameÓ clash-libfclash-debug DebugTryÔ clash-libfclash-debug DebugAppliedÕ clash-libfclash-debug DebugAll× clash-libáRender an SDC file from an SdcInfo. The clock periods, waveforms, and targets are all hardcoded.Ø€�‚ƒ„¡ Ÿž�œ›š™˜—–•”“’‘��Œ‹Š‰ˆ‡†…�Ž¢£ª©¨§¦¥¤«±°¯®¬­²³´µ»¹¸·¶º¼¾½¿ÀÂÁÃÄÊÉÈÇÆÅËÌÍÎÏÐÑÒÓÔÕÖרÃÄÊÉÈÇÆÅ¿ÀÂÁ¼¾½´µ»¹¸·¶º³²«±°¯®¬­¢£ª©¨§¦¥¤ËÌÍÎÏÐÑÒÓÔÕƒ„¡ Ÿž�œ›š™˜—–•”“’‘��Œ‹Š‰ˆ‡†…�ŽÖ€�‚×"Ò(C) 2012-2016, University of Twente 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ÉÐÑÔÖ×ÙàâìÄ ö clash-lib:Gives the free type-variables in a Type, implemented as a ³The ³/ is closed over the types of its variables, so:  k) Int) = {a, k} ÷ clash-libÃGives the "interesting" free variables in a Type, implemented as a ³The ³+ is closed over the types of variables, so: ÙfoldMapOf (typeFreeVars' (const True) IntSet.empty) unitVarSet ((a:* -> k) Int) = {a, k} "Note [Closing over kind variables]Consider the type forall k . b -> kwhere b :: k -> Type)When we close over the free variables of forall k . b -> k, i.e. b , then the k in b :: k -> Type is most definitely not the k in forall k . b -> k¹. So when a type variable is free, i.e. not in the inScope set, its kind variables also aren´t; so in order to prevent collisions due to shadowing we close using an empty inScope set. See also: Ôhttps://gitlab.haskell.org/ghc/ghc/-/commit/503514b94f8dc7bd9eab5392206649aee45f140bø clash-lib>Check whether a set of variables does not occur free in a termù clash-lib6Check whether a local identifier occurs free in a termú clash-libCalculate the local� free variable of an expression: the free type variables and the free identifiers that are not bound in the global environment.û clash-lib7Gives the free identifiers of a Term, implemented as a ³ü clash-libCalculate the localç free identifiers of an expression: the free identifiers that are not bound in the global environment.ý clash-libCalculate the globalã free identifiers of an expression: the free identifiers that are bound in the global environment.þ clash-lib:Gives the free type-variables of a Term, implemented as a ³The ³+ is closed over the types of variables, so: ÐfoldMapOf termFreeTyVars unitVarSet (case (x : (a:* -> k) Int)) of {}) = {a, k} ÿ clash-libÃGives the "interesting" free variables in a Term, implemented as a ³The ³+ is closed over the types of variables, so: áfoldMapOf (termFreeVars' (const True)) unitVarSet (case (x : (a:* -> k) Int)) of {}) = {x, a, k} "Note [Closing over type variables]Consider the term /\(k :: Type) -> \(b :: k) -> awhere a :: k)When we close over the free variables of /k -> (b :: k) -> (a :: k), i.e. a , then the k in a :: k is most definitely not the k in introduced by the /k ->¹. So when a term variable is free, i.e. not in the inScope set, its type variables also aren´t; so in order to prevent collisions due to shadowing we close using an empty inScope set. See also: Ôhttps://gitlab.haskell.org/ghc/ghc/-/commit/503514b94f8dc7bd9eab5392206649aee45f140b€  clash-libËGet the free variables of an expression and count the number of occurrences÷ clash-lib3Predicate telling whether a variable is interesting clash-lib+Uniques of the variables in scope, used by ÿÿ clash-lib3Predicate telling whether a variable is interesting ö÷øùúûüýþÿ€ öûúüýþùø€ ÷ÿ#(C) 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<>ÀÉÐÑÖ×ÙâìEƒ  clash-libõSomething is closed if it has no free variables. This function may be replaced with a more efficient implementation.„  clash-libôCheck if a variable is free in the given value. This function may be replaced with a more efficient implementation.…  clash-libøCheck if a variable is not free in the given value. This function may be replaced with a more efficient implementation.†  clash-lib�Check if all variables in a set are free in the given value. This function may be replaced with a more efficient implementation.‡  clash-lib€Check if no variables in a set are free in the given value. This function may be replaced with a more efficient implementation.� ‚ „ … ‡ ƒ † � ‚ „ … ‡ ƒ † $(C) 2021-2024 QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<ÉÐÑÖ×Ùâì!y ‹  clash-libÁData type that indicates what kind of solution (if any) was foundŒ  clash-lib1Solution was found. Variable equals some integer.�  clash-lib8A solution was found, but it involved negative naturals.Ž  clash-lib4Given type wasn't an equation, or it was unsolvable.�  clash-lib9Solve given equations and return all non-absurd solutions‘  clash-lib Solve simple equalities such as:a ~ 33 ~ aSomeType a b ~ SomeType 3 5SomeType 3 5 ~ SomeType a bSomeType a 5 ~ SomeType 3 b’  clash-libSolve equations supported by  normalizeAdd. See documentation of TypeEqSolution to understand the return value.“  clash-libçGiven the left and right side of an equation, normalize it such that equations of the following forms: 5 ~ n + 2 5 ~ 2 + n n + 2 ~ 5 2 + n ~ 5are returned as (5, 2, n)”  clash-libÁTests for nonsencical patterns due to types being "absurd". See  isAbsurdEq for more info.•  clash-lib-Determines if an "equation" obtained through patEqs or typeEq» is absurd. That is, it tests if two types that are definitely not equal are asserted to be equal OR if the computation of the types yield some absurd (intermediate) result such as -1.–  clash-libGet constraint equations—  clash-lib+If type is an equation, return LHS and RHS.•  clash-libexistential tvs ‹ Ž � Œ � � ‘ ’ “ ” • – — ‹ Ž � Œ � � ‘ ’ “ ” • – — ÿ(C) 2012-2016, University of Twente, 2017, Google Inc. 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<ÉÐÑÖ×Ùàâì9ä‹ clash-libAlpha equality for typesŒ clash-libType substitution, see ´ÜWorks only if the domain of the substitution is superset of the type being substituted intoš  clash-lib6A substitution environment containing containing both é and è substitutions.6Some invariants apply to how you use the substitution: The à contains at least those és and ès that will be in scope afterñ applying the substitution to a term. Precisely, the in-scope set must be a superset of the free variables of the substitution range that might possibly clash with locally-bound variables in the thing being substituted in..You may only apply the substitution once. See   èThere are various ways of setting up the in-scope set such that the first of of these invariants holds:?Arrange that the in-scope set really is all the things in scopeÁArrange that it's the free vars of the range of the substitutionùMake it empty, if you know that all the free variables of the substitution are fresh, and hence can´t possibly clash   clash-libType substitution#The following invariants must hold: The Ã8 is needed only to guide the generation of fresh uniques5In particular, the kind of the type variables in the à is not relevant.%The substitution is only applied onceNote [Apply Once]We might instantiate forall a b. ty with the types [a, b] or [b, a]%. So the substitution might go like [a -> b, b -> a]Á. A similar situation arises in terms when we find a redex like (a ->  b -> e) b aí. Then we also end up with a substitution that permutes variables. Other variations happen to; for example  [a -> (a,b)].ÁSO A TvSubst MUST BE APPLIED PRECISELY ONCE, OR THINGS MIGHT LOOP!Note [The substitution invariant]?When calling (substTy subst ty) it should be the case that the à is a superset of both:3The free variables of the range of the substitutionThe free variables of ty% minus the domain of the substitution¢  clash-libA substitution of äs for ès%Note [Extending the TvSubstEnv] See   " for the invariants that must holdáThis invariant allows a short-cut when the subst env is empty: if the TvSubstEnv is empty, i.e. nullVarEnv TvSubstEnv. holds, then (substTy subst ty) does nothing.For example, consider:(a -> b(a ~ Int) -> ... b ...) IntWe substitute Int for a. The Unique of b+ does not change, but nevertheless we add b to the ¢  because b's kind does change(This invariant has several consequences:In µÑ, we extend TvSubstEnv if the unique has changed, or if the kind has changedIn ¶ , we do not need to consult the Ã; the TvSubstEnv is enoughIn ¬ /, we can short-circuit when TvSubstEnv is empty£  clash-libÀAn empty substitution, starting the variables currently in scope¤  clash-libCreate a type substitution¥  clash-lib/Extend the substitution environment with a new é substitution¦  clash-lib3Extend the substitution environment with a list of é substitutions§  clash-lib:Extend the substitution environment with a list of global é substitutions¨  clash-lib/Extend the substitution environment with a new è substitution©  clash-lib3Extend the substitution environment with a list of è substitutionsª  clash-libAdd an éÒ to the in-scope set: as a side effect, remove any existing substitutions for it.«  clash-libAdd é s to the in-scope set. See also ª ¬  clash-libSubstitute within a äNone&/02356789;<ÉÐÑÖ×Ùàâì<ïà  clash-lib Derive a &x instance for given typeÄ  clash-libFor · , constructs: £showsTypePrec n _ = let showSpace = showChar ' ' precCalls = [showsTypePrec 11 (Proxy @a)] interspersedPrecCalls = intersperse showSpace precCalls showType = foldl (.) (showString "Maybe") (showSpace : interspersedPrecCalls) in showParen (n > 10) showTypeÂ Ã Ä Å Å Ä Ã Â &ë(C) 2019, Myrtle Software Ltd, 2021, QBayLogic B.V. 2022, Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None%&/02356789;<>ÀÉÐÑÖ×ÙàâìCþÆ  clash-lib)Tools to deal with literals encoded as a ç.Ç  clash-libConvert çá to the constant it represents. Will return an error if (one of the subterms) fail to translate.È  clash-lib×Pretty print the type of a term (for error messages). Its default implementation uses ¸Í to print the type. Note that this method is there to allow an instance for ¹% to exist (and other GADTs imposing º#). Without it, GHC would ask for a KnownNatà constraint on the instance, which would defeat the purpose of it.É  clash-libPretty print type aÌ  clash-libÊUnsafe warning: If you use this instance in a monomorphic context (e.g., TermLiteral (SNat 5)§), you need to make very sure that the term corresponds to the literal. If you don't, there will be a mismatch between type level variables and the proof carried in ¹s º;. Typical usage of this instance will therefore leave the n polymorphic.Ü  clash-libSame as Ç Ç, but returns printable error message if it couldn't translate a term.Ç  clash-libTerm to convert clash-lib»Ê indicates a failure, containing the (sub)term that failed to translate. ¼ indicates a success.È  clash-libÀThe operator precedence of the enclosing context (a number from 0 to 11'). Function application has precedence 10É. Used to determine whether the result should be wrapped in parentheses. clash-lib6Proxy for a term whose type needs to be pretty printedÃ Æ È Ç É Ü Æ È É Ç Ü Ã '(C) 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<ÉÐÑÖ×ÙàâìHµä  clash-libÇGet the result type of a polymorphic function given a list of argumentså  clash-libLike æ Ë, but only applies a single type. If multiple types are being applied use æ Ã, as it is more efficient to only substitute once with many types.æ  clash-lib"(piResultTys f_ty [ty1, ..., tyn]) gives the type of (f ty1 .. tyn) where  f :: f_tyæ  is interesting because: f_ty* may have more foralls than there are args)Less obviously, it may have fewer forallsFore case 2. think of:,piResultTys (forall a . a) [forall b.b, Int]5This really can happen, such as situations involving ½s type:undefined :: forall a. a undefined (forall b. b -> b) IntThis term should have the type  (Int -> Int)<, but notice that there are more type args than foralls in ½s type.äFor efficiency reasons, when there are no foralls, we simply drop arrows from a function type/kind.ä  clash-lib+The complete term, used for error messages. Þ ß à á â ã ä å æ à á â Þ ß ã ä å æ (€(C) 2012-2016, University of Twente, 2021-2024, QBayLogic B.V., 2022 , Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None  %&'(/02356789;<ÉÐÑÔÖ×Ùâì^ï  clash-libHelper existential for ˆ , contains a function that: ,given a term of a type that should be split,Âcreates projections of that term for all the constructor argumentsñ  clash-libŒRebuild a let expression / let expressions by taking the SCCs of a list of bindings and remaking Let (NonRec ...) ... and Let (Rec ...) ...ò  clash-lib The type  forall a . aó  clash-lib The type forall a. forall b. a -> bô  clash-lib$Create a vector of supplied elementsõ  clash-lib&Append elements to the supplied vectorö  clash-lib¦Create let-bindings with case-statements that select elements out of a vector. Returns both the variables to which element-selections are bound and the let-bindings÷  clash-lib¤Create let-bindings with case-statements that select elements out of a tree. Returns both the variables to which element-selections are bound and the let-bindingsø  clash-lib$Create a vector of supplied elementsù  clash-lib*Determine whether a type is isomorphic to Clash.Signal.Internal.Signal It is i.e.: Signal clk a(Signal clk a, Signal clk b)Vec n (Signal clk a)data Wrap = W (Signal clk' Int)etc.#This also includes BiSignals, i.e.:BiSignalIn High System Intetc.ú  clash-lib>Determines whether given type is an (alias of en) Enable line.û  clash-libÅDetermines whether given type is an (alias of en) Clock or Reset line€  clash-libSame as dataConInstArgTysÆ, but it tries to compute existentials too, hence the extra argument TyConMap=. WARNING: It will return the types of non-existentials only�  clash-lib”Given a DataCon and a list of types, the type variables of the DataCon type are substituted for the list of types. The argument types are returned.ÎThe list of types should be equal to the number of type variables, otherwise Nothing is returned.‚  clash-libMake a coercionƒ  clash-libMake an unsafe coercion‡  clash-liböTry to reduce an arbitrary type to a literal type (Symbol or Nat), and subsequently extract its String representationˆ  clash-libŽDetermine whether we should split away types from a product type, i.e. clocks should always be separate arguments, and not part of a product.‰  clash-lib Worker of ˆ  , works on õ instead of äŠ  clash-libÆPotentially split apart a list of function argument types. e.g. given: [Int,(Clock,(Reset,Bool)),Char] we return nt,Clock,Reset,Bool,Char]But we would leave [Int, (Bool,Int), Char] unchanged.‹  clash-lib&Strip implicit parameter wrappers (IP)Œ  clash-libÉDo an inverse topological sorting of the let-bindings in a let-expression�  clash-libÅGroup let-bindings into cyclic groups and acyclic individual bindingsŽ  clash-libÎMake a case-decomposition that extracts a field out of a (Sum-of-)Product type�  clash-lib+Make a binder that should not be referenced�  clash-libMake a new, unique, identifierô  clash-libThe Nil constructor clash-libThe Cons (:>) constructor clash-lib Element type clash-libLength of the vector clash-libElements to put in the vectorõ  clash-libThe Cons (:>) constructor clash-lib Element type clash-lib$The vector to append the elements to clash-libLength of the vector clash-libElements to appendö  clash-lib Unique supply clash-lib (Superset of) in scope variables clash-libThe Cons (:>) constructor clash-libThe element type clash-lib*Char to append to the bound variable names clash-libLength of the vector clash-lib The vector÷  clash-lib Unique supply clash-lib (Superset of) in scope variables clash-libThe LR constructor clash-libThe BR constructor clash-libThe element type clash-lib*Char to append to the bound variable names clash-libDepth of the tree clash-libThe treeø  clash-libThe LR constructor clash-libThe BR constructor clash-lib Element type clash-libDepth of the tree clash-libElements to put in the treeˆ  clash-libType to examine clash-lib:If we want to split values of the given type then we have Just: þThe (type-applied) data-constructor which, when applied to values of the types in 3., creates a value of the examined typeôFunction that give a term of the type we need to split, creates projections of that term for all the types in 3.:The arguments types of the product we are trying to split.ÞNote that we only split one level at a time (although we check all the way down), e.g. given (Int, (Clock, Bool)) we return: õJust ( (,) @Int @(Clock, Bool) , \s -> [case s of (a,b) -> a, case s of (a,b) -> b] , [Int, (Clock, Bool)])4An outer loop is required to subsequently split the  (Clock, Bool) tuple.Ž  clash-lib#Name of the caller of this function clash-lib TyCon cache clash-libSubject of the case-composition clash-lib n'th DataCon clash-lib n'th field�  clash-libName of the identifier"ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � "ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ € � ‚ ƒ „ … † ‡ ï ð ˆ ‰ Š ‹ Œ � Ž � � =(C) 2021, QBayLogic B.V., 2022, Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ÉÐÑÖ×ÙâìaÒÖ clash-libìThe undefinedX primitive represents an X-exception throwing value that was identified during normalization.× clash-lib·The undefined primitive represents an undefined value that was identified during normalization. This includes undefined results to compile-time evaluation, such as division by zero.‘  clash-lib®The removedArg primitive represents an argument which is computationally irrelevant, and has been removed from the circuit (as removing it does not change the behaviour of the circuit). Examples of such arguments are unused arguments to blackboxes, as removing them does not affect the rendered HDL.Öב ‘ ×Ö)(C) 2020-2021, QBayLogic B.V.BSD2 (see the file LICENSE)$QBayLogic B.V. None &/02356789;<ÉÐÑÔÖ×Ùâìfn’  clash-libÂDetermine whether a term does any work, i.e. adds to the size of the circuit. This function requires a cache (specified as a lens) to store the result for querying work info of global binders.“  clash-lib)Determine if a term represents a constant–  clash-libA conservative version of ’ . Is used to determine in bindConstantVarÖ to determine whether an expression can be "bound" (locally inlined). While binding workfree expressions won't result in extra work for the circuit, it might very well cause extra work for Clash. In fact, using ’  in bindConstantVarÈ makes Clash two orders of magnitude slower for some of our test cases.)In effect, this function is a version of “ ˆ that also considers references to clocks and resets constant. This allows us to bind HiddenClock(ResetEnable) constructs, allowing Clash to constant spec subconstants - most notably KnownDomain. Doing that enables Clash to eliminate any case-constructs on it.’ “ ” • – ’ • – “ ” *Ç(C) 2020-2021, QBayLogic B.V., 2022 , Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ÉÐÑÔÖ×Ùàâìuÿ™  clash-libýGlobal term environment. These are the potentially evaluated bodies of the top level definitions which are forced on lookup.š  clash-lib+The type constructors known about by Clash.›  clash-lib°The set of in scope variables during partial evaluation. This includes new variables introduced by the evaluator (such as the ids of binders introduced during eta expansion.)œ  clash-lib5The supply of fresh names for generating identifiers.�  clash-libµThe remaining fuel which can be spent inlining global variables. This is saved in the local environment, so when evaluation resumes from WHNF the amount of fuel used is preserved.ž  clash-lib?The heap containing the results of any evaluated IO primitives.Ÿ  clash-lib=The address of the next element to be inserted into the heap.   clash-libàCache for the results of isWorkFree. This is required to use Clash.Rewrite.WorkFree.isWorkFree.£  clash-lib.The id of the term currently under evaluation.¤  clash-libúLocal type environment. These are types that are introduced while evaluating the current term (i.e. by type applications)¥  clash-lib‡Local term environment. These are WHNF terms or unevaluated thunks introduced while evaluating the current term (i.e. by applications)¦  clash-lib®The amount of fuel left in the local environment when the previous head was reached. This is needed so resuming evaluation does not lead to additional fuel being available.§  clash-libÿWhen evaluating, keep data constructors for boxed data types (e.g. I#) instead of converting these back to their corresponding primitive. This is used when evaluating terms where the result is subject of a case expression (see note: lifted data types).¨  clash-lib‹A term which is in beta-normal eta-long form (NF). This has no redexes, and all partially applied functions in sub-terms are eta-expanded.žWhile not strictly necessary, NLam includes the environment at the point the original term was evaluated. This makes it easier for the AsTerm instance for Normal to reintroduce let expressions before lambdas without accidentally floating a let using a lambda bound variable outwards.°  clash-lib½A term which has been potentially evaluated to WHNF. If evaluation has occurred, then there will be no redexes at the head of the Value, but sub-terms may still have redexes. Data constructors are only considered to be values when fully applied, if partially applied they should be eta-expanded during evaluation.öThunks are included so that lazy evaluation can be modelled without needing to store Either Term Value in the environment. This makes the presentation simpler, with the caveat that values must be forced when they are required to not be thunks.¹  clash-lib¿Neutral terms cannot be reduced, as they represent things like variables which are unknown, partially applied functions, or case expressions where the subject cannot be inspected. Consider:¯v Stuck if "v" is a free variable p x1 ... xn Stuck if "p" is a primitive that cannot be reduced x $ y Stuck if "x" is not known to be a lambda x @ A Stuck if "x" is not known to be a type lambda case x of ... Stuck if "x" is neutral (cannot choose an alternative)­Neutral terms can also be let expressions which preserve required bindings in the normal form representation. Examples of bindings that may be kept are bindings which perform work (and should not be copied) or bindings that are recursive and are still referred to by the body of the let expression.8let ... in ... Preserved bindings are needed by the bodyÀ  clash-lib"An argument applied to a function  data constructor  primitive.1— ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç 1À Á ¹ º » ¼ ½ ¾ ¿ ° ± ² ³ ´ µ ¶ · ¸ Â Ã Ä Å Æ ¨ © ª « ¬ ­ ® ¯ ¡ ¢ £ ¤ ¥ ¦ § — ˜ ™ š › œ � ž Ÿ   Ç +(C) 2020-2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ÉÐÑÖ×ÙàâìxQÌ  clash-libßConvert a term in some normal form back into a Term. This is important, as it may perform substitutions which have not yet been performed (i.e. when converting from WHNF where heads contain the environment at that point).Ì Í Ì Í ,(C) 2020-2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ÉÎÐÑÖ×ÙàâìzÑ  clash-libôThe monad of partial evaluation. The inner monad is IO, as primitive evaluation can attempt to evaluate IO actions.Ò  clash-libòEvaluate an action in the partial evaluator, returning the result, and the final state of the global environment.Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï Ñ Ò Ó Ô Õ Ö × Ø Ù Ý Ú Û Ü Þ ß à á â ã ä å æ ç è é ê ë ì í î ï -(C) 2020 QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ÉÐÑÖ×Ùâì�ôû  clash-libÍAn evaluator for Clash core. This consists of two functions: one to evaluate a term to weak-head normal form (WHNF) and another to recursively evaluate sub-terms to obtain beta-normal eta-long form (NF).ÿ  clash-libÖEvaluate a term to WHNF, converting the result back to a Term. The global environment at the end of evaluation is also returned, callers should preserve any parts of the global environment needed for later calls.€  clash-libÂEvaluate a term to NF, converting the result back to a Term. See ÿ  for more details.ÿ  clash-lib$The evaluator implementation to use. clash-libThe initial global environment. clash-libþWhether evaluation should keep lifted data constructors. See NOTE [Lifted Constructors] in Clash.Core.PartialEval.NormalForm. clash-lib$The id of the term under evaluation. clash-libThe term under evaluation. clash-libNone &/02356789;<ÉÐÑÖ×ÙàâìŒQ‘  clash-lib Functions’  clash-libType abstractions“  clash-libData constructors”  clash-libLiterals•  clash-libðClash's number types are represented by their "fromInteger#" primitive function. So some primitives are values.–  clash-libUsed by lazy primitives—  clash-lib#Preserve ticks from Terms in Values˜  clash-lib#Preserve casts from Terms in Values£  clash-lib™A machine represents the current state of the abstract machine used to evaluate terms. A machine has a term under evaluation, a stack, and three heaps:Åa primitive heap to store IO values from primitives (like ByteArrays)2a global heap to store top-level bindings in scope-a local heap to store local bindings in scope’Machines also include a unique supply and InScopeSet. These are needed when new heap bindings are created, and are just an implementation detail.¯  clash-libõA single step in the partial evaluator. The result is the new heap and stack, and the next expression to be reduced.°  clash-lib¢An evaluator is a collection of basic building blocks which are used to define partial evaluation. In this implementation, it consists of two types of function:?steps, which applies the reduction realtion to the current term Safe-Inferred&/02356789;<ÉÐÑÖ×Ùâì•HÏ  clash-lib§The Tcl Connector: a Tcl script that can parse Clash output and emit the correct commands for loading the design into Vivado (Quartus support will be added later).Apart from parsing the clash-manifest.jsonÊ files produced by Clash, the Tcl Connector also supports the so-called Clash<->Tcl APIÈ. This functionality enables Clash primitives to pass complex instructions to the Tcl Connector. Current features are instantiating IP in Vivado and passing metadata along with Vivado XDC files.ÆAn example use of the Tcl Connector, demonstrating its basic features: ÷source -notrace clashConnector.tcl # Pass it the path to "clash-manifest.json" of your top entity clash::readMetadata vhdl/Design.topEntity # Instantiate IP (no-op if no IP defined) file mkdir ip clash::createAndReadIp -dir ip # Read all VHDL/Verilog/SystemVerilog files generated by Clash clash::readHdl # Handle XDC files, in correct order clash::readXdc early # A file containing PACKAGE_PIN and IOSTANDARD definitions (but not # create_clock, clocks are part of the Clash-generated files) read_xdc Arty-A7-35-Master.xdc set_property USED_IN implementation [get_files Arty-A7-35-Master.xdc] clash::readXdc {normal late} synth_design -top $clash::topEntity -part xc7a35ticsg324-1L opt_design place_design route_design write_bitstream ${clash::topEntity}.bitClash.Xilinx.ClockGen and clash-cores:Clash.Cores.Xilinx± modules make use of the IP instantiating functionality; XDC metadata functionality is not currently used as the IP is already packaged with correct constraints by Vivado.âMore documentation about the Tcl Connector and the Clash<->Tcl API will be made available later.ßIn addition to this module, you can also write a copy of the Tcl script to a file by invoking Æcabal run clash-lib:static-files -- --tcl-connector clashConnector.tclÏ Ï 1¾(C) 2015-2016, University of Twente, 2017 , Myrtle Software Ltd, Google Inc., 2021-2022, QBayLogic B.V. 2022 , Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<ÉÐÑÖ×Ùâì¡$(Ñ  clash-libInitial state for state monadÒ  clash-lib"What HDL is the backend generatingÓ  clash-lib&Location for the primitive definitionsÔ  clash-libíName of backend, used for directory to put output files in. Should be constant function / ignore argument.Õ  clash-lib"File extension for target langaugeÖ  clash-lib!Get the set of types out of state×  clash-lib$Generate HDL for a Netlist componentØ  clash-libÈGenerate a HDL package containing type definitions for the given HWTypesÙ  clash-lib-Convert a Netlist HWType to a target HDL typeÚ  clash-lib+Query what kind of type a given HDL type isÛ  clash-libNone( &'(/02356789:;<>ÀÁÂÄÇÉÎÐÑÔÖ×Ùàâèì빞{ clash-libþThe usage of a signal refers to how the signal is written to in netlist. This is used to determine if the signal should be a wire or reg in (System)Verilog, or a signal or variable in VHDL.| clash-lib