minor update

This commit is contained in:
Blaise Tine 2023-03-23 23:22:56 -04:00
parent 44fdc13cba
commit 874e3e138e
19 changed files with 141 additions and 149 deletions

View file

@ -6,15 +6,14 @@ module VX_afu_wrap #(
parameter C_S_AXI_CTRL_DATA_WIDTH = 32,
parameter C_M_AXI_MEM_ID_WIDTH = 16,
parameter C_M_AXI_MEM_ADDR_WIDTH = 32,
parameter C_M_AXI_MEM_DATA_WIDTH = 512,
parameter C_M_AXI_MEM_NUM_BANKS = 1
parameter C_M_AXI_MEM_DATA_WIDTH = 512
) (
// System signals
input wire ap_clk,
input wire ap_rst_n,
// AXI4 master interface
`GEN_AXI_MEM(0),
`REPEAT (`M_AXI_MEM_NUM_BANKS, GEN_AXI_MEM, REPEAT_COMMA),
// AXI4-Lite slave interface
input wire s_axi_ctrl_awvalid,
@ -37,6 +36,8 @@ module VX_afu_wrap #(
output wire interrupt
);
localparam C_M_AXI_MEM_NUM_BANKS = `M_AXI_MEM_NUM_BANKS;
wire m_axi_mem_awvalid_a [C_M_AXI_MEM_NUM_BANKS];
wire m_axi_mem_awready_a [C_M_AXI_MEM_NUM_BANKS];
wire [C_M_AXI_MEM_ADDR_WIDTH-1:0] m_axi_mem_awaddr_a [C_M_AXI_MEM_NUM_BANKS];
@ -64,7 +65,7 @@ module VX_afu_wrap #(
wire [1:0] m_axi_mem_rresp_a [C_M_AXI_MEM_NUM_BANKS];
// convert memory interface to array
`AXI_MEM_TO_ARRAY(0);
`REPEAT (`M_AXI_MEM_NUM_BANKS, AXI_MEM_TO_ARRAY, REPEAT_SEMICOLON);
wire reset = ~ap_rst_n;

View file

@ -1,32 +1,19 @@
`include "VX_define.vh"
`include "vortex_afu.vh"
`ifndef M_AXI_MEM_NUM_BANKS
`define M_AXI_MEM_NUM_BANKS 1
`endif
`ifndef M_AXI_MEM_ID_WIDTH
`ifdef NDEBUG
`define M_AXI_MEM_ID_WIDTH 20
`else
`define M_AXI_MEM_ID_WIDTH 32
`endif
`endif
module vortex_afu #(
parameter C_S_AXI_CTRL_ADDR_WIDTH = 6,
parameter C_S_AXI_CTRL_DATA_WIDTH = 32,
parameter C_M_AXI_MEM_ID_WIDTH = `M_AXI_MEM_ID_WIDTH,
parameter C_M_AXI_MEM_ADDR_WIDTH = 64,
parameter C_M_AXI_MEM_DATA_WIDTH = `VX_MEM_DATA_WIDTH,
parameter C_M_AXI_MEM_NUM_BANKS = `M_AXI_MEM_NUM_BANKS
parameter C_M_AXI_MEM_DATA_WIDTH = `VX_MEM_DATA_WIDTH
) (
// System signals
input wire ap_clk,
input wire ap_rst_n,
// AXI4 master interface
`GEN_AXI_MEM(0),
`REPEAT (`M_AXI_MEM_NUM_BANKS, GEN_AXI_MEM, REPEAT_COMMA),
// AXI4-Lite slave interface
input wire s_axi_ctrl_awvalid,
@ -60,7 +47,7 @@ module vortex_afu #(
.ap_clk (ap_clk),
.ap_rst_n (ap_rst_n),
`AXI_MEM_ARGS(0),
`REPEAT (`M_AXI_MEM_NUM_BANKS, AXI_MEM_ARGS, REPEAT_COMMA),
.s_axi_ctrl_awvalid (s_axi_ctrl_awvalid),
.s_axi_ctrl_awready (s_axi_ctrl_awready),

View file

@ -1,87 +1,97 @@
`ifndef VORTEX_AFU_VH
`define VORTEX_AFU_VH
`define PP(x) x
`ifndef M_AXI_MEM_NUM_BANKS
`define M_AXI_MEM_NUM_BANKS 1
`endif
`ifndef M_AXI_MEM_ID_WIDTH
`ifdef NDEBUG
`define M_AXI_MEM_ID_WIDTH 20
`else
`define M_AXI_MEM_ID_WIDTH 32
`endif
`endif
`define GEN_AXI_MEM(i) \
output wire m`PP(``i)_axi_mem_awvalid, \
input wire m`PP(``i)_axi_mem_awready, \
output wire [C_M_AXI_MEM_ADDR_WIDTH-1:0] m`PP(``i)_axi_mem_awaddr, \
output wire [C_M_AXI_MEM_ID_WIDTH - 1:0] m`PP(``i)_axi_mem_awid, \
output wire [7:0] m`PP(``i)_axi_mem_awlen, \
output wire m`PP(``i)_axi_mem_wvalid, \
input wire m`PP(``i)_axi_mem_wready, \
output wire [C_M_AXI_MEM_DATA_WIDTH-1:0] m`PP(``i)_axi_mem_wdata, \
output wire [C_M_AXI_MEM_DATA_WIDTH/8-1:0] m`PP(``i)_axi_mem_wstrb, \
output wire m`PP(``i)_axi_mem_wlast, \
output wire m`PP(``i)_axi_mem_arvalid, \
input wire m`PP(``i)_axi_mem_arready, \
output wire [C_M_AXI_MEM_ADDR_WIDTH-1:0] m`PP(``i)_axi_mem_araddr, \
output wire [C_M_AXI_MEM_ID_WIDTH-1:0] m`PP(``i)_axi_mem_arid, \
output wire [7:0] m`PP(``i)_axi_mem_arlen, \
input wire m`PP(``i)_axi_mem_rvalid, \
output wire m`PP(``i)_axi_mem_rready, \
input wire [C_M_AXI_MEM_DATA_WIDTH - 1:0] m`PP(``i)_axi_mem_rdata, \
input wire m`PP(``i)_axi_mem_rlast, \
input wire [C_M_AXI_MEM_ID_WIDTH - 1:0] m`PP(``i)_axi_mem_rid, \
input wire [1:0] m`PP(``i)_axi_mem_rresp, \
input wire m`PP(``i)_axi_mem_bvalid, \
output wire m`PP(``i)_axi_mem_bready, \
input wire [1:0] m`PP(``i)_axi_mem_bresp, \
input wire [C_M_AXI_MEM_ID_WIDTH - 1:0] m`PP(``i)_axi_mem_bid
output wire m``i``_axi_mem_awvalid, \
input wire m``i``_axi_mem_awready, \
output wire [C_M_AXI_MEM_ADDR_WIDTH-1:0] m``i``_axi_mem_awaddr, \
output wire [C_M_AXI_MEM_ID_WIDTH - 1:0] m``i``_axi_mem_awid, \
output wire [7:0] m``i``_axi_mem_awlen, \
output wire m``i``_axi_mem_wvalid, \
input wire m``i``_axi_mem_wready, \
output wire [C_M_AXI_MEM_DATA_WIDTH-1:0] m``i``_axi_mem_wdata, \
output wire [C_M_AXI_MEM_DATA_WIDTH/8-1:0] m``i``_axi_mem_wstrb, \
output wire m``i``_axi_mem_wlast, \
output wire m``i``_axi_mem_arvalid, \
input wire m``i``_axi_mem_arready, \
output wire [C_M_AXI_MEM_ADDR_WIDTH-1:0] m``i``_axi_mem_araddr, \
output wire [C_M_AXI_MEM_ID_WIDTH-1:0] m``i``_axi_mem_arid, \
output wire [7:0] m``i``_axi_mem_arlen, \
input wire m``i``_axi_mem_rvalid, \
output wire m``i``_axi_mem_rready, \
input wire [C_M_AXI_MEM_DATA_WIDTH - 1:0] m``i``_axi_mem_rdata, \
input wire m``i``_axi_mem_rlast, \
input wire [C_M_AXI_MEM_ID_WIDTH - 1:0] m``i``_axi_mem_rid, \
input wire [1:0] m``i``_axi_mem_rresp, \
input wire m``i``_axi_mem_bvalid, \
output wire m``i``_axi_mem_bready, \
input wire [1:0] m``i``_axi_mem_bresp, \
input wire [C_M_AXI_MEM_ID_WIDTH - 1:0] m``i``_axi_mem_bid
`define AXI_MEM_ARGS(i) \
.m`PP(``i)_axi_mem_awvalid(m`PP(``i)_axi_mem_awvalid), \
.m`PP(``i)_axi_mem_awready(m`PP(``i)_axi_mem_awready), \
.m`PP(``i)_axi_mem_awaddr(m`PP(``i)_axi_mem_awaddr), \
.m`PP(``i)_axi_mem_awid(m`PP(``i)_axi_mem_awid), \
.m`PP(``i)_axi_mem_awlen(m`PP(``i)_axi_mem_awlen), \
.m`PP(``i)_axi_mem_wvalid(m`PP(``i)_axi_mem_wvalid), \
.m`PP(``i)_axi_mem_wready(m`PP(``i)_axi_mem_wready), \
.m`PP(``i)_axi_mem_wdata(m`PP(``i)_axi_mem_wdata), \
.m`PP(``i)_axi_mem_wstrb(m`PP(``i)_axi_mem_wstrb), \
.m`PP(``i)_axi_mem_wlast(m`PP(``i)_axi_mem_wlast), \
.m`PP(``i)_axi_mem_arvalid(m`PP(``i)_axi_mem_arvalid), \
.m`PP(``i)_axi_mem_arready(m`PP(``i)_axi_mem_arready), \
.m`PP(``i)_axi_mem_araddr(m`PP(``i)_axi_mem_araddr), \
.m`PP(``i)_axi_mem_arid(m`PP(``i)_axi_mem_arid), \
.m`PP(``i)_axi_mem_arlen(m`PP(``i)_axi_mem_arlen), \
.m`PP(``i)_axi_mem_rvalid(m`PP(``i)_axi_mem_rvalid), \
.m`PP(``i)_axi_mem_rready(m`PP(``i)_axi_mem_rready), \
.m`PP(``i)_axi_mem_rdata(m`PP(``i)_axi_mem_rdata), \
.m`PP(``i)_axi_mem_rlast(m`PP(``i)_axi_mem_rlast), \
.m`PP(``i)_axi_mem_rid(m`PP(``i)_axi_mem_rid), \
.m`PP(``i)_axi_mem_rresp(m`PP(``i)_axi_mem_rresp), \
.m`PP(``i)_axi_mem_bvalid(m`PP(``i)_axi_mem_bvalid), \
.m`PP(``i)_axi_mem_bready(m`PP(``i)_axi_mem_bready), \
.m`PP(``i)_axi_mem_bresp(m`PP(``i)_axi_mem_bresp), \
.m`PP(``i)_axi_mem_bid(m`PP(``i)_axi_mem_bid)
.m``i``_axi_mem_awvalid(m``i``_axi_mem_awvalid), \
.m``i``_axi_mem_awready(m``i``_axi_mem_awready), \
.m``i``_axi_mem_awaddr(m``i``_axi_mem_awaddr), \
.m``i``_axi_mem_awid(m``i``_axi_mem_awid), \
.m``i``_axi_mem_awlen(m``i``_axi_mem_awlen), \
.m``i``_axi_mem_wvalid(m``i``_axi_mem_wvalid), \
.m``i``_axi_mem_wready(m``i``_axi_mem_wready), \
.m``i``_axi_mem_wdata(m``i``_axi_mem_wdata), \
.m``i``_axi_mem_wstrb(m``i``_axi_mem_wstrb), \
.m``i``_axi_mem_wlast(m``i``_axi_mem_wlast), \
.m``i``_axi_mem_arvalid(m``i``_axi_mem_arvalid), \
.m``i``_axi_mem_arready(m``i``_axi_mem_arready), \
.m``i``_axi_mem_araddr(m``i``_axi_mem_araddr), \
.m``i``_axi_mem_arid(m``i``_axi_mem_arid), \
.m``i``_axi_mem_arlen(m``i``_axi_mem_arlen), \
.m``i``_axi_mem_rvalid(m``i``_axi_mem_rvalid), \
.m``i``_axi_mem_rready(m``i``_axi_mem_rready), \
.m``i``_axi_mem_rdata(m``i``_axi_mem_rdata), \
.m``i``_axi_mem_rlast(m``i``_axi_mem_rlast), \
.m``i``_axi_mem_rid(m``i``_axi_mem_rid), \
.m``i``_axi_mem_rresp(m``i``_axi_mem_rresp), \
.m``i``_axi_mem_bvalid(m``i``_axi_mem_bvalid), \
.m``i``_axi_mem_bready(m``i``_axi_mem_bready), \
.m``i``_axi_mem_bresp(m``i``_axi_mem_bresp), \
.m``i``_axi_mem_bid(m``i``_axi_mem_bid)
`define AXI_MEM_TO_ARRAY(i) \
assign m`PP(``i)_axi_mem_awvalid = m_axi_mem_awvalid_w[i]; \
assign m_axi_mem_awready_w[i] = m`PP(``i)_axi_mem_awready; \
assign m`PP(``i)_axi_mem_awaddr = m_axi_mem_awaddr_w[i]; \
assign m`PP(``i)_axi_mem_awid = m_axi_mem_awid_w[i]; \
assign m`PP(``i)_axi_mem_awlen = m_axi_mem_awlen_w[i]; \
assign m`PP(``i)_axi_mem_wvalid = m_axi_mem_wvalid_w[i]; \
assign m_axi_mem_wready_w[i] = m`PP(``i)_axi_mem_wready; \
assign m`PP(``i)_axi_mem_wdata = m_axi_mem_wdata_w[i]; \
assign m`PP(``i)_axi_mem_wstrb = m_axi_mem_wstrb_w[i]; \
assign m`PP(``i)_axi_mem_wlast = m_axi_mem_wlast_w[i]; \
assign m`PP(``i)_axi_mem_arvalid = m_axi_mem_arvalid_w[i]; \
assign m_axi_mem_arready_w[i] = m`PP(``i)_axi_mem_arready; \
assign m`PP(``i)_axi_mem_araddr = m_axi_mem_araddr_w[i]; \
assign m`PP(``i)_axi_mem_arid = m_axi_mem_arid_w[i]; \
assign m`PP(``i)_axi_mem_arlen = m_axi_mem_arlen_w[i]; \
assign m_axi_mem_rvalid_w[i] = m`PP(``i)_axi_mem_rvalid; \
assign m`PP(``i)_axi_mem_rready = m_axi_mem_rready_w[i]; \
assign m_axi_mem_rdata_w[i] = m`PP(``i)_axi_mem_rdata; \
assign m_axi_mem_rlast_w[i] = m`PP(``i)_axi_mem_rlast; \
assign m_axi_mem_rid_w[i] = m`PP(``i)_axi_mem_rid; \
assign m_axi_mem_rresp_w[i] = m`PP(``i)_axi_mem_rresp; \
assign m_axi_mem_bvalid_w[i] = m`PP(``i)_axi_mem_bvalid; \
assign m`PP(``i)_axi_mem_bready = m_axi_mem_bready_w[i]; \
assign m_axi_mem_bresp_w[i] = m`PP(``i)_axi_mem_bresp; \
assign m_axi_mem_bid_w[i] = m`PP(``i)_axi_mem_bid
assign m``i``_axi_mem_awvalid = m_axi_mem_awvalid_a[i]; \
assign m_axi_mem_awready_a[i] = m``i``_axi_mem_awready; \
assign m``i``_axi_mem_awaddr = m_axi_mem_awaddr_a[i]; \
assign m``i``_axi_mem_awid = m_axi_mem_awid_a[i]; \
assign m``i``_axi_mem_awlen = m_axi_mem_awlen_a[i]; \
assign m``i``_axi_mem_wvalid = m_axi_mem_wvalid_a[i]; \
assign m_axi_mem_wready_a[i] = m``i``_axi_mem_wready; \
assign m``i``_axi_mem_wdata = m_axi_mem_wdata_a[i]; \
assign m``i``_axi_mem_wstrb = m_axi_mem_wstrb_a[i]; \
assign m``i``_axi_mem_wlast = m_axi_mem_wlast_a[i]; \
assign m``i``_axi_mem_arvalid = m_axi_mem_arvalid_a[i]; \
assign m_axi_mem_arready_a[i] = m``i``_axi_mem_arready; \
assign m``i``_axi_mem_araddr = m_axi_mem_araddr_a[i]; \
assign m``i``_axi_mem_arid = m_axi_mem_arid_a[i]; \
assign m``i``_axi_mem_arlen = m_axi_mem_arlen_a[i]; \
assign m_axi_mem_rvalid_a[i] = m``i``_axi_mem_rvalid; \
assign m``i``_axi_mem_rready = m_axi_mem_rready_a[i]; \
assign m_axi_mem_rdata_a[i] = m``i``_axi_mem_rdata; \
assign m_axi_mem_rlast_a[i] = m``i``_axi_mem_rlast; \
assign m_axi_mem_rid_a[i] = m``i``_axi_mem_rid; \
assign m_axi_mem_rresp_a[i] = m``i``_axi_mem_rresp; \
assign m_axi_mem_bvalid_a[i] = m``i``_axi_mem_bvalid; \
assign m``i``_axi_mem_bready = m_axi_mem_bready_a[i]; \
assign m_axi_mem_bresp_a[i] = m``i``_axi_mem_bresp; \
assign m_axi_mem_bid_a[i] = m``i``_axi_mem_bid
`endif

View file

@ -239,4 +239,7 @@
`define _REPEAT_31(f,s) `f(30) `s `_REPEAT_30(f,s)
`define _REPEAT_32(f,s) `f(31) `s `_REPEAT_31(f,s)
`define REPEAT_COMMA ,
`define REPEAT_SEMICOLON ;
`endif

View file

@ -2,20 +2,46 @@
macros=()
includes=()
excludes=()
output_file=""
global_file=""
dest_folder=""
function absolute_path() {
if [ -d "$1" ]; then
(cd "$1"; pwd)
elif [ -f "$1" ]; then
if [[ $1 = /* ]]; then
echo "$1"
elif [[ $1 == */* ]]; then
echo "$(cd "${1%/*}"; pwd)/${1##*/}"
else
echo "$(pwd)/$1"
fi
fi
}
function check_not_excluded() {
for fe in ${excludes[@]}; do
if [[ $1 =~ $fe ]]; then
return 1
fi
done
return 0
}
# parse command arguments
while getopts D:I:O:G:F:h flag
while getopts D:I:E:O:G:F:h flag
do
case "${flag}" in
D) macros+=( ${OPTARG} );;
I) includes+=( ${OPTARG} );;
E) excludes+=( ${OPTARG} );;
O) output_file=( ${OPTARG} );;
G) global_file=( ${OPTARG} );;
F) dest_folder=( ${OPTARG} );;
h) echo "Usage: [-D macro] [-I include] [-O output_file] [-F destination_folder] [-G global_header] [-h help]"
h) echo "Usage: [-D macro] [-I include] [-E exclude] [-O output_file] [-F destination_folder] [-G global_header] [-h help]"
exit 0
;;
\?)
@ -46,7 +72,9 @@ then
# copy source files
for dir in ${includes[@]}; do
for file in $(find $dir -maxdepth 1 -name '*.v' -o -name '*.sv' -o -name '*.vh' -o -name '*.svh' -o -name '*.hex' -type f); do
cp $file $dest_folder
if check_not_excluded $file; then
cp $(absolute_path $file) $dest_folder
fi
done
done
fi
@ -72,7 +100,9 @@ then
# dump source files
for dir in ${includes[@]}; do
for file in $(find $dir -maxdepth 1 -name '*.v' -o -name '*.sv' -type f); do
echo $file
if check_not_excluded $file; then
echo $(absolute_path $file)
fi
done
done
else
@ -81,7 +111,9 @@ then
# dump source files
for file in $(find $dest_folder -maxdepth 1 -name '*.v' -o -name '*.sv' -type f); do
echo $file
if check_not_excluded $file; then
echo $(absolute_path $file)
fi
done
fi
} > $output_file

View file

@ -18,6 +18,7 @@ MAX_JOBS ?= 8
RTL_DIR = ../../../../rtl
AFU_DIR = ../../../../afu/xrt
SCRIPT_DIR = ../../../../scripts
PLATFORM_TO_XSA = $(strip $(patsubst %.xpfm, % , $(shell basename $(PLATFORM))))
XSA := $(call PLATFORM_TO_XSA, $(PLATFORM))
@ -134,7 +135,11 @@ all: check-devices emconfig $(XCLBIN_CONTAINER)
gen-sources: $(BUILD_DIR)/sources.txt
$(BUILD_DIR)/sources.txt:
mkdir -p $(BUILD_DIR); cd $(BUILD_DIR); ../scripts/gen_sources.sh $(RTL_INCLUDE) $(CONFIGS) > sources.txt
mkdir -p $(BUILD_DIR); cd $(BUILD_DIR); $(SCRIPT_DIR)/gen_sources.sh $(RTL_INCLUDE) $(CONFIGS) -EVX_fpu_fpnew.sv -Evortex_afu.v -EVX_afu_wrap.sv -Osources.txt
cd $(BUILD_DIR); verilator -E -DNOGLOBALS $(RTL_INCLUDE) $(CONFIGS) $(AFU_DIR)/VX_afu_wrap.sv | sed '/^`line /d' > VX_afu_wrap.sv
cd $(BUILD_DIR); verilator -E -DNOGLOBALS $(RTL_INCLUDE) $(CONFIGS) $(AFU_DIR)/vortex_afu.v | sed '/^`line /d' > vortex_afu.v
echo "$(PWD)/$(BUILD_DIR)/VX_afu_wrap.sv" >> $(BUILD_DIR)/sources.txt
echo "$(PWD)/$(BUILD_DIR)/vortex_afu.v" >> $(BUILD_DIR)/sources.txt
$(XO_CONTAINER): $(BUILD_DIR)/sources.txt ./kernel.xml
mkdir -p $(BUILD_DIR); cd $(BUILD_DIR); $(VIVADO) -mode batch -source ../scripts/gen_xo.tcl -tclargs ../$(XO_CONTAINER) vortex_afu sources.txt ../kernel.xml ../$(BUILD_DIR)

View file

@ -1,46 +0,0 @@
#!/bin/bash
exclude_list="VX_fpu_fpnew.sv"
macros=()
includes=()
# parse command arguments
while getopts D:I:h flag
do
case "${flag}" in
D) macros+=( ${OPTARG} );;
I) includes+=( ${OPTARG} );;
h) echo "Usage: [-D macro] [-I include] [-h help]"
exit 0
;;
\?)
echo "Invalid option: -$OPTARG" 1>&2
exit 1
;;
esac
done
# dump macros
for value in ${macros[@]}; do
echo "+define+$value"
done
# dump include directories
for dir in ${includes[@]}; do
echo "+incdir+$dir"
done
# dump source files
for dir in ${includes[@]}; do
for file in $(find $dir -maxdepth 1 -name '*.v' -o -name '*.sv' -type f); do
exclude=0
for fe in $exclude_list; do
if [[ $file =~ $fe ]]; then
exclude=1
fi
done
if [[ $exclude == 0 ]]; then
echo $file
fi
done
done

View file

@ -154,7 +154,7 @@ foreach up [ipx::get_user_parameters] {
}
ipx::associate_bus_interfaces -busif s_axi_ctrl -clock ap_clk $core
ipx::associate_bus_interfaces -busif m0_axi_mem -clock ap_clk $core
ipx::associate_bus_interfaces -busif m0_axi_mem -clock ap_clk $core
set_property xpm_libraries {XPM_CDC XPM_MEMORY XPM_FIFO} $core
set_property sdx_kernel true $core