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!

取消
显示结果 
搜索替代 
您的意思是: 
Observer kane06
Observer
535 次查看
注册日期: ‎01-22-2019

在不同位宽的RAM间移动数据

转到解答

DDR的可选位宽只有16或者32位,而Block RAM则可以设置跟高的位宽,那么数据在他们之间怎么移动呢?

比如DDR到64位的BRAM,是不是高位填0?

那么从64位BRAM到32位DDR呢?

0 项奖励
1 个已接受解答

已接受的解答
Xilinx Employee
Xilinx Employee
383 次查看
注册日期: ‎06-02-2017

回复: 在不同位宽的RAM间移动数据

转到解答

Hi @kane06 

AXI Interconnect系统里数据是以byte为基本单位的,数据位宽转换和地址位宽会同步重新排列。不会存在补0或者丢数的情况。

比如32-bit DDR里存的数据(从user interface的角度):

0: 04030201

4: 08070605

8: 0C0B0A09

如果转移到16-bit的设备中,

0:0201

2:0403

4:0605

6:0807

8:0A09

A:0C0B

 

PS DDR配置中的effective data address为实际外部连接的器件DQ的宽度,和用户侧的位宽并不一致。比如32bit的DQ,用户侧位宽可能为32*8=256bit。

0 项奖励
10 条回复10
Xilinx Employee
Xilinx Employee
526 次查看
注册日期: ‎06-02-2017

回复: 在不同位宽的RAM间移动数据

转到解答

Hi @kane06 

你这里提到的DDR的位宽是指DDR物理接口的位宽(DQ宽度)吗?

另外你的设计是纯逻辑设计还是基于Block Design的IPI设计?

0 项奖励
Explorer
Explorer
524 次查看
注册日期: ‎05-29-2018

回复: 在不同位宽的RAM间移动数据

转到解答

用AXI Data Width Converter 转换位宽 ,不过最低位宽32位,BRAM 用AXI Bram Control 控制器 ,16位要自己写Code了。

0 项奖励
Xilinx Employee
Xilinx Employee
505 次查看
注册日期: ‎06-02-2017

回复: 在不同位宽的RAM间移动数据

转到解答

Hi @junhawk 

其实可以不用的,DDR的MIG控制器和AXI BRAM Controller挂载载同一个axi interconnect的两个master接口下。

数据的搬移可以在axi interconnect的slave端口连接一个CDMA来实现。

不需要写对MIG和BRAM来HDL代码,但是要对CDMA进行控制,建议用一个软核Microblaze来实现,也可以直接写一个axi lite的控制逻辑。

0 项奖励
Explorer
Explorer
498 次查看
注册日期: ‎05-29-2018

回复: 在不同位宽的RAM间移动数据

转到解答
位宽转换不自己手动设,Interconnect 会自己生成一个,这个IP肯定是要用到的,这个应用肯定用软核方便啊,都是AXI总线
0 项奖励
Observer kane06
Observer
397 次查看
注册日期: ‎01-22-2019

回复: 在不同位宽的RAM间移动数据

转到解答

感谢,其实我想问的主要是内存数据的结构。

举个例子,比如在16位ddr里面数据是这样的:

addr   data

0        aaaa

1         bbbb

2         cccc

现在要用DMA搬运到32位block ram里面,那么结构是这样(高位填0):

addr   data

0        0000_aaaaa

1         0000_bbbb

2        0000_cccc

还是这样(拼接):

addr   data

0         aaaa_bbbb

1          cccc_0000

同理,从32到16位是舍弃高位?还是拆分成两个数据?

0 项奖励
Observer kane06
Observer
393 次查看
注册日期: ‎01-22-2019

回复: 在不同位宽的RAM间移动数据

转到解答

@lettertu 

对了,之前说的那个ddr32位是我看到processing system里面ddr设定的effective dram bus width, 不知道存储单元里面是不是一致的

0 项奖励
Xilinx Employee
Xilinx Employee
384 次查看
注册日期: ‎06-02-2017

回复: 在不同位宽的RAM间移动数据

转到解答

Hi @kane06 

AXI Interconnect系统里数据是以byte为基本单位的,数据位宽转换和地址位宽会同步重新排列。不会存在补0或者丢数的情况。

比如32-bit DDR里存的数据(从user interface的角度):

0: 04030201

4: 08070605

8: 0C0B0A09

如果转移到16-bit的设备中,

0:0201

2:0403

4:0605

6:0807

8:0A09

A:0C0B

 

PS DDR配置中的effective data address为实际外部连接的器件DQ的宽度,和用户侧的位宽并不一致。比如32bit的DQ,用户侧位宽可能为32*8=256bit。

0 项奖励
Observer kane06
Observer
355 次查看
注册日期: ‎01-22-2019

回复: 在不同位宽的RAM间移动数据

转到解答

@lettertu 原来如此,明白了。

还有个几个问题请教一下,列如我有个32位block ram,数据跟你的例子一样:

0: 04030201

4: 08070605

8: 0C0B0A09

要是这个时候我写入或者读取地址异常,比如1,2,会发生什么?

以及从block ram的角度看,他的地址是不是一定从000...0开始?推广到普通的片上sram是否也成立?

感谢!

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
348 次查看
注册日期: ‎06-02-2017

回复: 在不同位宽的RAM间移动数据

转到解答

Hi @kane06 

读写1/2之类的地址,返回的数据应该也是04030201,你可以实际验证一下。

地址不一定从0开始?你是指CPU访问外设的地址吗?

如果是,这些地址是Interconnect用于区分不同设备,经过Interconnect之后,地址依然是从0开始。

0 项奖励
Observer kane06
Observer
343 次查看
注册日期: ‎01-22-2019

回复: 在不同位宽的RAM间移动数据

转到解答

@lettertu 

明白了,谢谢 :)

0 项奖励