commit | d91831ff0fbcd59519019ae67687eb5122ef9a75 | [log] [tgz] |
---|---|---|
author | Eunchan Kim <eunchan@google.com> | Fri Oct 25 13:24:36 2019 -0700 |
committer | Eunchan Kim <eunchan@google.com> | Fri Oct 25 15:19:03 2019 -0700 |
tree | 1ea7e4d519e1616f2230e8cb71b325a5daff8986 | |
parent | e2dc7da55c962d5c9e76e2c06cdd24f6b8185160 [diff] |
[prim/packer] Enhance the behavior based on FPV result Problem 1: `prim_packer` did not assert `valid_o` even it has enough data to send out on some corner case when `ready_i` is de-asserted. Lost the previous commit message. So let it be short. `prim_packer` is a primitive module to pack incoming data with mask into `OutW` bit-width signal and send out to the output port. While preparing FPV environment, a new assertion was added: // If input mask is greater than output width, valid should be // asserted `ASSERT(ValidOAssertedForInputGTEOutW_A, valid_i && ($countones(mask_i) >= OutW) |-> valid_o, clk_i, !rst_ni) FPV catches a corner case based on this assertion. When the output port lowered `ready_i`, the module stores incoming request into the internal registers. Then it increases `pos` pointer value by `InW`. At the next cycle, it is expected to keep asserting the `valid_o` as it has data to send out. As `pos_next` is wrapped around in next cycle if there is more incoming data, the `valid_next` is lowered. Resolution: Now `prim_packer` considers `pos` value to assert `valid_o` prior to compare `pos_next`. Problem 2: `ready_o` falsely asserted as `pos_next` wrapped around. This issue is similar with the Problem 1. Problem 1 didn't cause any functionally incorrect behavior. This problem causes an issue. As it let the design latch the data even doesn't have sufficient storage inside. Resolution: `ready_next` logic doesn't look `pos_next` but only looks at `pos`. If `pos` is less than `OutW`, it has enough internal storage to store incoming packet. Also, remind that if output port acked the outgoing data, it can always store incoming data. This is related to #19
This repository contains hardware, software and utilities written as part of the OpenTitan project. It is structured as monolithic repository, or “monorepo”, where all components live in one repository.
The project contains comprehensive documentation of all IPs and tools. You can either access it online or build it locally by following the steps below.
$ sudo apt install python3 python3-pip $ pip3 install --user -r python-requirements.txt
$ ./util/build_docs.py --preview
This compiles the documentation into ./opentitan-docs
and starts a local server, which allows you to access the documentation at http://127.0.0.1:5500.
Have a look at CONTRIBUTING.md for guidelines how to contribute code to this repository.
Unless otherwise noted, everything in this repository is covered by the Apache License, Version 2.0 (see LICENSE for full text).