选择我之前写的模块add,点击ok(代码见页尾1)
// // Verilog attributes are used to declare signal interfaces and set parameters on them. // Due to the language, the attributes need to be placed before a port which is part of the interface. // When adding one or more parameters for an interface, a single attribute with multiple // key value pairs should be added to before of the ports that is mapped into the interface. // Generally, the form of the attributes are: // (* X_INTERFACE_INFO = "<interface vlnv> <interface_name> <logical_port_name>" *) // (* X_INTERFACE_PARAMETER = "<parameter_name1> <parameter_value1>, <parameter_name2> <parameter_value2>" *) // input <portname>;
有的时候Vivado可以根据RTL Module自动推断出模块内的接口,这时候可以不用,但是自动推断的接口,经常会有莫名其妙的问题。如果系统内没有满足自己需要的接口,可以自定义接口,同样可以被IP Integrator HDL使用。
1.
module add( input A, input B, output [1:0] C ); endmodule2.
module axi4_dma_controller_top #( parameter AXI4_DATA_WIDTH = 'h100, // AXI4 master data width - 256 parameter AXI4_ADDR_WIDTH = 'h20, // AXI4 master address width parameter AXI4_LENGTH_WIDTH = 'h8, // AXI4 master burst length width parameter AXI4_ID_WIDTH = 'h2, // AXI4 master ID width parameter AXI4_MASTER_ID = 'h1, // AXI4 master ID parameter AXI4_CLK_FREQ = 'hc8, // axi4 master clock frequency in MHz - 200 parameter DMA_CONTROLLER_ADDR = 'h000000 // axi4lite slave address base )( // axi4_dma_controller output dma_done_event, // dma done interrupt (rising edge, s_clk0 domain) input axi4_aclk, // AXI4 master clock output [AXI4_ADDR_WIDTH-1:0] axi4_dma_length, // AXI4 DMA controller length output [AXI4_ADDR_WIDTH-1:0] axi4_dma_read_start_addr, // AXI4 DMA controller read start address output [AXI4_ADDR_WIDTH:0] axi4_dma_read_current_addr, // AXI4 DMA controller read current address output [AXI4_ADDR_WIDTH-1:0] axi4_dma_write_start_addr, // AXI4 DMA controller write start address output [AXI4_ADDR_WIDTH:0] axi4_dma_write_current_addr, // AXI4 DMA controller write current address input axi4_dma_read_enable, // AXI4 DMA controller read enable in threshold/stream mode // AXI4Lite_slave input s_axil_aclk0, input s_axil_aresetn0, input [31:0] s_axil_awaddr0, input s_axil_awvalid0, output s_axil_awready0, input [31:0] s_axil_wdata0, input [3:0] s_axil_wstrb0, input s_axil_wvalid0, output s_axil_wready0, output [1:0] s_axil_bresp0, output s_axil_bvalid0, input s_axil_bready0, input [31:0] s_axil_araddr0, input s_axil_arvalid0, output s_axil_arready0, output [31:0] s_axil_rdata0, output [1:0] s_axil_rresp0, output s_axil_rvalid0, input s_axil_rready0, // AXI4_master output m_axi_aclk0, output m_axi_aresetn0, output [AXI4_ID_WIDTH-1:0] m_axi_awid0, output [AXI4_ADDR_WIDTH-1:0] m_axi_awaddr0, output [AXI4_LENGTH_WIDTH-1:0] m_axi_awlen0, output [2:0] m_axi_awsize0, output [1:0] m_axi_awburst0, output [3:0] m_axi_awcache0, output [2:0] m_axi_awprot0, output m_axi_awvalid0, input m_axi_awready0, output [AXI4_DATA_WIDTH-1:0] m_axi_wdata0, output [AXI4_DATA_WIDTH/8-1:0] m_axi_wstrb0, output m_axi_wlast0, output m_axi_wvalid0, input m_axi_wready0, input [AXI4_ID_WIDTH-1:0] m_axi_bid0, input [1:0] m_axi_bresp0, input m_axi_bvalid0, output m_axi_bready0, output [AXI4_ID_WIDTH-1:0] m_axi_arid0, output [AXI4_ADDR_WIDTH-1:0] m_axi_araddr0, output [AXI4_LENGTH_WIDTH-1:0] m_axi_arlen0, output [2:0] m_axi_arsize0, output [1:0] m_axi_arburst0, output [3:0] m_axi_arcache0, output [2:0] m_axi_arprot0, output m_axi_arvalid0, input m_axi_arready0, input [AXI4_ID_WIDTH-1:0] m_axi_rid0, input [AXI4_DATA_WIDTH-1:0] m_axi_rdata0, input [1:0] m_axi_rresp0, input m_axi_rlast0, input m_axi_rvalid0, output m_axi_rready0 ); endmodule
3.
module axi4_dma_controller_top #( parameter AXI4_DATA_WIDTH = 'h100, // AXI4 master data width - 256 parameter AXI4_ADDR_WIDTH = 'h20, // AXI4 master address width parameter AXI4_LENGTH_WIDTH = 'h8, // AXI4 master burst length width parameter AXI4_ID_WIDTH = 'h2, // AXI4 master ID width parameter AXI4_MASTER_ID = 'h1, // AXI4 master ID parameter AXI4_CLK_FREQ = 'hc8, // axi4 master clock frequency in MHz - 200 parameter DMA_CONTROLLER_ADDR = 'h109000 // axi4lite slave address base )( // axi4_dma_controller output dma_done_event, // dma done interrupt (rising edge, s_clk0 domain) input axi4_aclk, // AXI4 master clock output [AXI4_ADDR_WIDTH-1:0] axi4_dma_length, // AXI4 DMA controller length output [AXI4_ADDR_WIDTH-1:0] axi4_dma_read_start_addr, // AXI4 DMA controller read start address output [AXI4_ADDR_WIDTH:0] axi4_dma_read_current_addr, // AXI4 DMA controller read current address output [AXI4_ADDR_WIDTH-1:0] axi4_dma_write_start_addr, // AXI4 DMA controller write start address output [AXI4_ADDR_WIDTH:0] axi4_dma_write_current_addr, // AXI4 DMA controller write current address input axi4_dma_read_enable, // AXI4 DMA controller read enable in threshold/stream mode // AXI4Lite_slave (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite AWADDR" *) input [31:0] s_axil_awaddr0, // Write address (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite AWVALID" *) input s_axil_awvalid0, // Write address valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite AWREADY" *) output s_axil_awready0, // Write address ready (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite WDATA" *) input [31:0] s_axil_wdata0, // Write data (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite WSTRB" *) input [3:0] s_axil_wstrb0, // Write strobes (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite WVALID" *) input s_axil_wvalid0, // Write valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite WREADY" *) output s_axil_wready0, // Write ready (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite BRESP" *) output [1:0] s_axil_bresp0, // Write response (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite BVALID" *) output s_axil_bvalid0, // Write response valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite BREADY" *) input s_axil_bready0, // Write response ready (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite ARADDR" *) input [31:0] s_axil_araddr0, // Read address (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite ARVALID" *) input s_axil_arvalid0, // Read address valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite ARREADY" *) output s_axil_arready0, // Read address ready (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite RDATA" *) output [31:0] s_axil_rdata0, // Read data (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite RRESP" *) output [1:0] s_axil_rresp0, // Read response (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite RVALID" *) output s_axil_rvalid0, // Read valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 S_AXI_Lite RREADY" *) input s_axil_rready0, // Read ready (optional) (* X_INTERFACE_PARAMETER = "ASSOCIATED_BUSIF S_AXI_Lite, ASSOCIATED_RESET s_axil_aresetn0, FREQ_HZ 100000000" *) (* X_INTERFACE_INFO = "xilinx.com:signal:clock:1.0 s_axil_aclk0 CLK" *) input s_axil_aclk0, (* X_INTERFACE_PARAMETER = "POLARITY ACTIVE_LOW" *) (* X_INTERFACE_INFO = "xilinx.com:signal:reset:1.0 s_axil_aresetn0 RST" *) output s_axi_aresetn0, // AXI4_master output [AXI4_ID_WIDTH-1:0] m_axi_awid0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI AWADDR" *) output [AXI4_ADDR_WIDTH-1:0] m_axi_awaddr0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI AWLEN" *) output [AXI4_LENGTH_WIDTH-1:0] m_axi_awlen0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI AWSIZE" *) output [2:0] m_axi_awsize0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI AWBURST" *) output [1:0] m_axi_awburst0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI AWCACHE" *) output [3:0] m_axi_awcache0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI AWPROT" *) output [2:0] m_axi_awprot0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI AWVALID" *) input m_axil_awvalid0, // Write address valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI AWREADY" *) output m_axil_awready0, // Write address ready (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI WDATA" *) output [AXI4_DATA_WIDTH-1:0] m_axi_wdata0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI WSTRB" *) output [AXI4_DATA_WIDTH/8-1:0] m_axi_wstrb0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI WLAST" *) output m_axi_wlast0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI WVALID" *) input m_axil_wvalid0, // Write valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI WREADY" *) output m_axil_wready0, // Write ready (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI BID" *) input [AXI4_ID_WIDTH-1:0] m_axi_bid0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI BRESP" *) output [1:0] m_axil_bresp0, // Write response (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI BVALID" *) output m_axil_bvalid0, // Write response valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI BREADY" *) input m_axil_bready0, // Write response ready (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI ARID" *) output [AXI4_ID_WIDTH-1:0] m_axi_arid0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI ARADDR" *) output [AXI4_ADDR_WIDTH-1:0] m_axi_araddr0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI ARLEN" *) output [AXI4_LENGTH_WIDTH-1:0] m_axi_arlen0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI ARSIZE" *) output [2:0] m_axi_arsize0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI ARBURST" *) output [1:0] m_axi_arburst0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI ARCACHE" *) output [3:0] m_axi_arcache0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI ARPROT" *) output [2:0] m_axi_arprot0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI ARVALID" *) input m_axil_arvalid0, // Read address valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI ARREADY" *) output m_axil_arready0, // Read address ready (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI RID" *) input [AXI4_ID_WIDTH-1:0] m_axi_rid0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI RDATA" *) input [AXI4_DATA_WIDTH-1:0] m_axi_rdata0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI RRESP" *) output [1:0] m_axil_rresp0, // Read response (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI RLAST" *) input m_axi_rlast0, (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI RVALID" *) output m_axil_rvalid0, // Read valid (optional) (* X_INTERFACE_INFO = "xilinx.com:interface:aximm:1.0 M_AXI RREADY" *) input m_axil_rready0, // Read ready (optional) (* X_INTERFACE_PARAMETER = "ASSOCIATED_BUSIF M_AXI, ASSOCIATED_RESET m_axi_aresetn0, FREQ_HZ 100000000" *) (* X_INTERFACE_INFO = "xilinx.com:signal:clock:1.0 m_axil_aclk0 CLK" *) output m_axi_aclk0, (* X_INTERFACE_PARAMETER = "POLARITY ACTIVE_LOW" *) (* X_INTERFACE_INFO = "xilinx.com:signal:reset:1.0 m_axil_aresetn0 RST" *) output m_axi_aresetn0 ); endmodule
原创作品,未经权利人授权禁止转载。详情见转载须知。 举报文章
我要举报该内容理由
×