[prim] Add generic and Xilinx-specific xor2 primitives
Signed-off-by: Pirmin Vogel <vogelpi@lowrisc.org>
diff --git a/hw/ip/prim/prim.core b/hw/ip/prim/prim.core
index b98b906..63522fd 100644
--- a/hw/ip/prim/prim.core
+++ b/hw/ip/prim/prim.core
@@ -24,6 +24,7 @@
- lowrisc:prim:alert
- lowrisc:prim:subreg
- lowrisc:prim:cipher
+ - lowrisc:prim:xor2
files:
- rtl/prim_clock_gating_sync.sv
- rtl/prim_esc_pkg.sv
diff --git a/hw/ip/prim/prim_xor2.core b/hw/ip/prim/prim_xor2.core
new file mode 100644
index 0000000..83c459e
--- /dev/null
+++ b/hw/ip/prim/prim_xor2.core
@@ -0,0 +1,46 @@
+CAPI=2:
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+
+name: "lowrisc:prim:xor2"
+description: "Generic 2-input xor"
+filesets:
+ primgen_dep:
+ depend:
+ - lowrisc:prim:prim_pkg
+ - lowrisc:prim:primgen
+
+ files_verilator_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+ files:
+ file_type: vlt
+
+ files_ascentlint_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+ file_type: waiver
+
+ files_veriblelint_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+
+generate:
+ impl:
+ generator: primgen
+ parameters:
+ prim_name: xor2
+
+targets:
+ default:
+ filesets:
+ - tool_verilator ? (files_verilator_waiver)
+ - tool_ascentlint ? (files_ascentlint_waiver)
+ - tool_veriblelint ? (files_veriblelint_waiver)
+ - primgen_dep
+ generate:
+ - impl
diff --git a/hw/ip/prim_generic/prim_generic_xor2.core b/hw/ip/prim_generic/prim_generic_xor2.core
new file mode 100644
index 0000000..3fa56ce
--- /dev/null
+++ b/hw/ip/prim_generic/prim_generic_xor2.core
@@ -0,0 +1,39 @@
+CAPI=2:
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+
+name: "lowrisc:prim_generic:xor2"
+description: "Generic 2-input xor"
+filesets:
+ files_rtl:
+ files:
+ - rtl/prim_generic_xor2.sv
+ file_type: systemVerilogSource
+
+ files_verilator_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+ files:
+ file_type: vlt
+
+ files_ascentlint_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+ files:
+ file_type: waiver
+
+ files_veriblelint_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+
+targets:
+ default:
+ filesets:
+ - tool_verilator ? (files_verilator_waiver)
+ - tool_ascentlint ? (files_ascentlint_waiver)
+ - tool_veriblelint ? (files_veriblelint_waiver)
+ - files_rtl
diff --git a/hw/ip/prim_generic/rtl/prim_generic_xor2.sv b/hw/ip/prim_generic/rtl/prim_generic_xor2.sv
new file mode 100644
index 0000000..8282e8b
--- /dev/null
+++ b/hw/ip/prim_generic/rtl/prim_generic_xor2.sv
@@ -0,0 +1,17 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+`include "prim_assert.sv"
+
+module prim_generic_xor2 #(
+ parameter int Width = 1
+) (
+ input [Width-1:0] in0_i,
+ input [Width-1:0] in1_i,
+ output logic [Width-1:0] out_o
+);
+
+ assign out_o = in0_i ^ in1_i;
+
+endmodule
diff --git a/hw/ip/prim_xilinx/prim_xilinx_xor2.core b/hw/ip/prim_xilinx/prim_xilinx_xor2.core
new file mode 100644
index 0000000..ff3fc7d
--- /dev/null
+++ b/hw/ip/prim_xilinx/prim_xilinx_xor2.core
@@ -0,0 +1,39 @@
+CAPI=2:
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+
+name: "lowrisc:prim_xilinx:xor2"
+description: "Xilinx 2-input xor"
+filesets:
+ files_rtl:
+ files:
+ - rtl/prim_xilinx_xor2.sv
+ file_type: systemVerilogSource
+
+ files_verilator_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+ files:
+ file_type: vlt
+
+ files_ascentlint_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+ files:
+ file_type: waiver
+
+ files_veriblelint_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+
+targets:
+ default:
+ filesets:
+ - tool_verilator ? (files_verilator_waiver)
+ - tool_ascentlint ? (files_ascentlint_waiver)
+ - tool_veriblelint ? (files_veriblelint_waiver)
+ - files_rtl
diff --git a/hw/ip/prim_xilinx/rtl/prim_xilinx_xor2.sv b/hw/ip/prim_xilinx/rtl/prim_xilinx_xor2.sv
new file mode 100644
index 0000000..e522a19
--- /dev/null
+++ b/hw/ip/prim_xilinx/rtl/prim_xilinx_xor2.sv
@@ -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
+
+`include "prim_assert.sv"
+
+module prim_xilinx_xor2 #(
+ parameter int Width = 1
+) (
+ input [Width-1:0] in0_i,
+ input [Width-1:0] in1_i,
+ // Prevent Vivado from optimizing this signal away.
+ (* keep = "true" *) output logic [Width-1:0] out_o
+);
+
+ assign out_o = in0_i ^ in1_i;
+
+endmodule