Files
super6502/hw/efinix_fpga/src/byte_sel_register.sv
2023-11-15 08:27:29 -08:00

31 lines
704 B
Systemverilog

module byte_sel_register
#(
parameter DATA_WIDTH = 8,
parameter ADDR_WIDTH = 32
)(
input i_clk,
input i_reset,
input i_write,
input [$clog2(ADDR_WIDTH)-1:0] i_byte_sel,
input [DATA_WIDTH-1:0] i_data,
output [DATA_WIDTH-1:0] o_data,
output [DATA_WIDTH*ADDR_WIDTH-1:0] o_full_data
);
logic [DATA_WIDTH*ADDR_WIDTH-1:0] r_data;
assign o_data = r_data[DATA_WIDTH*i_byte_sel +: DATA_WIDTH];
assign o_full_data = r_data;
always_ff @(posedge i_clk) begin
if (i_reset) begin
r_data <= '0;
end else begin
r_data <= r_data;
if (i_write) begin
r_data[DATA_WIDTH*i_byte_sel +: DATA_WIDTH] <= i_data;
end
end
end
endmodule