forked from lowRISC/ibex
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use vendored-in primitives from OpenTitan
Instead of using copies of primitives from OpenTitan, vendor the files in directly from OpenTitan, and use them. Benefits: - Less potential for diverging code between OpenTitan and Ibex, causing problems when importing Ibex into OT. - Use of the abstract primitives instead of the generic ones. The abstract primitives are replaced during synthesis time with target-dependent implementations. For simulation, nothing changes. For synthesis for a given target technology (e.g. a specific ASIC or FPGA technology), the primitives system can be instructed to choose optimized versions (if available). This is most relevant for the icache, which hard-coded the generic SRAM primitive before. This primitive is always implemented as registers. By using the abstract primitive (prim_ram_1p) instead, the RAMs can be replaced with memory-compiler-generated ones if necessary. There are no real draw-backs, but a couple points to be aware of: - Our ram_1p and ram_2p implementations are kept as wrapper around the primitives, since their interface deviates slightly from the one in prim_ram*. This also includes a rather unfortunate naming confusion around rvalid, which means "read data valid" in the OpenTitan advanced RAM primitives (prim_ram_1p_adv for example), but means "ack" in PULP-derived IP and in our bus implementation. - The core_ibex UVM DV doesn't use FuseSoC to generate its file list, but uses a hard-coded list in `ibex_files.f` instead. Since the dynamic primitives system requires the use of FuseSoC we need to provide a stop-gap until this file is removed. Issue lowRISC#893 tracks progress on that. - Dynamic primitives depend no a not-yet-merged feature of FuseSoC (olofk/fusesoc#391). We depend on the same functionality in OpenTitan and have instructed users to use a patched branch of FuseSoC for a long time through `python-requirements.txt`, so no action is needed for users which are either successfully interacting with the OpenTitan source code, or have followed our instructions. All other users will see a reasonably descriptive error message during a FuseSoC run. - This commit is massive, but there are no good ways to split it into bisectable, yet small, chunks. I'm sorry. Reviewers can safely ignore all code in `vendor/lowrisc_ip`, it's an import from OpenTitan. - The check_tool_requirements tooling isn't easily vendor-able from OpenTitan at the moment. I've filed lowRISC/opentitan#2309 to get that sorted. - The LFSR primitive doesn't have a own core file, forcing us to include the catch-all `lowrisc:prim:all` core. I've filed lowRISC/opentitan#2310 to get that sorted.
- Loading branch information
Showing
190 changed files
with
11,808 additions
and
252 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
// Copyright lowRISC contributors. | ||
// Licensed under the Apache License, Version 2.0, see LICENSE for details. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
// Abstract primitives wrapper. | ||
// | ||
// This file is a stop-gap until the DV file list is generated by FuseSoC. | ||
// Its contents are taken from the file which would be generated by FuseSoC. | ||
// https://github.com/lowRISC/ibex/issues/893 | ||
|
||
`ifndef PRIM_DEFAULT_IMPL | ||
`define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric | ||
`endif | ||
|
||
module prim_clock_gating ( | ||
input clk_i, | ||
input en_i, | ||
input test_en_i, | ||
output logic clk_o | ||
); | ||
parameter prim_pkg::impl_e Impl = `PRIM_DEFAULT_IMPL; | ||
|
||
if (Impl == prim_pkg::ImplGeneric) begin : gen_generic | ||
prim_generic_clock_gating u_impl_generic ( | ||
.* | ||
); | ||
end else if (Impl == prim_pkg::ImplXilinx) begin : gen_xilinx | ||
prim_xilinx_clock_gating u_impl_xilinx ( | ||
.* | ||
); | ||
end else begin : gen_failure | ||
// TODO: Find code that works across tools and causes a compile failure | ||
end | ||
|
||
endmodule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// Copyright lowRISC contributors. | ||
// Licensed under the Apache License, Version 2.0, see LICENSE for details. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
// | ||
// Constants for use in primitives | ||
// | ||
// This file is a stop-gap until the DV file list is generated by FuseSoC. | ||
// Its contents are taken from the file which would be generated by FuseSoC. | ||
// https://github.com/lowRISC/ibex/issues/893 | ||
|
||
package prim_pkg; | ||
|
||
// Implementation target specialization | ||
typedef enum integer { | ||
ImplGeneric, | ||
ImplXilinx | ||
} impl_e; | ||
endpackage : prim_pkg |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// Copyright lowRISC contributors. | ||
// Licensed under the Apache License, Version 2.0, see LICENSE for details. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
// Abstract primitives wrapper. | ||
// | ||
// This file is a stop-gap until the DV file list is generated by FuseSoC. | ||
// Its contents are taken from the file which would be generated by FuseSoC. | ||
// https://github.com/lowRISC/ibex/issues/893 | ||
|
||
`ifndef PRIM_DEFAULT_IMPL | ||
`define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric | ||
`endif | ||
|
||
module prim_ram_1p #( | ||
parameter int Width = 32, // bit | ||
parameter int Depth = 128, | ||
parameter int DataBitsPerMask = 1, // Number of data bits per bit of write mask | ||
localparam int Aw = $clog2(Depth) // derived parameter | ||
) ( | ||
input logic clk_i, | ||
|
||
input logic req_i, | ||
input logic write_i, | ||
input logic [Aw-1:0] addr_i, | ||
input logic [Width-1:0] wdata_i, | ||
input logic [Width-1:0] wmask_i, | ||
output logic [Width-1:0] rdata_o // Read data. Data is returned one cycle after req_i is high. | ||
); | ||
parameter prim_pkg::impl_e Impl = `PRIM_DEFAULT_IMPL; | ||
|
||
if (Impl == prim_pkg::ImplGeneric) begin : gen_generic | ||
prim_generic_ram_1p u_impl_generic ( | ||
.* | ||
); | ||
end else begin : gen_failure | ||
// TODO: Find code that works across tools and causes a compile failure | ||
end | ||
|
||
endmodule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,3 +9,4 @@ git+https://github.com/lowRISC/edalize.git@ot | |
git+https://github.com/lowRISC/fusesoc.git@ot | ||
|
||
pyyaml | ||
mako |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.