summaryrefslogtreecommitdiff
path: root/rtl/if_common
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-05-05 18:45:11 -0600
committerAlejandro Soto <alejandro@34project.org>2024-05-05 18:45:11 -0600
commit638b75fb4c8fdc3c9d3a208f6bd9976841bc0928 (patch)
tree3f26dad5958d6713d942b53b8c0bf62e003565a3 /rtl/if_common
parent1ffcdb62cd7e95ccd3f971d0b5cb2e617e1481b2 (diff)
rtl/if_common: initial commit, moved out of gfx
Diffstat (limited to 'rtl/if_common')
-rw-r--r--rtl/if_common/if_axib.sv80
-rw-r--r--rtl/if_common/if_axil.sv61
-rw-r--r--rtl/if_common/if_axil2regblock.sv30
-rw-r--r--rtl/if_common/if_beats.sv29
-rw-r--r--rtl/if_common/if_pkts.sv27
-rw-r--r--rtl/if_common/if_shake.sv24
-rw-r--r--rtl/if_common/mod.mk3
7 files changed, 254 insertions, 0 deletions
diff --git a/rtl/if_common/if_axib.sv b/rtl/if_common/if_axib.sv
new file mode 100644
index 0000000..6db8518
--- /dev/null
+++ b/rtl/if_common/if_axib.sv
@@ -0,0 +1,80 @@
+// AXI4 con burst
+interface if_axib
+#(int WIDTH = 32);
+
+ logic awvalid,
+ awready;
+ logic[7:0] awlen;
+ logic[1:0] awburst;
+ logic[WIDTH - 1:0] awaddr;
+
+ logic wlast;
+ logic wvalid;
+ logic wready;
+ logic[WIDTH - 1:0] wdata;
+
+ logic bvalid;
+ logic bready;
+
+ logic arvalid,
+ arready;
+ logic[7:0] arlen;
+ logic[1:0] arburst;
+ logic[WIDTH - 1:0] araddr;
+
+ logic rlast;
+ logic rvalid;
+ logic rready;
+ logic[WIDTH - 1:0] rdata;
+
+ modport m
+ (
+ input awready,
+ wready,
+ bvalid,
+ arready,
+ rlast,
+ rvalid,
+ rdata,
+
+ output awlen,
+ awburst,
+ awvalid,
+ awaddr,
+ wlast,
+ wvalid,
+ wdata,
+ bready,
+ arlen,
+ arburst,
+ arvalid,
+ araddr,
+ rready
+ );
+
+ modport s
+ (
+ input awlen,
+ awburst,
+ awvalid,
+ awaddr,
+ wlast,
+ wvalid,
+ wdata,
+ bready,
+ arlen,
+ arburst,
+ arvalid,
+ araddr,
+ rready,
+
+ output awready,
+ wready,
+ bvalid,
+ arready,
+ rlast,
+ rvalid,
+ rdata
+ );
+
+endinterface
diff --git a/rtl/if_common/if_axil.sv b/rtl/if_common/if_axil.sv
new file mode 100644
index 0000000..cf67e3f
--- /dev/null
+++ b/rtl/if_common/if_axil.sv
@@ -0,0 +1,61 @@
+// AXI4-Lite, sin wstrb ni axprot
+interface if_axil
+#(int WIDTH = 32);
+
+ logic awvalid;
+ logic awready;
+ logic[WIDTH - 1:0] awaddr;
+
+ logic wvalid;
+ logic wready;
+ logic[WIDTH - 1:0] wdata;
+
+ logic bvalid;
+ logic bready;
+
+ logic arvalid;
+ logic arready;
+ logic[WIDTH - 1:0] araddr;
+
+ logic rvalid;
+ logic rready;
+ logic[WIDTH - 1:0] rdata;
+
+ modport m
+ (
+ input awready,
+ wready,
+ bvalid,
+ arready,
+ rvalid,
+ rdata,
+
+ output awvalid,
+ awaddr,
+ wvalid,
+ wdata,
+ bready,
+ arvalid,
+ araddr,
+ rready
+ );
+
+ modport s
+ (
+ input awvalid,
+ awaddr,
+ wvalid,
+ wdata,
+ bready,
+ arvalid,
+ araddr,
+ rready,
+
+ output awready,
+ wready,
+ bvalid,
+ arready,
+ rvalid,
+ rdata
+ );
+endinterface
diff --git a/rtl/if_common/if_axil2regblock.sv b/rtl/if_common/if_axil2regblock.sv
new file mode 100644
index 0000000..d3c20d9
--- /dev/null
+++ b/rtl/if_common/if_axil2regblock.sv
@@ -0,0 +1,30 @@
+module if_axil2regblock
+(
+ if_axil.s axis,
+ axi4lite_intf.master axim
+);
+
+ assign axis.rdata = axim.RDATA;
+ assign axis.rvalid = axim.RVALID;
+ assign axis.bvalid = axim.BVALID;
+ assign axis.wready = axim.WREADY;
+ assign axis.arready = axim.ARREADY;
+ assign axis.awready = axim.AWREADY;
+
+ assign axim.AWVALID = axis.awvalid;
+ assign axim.AWADDR = axis.awaddr[$bits(axim.AWADDR) - 1:0];
+ assign axim.AWPROT = '0;
+
+ assign axim.WVALID = axis.wvalid;
+ assign axim.WDATA = axis.wdata;
+ assign axim.WSTRB = '1;
+
+ assign axim.BREADY = axis.bready;
+
+ assign axim.ARVALID = axis.arvalid;
+ assign axim.ARADDR = axis.araddr[$bits(axim.ARADDR) - 1:0];
+ assign axim.ARPROT = '0;
+
+ assign axim.RREADY = axis.rready;
+
+endmodule
diff --git a/rtl/if_common/if_beats.sv b/rtl/if_common/if_beats.sv
new file mode 100644
index 0000000..f9e58e9
--- /dev/null
+++ b/rtl/if_common/if_beats.sv
@@ -0,0 +1,29 @@
+interface if_beats
+#(int WIDTH = 32);
+
+ logic[WIDTH - 1:0] data;
+ logic ready;
+ logic valid;
+
+ modport tx
+ (
+ input ready,
+ output data,
+ valid
+ );
+
+ modport rx
+ (
+ input data,
+ valid,
+ output ready
+ );
+
+ modport peek
+ (
+ input data,
+ ready,
+ valid
+ );
+
+endinterface
diff --git a/rtl/if_common/if_pkts.sv b/rtl/if_common/if_pkts.sv
new file mode 100644
index 0000000..b6e5b0b
--- /dev/null
+++ b/rtl/if_common/if_pkts.sv
@@ -0,0 +1,27 @@
+interface if_pkts
+#(int WIDTH = 32);
+
+ logic tlast;
+ logic tready;
+ logic tvalid;
+ logic[WIDTH - 1:0] tdata;
+
+ modport tx
+ (
+ input tready,
+
+ output tdata,
+ tlast,
+ tvalid
+ );
+
+ modport rx
+ (
+ input tdata,
+ tlast,
+ tvalid,
+
+ output tready
+ );
+
+endinterface
diff --git a/rtl/if_common/if_shake.sv b/rtl/if_common/if_shake.sv
new file mode 100644
index 0000000..8ec5a73
--- /dev/null
+++ b/rtl/if_common/if_shake.sv
@@ -0,0 +1,24 @@
+interface if_shake;
+
+ logic ready;
+ logic valid;
+
+ modport tx
+ (
+ input ready,
+ output valid
+ );
+
+ modport rx
+ (
+ input valid,
+ output ready
+ );
+
+ modport peek
+ (
+ input ready,
+ valid
+ );
+
+endinterface
diff --git a/rtl/if_common/mod.mk b/rtl/if_common/mod.mk
new file mode 100644
index 0000000..e60abc4
--- /dev/null
+++ b/rtl/if_common/mod.mk
@@ -0,0 +1,3 @@
+define core
+ $(this)/rtl_dirs := .
+endef