diff options
| author | Ben Hilburn <ben.hilburn@ettus.com> | 2014-02-14 12:05:07 -0800 |
|---|---|---|
| committer | Ben Hilburn <ben.hilburn@ettus.com> | 2014-02-14 12:05:07 -0800 |
| commit | ff1546f8137f7f92bb250f685561b0c34cc0e053 (patch) | |
| tree | 7fa6fd05c8828df256a1b20e2935bd3ba9899e2c /fpga/usrp3/lib/zynq_fifo/zf_slave_settings.v | |
| parent | 4f691d88123784c2b405816925f1a1aef69d18c1 (diff) | |
| download | uhd-ff1546f8137f7f92bb250f685561b0c34cc0e053.tar.gz uhd-ff1546f8137f7f92bb250f685561b0c34cc0e053.tar.bz2 uhd-ff1546f8137f7f92bb250f685561b0c34cc0e053.zip | |
Pushing the bulk of UHD-3.7.0 code.
Diffstat (limited to 'fpga/usrp3/lib/zynq_fifo/zf_slave_settings.v')
| -rw-r--r-- | fpga/usrp3/lib/zynq_fifo/zf_slave_settings.v | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/fpga/usrp3/lib/zynq_fifo/zf_slave_settings.v b/fpga/usrp3/lib/zynq_fifo/zf_slave_settings.v new file mode 100644 index 000000000..026845682 --- /dev/null +++ b/fpga/usrp3/lib/zynq_fifo/zf_slave_settings.v @@ -0,0 +1,95 @@ +////////////////////////////////////////////////////////////////////////////////// +// Copyright Ettus Research LLC +// The ZYNQ FIFO slave settings: +// - implements write state machine for 32-bit addressable AXI slave +// - provides settings for state of per-stream fifo pointers +// - implements configuration of FIFO's physical DDR addresses +////////////////////////////////////////////////////////////////////////////////// + + +module zf_slave_settings +#( + parameter CONFIG_BASE = 32'h40000000 +) +( + input clk, + input rst, + + //------------------------------------------------------------------ + //-- control write signals - slave + //------------------------------------------------------------------ + input [31:0] AXI_AWADDR, + input AXI_AWVALID, + output AXI_AWREADY, + input [31:0] AXI_WDATA, + input [3:0] AXI_WSTRB, + input AXI_WVALID, + output AXI_WREADY, + output [1:0] AXI_BRESP, + output AXI_BVALID, + input AXI_BREADY, + + //------------------------------------------------------------------ + // settings interface + //------------------------------------------------------------------ + output reg [31:0] addr, + output reg [31:0] data, + output strobe, + + output [31:0] debug +); + +//////////////////////////////////////////////////////////////////////// +///////////////////////////// Begin R T L ////////////////////////////// +//////////////////////////////////////////////////////////////////////// + + //------------------------------------------------------------------ + // Control write state machine responds to AXI control writes + // Used for setting the state of the various FIFOs + //------------------------------------------------------------------ + localparam STATE_ADDR = 0; + localparam STATE_DATA = 1; + localparam STATE_WRITE = 2; + + reg [1:0] state; + + always @(posedge clk) begin + if (rst) begin + state <= STATE_ADDR; + addr <= 0; + data <= 0; + end + else case (state) + + STATE_ADDR: begin + if (AXI_AWVALID && AXI_AWREADY) begin + addr <= (AXI_AWADDR - CONFIG_BASE); + state <= STATE_DATA; + end + end + + STATE_DATA: begin + if (AXI_WVALID && AXI_WREADY) begin + data <= AXI_WDATA; + state <= STATE_WRITE; + end + end + + STATE_WRITE: begin + state <= STATE_ADDR; + end + + default: state <= STATE_ADDR; + + endcase //state + end + + assign strobe = (state == STATE_WRITE); + + //assign to slave write + assign AXI_AWREADY = (state == STATE_ADDR); + assign AXI_WREADY = (state == STATE_DATA); + assign AXI_BRESP = 0; + assign AXI_BVALID = AXI_BREADY; //FIXME - we can choose not to assert valid + +endmodule //zf_slave_settings |
