{"id":13537377,"url":"https://github.com/pulp-platform/common_cells","last_synced_at":"2026-02-07T23:35:42.204Z","repository":{"id":29260125,"uuid":"118764818","full_name":"pulp-platform/common_cells","owner":"pulp-platform","description":"Common SystemVerilog components","archived":false,"fork":false,"pushed_at":"2025-12-19T14:47:53.000Z","size":851,"stargazers_count":704,"open_issues_count":44,"forks_count":189,"subscribers_count":16,"default_branch":"master","last_synced_at":"2026-01-30T22:59:15.618Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"SystemVerilog","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pulp-platform.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-01-24T12:49:56.000Z","updated_at":"2026-01-27T15:52:19.000Z","dependencies_parsed_at":"2024-06-17T18:44:53.311Z","dependency_job_id":"a9e93c12-1c97-4395-a200-e5be8c25efcc","html_url":"https://github.com/pulp-platform/common_cells","commit_stats":null,"previous_names":[],"tags_count":80,"template":false,"template_full_name":null,"purl":"pkg:github/pulp-platform/common_cells","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fcommon_cells","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fcommon_cells/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fcommon_cells/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fcommon_cells/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pulp-platform","download_url":"https://codeload.github.com/pulp-platform/common_cells/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fcommon_cells/sbom","scorecard":{"id":749354,"data":{"date":"2025-08-11","repo":{"name":"github.com/pulp-platform/common_cells","commit":"1e384c932576267f55ccc4a111e14b33d988e3fd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.7,"checks":[{"name":"Maintained","score":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":8,"reason":"Found 24/30 approved changesets -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/gitlab-ci.yml:1","Warn: no topLevel permission defined: .github/workflows/lint.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/gitlab-ci.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/pulp-platform/common_cells/gitlab-ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/pulp-platform/common_cells/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/pulp-platform/common_cells/lint.yml/master?enable=pin","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T19:48:04.566Z","repository_id":29260125,"created_at":"2025-08-22T19:48:04.567Z","updated_at":"2025-08-22T19:48:04.567Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29212752,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T23:14:30.912Z","status":"ssl_error","status_checked_at":"2026-02-07T23:14:17.253Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T09:00:58.297Z","updated_at":"2026-02-07T23:35:42.189Z","avatar_url":"https://github.com/pulp-platform.png","language":"SystemVerilog","funding_links":[],"categories":["Libraries","SystemVerilog"],"sub_categories":[],"readme":"[![Build Status](https://github.com/pulp-platform/common_cells/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/pulp-platform/common_cells/actions/workflows/ci.yml?query=branch%3Amaster)\n[![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/pulp-platform/common_cells?color=blue\u0026label=current\u0026sort=semver)](CHANGELOG.md)\n[![SHL-0.51 license](https://img.shields.io/badge/license-SHL--0.51-green)](LICENSE)\n\n# Common Cells Repository\n\nMaintainer: Nils Wistoff \u003cnwistoff@iis.ee.ethz.ch\u003e\n\nThis repository contains commonly used cells and headers for use in various projects.\n\n## Cell Contents\n\nThis repository currently contains the following cells, ordered by categories.\nPlease note that cells with status *deprecated* are not to be used for new designs and only serve to provide compatibility with old code.\n\n### Clocks and Resets\n\n| Name                    | Description                                                                           | Status       | Superseded By |\n|-------------------------|---------------------------------------------------------------------------------------|--------------|---------------|\n| `clk_int_div`           | Arbitrary integer clock divider with config interface and 50% output clock duty cycle | active       |               |\n| `clk_int_div_static`    | A convenience wrapper around `clk_int_div` with static division factor.               | active       |               |\n| `clk_div`               | Clock divider with integer divisor                                                    | *deprecated* | `clk_int_div` |\n| `clock_divider`         | Clock divider with configuration registers                                            | *deprecated* | `clk_int_div` |\n| `clock_divider_counter` | Clock divider using a counter                                                         | *deprecated* | `clk_int_div` |\n| `rstgen`                | Reset synchronizer                                                                    | active       |               |\n| `rstgen_bypass`         | Reset synchronizer with dedicated test reset bypass                                   | active       |               |\n\n### Clock Domains and Asynchronous Crossings\n\n| Name                           | Description                                                                                   | Status       | Superseded By |\n|--------------------------------|-----------------------------------------------------------------------------------------------|--------------|---------------|\n| `cdc_4phase`                   | Clock domain crossing using 4-phase handshake, with ready/valid interface                     | active       |               |\n| `cdc_2phase`                   | Clock domain crossing using two-phase handshake, with ready/valid interface                   | active       |               |\n| `cdc_2phase_clearable`         | Identical to `cdc_2phase` but supports one-sided async/sync resetting of either src or dst    | active       |               |\n| `cdc_fifo_2phase`              | Clock domain crossing FIFO using two-phase handshake, with ready/valid interface              | active       |               |\n| `cdc_fifo_gray`                | Clock domain crossing FIFO using a gray-counter, with ready/valid interface                   | active       |               |\n| `cdc_fifo_gray_clearable`      | Identical to `cdc_fifo_gray` but supports one-sided async/sync resetting of either src or dst | active       |               |\n| `cdc_reset_ctrlr`              | Lock-step reset sequencer accross clock domains (internally used by clearable CDCs)           | active       |               |\n| `clk_mux_glitch_free`          | A glitch-free clock multiplexer with parametrizeable number of inputs.                        | active       |               |\n| `edge_detect`                  | Rising/falling edge detector                                                                  | active       |               |\n| `edge_propagator`              | Propagates a single-cycle pulse across an asynchronous clock domain crossing                  | active       |               |\n| `edge_propagator_ack`          | `edge_propagator` with sender-synchronous acknowledge pin (flags received pulse)              | active       |               |\n| `edge_propagator_rx`           | Receive slice of `edge_propagator`, requires only the receiver clock                          | active       |               |\n| `edge_propagator_tx`           | Transmit slice of `edge_propagator`, requires only the sender clock                           | active       |               |\n| `isochronous_spill_register`   | Isochronous clock domain crossing and full handshake (like `spill_register`)                  | active       |               |\n| `isochronous_4phase_handshake` | Isochronous four-phase handshake.                                                             | active       |               |\n| `pulp_sync`                    | Serial line synchronizer                                                                      | *deprecated* | `sync`        |\n| `pulp_sync_wedge`              | Serial line synchronizer with edge detector                                                   | *deprecated* | `sync_wedge`  |\n| `serial_deglitch`              | Serial line deglitcher                                                                        | active       |               |\n| `sync`                         | Serial line synchronizer                                                                      | active       |               |\n| `sync_wedge`                   | Serial line synchronizer with edge detector                                                   | active       |               |\n\n### Counters and Shift Registers\n\n| Name                | Description                                                       | Status       | Superseded By |\n| ------------------- | ----------------------------------------------------------------- | ------------ | ------------- |\n| `counter`           | Generic up/down counter with overflow detection                   | active       |               |\n| `credit_counter`    | Up/down counter for credit                                        | active       |               |\n| `delta_counter`     | Up/down counter with variable delta and overflow detection        | active       |               |\n| `generic_LFSR_8bit` | 8-bit linear feedback shift register (LFSR)                       | *deprecated* | `lfsr_8bit`   |\n| `lfsr_8bit`         | 8-bit linear feedback shift register (LFSR)                       | active       |               |\n| `lfsr_16bit`        | 16-bit linear feedback shift register (LFSR)                      | active       |               |\n| `lfsr`              | 4...64-bit parametric Galois LFSR with optional whitening feature | active       |               |\n| `max_counter`       | Up/down counter with variable delta that tracks its maximum value | active       |               |\n| `mv_filter`         | **ZARUBAF ADD DESCRIPTION**                                       | active       |               |\n\n### Data Path Elements\n\n| Name                       | Description                                                                                               | Status       | Superseded By |\n|----------------------------|-----------------------------------------------------------------------------------------------------------|--------------|---------------|\n| `addr_decode`              | Address map decoder                                                                                       | active       |               |\n| `addr_decode_dync`         | Address map decoder extended to support dynamic online configuration                                      | active       |               |\n| `addr_decode_napot`        | Address map decoder using naturally-aligned power of two (NAPOT) regions                                  | active       |               |\n| `multiaddr_decode`         | Address map decoder using NAPOT regions and allowing for multiple address inputs                          | active       |               |\n| `ecc_decode`               | SECDED Decoder (Single Error Correction, Double Error Detection)                                          | active       |               |\n| `ecc_encode`               | SECDED Encoder (Single Error Correction, Double Error Detection)                                          | active       |               |\n| `binary_to_gray`           | Binary to gray code converter                                                                             | active       |               |\n| `find_first_one`           | Leading-one finder / leading-zero counter                                                                 | *deprecated* | `lzc`         |\n| `gray_to_binary`           | Gray code to binary converter                                                                             | active       |               |\n| `lzc`                      | Leading/trailing-zero counter                                                                             | active       |               |\n| `onehot_to_bin`            | One-hot to binary converter                                                                               | active       |               |\n| `shift_reg`                | Shift register for arbitrary types                                                                        | active       |               |\n| `shift_reg_gated`          | Shift register with ICG for arbitrary types                                                               | active       |               |\n| `rr_arb_tree`              | Round-robin arbiter for req/gnt and vld/rdy interfaces with optional priority                             | active       |               |\n| `rrarbiter`                | Round-robin arbiter for req/ack interface with look-ahead                                                 | *deprecated* | `rr_arb_tree` |\n| `prioarbiter`              | Priority arbiter arbiter for req/ack interface with look-ahead                                            | *deprecated* | `rr_arb_tree` |\n| `fall_through_register`    | Fall-through register with ready/valid interface                                                          | active       |               |\n| `spill_register_flushable` | Register with ready/valid interface to cut all combinational interface paths and additional flush signal. | active       |               |\n| `spill_register`           | Register with ready/valid interface to cut all combinational interface paths                              | active       |               |\n| `stream_arbiter`           | Round-robin arbiter for ready/valid stream interface                                                      | active       |               |\n| `stream_arbiter_flushable` | Round-robin arbiter for ready/valid stream interface and flush functionality                              | active       |               |\n| `stream_demux`             | Ready/valid interface demultiplexer                                                                       | active       |               |\n| `lossy_valid_to_stream`    | Convert Valid-only to ready/valid by updating in-flight transaction                                       | active       |               |\n| `stream_join`              | Ready/valid handshake join multiple to one common                                                         | active       |               |\n| `stream_join_dynamic`      | Ready/valid handshake join multiple to one common, dynamically configurable subset selection              | active       |               |\n| `stream_mux`               | Ready/valid interface multiplexer                                                                         | active       |               |\n| `stream_register`          | Register with ready/valid interface                                                                       | active       |               |\n| `stream_fork`              | Ready/valid fork                                                                                          | active       |               |\n| `stream_fork_dynamic`      | Ready/valid fork, with selection mask for partial forking                                                 | active       |               |\n| `stream_filter`            | Ready/valid filter                                                                                        | active       |               |\n| `stream_delay`             | Randomize or delay ready/valid interface                                                                  | active       |               |\n| `stream_to_mem`            | Use memories without flow control for output data in streams.                                             | active       |               |\n| `stream_xbar`              | Fully connected crossbar with ready/valid interface.                                                      | active       |               |\n| `stream_omega_net`         | One-way stream omega-net with ready/valid interface. Isomorphic to a butterfly.                           | active       |               |\n| `stream_throttle`          | Restrict the number of outstanding transfers in a stream.                                                 | active       |               |\n| `sub_per_hash`             | Substitution-permutation hash function                                                                    | active       |               |\n| `popcount`                 | Combinatorial popcount (hamming weight)                                                                   | active       |               |\n| `mem_to_banks_detailed`    | Split memory access over multiple parallel banks with detailed response signals                           | active       |               |\n| `mem_to_banks`             | Split memory access over multiple parallel banks                                                          | active       |               |\n\n### Data Structures\n\n| Name                       | Description                                                                 | Status       | Superseded By |\n| -------------------------- | --------------------------------------------------------------------------- | ------------ | ------------- |\n| `cb_filter`                | Counting-Bloom-Filter with combinational lookup                             | active       |               |\n| `fifo`                     | FIFO register with upper threshold                                          | *deprecated* | `fifo_v3`     |\n| `fifo_v2`                  | FIFO register with upper and lower threshold                                | *deprecated* | `fifo_v3`     |\n| `fifo_v3`                  | FIFO register with generic fill counts                                      | active       |               |\n| `passthrough_stream_fifo`  | FIFO register with ready/valid interface and same-cycle push/pop when full  | active       |               |\n| `stream_fifo`              | FIFO register with ready/valid interface                                    | active       |               |\n| `stream_fifo_optimal_wrap` | Wrapper that optimally selects either a spill register or a FIFO            | active       |               |\n| `generic_fifo`             | FIFO register without thresholds                                            | *deprecated* | `fifo_v3`     |\n| `generic_fifo_adv`         | FIFO register without thresholds                                            | *deprecated* | `fifo_v3`     |\n| `sram`                     | SRAM behavioral model                                                       | active       |               |\n| `plru_tree`                | Pseudo least recently used tree                                             | active       |               |\n| `unread`                   | Empty module to sink unconnected outputs into                               | active       |               |\n| `read`                     | Dummy module that prevents a signal from being removed during synthesis     | active       |               |\n\n\n## Header Contents\n\nThis repository currently contains the following header files.\n\n### RTL Register Macros\n\nThe header file `registers.svh` contains macros that expand to descriptions of registers.\nTo avoid misuse of `always_ff` blocks, only the following macros shall be used to describe sequential behavior.\nThe use of linter rules that flag explicit uses of `always_ff` in source code is encouraged.\n\n|    Macro     |                             Arguments                             |                                Description                                |\n| ------------ | ----------------------------------------------------------------- | ------------------------------------------------------------------------- |\n| `` `FF``     | `q_sig`, `d_sig`, `rst_val`, (`clk_sig`, `arstn_sig`)             | Flip-flop with asynchronous active-low reset                              |\n| `` `FFAR``   | `q_sig`, `d_sig`, `rst_val`, `clk_sig`, `arst_sig`                | Flip-flop with asynchronous active-high reset                             |\n| `` `FFARN``  | `q_sig`, `d_sig`, `rst_val`, `clk_sig`, `arstn_sig`               | *deprecated* Flip-flop with asynchronous active-low reset                 |\n| `` `FFSR``   | `q_sig`, `d_sig`, `rst_val`, `clk_sig`, `rst_sig`                 | Flip-flop with synchronous active-high reset                              |\n| `` `FFSRN``  | `q_sig`, `d_sig`, `rst_val`, `clk_sig`, `rstn_sig`                | Flip-flop with synchronous active-low reset                               |\n| `` `FFNR``   | `q_sig`, `d_sig`, `clk_sig`                                       | Flip-flop without reset                                                   |\n|              |                                                                   |                                                                           |\n| `` `FFL``    | `q_sig`, `d_sig`, `load_ena`, `rst_val`, (`clk_sig`, `arstn_sig`) | Flip-flop with load-enable and asynchronous active-low reset              |\n| `` `FFLAR``  | `q_sig`, `d_sig`, `load_ena`, `rst_val`, `clk_sig`, `arst_sig`    | Flip-flop with load-enable and asynchronous active-high reset             |\n| `` `FFLARN`` | `q_sig`, `d_sig`, `load_ena`, `rst_val`, `clk_sig`, `arstn_sig`   | *deprecated* Flip-flop with load-enable and asynchronous active-low reset |\n| `` `FFLSR``  | `q_sig`, `d_sig`, `load_ena`, `rst_val`, `clk_sig`, `rst_sig`     | Flip-flop with load-enable and synchronous active-high reset              |\n| `` `FFLSRN`` | `q_sig`, `d_sig`, `load_ena`, `rst_val`, `clk_sig`, `rstn_sig`    | Flip-flop with load-enable and synchronous active-low reset               |\n| `` `FFLNR``  | `q_sig`, `d_sig`, `load_ena`, `clk_sig`                           | Flip-flop with load-enable without reset                                  |\n- *The name of the clock and reset signals for implicit variants is `clk_i` and `rst_ni`, respectively.*\n- *Argument suffix `_sig` indicates signal names for present and next state as well as clocks and resets.*\n- *Argument `rst_val` specifies the value literal to be assigned upon reset.*\n- *Argument `load_ena` specifies the boolean expression that forms the load enable of the register.*\n\n### SystemVerilog Assertion Macros\n\nThe header file `assertions.svh` contains macros that expand to assertion blocks.\nThese macros should recduce the effort in writing many assertions and make it\neasier to use them. They are similar to but incompatible with the macros used by [lowrisc](https://github.com/lowRISC/opentitan/blob/master/hw/ip/prim/rtl/prim_assert.sv).\n\n#### Simple Assertion and Cover Macros\n| Macro              | Arguments                                        | Description                                                                |\n| ------------------ | ------------------------------------------------ | -------------------------------------------------------------------------- |\n| `` `ASSERT_I``     | `__name`, `__prop`, (`__desc`)                   | Immediate assertion                                                        |\n| `` `ASSERT_INIT``  | `__name`, `__prop`, (`__desc`)                   | Assertion in initial block. Can be used for things like parameter checking |\n| `` `ASSERT_FINAL`` | `__name`, `__prop`, (`__desc`)                   | Assertion in final block                                                   |\n| `` `ASSERT``       | `__name`, `__prop`, (`__clk`, `__rst`, `__desc`) | Assert a concurrent property directly                                      |\n| `` `ASSERT_NEVER`` | `__name`, `__prop`, (`__clk`, `__rst`, `__desc`) | Assert a concurrent property NEVER happens                                 |\n| `` `ASSERT_KNOWN`` | `__name`, `__sig`, (`__clk`, `__rst`, `__desc`)  | Concurrent clocked assertion with custom error message                     |\n| `` `COVER``        | `__name`, `__prop`, (`__clk`, `__rst`)           | Cover a concurrent property                                                |\n- *The name of the clock and reset signals for implicit variants is `clk_i` and `rst_ni`, respectively.*\n- *`__desc` is an optional string argument describing the failure causing the assertion to be violated that is embedded into the error report and defaults to `\"\"`.*\n\n#### Complex Assertion Macros\n| Macro                 | Arguments                                                    | Description                                                                                       |\n| --------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |\n| `` `ASSERT_PULSE``    | `__name`, `__sig`, (`__clk`, `__rst`, `__desc`)              | Assert that signal is an active-high pulse with pulse length of 1 clock cycle                     |\n| `` `ASSERT_IF``       | `__name`, `__prop`, `__enable`, (`__clk`, `__rst`, `__desc`) | Assert that a property is true only when an enable signal is set                                  |\n| `` `ASSERT_KNOWN_IF`` | `__name`, `__sig`, `__enable`, (`__clk`, `__rst`, `__desc`)  | Assert that signal has a known value (each bit is either '0' or '1') after reset if enable is set |\n- *The name of the clock and reset signals for implicit variants is `clk_i` and `rst_ni`, respectively.*\n- *`__desc` is an optional string argument describing the failure causing the assertion to be violated that is embedded into the error report and defaults to `\"\"`.*\n\n#### Assumption Macros\n\n| Macro          | Arguments                                        | Description                  |\n| -------------- | ------------------------------------------------ | ---------------------------- |\n| `` `ASSUME``   | `__name`, `__prop`, (`__clk`, `__rst`, `__desc`) | Assume a concurrent property |\n| `` `ASSUME_I`` | `__name`, `__prop`, (`__desc`)                   | Assume an immediate property |\n- *The name of the clock and reset signals for implicit variants is `clk_i` and `rst_ni`, respectively.*\n- *`__desc` is an optional string argument describing the failure causing the assertion to be violated that is embedded into the error report and defaults to `\"\"`.*\n\n#### Formal Verification Macros\n\n| Macro              | Arguments                                        | Description                                                  |\n| ------------------ | ------------------------------------------------ | ------------------------------------------------------------ |\n| `` `ASSUME_FPV``   | `__name`, `__prop`, (`__clk`, `__rst`, `__desc`) | Assume a concurrent property during formal verification only |\n| `` `ASSUME_I_FPV`` | `__name`, `__prop`, (`__desc`)                   | Assume a concurrent property during formal verification only |\n| `` `COVER_FPV``    | `__name`, `__prop`, (`__clk`, `__rst`)           | Cover a concurrent property during formal verification       |\n- *The name of the clock and reset signals for implicit variants is `clk_i` and `rst_ni`, respectively.*\n- *`__desc` is an optional string argument describing the failure causing the assertion to be violated that is embedded into the error report and defaults to `\"\"`.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulp-platform%2Fcommon_cells","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpulp-platform%2Fcommon_cells","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulp-platform%2Fcommon_cells/lists"}