remove mention of wdata/rdata

This commit is contained in:
Fischer Moseley 2023-07-19 09:10:13 -07:00
parent c591c9c6ea
commit 112bd43963
34 changed files with 203 additions and 236 deletions

View File

@ -115,7 +115,7 @@ module top_level (
.tx(uart_rxd_out), .tx(uart_rxd_out),
.brx_my_io_core_addr(aggregate_axiod[31:16]), .brx_my_io_core_addr(aggregate_axiod[31:16]),
.brx_my_io_core_wdata(aggregate_axiod[15:0]), .brx_my_io_core_data(aggregate_axiod[15:0]),
.brx_my_io_core_rw(1'b1), .brx_my_io_core_rw(1'b1),
.brx_my_io_core_valid(aggregate_axiov), .brx_my_io_core_valid(aggregate_axiov),

View File

@ -14,6 +14,7 @@ module top_level (
input wire [15:0] sw, input wire [15:0] sw,
output logic [15:0] led, output logic [15:0] led,
output logic dp,
output logic led16_b, output logic led16_b,
output logic led16_g, output logic led16_g,
output logic led16_r, output logic led16_r,
@ -49,12 +50,27 @@ module top_level (
.led17_g(led17_g), .led17_g(led17_g),
.led17_r(led17_r)); .led17_r(led17_r));
// Show bus on 7-segment display
reg [15:0] addr_latched = 0;
reg [15:0] data_latched = 0;
reg rw_latched = 0;
always @(posedge clk) begin
if (manta.brx_my_io_core_valid) begin
addr_latched <= manta.my_io_core_brx_addr;
data_latched <= manta.my_io_core_brx_data;
rw_latched <= manta.my_io_core_btx_rw;
end
end
ssd ssd ( ssd ssd (
.clk(clk), .clk(clk),
.val( (manta.my_io_core_btx_rdata << 16) | (manta.brx_my_io_core_wdata) ), .val( (addr_latched << 16) | (data_latched) ),
.cat({cg,cf,ce,cd,cc,cb,ca}), .cat({cg,cf,ce,cd,cc,cb,ca}),
.an(an)); .an(an));
assign dp = rw_latched;
endmodule endmodule
`default_nettype wire `default_nettype wire

View File

@ -72,7 +72,7 @@ set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { ce }];
set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf }]; #IO_L19P_T3_A10_D26_14 Sch=cf set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf }]; #IO_L19P_T3_A10_D26_14 Sch=cf
set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg }]; #IO_L4P_T0_D04_14 Sch=cg set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg }]; #IO_L4P_T0_D04_14 Sch=cg
# set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp }]; #IO_L19N_T3_A21_VREF_15 Sch=dp set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp }]; #IO_L19N_T3_A21_VREF_15 Sch=dp
set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0] set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0]
set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1] set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1]

View File

@ -6,6 +6,7 @@ module top_level (
output logic [15:0] led, output logic [15:0] led,
output logic ca, cb, cc, cd, ce, cf, cg, output logic ca, cb, cc, cd, ce, cf, cg,
output logic dp,
output logic [7:0] an, output logic [7:0] an,
output logic led16_r, output logic led16_r,
@ -26,8 +27,6 @@ module top_level (
assign eth_refclk = clk_50mhz; assign eth_refclk = clk_50mhz;
divider d (.clk(clk), .ethclk(clk_50mhz)); divider d (.clk(clk), .ethclk(clk_50mhz));
manta manta_inst ( manta manta_inst (
.clk(clk_50mhz), .clk(clk_50mhz),
@ -36,26 +35,26 @@ module top_level (
.txen(eth_txen), .txen(eth_txen),
.txd(eth_txd)); .txd(eth_txd));
// debugging! // Show bus on 7-segment display
initial led17_r = 0; reg [15:0] addr_latched = 0;
reg [31:0] val = 0; reg [15:0] data_latched = 0;
reg rw_latched = 0;
always @(posedge clk_50mhz) begin always @(posedge clk) begin
if(manta_inst.my_lut_mem.valid_o) begin if (manta.brx_my_lut_mem_valid) begin
led <= manta_inst.my_lut_mem.addr_o; addr_latched <= manta.my_lut_mem_brx_addr;
led16_r <= manta_inst.my_lut_mem.rw_o; data_latched <= manta.my_lut_mem_brx_data;
led17_r <= !led17_r; rw_latched <= manta.my_lut_mem_btx_rw;
val <= {manta_inst.my_lut_mem.rdata_o, manta_inst.my_lut_mem.wdata_o};
end end
end end
ssd ssd ( ssd ssd (
.clk(clk_50mhz), .clk(clk),
.val(val), .val( (addr_latched << 16) | (data_latched) ),
.cat({cg,cf,ce,cd,cc,cb,ca}), .cat({cg,cf,ce,cd,cc,cb,ca}),
.an(an)); .an(an));
assign dp = rw_latched;
endmodule endmodule
`default_nettype wire `default_nettype wire

View File

@ -72,7 +72,7 @@ set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { ce }];
set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf }]; #IO_L19P_T3_A10_D26_14 Sch=cf set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf }]; #IO_L19P_T3_A10_D26_14 Sch=cf
set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg }]; #IO_L4P_T0_D04_14 Sch=cg set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg }]; #IO_L4P_T0_D04_14 Sch=cg
# set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp }]; #IO_L19N_T3_A21_VREF_15 Sch=dp set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp }]; #IO_L19N_T3_A21_VREF_15 Sch=dp
set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0] set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0]
set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1] set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1]

View File

@ -7,6 +7,7 @@ module top_level (
output logic [15:0] led, output logic [15:0] led,
output logic ca, cb, cc, cd, ce, cf, cg, output logic ca, cb, cc, cd, ce, cf, cg,
output logic dp,
output logic [7:0] an, output logic [7:0] an,
input wire uart_txd_in, input wire uart_txd_in,
@ -19,14 +20,27 @@ module top_level (
.rx(uart_txd_in), .rx(uart_txd_in),
.tx(uart_rxd_out)); .tx(uart_rxd_out));
assign led = manta_inst.brx_my_lut_mem_addr; // Show bus on 7-segment display
reg [15:0] addr_latched = 0;
reg [15:0] data_latched = 0;
reg rw_latched = 0;
always @(posedge clk) begin
if (manta.brx_my_lut_mem_valid) begin
addr_latched <= manta.my_lut_mem_brx_addr;
data_latched <= manta.my_lut_mem_brx_data;
rw_latched <= manta.my_lut_mem_btx_rw;
end
end
ssd ssd ( ssd ssd (
.clk(clk), .clk(clk),
.val( {manta_inst.my_lut_mem_btx_rdata, manta_inst.brx_my_lut_mem_wdata} ), .val( (addr_latched << 16) | (data_latched) ),
.cat({cg,cf,ce,cd,cc,cb,ca}), .cat({cg,cf,ce,cd,cc,cb,ca}),
.an(an)); .an(an));
assign dp = rw_latched;
endmodule endmodule
`default_nettype wire `default_nettype wire

View File

@ -72,7 +72,7 @@ set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { ce }];
set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf }]; #IO_L19P_T3_A10_D26_14 Sch=cf set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf }]; #IO_L19P_T3_A10_D26_14 Sch=cf
set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg }]; #IO_L4P_T0_D04_14 Sch=cg set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg }]; #IO_L4P_T0_D04_14 Sch=cg
# set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp }]; #IO_L19N_T3_A21_VREF_15 Sch=dp set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp }]; #IO_L19N_T3_A21_VREF_15 Sch=dp
set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0] set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0]
set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1] set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1]

View File

@ -9,7 +9,7 @@
input wire btnc, input wire btnc,
output logic [15:0] led, output logic [15:0] led,
output logic ca, cb, cc, cd, ce, cf, cg, output logic ca, cb, cc, cd, ce, cf, cg, dp,
output logic [7:0] an, output logic [7:0] an,
input wire uart_txd_in, input wire uart_txd_in,
@ -92,14 +92,26 @@
assign vga_hs = ~hsync_pipe[1]; assign vga_hs = ~hsync_pipe[1];
assign vga_vs = ~vsync_pipe[1]; assign vga_vs = ~vsync_pipe[1];
// debug // Show bus on 7-segment display
assign led = manta_inst.brx_image_mem_addr; reg [15:0] addr_latched = 0;
reg [15:0] data_latched = 0;
reg rw_latched = 0;
always @(posedge clk) begin
if (manta.brx_image_mem_valid) begin
addr_latched <= manta.image_mem_brx_addr;
data_latched <= manta.image_mem_brx_data;
rw_latched <= manta.image_mem_btx_rw;
end
end
ssd ssd ( ssd ssd (
.clk(clk_65mhz), .clk(clk),
.val( {manta_inst.image_mem_btx_rdata, manta_inst.brx_image_mem_wdata} ), .val( (addr_latched << 16) | (data_latched) ),
.cat({cg,cf,ce,cd,cc,cb,ca}), .cat({cg,cf,ce,cd,cc,cb,ca}),
.an(an)); .an(an));
assign dp = rw_latched;
endmodule endmodule
`default_nettype wire `default_nettype wire

View File

@ -73,7 +73,7 @@ set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { ce }];
set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf }]; #IO_L19P_T3_A10_D26_14 Sch=cf set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf }]; #IO_L19P_T3_A10_D26_14 Sch=cf
set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg }]; #IO_L4P_T0_D04_14 Sch=cg set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg }]; #IO_L4P_T0_D04_14 Sch=cg
#set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp }]; #IO_L19N_T3_A21_VREF_15 Sch=dp set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp }]; #IO_L19N_T3_A21_VREF_15 Sch=dp
set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0] set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0]
set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1] set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1]

View File

@ -96,8 +96,7 @@ class Manta:
dst = core_pair[1].name dst = core_pair[1].name
hdl = f"reg [15:0] {src}_{dst}_addr;\n" hdl = f"reg [15:0] {src}_{dst}_addr;\n"
hdl += f"reg [15:0] {src}_{dst}_wdata;\n" hdl += f"reg [15:0] {src}_{dst}_data;\n"
hdl += f"reg [15:0] {src}_{dst}_rdata;\n"
hdl += f"reg {src}_{dst}_rw;\n" hdl += f"reg {src}_{dst}_rw;\n"
hdl += f"reg {src}_{dst}_valid;\n" hdl += f"reg {src}_{dst}_valid;\n"
conns.append(hdl) conns.append(hdl)
@ -119,10 +118,9 @@ class Manta:
else: else:
src_name = self.cores[i-1].name src_name = self.cores[i-1].name
hdl = hdl.replace(".rdata_i()", f".rdata_i({src_name}_{core.name}_rdata)")
hdl = hdl.replace(".addr_i()", f".addr_i({src_name}_{core.name}_addr)") hdl = hdl.replace(".addr_i()", f".addr_i({src_name}_{core.name}_addr)")
hdl = hdl.replace(".wdata_i()", f".wdata_i({src_name}_{core.name}_wdata)") hdl = hdl.replace(".data_i()", f".data_i({src_name}_{core.name}_data)")
hdl = hdl.replace(".rw_i()", f".rw_i({src_name}_{core.name}_rw)") hdl = hdl.replace(".rw_i()", f".rw_i({src_name}_{core.name}_rw)")
hdl = hdl.replace(".valid_i()", f".valid_i({src_name}_{core.name}_valid)") hdl = hdl.replace(".valid_i()", f".valid_i({src_name}_{core.name}_valid)")
@ -132,12 +130,11 @@ class Manta:
if (i < len(self.cores)-1): if (i < len(self.cores)-1):
dst_name = self.cores[i+1].name dst_name = self.cores[i+1].name
hdl = hdl.replace(".addr_o()", f".addr_o({core.name}_{dst_name}_addr)") hdl = hdl.replace(".addr_o()", f".addr_o({core.name}_{dst_name}_addr)")
hdl = hdl.replace(".wdata_o()", f".wdata_o({core.name}_{dst_name}_wdata)")
else: else:
dst_name = "btx" dst_name = "btx"
hdl = hdl.replace(".rdata_o()", f".rdata_o({core.name}_{dst_name}_rdata)") hdl = hdl.replace(".data_o()", f".data_o({core.name}_{dst_name}_data)")
hdl = hdl.replace(".rw_o()", f".rw_o({core.name}_{dst_name}_rw)") hdl = hdl.replace(".rw_o()", f".rw_o({core.name}_{dst_name}_rw)")
hdl = hdl.replace(".valid_o()", f".valid_o({core.name}_{dst_name}_valid)") hdl = hdl.replace(".valid_o()", f".valid_o({core.name}_{dst_name}_valid)")
@ -223,14 +220,14 @@ class Manta:
interface_rx_inst = self.interface.rx_hdl_inst() interface_rx_inst = self.interface.rx_hdl_inst()
interface_rx_inst = interface_rx_inst.replace("addr_o()", f"addr_o(brx_{self.cores[0].name}_addr)") interface_rx_inst = interface_rx_inst.replace("addr_o()", f"addr_o(brx_{self.cores[0].name}_addr)")
interface_rx_inst = interface_rx_inst.replace("wdata_o()", f"wdata_o(brx_{self.cores[0].name}_wdata)") interface_rx_inst = interface_rx_inst.replace("data_o()", f"data_o(brx_{self.cores[0].name}_data)")
interface_rx_inst = interface_rx_inst.replace("rw_o()", f"rw_o(brx_{self.cores[0].name}_rw)") interface_rx_inst = interface_rx_inst.replace("rw_o()", f"rw_o(brx_{self.cores[0].name}_rw)")
interface_rx_inst = interface_rx_inst.replace("valid_o()", f"valid_o(brx_{self.cores[0].name}_valid)") interface_rx_inst = interface_rx_inst.replace("valid_o()", f"valid_o(brx_{self.cores[0].name}_valid)")
# connect interface_rx to core_chain # connect interface_rx to core_chain
interface_rx_conn= f""" interface_rx_conn= f"""
reg [15:0] brx_{self.cores[0].name}_addr; reg [15:0] brx_{self.cores[0].name}_addr;
reg [15:0] brx_{self.cores[0].name}_wdata; reg [15:0] brx_{self.cores[0].name}_data;
reg brx_{self.cores[0].name}_rw; reg brx_{self.cores[0].name}_rw;
reg brx_{self.cores[0].name}_valid;\n""" reg brx_{self.cores[0].name}_valid;\n"""
@ -240,7 +237,7 @@ reg brx_{self.cores[0].name}_valid;\n"""
# connect core_chain to interface_tx # connect core_chain to interface_tx
interface_tx_conn = f""" interface_tx_conn = f"""
reg [15:0] {self.cores[-1].name}_btx_rdata; reg [15:0] {self.cores[-1].name}_btx_data;
reg {self.cores[-1].name}_btx_rw; reg {self.cores[-1].name}_btx_rw;
reg {self.cores[-1].name}_btx_valid;\n""" reg {self.cores[-1].name}_btx_valid;\n"""
@ -248,7 +245,7 @@ reg {self.cores[-1].name}_btx_valid;\n"""
interface_tx_inst = self.interface.tx_hdl_inst() interface_tx_inst = self.interface.tx_hdl_inst()
interface_tx_inst = interface_tx_inst.replace("addr_i()", f"addr_i({self.cores[0].name}_btx_addr)") interface_tx_inst = interface_tx_inst.replace("addr_i()", f"addr_i({self.cores[0].name}_btx_addr)")
interface_tx_inst = interface_tx_inst.replace("rdata_i()", f"rdata_i({self.cores[0].name}_btx_rdata)") interface_tx_inst = interface_tx_inst.replace("data_i()", f"data_i({self.cores[0].name}_btx_data)")
interface_tx_inst = interface_tx_inst.replace("rw_i()", f"rw_i({self.cores[0].name}_btx_rw)") interface_tx_inst = interface_tx_inst.replace("rw_i()", f"rw_i({self.cores[0].name}_btx_rw)")
interface_tx_inst = interface_tx_inst.replace("valid_i()", f"valid_i({self.cores[0].name}_btx_valid)") interface_tx_inst = interface_tx_inst.replace("valid_i()", f"valid_i({self.cores[0].name}_btx_valid)")

View File

@ -6,15 +6,13 @@ module block_memory (
// input port // input port
input wire [15:0] addr_i, input wire [15:0] addr_i,
input wire [15:0] wdata_i, input wire [15:0] data_i,
input wire [15:0] rdata_i,
input wire rw_i, input wire rw_i,
input wire valid_i, input wire valid_i,
// output port // output port
output reg [15:0] addr_o, output reg [15:0] addr_o,
output reg [15:0] wdata_o, output reg [15:0] data_o,
output reg [15:0] rdata_o,
output reg rw_o, output reg rw_o,
output reg valid_o, output reg valid_o,
@ -52,28 +50,24 @@ module block_memory (
// Pipelining // Pipelining
reg [2:0][15:0] addr_pipe = 0; reg [2:0][15:0] addr_pipe = 0;
reg [2:0][15:0] wdata_pipe = 0; reg [2:0][15:0] data_pipe = 0;
reg [2:0][15:0] rdata_pipe = 0;
reg [2:0] valid_pipe = 0; reg [2:0] valid_pipe = 0;
reg [2:0] rw_pipe = 0; reg [2:0] rw_pipe = 0;
always @(posedge clk) begin always @(posedge clk) begin
addr_pipe[0] <= addr_i; addr_pipe[0] <= addr_i;
wdata_pipe[0] <= wdata_i; data_pipe[0] <= data_i;
rdata_pipe[0] <= rdata_i;
valid_pipe[0] <= valid_i; valid_pipe[0] <= valid_i;
rw_pipe[0] <= rw_i; rw_pipe[0] <= rw_i;
addr_o <= addr_pipe[2]; addr_o <= addr_pipe[2];
wdata_o <= wdata_pipe[2]; data_o <= data_pipe[2];
rdata_o <= rdata_pipe[2];
valid_o <= valid_pipe[2]; valid_o <= valid_pipe[2];
rw_o <= rw_pipe[2]; rw_o <= rw_pipe[2];
for(int i=1; i<3; i=i+1) begin for(int i=1; i<3; i=i+1) begin
addr_pipe[i] <= addr_pipe[i-1]; addr_pipe[i] <= addr_pipe[i-1];
wdata_pipe[i] <= wdata_pipe[i-1]; data_pipe[i] <= data_pipe[i-1];
rdata_pipe[i] <= rdata_pipe[i-1];
valid_pipe[i] <= valid_pipe[i-1]; valid_pipe[i] <= valid_pipe[i-1];
rw_pipe[i] <= rw_pipe[i-1]; rw_pipe[i] <= rw_pipe[i-1];
end end
@ -83,12 +77,12 @@ module block_memory (
if( (valid_i) && (addr_i >= BASE_ADDR) && (addr_i <= MAX_ADDR)) begin if( (valid_i) && (addr_i >= BASE_ADDR) && (addr_i <= MAX_ADDR)) begin
wea[addr_i % N_BRAMS] <= rw_i; wea[addr_i % N_BRAMS] <= rw_i;
addra[addr_i % N_BRAMS] <= (addr_i - BASE_ADDR) / N_BRAMS; addra[addr_i % N_BRAMS] <= (addr_i - BASE_ADDR) / N_BRAMS;
dina[addr_i % N_BRAMS] <= wdata_i; dina[addr_i % N_BRAMS] <= data_i;
end end
// pull BRAM reads from the back of the pipeline // pull BRAM reads from the back of the pipeline
if( (valid_pipe[2]) && (addr_pipe[2] >= BASE_ADDR) && (addr_pipe[2] <= MAX_ADDR)) begin if( (valid_pipe[2]) && (addr_pipe[2] >= BASE_ADDR) && (addr_pipe[2] <= MAX_ADDR)) begin
rdata_o <= douta[addr_pipe[2] % N_BRAMS]; data_o <= douta[addr_pipe[2] % N_BRAMS];
end end
end end

View File

@ -5,8 +5,7 @@ block_memory #(
.clk(clk), .clk(clk),
.addr_i(), .addr_i(),
.wdata_i(), .data_i(),
.rdata_i(),
.rw_i(), .rw_i(),
.valid_i(), .valid_i(),
@ -17,7 +16,6 @@ block_memory #(
.user_we(/* INST_NAME */_we), .user_we(/* INST_NAME */_we),
.addr_o(), .addr_o(),
.wdata_o(), .data_o(),
.rdata_o(),
.rw_o(), .rw_o(),
.valid_o()); .valid_o());

View File

@ -8,7 +8,7 @@ module ethernet_rx (
input wire [1:0] rxd, input wire [1:0] rxd,
output reg [15:0] addr_o, output reg [15:0] addr_o,
output reg [15:0] wdata_o, output reg [15:0] data_o,
output reg rw_o, output reg rw_o,
output reg valid_o output reg valid_o
); );
@ -33,7 +33,7 @@ module ethernet_rx (
assign rw_o = (payload[39:32] == 8'd1); assign rw_o = (payload[39:32] == 8'd1);
assign addr_o = payload[31:16]; assign addr_o = payload[31:16];
assign wdata_o = payload[15:0]; assign data_o = payload[15:0];
assign valid_o = valid && ( payload[39:32] == 8'd0 || payload[39:32] == 8'd1) && (payload[55:40] == 16'h88B5); assign valid_o = valid && ( payload[39:32] == 8'd0 || payload[39:32] == 8'd1) && (payload[55:40] == 16'h88B5);
endmodule endmodule

View File

@ -8,6 +8,6 @@ ethernet_rx #(
.rxd(rxd), .rxd(rxd),
.addr_o(), .addr_o(),
.wdata_o(), .data_o(),
.rw_o(), .rw_o(),
.valid_o()); .valid_o());

View File

@ -4,7 +4,7 @@
module ethernet_tx ( module ethernet_tx (
input wire clk, input wire clk,
input wire [15:0] rdata_i, input wire [15:0] data_i,
input wire rw_i, input wire rw_i,
input wire valid_i, input wire valid_i,
@ -16,10 +16,10 @@ module ethernet_tx (
parameter HOST_MAC = 0; parameter HOST_MAC = 0;
parameter ETHERTYPE = 0; parameter ETHERTYPE = 0;
reg [15:0] rdata_buf = 0; reg [15:0] data_buf = 0;
always @(posedge clk) always @(posedge clk)
if(~rw_i && valid_i) rdata_buf <= rdata_i; if(~rw_i && valid_i) data_buf <= data_i;
mac_tx #( mac_tx #(
.SRC_MAC(FPGA_MAC), .SRC_MAC(FPGA_MAC),
@ -29,7 +29,7 @@ module ethernet_tx (
) mtx ( ) mtx (
.clk(clk), .clk(clk),
.payload({24'd0, rdata_buf}), .payload({24'd0, data_buf}),
.start(~rw_i && valid_i), .start(~rw_i && valid_i),
.txen(txen), .txen(txen),

View File

@ -5,7 +5,7 @@ ethernet_tx #(
) etx ( ) etx (
.clk(clk), .clk(clk),
.rdata_i(), .data_i(),
.rw_i(), .rw_i(),
.valid_i(), .valid_i(),

View File

@ -105,22 +105,22 @@ class IOCore:
# add to read block # add to read block
if probe.width == 16: if probe.width == 16:
rcsb += f"{probe.base_addr}: rdata_o <= {probe.name};\n" rcsb += f"{probe.base_addr}: data_o <= {probe.name};\n"
else: else:
rcsb += f"{probe.base_addr}: rdata_o <= {{{16-probe.width}'b0, {probe.name}}};\n" rcsb += f"{probe.base_addr}: data_o <= {{{16-probe.width}'b0, {probe.name}}};\n"
# if output, add to write block # if output, add to write block
if probe.direction == "output": if probe.direction == "output":
if probe.width == 1: if probe.width == 1:
wcsb += f"{probe.base_addr}: {probe.name} <= wdata_i[0];\n" wcsb += f"{probe.base_addr}: {probe.name} <= data_i[0];\n"
elif probe.width == 16: elif probe.width == 16:
wcsb += f"{probe.base_addr}: {probe.name} <= wdata_i;\n" wcsb += f"{probe.base_addr}: {probe.name} <= data_i;\n"
else: else:
wcsb += f"{probe.base_addr}: {probe.name} <= wdata_i[{probe.width-1}:0];\n" wcsb += f"{probe.base_addr}: {probe.name} <= data_i[{probe.width-1}:0];\n"
# remove trailing newline # remove trailing newline
rcsb = rcsb.rstrip() rcsb = rcsb.rstrip()

View File

@ -6,15 +6,13 @@ module /* MODULE_NAME */ (
// input port // input port
input wire [15:0] addr_i, input wire [15:0] addr_i,
input wire [15:0] wdata_i, input wire [15:0] data_i,
input wire [15:0] rdata_i,
input wire rw_i, input wire rw_i,
input wire valid_i, input wire valid_i,
// output port // output port
output reg [15:0] addr_o, output reg [15:0] addr_o,
output reg [15:0] wdata_o, output reg [15:0] data_o,
output reg [15:0] rdata_o,
output reg rw_o, output reg rw_o,
output reg valid_o output reg valid_o
); );
@ -23,12 +21,9 @@ module /* MODULE_NAME */ (
always @(posedge clk) begin always @(posedge clk) begin
addr_o <= addr_i; addr_o <= addr_i;
wdata_o <= wdata_i; data_o <= data_i;
rdata_o <= rdata_i;
rw_o <= rw_i; rw_o <= rw_i;
valid_o <= valid_i; valid_o <= valid_i;
rdata_o <= rdata_i;
// check if address is valid // check if address is valid
if( (valid_i) && (addr_i >= BASE_ADDR) && (addr_i <= BASE_ADDR + /* MAX_ADDR */)) begin if( (valid_i) && (addr_i >= BASE_ADDR) && (addr_i <= BASE_ADDR + /* MAX_ADDR */)) begin

View File

@ -6,14 +6,12 @@
// input port // input port
.addr_i(), .addr_i(),
.wdata_i(), .data_i(),
.rdata_i(),
.rw_i(), .rw_i(),
.valid_i(), .valid_i(),
// output port // output port
.addr_o(), .addr_o(),
.wdata_o(), .data_o(),
.rdata_o(),
.rw_o(), .rw_o(),
.valid_o()); .valid_o());

View File

@ -159,12 +159,12 @@ class LogicAnalyzerCore:
addr = 0 addr = 0
for i, name in enumerate(self.probes): for i, name in enumerate(self.probes):
addr = 2 * i addr = 2 * i
rcsb += f"BASE_ADDR + {addr}: rdata_o <= {name}_op;\n" rcsb += f"BASE_ADDR + {addr}: data_o <= {name}_op;\n"
wcsb += f"BASE_ADDR + {addr}: {name}_op <= wdata_i;\n" wcsb += f"BASE_ADDR + {addr}: {name}_op <= data_i;\n"
addr = (2 * i) + 1 addr = (2 * i) + 1
rcsb += f"BASE_ADDR + {addr}: rdata_o <= {name}_arg;\n" rcsb += f"BASE_ADDR + {addr}: data_o <= {name}_arg;\n"
wcsb += f"BASE_ADDR + {addr}: {name}_arg <= wdata_i;\n" wcsb += f"BASE_ADDR + {addr}: {name}_arg <= data_i;\n"
rcsb = rcsb.strip() rcsb = rcsb.strip()
wcsb = wcsb.strip() wcsb = wcsb.strip()

View File

@ -9,15 +9,13 @@ module logic_analyzer (
// input port // input port
input wire [15:0] addr_i, input wire [15:0] addr_i,
input wire [15:0] wdata_i, input wire [15:0] data_i,
input wire [15:0] rdata_i,
input wire rw_i, input wire rw_i,
input wire valid_i, input wire valid_i,
// output port // output port
output reg [15:0] addr_o, output reg [15:0] addr_o,
output reg [15:0] wdata_o, output reg [15:0] data_o,
output reg [15:0] rdata_o,
output reg rw_o, output reg rw_o,
output reg valid_o output reg valid_o
); );
@ -68,14 +66,12 @@ module logic_analyzer (
.clk(clk), .clk(clk),
.addr_i(addr_i), .addr_i(addr_i),
.wdata_i(wdata_i), .data_i(data_i),
.rdata_i(rdata_i),
.rw_i(rw_i), .rw_i(rw_i),
.valid_i(valid_i), .valid_i(valid_i),
.addr_o(fsm_reg_trig_blk_addr), .addr_o(fsm_reg_trig_blk_addr),
.wdata_o(fsm_reg_trig_blk_wdata), .data_o(fsm_reg_trig_blk_data),
.rdata_o(fsm_reg_trig_blk_rdata),
.rw_o(fsm_reg_trig_blk_rw), .rw_o(fsm_reg_trig_blk_rw),
.valid_o(fsm_reg_trig_blk_valid), .valid_o(fsm_reg_trig_blk_valid),
@ -88,8 +84,7 @@ module logic_analyzer (
.write_pointer(write_pointer)); .write_pointer(write_pointer));
reg [15:0] fsm_reg_trig_blk_addr; reg [15:0] fsm_reg_trig_blk_addr;
reg [15:0] fsm_reg_trig_blk_wdata; reg [15:0] fsm_reg_trig_blk_data;
reg [15:0] fsm_reg_trig_blk_rdata;
reg fsm_reg_trig_blk_rw; reg fsm_reg_trig_blk_rw;
reg fsm_reg_trig_blk_valid; reg fsm_reg_trig_blk_valid;
@ -102,20 +97,17 @@ module logic_analyzer (
.trig(trig), .trig(trig),
.addr_i(fsm_reg_trig_blk_addr), .addr_i(fsm_reg_trig_blk_addr),
.wdata_i(fsm_reg_trig_blk_wdata), .data_i(fsm_reg_trig_blk_data),
.rdata_i(fsm_reg_trig_blk_rdata),
.rw_i(fsm_reg_trig_blk_rw), .rw_i(fsm_reg_trig_blk_rw),
.valid_i(fsm_reg_trig_blk_valid), .valid_i(fsm_reg_trig_blk_valid),
.addr_o(trig_blk_block_mem_addr), .addr_o(trig_blk_block_mem_addr),
.wdata_o(trig_blk_block_mem_wdata), .data_o(trig_blk_block_mem_data),
.rdata_o(trig_blk_block_mem_rdata),
.rw_o(trig_blk_block_mem_rw), .rw_o(trig_blk_block_mem_rw),
.valid_o(trig_blk_block_mem_valid)); .valid_o(trig_blk_block_mem_valid));
reg [15:0] trig_blk_block_mem_addr; reg [15:0] trig_blk_block_mem_addr;
reg [15:0] trig_blk_block_mem_wdata; reg [15:0] trig_blk_block_mem_data;
reg [15:0] trig_blk_block_mem_rdata;
reg trig_blk_block_mem_rw; reg trig_blk_block_mem_rw;
reg trig_blk_block_mem_valid; reg trig_blk_block_mem_valid;
@ -129,15 +121,13 @@ module logic_analyzer (
// input port // input port
.addr_i(trig_blk_block_mem_addr), .addr_i(trig_blk_block_mem_addr),
.wdata_i(trig_blk_block_mem_wdata), .data_i(trig_blk_block_mem_data),
.rdata_i(trig_blk_block_mem_rdata),
.rw_i(trig_blk_block_mem_rw), .rw_i(trig_blk_block_mem_rw),
.valid_i(trig_blk_block_mem_valid), .valid_i(trig_blk_block_mem_valid),
// output port // output port
.addr_o(addr_o), .addr_o(addr_o),
.wdata_o(wdata_o), .data_o(data_o),
.rdata_o(rdata_o),
.rw_o(rw_o), .rw_o(rw_o),
.valid_o(valid_o), .valid_o(valid_o),

View File

@ -6,15 +6,13 @@ module logic_analyzer_fsm_registers(
// input port // input port
input wire [15:0] addr_i, input wire [15:0] addr_i,
input wire [15:0] wdata_i, input wire [15:0] data_i,
input wire [15:0] rdata_i,
input wire rw_i, input wire rw_i,
input wire valid_i, input wire valid_i,
// output port // output port
output reg [15:0] addr_o, output reg [15:0] addr_o,
output reg [15:0] wdata_o, output reg [15:0] data_o,
output reg [15:0] rdata_o,
output reg rw_o, output reg rw_o,
output reg valid_o, output reg valid_o,
@ -40,8 +38,7 @@ module logic_analyzer_fsm_registers(
always @(posedge clk) begin always @(posedge clk) begin
addr_o <= addr_i; addr_o <= addr_i;
wdata_o <= wdata_i; data_o <= data_i;
rdata_o <= rdata_i;
rw_o <= rw_i; rw_o <= rw_i;
valid_o <= valid_i; valid_o <= valid_i;
@ -51,23 +48,23 @@ module logic_analyzer_fsm_registers(
// reads // reads
if(!rw_i) begin if(!rw_i) begin
case (addr_i) case (addr_i)
BASE_ADDR + 0: rdata_o <= state; BASE_ADDR + 0: data_o <= state;
BASE_ADDR + 1: rdata_o <= trigger_mode; BASE_ADDR + 1: data_o <= trigger_mode;
BASE_ADDR + 2: rdata_o <= trigger_loc; BASE_ADDR + 2: data_o <= trigger_loc;
BASE_ADDR + 3: rdata_o <= request_start; BASE_ADDR + 3: data_o <= request_start;
BASE_ADDR + 4: rdata_o <= request_stop; BASE_ADDR + 4: data_o <= request_stop;
BASE_ADDR + 5: rdata_o <= read_pointer; BASE_ADDR + 5: data_o <= read_pointer;
BASE_ADDR + 6: rdata_o <= write_pointer; BASE_ADDR + 6: data_o <= write_pointer;
endcase endcase
end end
// writes // writes
else begin else begin
case (addr_i) case (addr_i)
BASE_ADDR + 1: trigger_mode <= wdata_i; BASE_ADDR + 1: trigger_mode <= data_i;
BASE_ADDR + 2: trigger_loc <= wdata_i; BASE_ADDR + 2: trigger_loc <= data_i;
BASE_ADDR + 3: request_start <= wdata_i; BASE_ADDR + 3: request_start <= data_i;
BASE_ADDR + 4: request_stop <= wdata_i; BASE_ADDR + 4: request_stop <= data_i;
endcase endcase
end end
end end

View File

@ -2,15 +2,13 @@ logic_analyzer /* INST_NAME */ (
.clk(clk), .clk(clk),
.addr_i(), .addr_i(),
.wdata_i(), .data_i(),
.rdata_i(),
.rw_i(), .rw_i(),
.valid_i(), .valid_i(),
/* NET_CONNS */ /* NET_CONNS */
.addr_o(), .addr_o(),
.wdata_o(), .data_o(),
.rdata_o(),
.rw_o(), .rw_o(),
.valid_o()); .valid_o());

View File

@ -12,15 +12,13 @@ module trigger_block (
// input port // input port
input wire [15:0] addr_i, input wire [15:0] addr_i,
input wire [15:0] wdata_i, input wire [15:0] data_i,
input wire [15:0] rdata_i,
input wire rw_i, input wire rw_i,
input wire valid_i, input wire valid_i,
// output port // output port
output reg [15:0] addr_o, output reg [15:0] addr_o,
output reg [15:0] wdata_o, output reg [15:0] data_o,
output reg [15:0] rdata_o,
output reg rw_o, output reg rw_o,
output reg valid_o); output reg valid_o);
@ -38,11 +36,9 @@ module trigger_block (
// perform register operations // perform register operations
always @(posedge clk) begin always @(posedge clk) begin
addr_o <= addr_i; addr_o <= addr_i;
wdata_o <= wdata_i; data_o <= data_i;
rdata_o <= rdata_i;
rw_o <= rw_i; rw_o <= rw_i;
valid_o <= valid_i; valid_o <= valid_i;
rdata_o <= rdata_i;
if( (addr_i >= BASE_ADDR) && (addr_i <= BASE_ADDR + MAX_ADDR) ) begin if( (addr_i >= BASE_ADDR) && (addr_i <= BASE_ADDR + MAX_ADDR) ) begin

View File

@ -6,15 +6,13 @@ module lut_mem (
// input port // input port
input wire [15:0] addr_i, input wire [15:0] addr_i,
input wire [15:0] wdata_i, input wire [15:0] data_i,
input wire [15:0] rdata_i,
input wire rw_i, input wire rw_i,
input wire valid_i, input wire valid_i,
// output port // output port
output reg [15:0] addr_o, output reg [15:0] addr_o,
output reg [15:0] wdata_o, output reg [15:0] data_o,
output reg [15:0] rdata_o,
output reg rw_o, output reg rw_o,
output reg valid_o); output reg valid_o);
@ -25,11 +23,9 @@ module lut_mem (
always @(posedge clk) begin always @(posedge clk) begin
addr_o <= addr_i; addr_o <= addr_i;
wdata_o <= wdata_i; data_o <= data_i;
rdata_o <= rdata_i;
rw_o <= rw_i; rw_o <= rw_i;
valid_o <= valid_i; valid_o <= valid_i;
rdata_o <= rdata_i;
if(valid_i) begin if(valid_i) begin
@ -37,8 +33,8 @@ module lut_mem (
if( (addr_i >= BASE_ADDR) && (addr_i <= BASE_ADDR + DEPTH - 1) ) begin if( (addr_i >= BASE_ADDR) && (addr_i <= BASE_ADDR + DEPTH - 1) ) begin
// read/write // read/write
if (rw_i && !READ_ONLY) mem[addr_i - BASE_ADDR] <= wdata_i; if (rw_i && !READ_ONLY) mem[addr_i - BASE_ADDR] <= data_i;
else rdata_o <= mem[addr_i - BASE_ADDR]; else data_o <= mem[addr_i - BASE_ADDR];
end end
end end
end end

View File

@ -2,13 +2,11 @@ lut_mem #(.DEPTH(/* DEPTH */)) /* INST_NAME */ (
.clk(clk), .clk(clk),
.addr_i(), .addr_i(),
.wdata_i(), .data_i(),
.rdata_i(),
.rw_i(), .rw_i(),
.valid_i(), .valid_i(),
.addr_o(), .addr_o(),
.wdata_o(), .data_o(),
.rdata_o(),
.rw_o(), .rw_o(),
.valid_o()); .valid_o());

View File

@ -19,7 +19,7 @@ task read_reg_bus_side (
block_memory_tb.tb_bc_rw = 0; block_memory_tb.tb_bc_rw = 0;
block_memory_tb.tb_bc_valid = 0; block_memory_tb.tb_bc_valid = 0;
while (!block_memory_tb.bc_tb_valid) #`CP; while (!block_memory_tb.bc_tb_valid) #`CP;
data = block_memory_tb.bc_tb_rdata; data = block_memory_tb.bc_tb_data;
$display(" -> bus read 0x%h from addr 0x%h", data, addr); $display(" -> bus read 0x%h from addr 0x%h", data, addr);
endtask endtask
@ -30,7 +30,7 @@ task write_reg_bus_side(
); );
block_memory_tb.tb_bc_addr = addr; block_memory_tb.tb_bc_addr = addr;
block_memory_tb.tb_bc_wdata = data; block_memory_tb.tb_bc_data = data;
block_memory_tb.tb_bc_rw = 1; block_memory_tb.tb_bc_rw = 1;
block_memory_tb.tb_bc_valid = 1; block_memory_tb.tb_bc_valid = 1;
#`CP #`CP
@ -85,15 +85,13 @@ module block_memory_tb;
// tb -> bram_core bus // tb -> bram_core bus
logic [15:0] tb_bc_addr; logic [15:0] tb_bc_addr;
logic [15:0] tb_bc_wdata; logic [15:0] tb_bc_data;
logic [15:0] tb_bc_rdata;
logic tb_bc_rw; logic tb_bc_rw;
logic tb_bc_valid; logic tb_bc_valid;
// bram_core -> tb bus // bram_core -> tb bus
logic [15:0] bc_tb_addr; logic [15:0] bc_tb_addr;
logic [15:0] bc_tb_wdata; logic [15:0] bc_tb_data;
logic [15:0] bc_tb_rdata;
logic bc_tb_rw; logic bc_tb_rw;
logic bc_tb_valid; logic bc_tb_valid;
@ -110,14 +108,12 @@ module block_memory_tb;
.clk(clk), .clk(clk),
.addr_i(tb_bc_addr), .addr_i(tb_bc_addr),
.wdata_i(tb_bc_wdata), .data_i(tb_bc_data),
.rdata_i(tb_bc_rdata),
.rw_i(tb_bc_rw), .rw_i(tb_bc_rw),
.valid_i(tb_bc_valid), .valid_i(tb_bc_valid),
.addr_o(bc_tb_addr), .addr_o(bc_tb_addr),
.wdata_o(bc_tb_wdata), .data_o(bc_tb_data),
.rdata_o(bc_tb_rdata),
.rw_o(bc_tb_rw), .rw_o(bc_tb_rw),
.valid_o(bc_tb_valid), .valid_o(bc_tb_valid),
@ -141,8 +137,7 @@ module block_memory_tb;
test_num = 0; test_num = 0;
tb_bc_addr = 0; tb_bc_addr = 0;
tb_bc_rdata = 0; tb_bc_data = 0;
tb_bc_wdata = 0;
tb_bc_rw = 0; tb_bc_rw = 0;
tb_bc_valid = 0; tb_bc_valid = 0;

View File

@ -12,7 +12,7 @@ logic clk;
integer test_num; integer test_num;
// tb -> bridge_tx signals // tb -> bridge_tx signals
logic [15:0] tb_btx_rdata; logic [15:0] tb_btx_data;
logic tb_btx_valid; logic tb_btx_valid;
// uart_tx -> tb signals // uart_tx -> tb signals
@ -21,7 +21,7 @@ logic utx_tb_tx;
bridge_tx btx ( bridge_tx btx (
.clk(clk), .clk(clk),
.data_i(tb_btx_rdata), .data_i(tb_btx_data),
.rw_i(1'b1), .rw_i(1'b1),
.valid_i(tb_btx_valid), .valid_i(tb_btx_valid),
@ -56,13 +56,13 @@ initial begin
test_num = 0; test_num = 0;
tb_btx_valid = 0; tb_btx_valid = 0;
tb_btx_rdata = 0; tb_btx_data = 0;
#(10*`CP); #(10*`CP);
/* ==== Test 1 Begin ==== */ /* ==== Test 1 Begin ==== */
$display("\n=== test 1: receive 0x0123 for baseline functionality ==="); $display("\n=== test 1: receive 0x0123 for baseline functionality ===");
test_num = 1; test_num = 1;
tb_btx_rdata = 16'h0123; tb_btx_data = 16'h0123;
tb_btx_valid = 1; tb_btx_valid = 1;
#`CP; #`CP;
@ -74,7 +74,7 @@ initial begin
/* ==== Test 2 Begin ==== */ /* ==== Test 2 Begin ==== */
$display("\n=== test 2: receive 0x4567 for baseline functionality ==="); $display("\n=== test 2: receive 0x4567 for baseline functionality ===");
test_num = 2; test_num = 2;
tb_btx_rdata = 16'h4567; tb_btx_data = 16'h4567;
tb_btx_valid = 1; tb_btx_valid = 1;
#`CP; #`CP;
@ -86,7 +86,7 @@ initial begin
/* ==== Test 3 Begin ==== */ /* ==== Test 3 Begin ==== */
$display("\n=== test 3: receive 0x89AB for baseline functionality ==="); $display("\n=== test 3: receive 0x89AB for baseline functionality ===");
test_num = 3; test_num = 3;
tb_btx_rdata = 16'h89AB; tb_btx_data = 16'h89AB;
tb_btx_valid = 1; tb_btx_valid = 1;
#`CP; #`CP;
@ -98,7 +98,7 @@ initial begin
/* ==== Test 4 Begin ==== */ /* ==== Test 4 Begin ==== */
$display("\n=== test 4: receive 0xCDEF for baseline functionality ==="); $display("\n=== test 4: receive 0xCDEF for baseline functionality ===");
test_num = 4; test_num = 4;
tb_btx_rdata = 16'hCDEF; tb_btx_data = 16'hCDEF;
tb_btx_valid = 1; tb_btx_valid = 1;
#`CP; #`CP;

View File

@ -42,7 +42,7 @@ module ethernet_rx_tb();
assign crsdv = txen; assign crsdv = txen;
logic [15:0] erx_addr; logic [15:0] erx_addr;
logic [15:0] erx_wdata; logic [15:0] erx_data;
logic erx_rw; logic erx_rw;
logic erx_valid; logic erx_valid;
@ -56,7 +56,7 @@ module ethernet_rx_tb();
.rxd(rxd), .rxd(rxd),
.addr_o(erx_addr), .addr_o(erx_addr),
.wdata_o(erx_wdata), .data_o(erx_data),
.rw_o(erx_rw), .rw_o(erx_rw),
.valid_o(erx_valid)); .valid_o(erx_valid));

View File

@ -9,7 +9,7 @@ task send_on_etx_receive_on_mrx (
input [15:0] data input [15:0] data
); );
ethernet_tx_tb.etx_rdata = data; ethernet_tx_tb.etx_data = data;
ethernet_tx_tb.etx_rw = 0; ethernet_tx_tb.etx_rw = 0;
ethernet_tx_tb.etx_valid = 0; ethernet_tx_tb.etx_valid = 0;
#10; #10;
@ -36,7 +36,7 @@ module ethernet_tx_tb();
logic [1:0] txd; logic [1:0] txd;
// ethernet tx // ethernet tx
reg [15:0] etx_rdata; reg [15:0] etx_data;
reg etx_rw; reg etx_rw;
reg etx_valid; reg etx_valid;
@ -47,7 +47,7 @@ module ethernet_tx_tb();
) etx ( ) etx (
.clk(clk), .clk(clk),
.rdata_i(etx_rdata), .data_i(etx_data),
.rw_i(etx_rw), .rw_i(etx_rw),
.valid_i(etx_valid), .valid_i(etx_valid),
@ -89,7 +89,7 @@ module ethernet_tx_tb();
$dumpfile("ethernet_tx_tb.vcd"); $dumpfile("ethernet_tx_tb.vcd");
$dumpvars(0, ethernet_tx_tb); $dumpvars(0, ethernet_tx_tb);
clk = 0; clk = 0;
etx_rdata = 16'h6970; etx_data = 16'h6970;
etx_rw = 0; etx_rw = 0;
etx_valid = 0; etx_valid = 0;
#50; #50;

View File

@ -18,15 +18,13 @@ module io_core(
// input port // input port
input wire [15:0] addr_i, input wire [15:0] addr_i,
input wire [15:0] wdata_i, input wire [15:0] data_i,
input wire [15:0] rdata_i,
input wire rw_i, input wire rw_i,
input wire valid_i, input wire valid_i,
// output port // output port
output reg [15:0] addr_o, output reg [15:0] addr_o,
output reg [15:0] wdata_o, output reg [15:0] data_o,
output reg [15:0] rdata_o,
output reg rw_o, output reg rw_o,
output reg valid_o output reg valid_o
); );
@ -42,35 +40,32 @@ module io_core(
always @(posedge clk) begin always @(posedge clk) begin
addr_o <= addr_i; addr_o <= addr_i;
wdata_o <= wdata_i; data_o <= data_i;
rdata_o <= rdata_i;
rw_o <= rw_i; rw_o <= rw_i;
valid_o <= valid_i; valid_o <= valid_i;
rdata_o <= rdata_i;
// check if address is valid // check if address is valid
if( (valid_i) && (addr_i >= BASE_ADDR) && (addr_i <= BASE_ADDR + 7)) begin if( (valid_i) && (addr_i >= BASE_ADDR) && (addr_i <= BASE_ADDR + 7)) begin
if(!rw_i) begin // reads if(!rw_i) begin // reads
case (addr_i) case (addr_i)
BASE_ADDR + 0: rdata_o <= {15'b0, picard}; BASE_ADDR + 0: data_o <= {15'b0, picard};
BASE_ADDR + 1: rdata_o <= {9'b0, data}; BASE_ADDR + 1: data_o <= {9'b0, data};
BASE_ADDR + 2: rdata_o <= {6'b0, laforge}; BASE_ADDR + 2: data_o <= {6'b0, laforge};
BASE_ADDR + 3: rdata_o <= {15'b0, troi}; BASE_ADDR + 3: data_o <= {15'b0, troi};
BASE_ADDR + 4: rdata_o <= {15'b0, kirk}; BASE_ADDR + 4: data_o <= {15'b0, kirk};
BASE_ADDR + 5: rdata_o <= {11'b0, spock}; BASE_ADDR + 5: data_o <= {11'b0, spock};
BASE_ADDR + 6: rdata_o <= {13'b0, uhura}; BASE_ADDR + 6: data_o <= {13'b0, uhura};
BASE_ADDR + 7: rdata_o <= {15'b0, chekov}; BASE_ADDR + 7: data_o <= {15'b0, chekov};
endcase endcase
end end
else begin // writes else begin // writes
case (addr_i) case (addr_i)
BASE_ADDR + 4: kirk <= wdata_i[0]; BASE_ADDR + 4: kirk <= data_i[0];
BASE_ADDR + 5: spock <= wdata_i[4:0]; BASE_ADDR + 5: spock <= data_i[4:0];
BASE_ADDR + 6: uhura <= wdata_i[2:0]; BASE_ADDR + 6: uhura <= data_i[2:0];
BASE_ADDR + 7: chekov <= wdata_i[0]; BASE_ADDR + 7: chekov <= data_i[0];
endcase endcase
end end
end end

View File

@ -23,15 +23,13 @@ module io_core_tb;
// tb -> io bus // tb -> io bus
logic [15:0] tb_io_addr; logic [15:0] tb_io_addr;
logic [15:0] tb_io_wdata; logic [15:0] tb_io_data;
logic [15:0] tb_io_rdata;
logic tb_io_rw; logic tb_io_rw;
logic tb_io_valid; logic tb_io_valid;
// la -> io bus // la -> io bus
logic [15:0] la_tb_addr; logic [15:0] la_tb_addr;
logic [15:0] la_tb_wdata; logic [15:0] la_tb_data;
logic [15:0] la_tb_rdata;
logic la_tb_rw; logic la_tb_rw;
logic la_tb_valid; logic la_tb_valid;
@ -53,15 +51,13 @@ module io_core_tb;
// input port // input port
.addr_i(tb_io_addr), .addr_i(tb_io_addr),
.wdata_i(tb_io_wdata), .data_i(tb_io_data),
.rdata_i(tb_io_rdata),
.rw_i(tb_io_rw), .rw_i(tb_io_rw),
.valid_i(tb_io_valid), .valid_i(tb_io_valid),
// output port // output port
.addr_o(la_tb_addr), .addr_o(la_tb_addr),
.wdata_o(la_tb_wdata), .data_o(la_tb_data),
.rdata_o(la_tb_rdata),
.rw_o(la_tb_rw), .rw_o(la_tb_rw),
.valid_o(la_tb_valid)); .valid_o(la_tb_valid));
@ -79,8 +75,7 @@ module io_core_tb;
test_num = 0; test_num = 0;
tb_io_addr = 0; tb_io_addr = 0;
tb_io_rdata = 0; tb_io_data = 0;
tb_io_wdata = 0;
tb_io_rw = 0; tb_io_rw = 0;
tb_io_valid = 0; tb_io_valid = 0;
@ -101,7 +96,7 @@ module io_core_tb;
#`CP #`CP
tb_io_valid = 0; tb_io_valid = 0;
while (!la_tb_valid) #`CP; while (!la_tb_valid) #`CP;
$display(" -> read 0x%h from state reg (addr 0x0000)", la_tb_rdata); $display(" -> read 0x%h from state reg (addr 0x0000)", la_tb_data);
#(10*`CP); #(10*`CP);

View File

@ -15,7 +15,7 @@ task read_reg (
#`CP #`CP
logic_analyzer_tb.tb_la_valid = 0; logic_analyzer_tb.tb_la_valid = 0;
while (!logic_analyzer_tb.la_tb_valid) #`CP; while (!logic_analyzer_tb.la_tb_valid) #`CP;
data = logic_analyzer_tb.la_tb_rdata; data = logic_analyzer_tb.la_tb_data;
$display(" -> read 0x%h from addr 0x%h (%s)", data, addr, desc); $display(" -> read 0x%h from addr 0x%h (%s)", data, addr, desc);
endtask endtask
@ -27,7 +27,7 @@ task write_reg(
); );
logic_analyzer_tb.tb_la_addr = addr; logic_analyzer_tb.tb_la_addr = addr;
logic_analyzer_tb.tb_la_wdata = data; logic_analyzer_tb.tb_la_data = data;
logic_analyzer_tb.tb_la_rw = 1; logic_analyzer_tb.tb_la_rw = 1;
logic_analyzer_tb.tb_la_valid = 1; logic_analyzer_tb.tb_la_valid = 1;
#`CP #`CP
@ -76,15 +76,13 @@ module logic_analyzer_tb;
// tb -> la bus // tb -> la bus
logic [15:0] tb_la_addr; logic [15:0] tb_la_addr;
logic [15:0] tb_la_wdata; logic [15:0] tb_la_data;
logic [15:0] tb_la_rdata;
logic tb_la_rw; logic tb_la_rw;
logic tb_la_valid; logic tb_la_valid;
// la -> tb bus // la -> tb bus
logic [15:0] la_tb_addr; logic [15:0] la_tb_addr;
logic [15:0] la_tb_wdata; logic [15:0] la_tb_data;
logic [15:0] la_tb_rdata;
logic la_tb_rw; logic la_tb_rw;
logic la_tb_valid; logic la_tb_valid;
@ -100,15 +98,13 @@ module logic_analyzer_tb;
// input port // input port
.addr_i(tb_la_addr), .addr_i(tb_la_addr),
.wdata_i(tb_la_wdata), .data_i(tb_la_data),
.rdata_i(tb_la_rdata),
.rw_i(tb_la_rw), .rw_i(tb_la_rw),
.valid_i(tb_la_valid), .valid_i(tb_la_valid),
// output port // output port
.addr_o(la_tb_addr), .addr_o(la_tb_addr),
.wdata_o(la_tb_wdata), .data_o(la_tb_data),
.rdata_o(la_tb_rdata),
.rw_o(la_tb_rw), .rw_o(la_tb_rw),
.valid_o(la_tb_valid)); .valid_o(la_tb_valid));
@ -128,8 +124,7 @@ module logic_analyzer_tb;
test_num = 0; test_num = 0;
tb_la_addr = 0; tb_la_addr = 0;
tb_la_rdata = 0; tb_la_data = 0;
tb_la_wdata = 0;
tb_la_rw = 0; tb_la_rw = 0;
tb_la_valid = 0; tb_la_valid = 0;

View File

@ -12,8 +12,7 @@ module lut_mem_tb;
// tb --> mem_1 signals // tb --> mem_1 signals
logic [15:0] tb_mem_1_addr; logic [15:0] tb_mem_1_addr;
logic [15:0] tb_mem_1_wdata; logic [15:0] tb_mem_1_data;
logic [15:0] tb_mem_1_rdata;
logic tb_mem_1_rw; logic tb_mem_1_rw;
logic tb_mem_1_valid; logic tb_mem_1_valid;
@ -23,22 +22,19 @@ module lut_mem_tb;
) mem_1 ( ) mem_1 (
.clk(clk), .clk(clk),
.addr_i(tb_mem_1_addr), .addr_i(tb_mem_1_addr),
.wdata_i(tb_mem_1_wdata), .data_i(tb_mem_1_data),
.rdata_i(tb_mem_1_rdata),
.rw_i(tb_mem_1_rw), .rw_i(tb_mem_1_rw),
.valid_i(tb_mem_1_valid), .valid_i(tb_mem_1_valid),
.addr_o(mem_1_mem_2_addr), .addr_o(mem_1_mem_2_addr),
.wdata_o(mem_1_mem_2_wdata), .data_o(mem_1_mem_2_data),
.rdata_o(mem_1_mem_2_rdata),
.rw_o(mem_1_mem_2_rw), .rw_o(mem_1_mem_2_rw),
.valid_o(mem_1_mem_2_valid) .valid_o(mem_1_mem_2_valid)
); );
// mem_1 --> mem_2 signals // mem_1 --> mem_2 signals
logic [15:0] mem_1_mem_2_addr; logic [15:0] mem_1_mem_2_addr;
logic [15:0] mem_1_mem_2_wdata; logic [15:0] mem_1_mem_2_data;
logic [15:0] mem_1_mem_2_rdata;
logic mem_1_mem_2_rw; logic mem_1_mem_2_rw;
logic mem_1_mem_2_valid; logic mem_1_mem_2_valid;
@ -48,22 +44,19 @@ module lut_mem_tb;
) mem_2 ( ) mem_2 (
.clk(clk), .clk(clk),
.addr_i(mem_1_mem_2_addr), .addr_i(mem_1_mem_2_addr),
.wdata_i(mem_1_mem_2_wdata), .data_i(mem_1_mem_2_data),
.rdata_i(mem_1_mem_2_rdata),
.rw_i(mem_1_mem_2_rw), .rw_i(mem_1_mem_2_rw),
.valid_i(mem_1_mem_2_valid), .valid_i(mem_1_mem_2_valid),
.addr_o(mem_2_mem_3_addr), .addr_o(mem_2_mem_3_addr),
.wdata_o(mem_2_mem_3_wdata), .data_o(mem_2_mem_3_data),
.rdata_o(mem_2_mem_3_rdata),
.rw_o(mem_2_mem_3_rw), .rw_o(mem_2_mem_3_rw),
.valid_o(mem_2_mem_3_valid) .valid_o(mem_2_mem_3_valid)
); );
// mem_2 --> mem_3 signals // mem_2 --> mem_3 signals
logic [15:0] mem_2_mem_3_addr; logic [15:0] mem_2_mem_3_addr;
logic [15:0] mem_2_mem_3_wdata; logic [15:0] mem_2_mem_3_data;
logic [15:0] mem_2_mem_3_rdata;
logic mem_2_mem_3_rw; logic mem_2_mem_3_rw;
logic mem_2_mem_3_valid; logic mem_2_mem_3_valid;
@ -73,22 +66,19 @@ module lut_mem_tb;
) mem_3 ( ) mem_3 (
.clk(clk), .clk(clk),
.addr_i(mem_2_mem_3_addr), .addr_i(mem_2_mem_3_addr),
.wdata_i(mem_2_mem_3_wdata), .data_i(mem_2_mem_3_data),
.rdata_i(mem_2_mem_3_rdata),
.rw_i(mem_2_mem_3_rw), .rw_i(mem_2_mem_3_rw),
.valid_i(mem_2_mem_3_valid), .valid_i(mem_2_mem_3_valid),
.addr_o(mem_3_tb_addr), .addr_o(mem_3_tb_addr),
.wdata_o(mem_3_tb_wdata), .data_o(mem_3_tb_data),
.rdata_o(mem_3_tb_rdata),
.rw_o(mem_3_tb_rw), .rw_o(mem_3_tb_rw),
.valid_o(mem_3_tb_valid) .valid_o(mem_3_tb_valid)
); );
// mem_3 --> tb signals // mem_3 --> tb signals
logic [15:0] mem_3_tb_addr; logic [15:0] mem_3_tb_addr;
logic [15:0] mem_3_tb_wdata; logic [15:0] mem_3_tb_data;
logic [15:0] mem_3_tb_rdata;
logic mem_3_tb_rw; logic mem_3_tb_rw;
logic mem_3_tb_valid; logic mem_3_tb_valid;
@ -135,8 +125,7 @@ module lut_mem_tb;
mem_3.mem[7] = 16'h0017; mem_3.mem[7] = 16'h0017;
tb_mem_1_addr = 0; tb_mem_1_addr = 0;
tb_mem_1_wdata = 0; tb_mem_1_data = 0;
tb_mem_1_rdata = 0;
tb_mem_1_rw = 0; tb_mem_1_rw = 0;
tb_mem_1_valid = 0; tb_mem_1_valid = 0;
@ -179,7 +168,7 @@ module lut_mem_tb;
test_num = 3; test_num = 3;
tb_mem_1_addr = 16'h0012; tb_mem_1_addr = 16'h0012;
tb_mem_1_wdata = 16'h0069; tb_mem_1_data = 16'h0069;
tb_mem_1_valid = 1; tb_mem_1_valid = 1;
tb_mem_1_rw = 1; tb_mem_1_rw = 1;
#`CP; #`CP;