dma ram test
This commit is contained in:
@@ -14,6 +14,8 @@ VERILOG_SOURCES += $(LIBS_DIR)/axi/axi_reg/axi4l_reg_map.sv
|
|||||||
VERILOG_SOURCES += $(LIBS_DIR)/external/verilog-axi/rtl/axi_dma_rd.v
|
VERILOG_SOURCES += $(LIBS_DIR)/external/verilog-axi/rtl/axi_dma_rd.v
|
||||||
VERILOG_SOURCES += $(LIBS_DIR)/external/verilog-axi/rtl/axi_dma_wr.v
|
VERILOG_SOURCES += $(LIBS_DIR)/external/verilog-axi/rtl/axi_dma_wr.v
|
||||||
VERILOG_SOURCES += $(LIBS_DIR)/external/verilog-axi/rtl/axi_dma.v
|
VERILOG_SOURCES += $(LIBS_DIR)/external/verilog-axi/rtl/axi_dma.v
|
||||||
|
VERILOG_SOURCES += $(LIBS_DIR)/external/verilog-axi/rtl/axi_ram.v
|
||||||
|
VERILOG_SOURCES += $(RTL_DIR)/axi_ram_wrapper.sv
|
||||||
VERILOG_SOURCES += $(RTL_DIR)/controller.sv
|
VERILOG_SOURCES += $(RTL_DIR)/controller.sv
|
||||||
VERILOG_SOURCES += $(RTL_DIR)/dma_controller.sv
|
VERILOG_SOURCES += $(RTL_DIR)/dma_controller.sv
|
||||||
VERILOG_SOURCES += $(RTL_DIR)/shaper_axis_desc.sv
|
VERILOG_SOURCES += $(RTL_DIR)/shaper_axis_desc.sv
|
||||||
|
|||||||
@@ -1,236 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<wave_config>
|
|
||||||
<wave_state>
|
|
||||||
</wave_state>
|
|
||||||
<db_ref_list>
|
|
||||||
<db_ref path="tb_control_behav.wdb" id="1">
|
|
||||||
<top_modules>
|
|
||||||
<top_module name="glbl" />
|
|
||||||
<top_module name="tb_control" />
|
|
||||||
</top_modules>
|
|
||||||
</db_ref>
|
|
||||||
</db_ref_list>
|
|
||||||
<zoom_setting>
|
|
||||||
<ZoomStartTime time="160.614 ns"></ZoomStartTime>
|
|
||||||
<ZoomEndTime time="1,564.737 ns"></ZoomEndTime>
|
|
||||||
<Cursor1Time time="1,330.716 ns"></Cursor1Time>
|
|
||||||
</zoom_setting>
|
|
||||||
<column_width_setting>
|
|
||||||
<NameColumnWidth column_width="479"></NameColumnWidth>
|
|
||||||
<ValueColumnWidth column_width="116"></ValueColumnWidth>
|
|
||||||
</column_width_setting>
|
|
||||||
<WVObjectSize size="34" />
|
|
||||||
<wvobject fp_name="/tb_control/dac_clk_in" type="logic">
|
|
||||||
<obj_property name="ElementShortName">dac_clk_in</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_clk_in</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/adc_clk_in" type="logic">
|
|
||||||
<obj_property name="ElementShortName">adc_clk_in</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">adc_clk_in</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/rst_n" type="logic">
|
|
||||||
<obj_property name="ElementShortName">rst_n</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">rst_n</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#800080</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/rst_soft" type="logic">
|
|
||||||
<obj_property name="ElementShortName">rst_soft</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">rst_soft</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#008080</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/start" type="logic">
|
|
||||||
<obj_property name="ElementShortName">start</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">start</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#E0FFFF</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/adc_start_pulse" type="logic">
|
|
||||||
<obj_property name="ElementShortName">adc_start_pulse</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">adc_start_pulse</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/dac_start_pulse" type="logic">
|
|
||||||
<obj_property name="ElementShortName">dac_start_pulse</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_start_pulse</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/busy" type="logic">
|
|
||||||
<obj_property name="ElementShortName">busy</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">busy</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#E0FFFF</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/finish" type="logic">
|
|
||||||
<obj_property name="ElementShortName">finish</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">finish</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FAAFBE</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/finish_pulse" type="logic">
|
|
||||||
<obj_property name="ElementShortName">finish_pulse</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">finish_pulse</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/cfg_bus_valid" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_bus_valid</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_bus_valid</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FF0080</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/cfg_bus_input" type="array">
|
|
||||||
<obj_property name="ElementShortName">cfg_bus_input[159:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_bus_input[159:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FF0080</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dac_pulse_width" type="array">
|
|
||||||
<obj_property name="ElementShortName">dac_pulse_width[31:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_pulse_width[31:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dac_pulse_period" type="array">
|
|
||||||
<obj_property name="ElementShortName">dac_pulse_period[31:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_pulse_period[31:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dac_pulse_height" type="array">
|
|
||||||
<obj_property name="ElementShortName">dac_pulse_height[11:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_pulse_height[11:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
<obj_property name="Radix">HEXRADIX</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dac_pulse_num" type="array">
|
|
||||||
<obj_property name="ElementShortName">dac_pulse_num[15:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_pulse_num[15:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/adc_pulse_period" type="array">
|
|
||||||
<obj_property name="ElementShortName">adc_pulse_period[31:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">adc_pulse_period[31:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/adc_pulse_num" type="array">
|
|
||||||
<obj_property name="ElementShortName">adc_pulse_num[15:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">adc_pulse_num[15:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/adc_window_size" type="array">
|
|
||||||
<obj_property name="ElementShortName">adc_window_size[31:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">adc_window_size[31:0]</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dac_start" type="logic">
|
|
||||||
<obj_property name="ElementShortName">dac_start</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_start</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/adc_start" type="logic">
|
|
||||||
<obj_property name="ElementShortName">adc_start</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">adc_start</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dac_rst" type="logic">
|
|
||||||
<obj_property name="ElementShortName">dac_rst</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_rst</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/adc_rst" type="logic">
|
|
||||||
<obj_property name="ElementShortName">adc_rst</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">adc_rst</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="group499" type="group">
|
|
||||||
<obj_property name="label">tb signals</obj_property>
|
|
||||||
<obj_property name="DisplayName">label</obj_property>
|
|
||||||
<wvobject fp_name="/tb_control/dac_rst_count" type="array">
|
|
||||||
<obj_property name="ElementShortName">dac_rst_count[31:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_rst_count[31:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/adc_rst_count" type="array">
|
|
||||||
<obj_property name="ElementShortName">adc_rst_count[31:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">adc_rst_count[31:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dac_start_count" type="array">
|
|
||||||
<obj_property name="ElementShortName">dac_start_count[31:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">dac_start_count[31:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/adc_start_count" type="array">
|
|
||||||
<obj_property name="ElementShortName">adc_start_count[31:0]</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">adc_start_count[31:0]</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_req_toggle_adc" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_req_toggle_adc</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_req_toggle_adc</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFFF00</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_req_toggle_dac" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_req_toggle_dac</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_req_toggle_dac</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FFFF00</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_ack_toggle_adc" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_ack_toggle_adc</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_ack_toggle_adc</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FF00FF</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_ack_toggle_dac" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_ack_toggle_dac</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_ack_toggle_dac</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#FF00FF</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_wait_adc_ack" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_wait_adc_ack</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_wait_adc_ack</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#0000FF</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_wait_dac_ack" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_wait_dac_ack</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_wait_dac_ack</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#0000FF</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_req_pulse_adc" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_req_pulse_adc</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_req_pulse_adc</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#808000</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_req_pulse_dac" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_req_pulse_dac</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_req_pulse_dac</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#808000</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_ack_pulse_adc" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_ack_pulse_adc</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_ack_pulse_adc</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#DCDCDC</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
<wvobject fp_name="/tb_control/dut/cfg_ack_pulse_dac" type="logic">
|
|
||||||
<obj_property name="ElementShortName">cfg_ack_pulse_dac</obj_property>
|
|
||||||
<obj_property name="ObjectShortName">cfg_ack_pulse_dac</obj_property>
|
|
||||||
<obj_property name="CustomSignalColor">#DCDCDC</obj_property>
|
|
||||||
<obj_property name="UseCustomSignalColor">true</obj_property>
|
|
||||||
</wvobject>
|
|
||||||
</wave_config>
|
|
||||||
@@ -238,79 +238,6 @@ axis_flat_to_if #(
|
|||||||
.m_axis(dma_write_data)
|
.m_axis(dma_write_data)
|
||||||
);
|
);
|
||||||
|
|
||||||
// AXI4 MASTER DMA
|
|
||||||
|
|
||||||
axi4_if #(
|
|
||||||
.ADDR_W(dma_reg_pkg::AXI_ADDR_WIDTH),
|
|
||||||
.DATA_W(AXI_DATA_WIDTH),
|
|
||||||
.ID_W (AXI_ID_WIDTH),
|
|
||||||
.USER_W(AXI_USER_WIDTH)
|
|
||||||
) m_axi (
|
|
||||||
.aclk(ctrl_clk),
|
|
||||||
.aresetn(rst_n)
|
|
||||||
);
|
|
||||||
|
|
||||||
logic [AXI_USER_WIDTH-1:0] unused_awuser;
|
|
||||||
logic [AXI_USER_WIDTH-1:0] unused_wuser;
|
|
||||||
logic [AXI_USER_WIDTH-1:0] unused_aruser;
|
|
||||||
|
|
||||||
axi4_if_to_flat #(
|
|
||||||
.ADDR_W (dma_reg_pkg::AXI_ADDR_WIDTH),
|
|
||||||
.DATA_W (AXI_DATA_WIDTH),
|
|
||||||
.ID_W (AXI_ID_WIDTH),
|
|
||||||
.USER_W (AXI_USER_WIDTH)
|
|
||||||
) u_axi_if_to_flat (
|
|
||||||
.s_axi(m_axi),
|
|
||||||
|
|
||||||
.m_axi_awid (m_axi_awid),
|
|
||||||
.m_axi_awaddr (m_axi_awaddr),
|
|
||||||
.m_axi_awlen (m_axi_awlen),
|
|
||||||
.m_axi_awsize (m_axi_awsize),
|
|
||||||
.m_axi_awburst (m_axi_awburst),
|
|
||||||
.m_axi_awlock (m_axi_awlock),
|
|
||||||
.m_axi_awcache (m_axi_awcache),
|
|
||||||
.m_axi_awprot (m_axi_awprot),
|
|
||||||
.m_axi_awqos (),
|
|
||||||
.m_axi_awregion(),
|
|
||||||
.m_axi_awuser (unused_awuser),
|
|
||||||
.m_axi_awvalid (m_axi_awvalid),
|
|
||||||
.m_axi_awready (m_axi_awready),
|
|
||||||
|
|
||||||
.m_axi_wdata (m_axi_wdata),
|
|
||||||
.m_axi_wstrb (m_axi_wstrb),
|
|
||||||
.m_axi_wlast (m_axi_wlast),
|
|
||||||
.m_axi_wuser (unused_wuser),
|
|
||||||
.m_axi_wvalid (m_axi_wvalid),
|
|
||||||
.m_axi_wready (m_axi_wready),
|
|
||||||
|
|
||||||
.m_axi_bid (m_axi_bid),
|
|
||||||
.m_axi_bresp (m_axi_bresp),
|
|
||||||
.m_axi_buser ({AXI_USER_WIDTH{1'b0}}),
|
|
||||||
.m_axi_bvalid (m_axi_bvalid),
|
|
||||||
.m_axi_bready (m_axi_bready),
|
|
||||||
|
|
||||||
.m_axi_arid (m_axi_arid),
|
|
||||||
.m_axi_araddr (m_axi_araddr),
|
|
||||||
.m_axi_arlen (m_axi_arlen),
|
|
||||||
.m_axi_arsize (m_axi_arsize),
|
|
||||||
.m_axi_arburst (m_axi_arburst),
|
|
||||||
.m_axi_arlock (m_axi_arlock),
|
|
||||||
.m_axi_arcache (m_axi_arcache),
|
|
||||||
.m_axi_arprot (m_axi_arprot),
|
|
||||||
.m_axi_arqos (),
|
|
||||||
.m_axi_arregion(),
|
|
||||||
.m_axi_aruser (unused_aruser),
|
|
||||||
.m_axi_arvalid (m_axi_arvalid),
|
|
||||||
.m_axi_arready (m_axi_arready),
|
|
||||||
|
|
||||||
.m_axi_rid (m_axi_rid),
|
|
||||||
.m_axi_rdata (m_axi_rdata),
|
|
||||||
.m_axi_rresp (m_axi_rresp),
|
|
||||||
.m_axi_rlast (m_axi_rlast),
|
|
||||||
.m_axi_ruser ({AXI_USER_WIDTH{1'b0}}),
|
|
||||||
.m_axi_rvalid (m_axi_rvalid),
|
|
||||||
.m_axi_rready (m_axi_rready)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Controller ADC/DAC outputs.
|
// Controller ADC/DAC outputs.
|
||||||
@@ -365,9 +292,7 @@ axi4_if_to_flat #(
|
|||||||
.adc_rst(adc_rst),
|
.adc_rst(adc_rst),
|
||||||
|
|
||||||
.m_axis_read_data(dma_read_data),
|
.m_axis_read_data(dma_read_data),
|
||||||
.s_axis_write_data(dma_write_data),
|
.s_axis_write_data(dma_write_data)
|
||||||
|
|
||||||
.m_axi(m_axi)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
endmodule : tb_controller_wrapper_axil
|
endmodule : tb_controller_wrapper_axil
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import cocotb
|
import cocotb
|
||||||
from cocotb.clock import Clock
|
from cocotb.clock import Clock
|
||||||
from cocotb.handle import Immediate
|
|
||||||
from cocotb.triggers import RisingEdge
|
from cocotb.triggers import RisingEdge
|
||||||
from cocotbext.axi import AxiLiteBus, AxiLiteMaster
|
from cocotbext.axi import AxiLiteBus, AxiLiteMaster
|
||||||
from cocotbext.axi import AxiBus, AxiRam, AxiStreamBus, AxiStreamSource, AxiStreamSink
|
from cocotbext.axi import AxiBus, AxiRam, AxiStreamBus, AxiStreamSource, AxiStreamSink, AxiStreamFrame
|
||||||
|
|
||||||
|
|
||||||
# Register indexes from axi4l_reg_map_controller_pkg.sv
|
# Register indexes from axi4l_reg_map_controller_pkg.sv
|
||||||
@@ -140,77 +139,56 @@ async def simple_controller_start_check(dut):
|
|||||||
await RisingEdge(dut.dac_start)
|
await RisingEdge(dut.dac_start)
|
||||||
|
|
||||||
@cocotb.test()
|
@cocotb.test()
|
||||||
async def test_dma_write(dut):
|
async def simple_dma_mem_to_mem(dut):
|
||||||
tb = TB(dut)
|
tb = TB(dut)
|
||||||
await tb.reset()
|
await tb.reset()
|
||||||
|
|
||||||
data = bytes(range(64))
|
SRC_ADDR = 0x1000
|
||||||
|
LENGTH = 8
|
||||||
|
|
||||||
#write data into memory
|
tx_data = bytes([ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 ])
|
||||||
|
|
||||||
await tb.write_reg(REG_DESC_WRITE_ADDR, 0x1000)
|
## write part
|
||||||
await tb.write_reg(REG_DESC_WRITE_LEN_AND_TAG, 64)
|
|
||||||
|
|
||||||
|
await tb.write_reg(REG_DESC_WRITE_ADDR, SRC_ADDR)
|
||||||
|
await tb.write_reg(REG_DESC_WRITE_LEN_AND_TAG, LENGTH)
|
||||||
|
|
||||||
await tb.write_reg(REG_CONTROL, 1 << CTRL_SEND_DESC_WRITE)
|
await tb.write_reg(REG_CONTROL, 1 << CTRL_SEND_DESC_WRITE)
|
||||||
await RisingEdge(dut.ctrl_clk)
|
|
||||||
cocotb.start_soon(tb.axis_source.send(data))
|
|
||||||
|
|
||||||
for _ in range(200):
|
await tb.axis_source.send(AxiStreamFrame(tx_data))
|
||||||
|
|
||||||
|
for _ in range(20):
|
||||||
|
await RisingEdge(dut.ctrl_clk)
|
||||||
|
|
||||||
await tb.write_reg(REG_CONTROL, 1 << CTRL_TAKE_STATUS_WRITE)
|
await tb.write_reg(REG_CONTROL, 1 << CTRL_TAKE_STATUS_WRITE)
|
||||||
|
|
||||||
|
for _ in range(10):
|
||||||
await RisingEdge(dut.ctrl_clk)
|
await RisingEdge(dut.ctrl_clk)
|
||||||
|
|
||||||
status = await tb.read_reg( REG_STATUS_WRITE_LEN)
|
|
||||||
if status == 64:
|
|
||||||
break
|
|
||||||
|
|
||||||
else:
|
assert await tb.read_reg(REG_STATUS_WRITE_CONFIG) == 0
|
||||||
assert False, "DMA timeout"
|
assert await tb.read_reg(REG_STATUS_WRITE_LEN) == 0x8
|
||||||
|
|
||||||
|
## read part
|
||||||
|
|
||||||
mem = await tb.mem.read( 0x1000, 64)
|
await tb.write_reg(REG_DESC_READ_ADDR, SRC_ADDR)
|
||||||
assert mem == data
|
await tb.write_reg(REG_DESC_READ_LEN, LENGTH)
|
||||||
|
await tb.write_reg(REG_DESC_READ_CONFIG, 0x0000_0001)
|
||||||
@cocotb.test()
|
|
||||||
async def test_dma_read(dut):
|
|
||||||
tb = TB(dut)
|
|
||||||
await tb.reset()
|
|
||||||
|
|
||||||
data = bytes(range(64))
|
|
||||||
|
|
||||||
#read data from memory
|
|
||||||
|
|
||||||
await tb.mem.write( 0x2000, data)
|
|
||||||
|
|
||||||
await tb.write_reg( REG_DESC_READ_ADDR, 0x2000)
|
|
||||||
await tb.write_reg( REG_DESC_READ_LEN, 64)
|
|
||||||
await tb.write_reg( REG_DESC_READ_CONFIG, 1)
|
|
||||||
|
|
||||||
await tb.write_reg(REG_CONTROL, 1 << CTRL_SEND_DESC_READ)
|
await tb.write_reg(REG_CONTROL, 1 << CTRL_SEND_DESC_READ)
|
||||||
|
|
||||||
frame = await tb.axis_sink.recv()
|
rx_frame = await tb.axis_sink.recv()
|
||||||
assert frame.data == data
|
|
||||||
|
|
||||||
await tb.write_reg(
|
|
||||||
REG_CONTROL,
|
|
||||||
1 << CTRL_TAKE_STATUS_READ
|
|
||||||
)
|
|
||||||
|
|
||||||
for _ in range(100):
|
|
||||||
|
|
||||||
status = await tb.read_reg(
|
|
||||||
REG_READ_STATUS
|
|
||||||
)
|
|
||||||
|
|
||||||
if status != 0:
|
|
||||||
break
|
|
||||||
|
|
||||||
|
for _ in range(20):
|
||||||
await RisingEdge(dut.ctrl_clk)
|
await RisingEdge(dut.ctrl_clk)
|
||||||
else:
|
|
||||||
assert False, "DMA read status timeout"
|
|
||||||
|
|
||||||
|
await tb.write_reg(REG_CONTROL, 1 << CTRL_TAKE_STATUS_READ)
|
||||||
|
|
||||||
|
for _ in range(10):
|
||||||
|
await RisingEdge(dut.ctrl_clk)
|
||||||
|
|
||||||
|
assert await tb.read_reg(REG_READ_STATUS) == 0x1
|
||||||
|
|
||||||
|
assert bytes(rx_frame) == tx_data
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user