mirror of
https://github.com/fpganinja/taxi.git
synced 2026-08-16 04:11:19 -07:00
eth: Remove redundant SFP_RATE parameter in example designs
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "1"
|
||||
dict set params COMBINED_MAC_PCS "1"
|
||||
dict set params MAC_DATA_W "32"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "0"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "1"
|
||||
dict set params COMBINED_MAC_PCS "1"
|
||||
dict set params MAC_DATA_W "16"
|
||||
|
||||
@@ -23,12 +23,10 @@ module fpga #
|
||||
parameter string VENDOR = "XILINX",
|
||||
// device family
|
||||
parameter string FAMILY = "kintexu",
|
||||
// SFP rate selection (0 for 1G, 1 for 10G)
|
||||
parameter logic SFP_RATE = 1'b1,
|
||||
// 10G MAC configuration
|
||||
// MAC configuration
|
||||
parameter logic CFG_LOW_LATENCY = 1'b1,
|
||||
parameter logic COMBINED_MAC_PCS = 1'b1,
|
||||
parameter MAC_DATA_W = SFP_RATE ? 32 : 16
|
||||
parameter MAC_DATA_W = 32
|
||||
)
|
||||
(
|
||||
/*
|
||||
@@ -383,7 +381,6 @@ fpga_core #(
|
||||
.SIM(SIM),
|
||||
.VENDOR(VENDOR),
|
||||
.FAMILY(FAMILY),
|
||||
.SFP_RATE(SFP_RATE),
|
||||
.CFG_LOW_LATENCY(CFG_LOW_LATENCY),
|
||||
.COMBINED_MAC_PCS(COMBINED_MAC_PCS),
|
||||
.MAC_DATA_W(MAC_DATA_W)
|
||||
|
||||
@@ -23,12 +23,10 @@ module fpga_core #
|
||||
parameter string VENDOR = "XILINX",
|
||||
// device family
|
||||
parameter string FAMILY = "kintexu",
|
||||
// SFP rate selection (0 for 1G, 1 for 10G)
|
||||
parameter logic SFP_RATE = 1'b1,
|
||||
// 10G MAC configuration
|
||||
// MAC configuration
|
||||
parameter logic CFG_LOW_LATENCY = 1'b1,
|
||||
parameter logic COMBINED_MAC_PCS = 1'b1,
|
||||
parameter MAC_DATA_W = SFP_RATE ? 32 : 16
|
||||
parameter MAC_DATA_W = 32
|
||||
)
|
||||
(
|
||||
/*
|
||||
@@ -398,7 +396,7 @@ xfcp_mod_apb_inst (
|
||||
.m_apb(gt_apb_ctrl)
|
||||
);
|
||||
|
||||
if (SFP_RATE == 0) begin : sfp_mac
|
||||
if (MAC_DATA_W == 16) begin : sfp_mac
|
||||
|
||||
taxi_eth_mac_1g_basex_us #(
|
||||
.SIM(SIM),
|
||||
|
||||
@@ -45,7 +45,6 @@ VERILOG_SOURCES := $(call uniq_base,$(call process_f_files,$(VERILOG_SOURCES)))
|
||||
export PARAM_SIM := "1'b1"
|
||||
export PARAM_VENDOR := "\"XILINX\""
|
||||
export PARAM_FAMILY := "\"kintexu\""
|
||||
export PARAM_SFP_RATE := "1'b1"
|
||||
export PARAM_CFG_LOW_LATENCY := "1'b1"
|
||||
export PARAM_COMBINED_MAC_PCS := "1'b1"
|
||||
export PARAM_MAC_DATA_W := "32"
|
||||
|
||||
@@ -60,7 +60,7 @@ class TB:
|
||||
for ch in dut.sfp_mac.sfp_mac_inst.ch:
|
||||
gt_inst = ch.ch_inst.gt.gt_inst
|
||||
|
||||
if dut.SFP_RATE.value == 0:
|
||||
if dut.MAC_DATA_W.value == 16:
|
||||
if ch.ch_inst.CFG_LOW_LATENCY.value:
|
||||
clk = 16
|
||||
gbx_cfg = None
|
||||
@@ -245,8 +245,8 @@ def process_f_files(files):
|
||||
return list(lst.values())
|
||||
|
||||
|
||||
@pytest.mark.parametrize(("sfp_rate", "mac_data_w"), [(0, 16), (1, 32), (1, 64)])
|
||||
def test_fpga_core(request, sfp_rate, mac_data_w):
|
||||
@pytest.mark.parametrize("mac_data_w", [16, 32, 64])
|
||||
def test_fpga_core(request, mac_data_w):
|
||||
dut = "fpga_core"
|
||||
module = os.path.splitext(os.path.basename(__file__))[0]
|
||||
toplevel = dut
|
||||
@@ -273,7 +273,6 @@ def test_fpga_core(request, sfp_rate, mac_data_w):
|
||||
parameters['SIM'] = "1'b1"
|
||||
parameters['VENDOR'] = "\"XILINX\""
|
||||
parameters['FAMILY'] = "\"kintexu\""
|
||||
parameters['SFP_RATE'] = f"1'b{sfp_rate}"
|
||||
parameters['CFG_LOW_LATENCY'] = "1'b1"
|
||||
parameters['COMBINED_MAC_PCS'] = "1'b1"
|
||||
parameters['MAC_DATA_W'] = mac_data_w
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "1"
|
||||
dict set params COMBINED_MAC_PCS "1"
|
||||
dict set params MAC_DATA_W "32"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "0"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "1"
|
||||
dict set params COMBINED_MAC_PCS "1"
|
||||
dict set params MAC_DATA_W "16"
|
||||
|
||||
@@ -23,12 +23,10 @@ module fpga #
|
||||
parameter string VENDOR = "XILINX",
|
||||
// device family
|
||||
parameter string FAMILY = "zynquplus",
|
||||
// SFP rate selection (0 for 1G, 1 for 10G)
|
||||
parameter logic SFP_RATE = 1'b1,
|
||||
// 10G MAC configuration
|
||||
// MAC configuration
|
||||
parameter logic CFG_LOW_LATENCY = 1'b1,
|
||||
parameter logic COMBINED_MAC_PCS = 1'b1,
|
||||
parameter MAC_DATA_W = SFP_RATE ? 32 : 16
|
||||
parameter MAC_DATA_W = 32
|
||||
)
|
||||
(
|
||||
/*
|
||||
@@ -248,7 +246,6 @@ fpga_core #(
|
||||
.SIM(SIM),
|
||||
.VENDOR(VENDOR),
|
||||
.FAMILY(FAMILY),
|
||||
.SFP_RATE(SFP_RATE),
|
||||
.CFG_LOW_LATENCY(CFG_LOW_LATENCY),
|
||||
.COMBINED_MAC_PCS(COMBINED_MAC_PCS),
|
||||
.MAC_DATA_W(MAC_DATA_W)
|
||||
|
||||
@@ -25,10 +25,10 @@ module fpga_core #
|
||||
parameter string FAMILY = "zynquplus",
|
||||
// SFP rate selection (0 for 1G, 1 for 10G)
|
||||
parameter logic SFP_RATE = 1'b1,
|
||||
// 10G MAC configuration
|
||||
// MAC configuration
|
||||
parameter logic CFG_LOW_LATENCY = 1'b1,
|
||||
parameter logic COMBINED_MAC_PCS = 1'b1,
|
||||
parameter MAC_DATA_W = SFP_RATE ? 32 : 16
|
||||
parameter MAC_DATA_W = 32
|
||||
)
|
||||
(
|
||||
/*
|
||||
@@ -262,7 +262,7 @@ xfcp_mod_apb_inst (
|
||||
.m_apb(gt_apb_ctrl)
|
||||
);
|
||||
|
||||
if (SFP_RATE == 0) begin : sfp_mac
|
||||
if (MAC_DATA_W == 16) begin : sfp_mac
|
||||
|
||||
taxi_eth_mac_1g_basex_us #(
|
||||
.SIM(SIM),
|
||||
@@ -808,30 +808,30 @@ for (genvar n = 0; n < $size(axis_sfp_tx); n = n + 1) begin : sfp_ch
|
||||
)
|
||||
ch_fifo (
|
||||
/*
|
||||
* AXI4-Stream input (sink)
|
||||
*/
|
||||
* AXI4-Stream input (sink)
|
||||
*/
|
||||
.s_clk(sfp_rx_clk[n]),
|
||||
.s_rst(sfp_rx_rst[n]),
|
||||
.s_axis(axis_sfp_rx[n]),
|
||||
|
||||
/*
|
||||
* AXI4-Stream output (source)
|
||||
*/
|
||||
* AXI4-Stream output (source)
|
||||
*/
|
||||
.m_clk(sfp_tx_clk[n]),
|
||||
.m_rst(sfp_tx_rst[n]),
|
||||
.m_axis(axis_sfp_tx[n]),
|
||||
|
||||
/*
|
||||
* Pause
|
||||
*/
|
||||
* Pause
|
||||
*/
|
||||
.s_pause_req(1'b0),
|
||||
.s_pause_ack(),
|
||||
.m_pause_req(1'b0),
|
||||
.m_pause_ack(),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
* Status
|
||||
*/
|
||||
.s_status_depth(),
|
||||
.s_status_depth_commit(),
|
||||
.s_status_overflow(),
|
||||
|
||||
@@ -44,7 +44,6 @@ VERILOG_SOURCES := $(call uniq_base,$(call process_f_files,$(VERILOG_SOURCES)))
|
||||
export PARAM_SIM := "1'b1"
|
||||
export PARAM_VENDOR := "\"XILINX\""
|
||||
export PARAM_FAMILY := "\"zynquplus\""
|
||||
export PARAM_SFP_RATE := "1'b1"
|
||||
export PARAM_CFG_LOW_LATENCY := "1'b1"
|
||||
export PARAM_COMBINED_MAC_PCS := "1'b1"
|
||||
export PARAM_MAC_DATA_W := "32"
|
||||
|
||||
@@ -20,7 +20,6 @@ import cocotb
|
||||
from cocotb.clock import Clock
|
||||
from cocotb.triggers import RisingEdge, Combine
|
||||
|
||||
from cocotbext.eth import GmiiSource, GmiiSink
|
||||
from cocotbext.eth import XgmiiFrame
|
||||
from cocotbext.uart import UartSource, UartSink
|
||||
|
||||
@@ -54,7 +53,7 @@ class TB:
|
||||
for ch in dut.sfp_mac.sfp_mac_inst.ch:
|
||||
gt_inst = ch.ch_inst.gt.gt_inst
|
||||
|
||||
if dut.SFP_RATE.value == 0:
|
||||
if dut.MAC_DATA_W.value == 16:
|
||||
if ch.ch_inst.CFG_LOW_LATENCY.value:
|
||||
clk = 16
|
||||
gbx_cfg = None
|
||||
@@ -238,8 +237,8 @@ def process_f_files(files):
|
||||
return list(lst.values())
|
||||
|
||||
|
||||
@pytest.mark.parametrize(("sfp_rate", "mac_data_w"), [(0, 16), (1, 32), (1, 64)])
|
||||
def test_fpga_core(request, sfp_rate, mac_data_w):
|
||||
@pytest.mark.parametrize("mac_data_w", [16, 32, 64])
|
||||
def test_fpga_core(request, mac_data_w):
|
||||
dut = "fpga_core"
|
||||
module = os.path.splitext(os.path.basename(__file__))[0]
|
||||
toplevel = dut
|
||||
@@ -265,7 +264,6 @@ def test_fpga_core(request, sfp_rate, mac_data_w):
|
||||
parameters['SIM'] = "1'b1"
|
||||
parameters['VENDOR'] = "\"XILINX\""
|
||||
parameters['FAMILY'] = "\"zynquplus\""
|
||||
parameters['SFP_RATE'] = f"1'b{sfp_rate}"
|
||||
parameters['CFG_LOW_LATENCY'] = "1'b1"
|
||||
parameters['COMBINED_MAC_PCS'] = "1'b1"
|
||||
parameters['MAC_DATA_W'] = mac_data_w
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "1"
|
||||
dict set params COMBINED_MAC_PCS "1"
|
||||
dict set params MAC_DATA_W "32"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "1"
|
||||
dict set params COMBINED_MAC_PCS "1"
|
||||
dict set params MAC_DATA_W "64"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "0"
|
||||
dict set params COMBINED_MAC_PCS "1"
|
||||
dict set params MAC_DATA_W "64"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "1"
|
||||
dict set params COMBINED_MAC_PCS "0"
|
||||
dict set params MAC_DATA_W "64"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "0"
|
||||
dict set params COMBINED_MAC_PCS "0"
|
||||
dict set params MAC_DATA_W "64"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "0"
|
||||
dict set params COMBINED_MAC_PCS "1"
|
||||
dict set params MAC_DATA_W "32"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "1"
|
||||
dict set params COMBINED_MAC_PCS "0"
|
||||
dict set params MAC_DATA_W "32"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "1"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "0"
|
||||
dict set params COMBINED_MAC_PCS "0"
|
||||
dict set params MAC_DATA_W "32"
|
||||
|
||||
@@ -8,11 +8,7 @@
|
||||
|
||||
set params [dict create]
|
||||
|
||||
# SFP+ rate
|
||||
# 0 for 1G, 1 for 10G
|
||||
dict set params SFP_RATE "0"
|
||||
|
||||
# 10G MAC configuration
|
||||
# MAC configuration
|
||||
dict set params CFG_LOW_LATENCY "1"
|
||||
dict set params COMBINED_MAC_PCS "1"
|
||||
dict set params MAC_DATA_W "16"
|
||||
|
||||
@@ -23,12 +23,10 @@ module fpga #
|
||||
parameter string VENDOR = "XILINX",
|
||||
// device family
|
||||
parameter string FAMILY = "zynquplus",
|
||||
// SFP rate selection (0 for 1G, 1 for 10G)
|
||||
parameter logic SFP_RATE = 1'b1,
|
||||
// 10G MAC configuration
|
||||
// MAC configuration
|
||||
parameter logic CFG_LOW_LATENCY = 1'b1,
|
||||
parameter logic COMBINED_MAC_PCS = 1'b1,
|
||||
parameter MAC_DATA_W = SFP_RATE ? 32 : 16
|
||||
parameter MAC_DATA_W = 32
|
||||
)
|
||||
(
|
||||
/*
|
||||
@@ -241,7 +239,6 @@ fpga_core #(
|
||||
.SIM(SIM),
|
||||
.VENDOR(VENDOR),
|
||||
.FAMILY(FAMILY),
|
||||
.SFP_RATE(SFP_RATE),
|
||||
.CFG_LOW_LATENCY(CFG_LOW_LATENCY),
|
||||
.COMBINED_MAC_PCS(COMBINED_MAC_PCS),
|
||||
.MAC_DATA_W(MAC_DATA_W)
|
||||
|
||||
@@ -23,12 +23,10 @@ module fpga_core #
|
||||
parameter string VENDOR = "XILINX",
|
||||
// device family
|
||||
parameter string FAMILY = "zynquplus",
|
||||
// SFP rate selection (0 for 1G, 1 for 10G)
|
||||
parameter logic SFP_RATE = 1'b1,
|
||||
// 10G MAC configuration
|
||||
// MAC configuration
|
||||
parameter logic CFG_LOW_LATENCY = 1'b1,
|
||||
parameter logic COMBINED_MAC_PCS = 1'b1,
|
||||
parameter MAC_DATA_W = SFP_RATE ? 32 : 16
|
||||
parameter MAC_DATA_W = 32
|
||||
)
|
||||
(
|
||||
/*
|
||||
@@ -262,7 +260,7 @@ xfcp_mod_apb_inst (
|
||||
.m_apb(gt_apb_ctrl)
|
||||
);
|
||||
|
||||
if (SFP_RATE == 0) begin : sfp_mac
|
||||
if (MAC_DATA_W == 16) begin : sfp_mac
|
||||
|
||||
taxi_eth_mac_1g_basex_us #(
|
||||
.SIM(SIM),
|
||||
@@ -810,30 +808,30 @@ for (genvar n = 0; n < $size(axis_sfp_tx); n = n + 1) begin : sfp_ch
|
||||
)
|
||||
ch_fifo (
|
||||
/*
|
||||
* AXI4-Stream input (sink)
|
||||
*/
|
||||
* AXI4-Stream input (sink)
|
||||
*/
|
||||
.s_clk(sfp_rx_clk[n]),
|
||||
.s_rst(sfp_rx_rst[n]),
|
||||
.s_axis(axis_sfp_rx[n]),
|
||||
|
||||
/*
|
||||
* AXI4-Stream output (source)
|
||||
*/
|
||||
* AXI4-Stream output (source)
|
||||
*/
|
||||
.m_clk(sfp_tx_clk[n]),
|
||||
.m_rst(sfp_tx_rst[n]),
|
||||
.m_axis(axis_sfp_tx[n]),
|
||||
|
||||
/*
|
||||
* Pause
|
||||
*/
|
||||
* Pause
|
||||
*/
|
||||
.s_pause_req(1'b0),
|
||||
.s_pause_ack(),
|
||||
.m_pause_req(1'b0),
|
||||
.m_pause_ack(),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
* Status
|
||||
*/
|
||||
.s_status_depth(),
|
||||
.s_status_depth_commit(),
|
||||
.s_status_overflow(),
|
||||
|
||||
@@ -44,7 +44,6 @@ VERILOG_SOURCES := $(call uniq_base,$(call process_f_files,$(VERILOG_SOURCES)))
|
||||
export PARAM_SIM := "1'b1"
|
||||
export PARAM_VENDOR := "\"XILINX\""
|
||||
export PARAM_FAMILY := "\"zynquplus\""
|
||||
export PARAM_SFP_RATE := "1'b1"
|
||||
export PARAM_CFG_LOW_LATENCY := "1'b1"
|
||||
export PARAM_COMBINED_MAC_PCS := "1'b1"
|
||||
export PARAM_MAC_DATA_W := "32"
|
||||
|
||||
@@ -20,7 +20,6 @@ import cocotb
|
||||
from cocotb.clock import Clock
|
||||
from cocotb.triggers import RisingEdge, Combine
|
||||
|
||||
from cocotbext.eth import GmiiSource, GmiiSink
|
||||
from cocotbext.eth import XgmiiFrame
|
||||
from cocotbext.uart import UartSource, UartSink
|
||||
|
||||
@@ -54,7 +53,7 @@ class TB:
|
||||
for ch in dut.sfp_mac.sfp_mac_inst.ch:
|
||||
gt_inst = ch.ch_inst.gt.gt_inst
|
||||
|
||||
if dut.SFP_RATE.value == 0:
|
||||
if dut.MAC_DATA_W.value == 16:
|
||||
if ch.ch_inst.CFG_LOW_LATENCY.value:
|
||||
clk = 16
|
||||
gbx_cfg = None
|
||||
@@ -238,8 +237,8 @@ def process_f_files(files):
|
||||
return list(lst.values())
|
||||
|
||||
|
||||
@pytest.mark.parametrize(("sfp_rate", "mac_data_w"), [(0, 16), (1, 32), (1, 64)])
|
||||
def test_fpga_core(request, sfp_rate, mac_data_w):
|
||||
@pytest.mark.parametrize("mac_data_w", [16, 32, 64])
|
||||
def test_fpga_core(request, mac_data_w):
|
||||
dut = "fpga_core"
|
||||
module = os.path.splitext(os.path.basename(__file__))[0]
|
||||
toplevel = dut
|
||||
@@ -265,7 +264,6 @@ def test_fpga_core(request, sfp_rate, mac_data_w):
|
||||
parameters['SIM'] = "1'b1"
|
||||
parameters['VENDOR'] = "\"XILINX\""
|
||||
parameters['FAMILY'] = "\"zynquplus\""
|
||||
parameters['SFP_RATE'] = f"1'b{sfp_rate}"
|
||||
parameters['CFG_LOW_LATENCY'] = "1'b1"
|
||||
parameters['COMBINED_MAC_PCS'] = "1'b1"
|
||||
parameters['MAC_DATA_W'] = mac_data_w
|
||||
|
||||
Reference in New Issue
Block a user