| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- `timescale 1 ns / 1 ps
- module axis_bram_writer #
- (
- parameter integer AXIS_TDATA_WIDTH = 32,
- parameter integer BRAM_DATA_WIDTH = 32,
- parameter integer BRAM_ADDR_WIDTH = 10
- )
- (
- // System signals
- input wire aclk,
- input wire aresetn,
- output wire [BRAM_ADDR_WIDTH-1:0] sts_data,
- // Slave side
- input wire [AXIS_TDATA_WIDTH-1:0] s_axis_tdata,
- input wire s_axis_tvalid,
- output wire s_axis_tready,
- // BRAM port
- (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b_bram CLK" *)
- output wire b_bram_clk,
- (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b_bram RST" *)
- output wire b_bram_rst,
- (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b_bram EN" *)
- output wire b_bram_en,
- (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b_bram WE" *)
- output wire [BRAM_DATA_WIDTH/8-1:0] b_bram_we,
- (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b_bram ADDR" *)
- output wire [BRAM_ADDR_WIDTH-1:0] b_bram_addr,
- (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b_bram DIN" *)
- output wire [BRAM_DATA_WIDTH-1:0] b_bram_wdata
- );
- reg [BRAM_ADDR_WIDTH-1:0] int_addr_reg;
- always @(posedge aclk)
- begin
- if(~aresetn)
- begin
- int_addr_reg <= {(BRAM_ADDR_WIDTH){1'b0}};
- end
- else if(s_axis_tvalid)
- begin
- int_addr_reg <= int_addr_reg + 1'b1;
- end
- end
- assign sts_data = int_addr_reg;
- assign s_axis_tready = 1'b1;
- assign b_bram_clk = aclk;
- assign b_bram_rst = ~aresetn;
- assign b_bram_en = s_axis_tvalid;
- assign b_bram_we = {(BRAM_DATA_WIDTH/8){s_axis_tvalid}};
- assign b_bram_addr = int_addr_reg;
- assign b_bram_wdata = s_axis_tdata;
- endmodule
|