UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

取消
显示结果 
搜索替代 
您的意思是: 
Highlighted
Visitor darktigergod
Visitor
236 次查看
注册日期: ‎10-05-2019

axi interconncet多对一互连输出不定态

转到解答

通过axi外设ip创建了两个master接口和一个slave接口,通过一个interconnect进行连接,如下图block

1.PNGID根据vivado生成的0,没有进行更改,地址赋为0,地址管理器如下图所示

 

3.PNG

第一个master产生0x10000001开始递增的数据,第二个master产生0x20000001开始递增的数据,汇聚到interconnect crossbar之后两个两个数据不一样的部分产生为不定态,如下图

 

2.PNG

想请教一下,如何解决这个问题?以及在使用interconnect进行多对一连接时,有哪些地方需要进行怎样具体的配置呢?是否有例子参考。感谢回复

0 项奖励
1 个已接受解答

已接受的解答
Moderator
Moderator
83 次查看
注册日期: ‎07-01-2019

回复: axi interconncet多对一互连输出不定态

转到解答

你好 @darktigergod

 

是这样的,之前一条回复我的工程用的是AXI Lite的,后来改成AXI Full的也遇到了不定态的问题。

原因在于你这两个master中定义的地址应该和address editor中分配给slave的保持一致。

比如你的工程中address editor给的是0x00000000-0x0000ffff,那么你的master0可以给这个范围内的地址,而不是0x40000040/80

地址给的不对slave那一端不会给出响应,也就没有valid信号

然后数据重叠的问题,要对应valid ready last这三个信号来看。

附件是我的工程,其中master修改了burst length(默认16改成了2)、修改了C_MASTER_LENGTH(默认12改成了4)

 

-------------------------------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
5 条回复5
Moderator
Moderator
175 次查看
注册日期: ‎07-01-2019

回复: axi interconncet多对一互连输出不定态

转到解答

你好 @darktigergod

 

这个仿真结果中,两个master的wdata同时改变比较奇怪,不知道你在自动生成的代码中修改了什么。

在自动生成的AXI master IP代码中wdata是这样驱动的:

	  // Write data generation                                      
	  always @(posedge M_AXI_ACLK)                                  
	      begin                                                     
	        if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 )                                
	          begin                                                 
	            axi_wdata <= C_M_START_DATA_VALUE;                  
	          end                                                   
	        // Signals a new write address/ write data is           
	        // available by user logic                              
	        else if (M_AXI_WREADY && axi_wvalid)                    
	          begin                                                 
	            axi_wdata <= C_M_START_DATA_VALUE + write_index;    
	          end                                                   
	        end          	                  

AXI Interconnect IP会对多路数据进行仲裁,在一路信号握手结束之后数据才会跟着变,下图是我做的一个仿真结果,仅供参考

可以将对应AXI Channel的valid和ready信号都拉出来看一下

另外可以分享一下你的工程吗?便于更快定位到问题

-------------------------------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
1.jpg
Visitor darktigergod
Visitor
162 次查看
注册日期: ‎10-05-2019

回复: axi interconncet多对一互连输出不定态

转到解答

您好,

很荣幸得到您的回复。

我在master中改动数据产生的代码只改动了数据前四位以作区分,分别由0x10000001和0x20000001开始递增,之后在826行左右更改为:

always @(posedge M_AXI_ACLK)
begin
if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1)
writes_done <= 1'b0;

//The writes_done should be associated with a bready response
//else if (M_AXI_BVALID && axi_bready && (write_burst_counter == {(C_NO_BURSTS_REQ-1){1}}) && axi_wlast)
else if (M_AXI_BVALID && (write_burst_counter[C_NO_BURSTS_REQ]) && axi_bready && 1'b0)
writes_done <= 1'b1;
else
writes_done <= writes_done;
end

使得writies_done信号永远不为1,让状态机保持在写的状态。

现在我将这两个master和一个slave通过interconnect进行连接,连接示意图与我在帖子中的一致,现在的interconnect仿真图像是:

 

仿真1.PNG

有两个存在的问题 1、交替传输的两个master,在一轮burst的首尾有重复的数据  2、interconnect的写数据是正确的,但是valid的信号一直为0,无法与slave进行axi的通信

请问对于二对一的interconnect使用,采取默认的值有哪些地方需要改动吗?我看到你的仿真图非常正确,不知可否分享您的工程供我学习参考呢?我的邮箱是798358520@qq.com 希望得到您的解答或是参考的工程  万分感谢 

 

0 项奖励
Moderator
Moderator
122 次查看
注册日期: ‎07-01-2019

回复: axi interconncet多对一互连输出不定态

转到解答

你好 @darktigergod

 

请问你这样搭block design的需求是什么?

一般来说不建议用户自己例化axi interconnect,通常都是配合ZYNQ或Microblaze来实现的。

-------------------------------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Visitor darktigergod
Visitor
117 次查看
注册日期: ‎10-05-2019

回复: axi interconncet多对一互连输出不定态

转到解答

我希望用axi接口将两个buffer或是fifo的数据通过axiinterconnecte发送到一个slave接口的buffer中,不可以直接这样搭建吗? 我之前的问题您可以解答一下吗?  或是分享一下您的工程?

感谢回复

0 项奖励
Moderator
Moderator
84 次查看
注册日期: ‎07-01-2019

回复: axi interconncet多对一互连输出不定态

转到解答

你好 @darktigergod

 

是这样的,之前一条回复我的工程用的是AXI Lite的,后来改成AXI Full的也遇到了不定态的问题。

原因在于你这两个master中定义的地址应该和address editor中分配给slave的保持一致。

比如你的工程中address editor给的是0x00000000-0x0000ffff,那么你的master0可以给这个范围内的地址,而不是0x40000040/80

地址给的不对slave那一端不会给出响应,也就没有valid信号

然后数据重叠的问题,要对应valid ready last这三个信号来看。

附件是我的工程,其中master修改了burst length(默认16改成了2)、修改了C_MASTER_LENGTH(默认12改成了4)

 

-------------------------------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------