- 主题:请教:fpga实现memcpy
对两个向量x[128]和data[128],还有两个指针x_ptr, d_ptr和长度len,想实现 的功能是memcpy(x+x_ptr, d+d_ptr, len),我在verilog里的写法是
reg [7:0] out[0:127];
always @ (posedge clk)
begin
for (int i=0; i<128; i++) begin
if (i < x_ptr)
out[i] <= x[i];
else if (x < x_ptr+len)
out[i] <= data[i-x_ptr+d_ptr];
else
out[i] <= x[i];
end
end
但是这样综合后的逻辑使用太多,而且时序也很差,请问板上的大佬,应该怎么实现内存拷贝?可以不要求一拍出结果,128长度的向量如果能在10来拍出结果也是ok的,主要想要时序好,逻辑少用点。
多谢
--
FROM 1.119.134.*
有遇到过这种问题的tx吗?谢谢
【 在 lwd () 的大作中提到: 】
: 对两个向量x[128]和data[128],还有两个指针x_ptr, d_ptr和长度len,想实现 的功能是memcpy(x+x_ptr, d+d_ptr, len),我在verilog里的写法是
:
: reg [7:0] out[0:127];
:
--
FROM 223.72.40.*
你的memory在哪
【 在 lwd (无) 的大作中提到: 】
: 对两个向量x[128]和data[128],还有两个指针x_ptr, d_ptr和长度len,想实现 的功能是memcpy(x+x_ptr, d+d_ptr, len),我在verilog里的写法是
: reg [7:0] out[0:127];
: always @ (posedge clk)
: ...................
--
FROM 123.118.9.*
没有真实的memory,就是寄存器数组
【 在 BLC () 的大作中提到: 】
: 你的memory在哪
: 【 在 lwd (无) 的大作中提到: 】
--
FROM 223.72.40.*
我的理解
fpga里面的memcpy真的就是一个copy控制器
实现的是memory control的功能
寄存器数组的赋值其实是脉动或者流水级
【 在 lwd (无) 的大作中提到: 】
: 没有真实的memory,就是寄存器数组
--
FROM 123.118.9.*
是的是的,其实就是将一个寄存器 数组中的部分内容拷贝到另外一个寄存器数组中,其中拷贝内容的长度和两个数组的起始地址都是变量。
谢谢
【 在 BLC () 的大作中提到: 】
: 我的理解
: fpga里面的memcpy真的就是一个copy控制器
: 实现的是memory control的功能
:
--
FROM 223.72.40.*
不使用内存控制器 怎么实现?
【 在 lwd () 的大作中提到: 】
: 对两个向量x[128]和data[128],还有两个指针x_ptr, d_ptr和长度len,想实现 的功能是memcpy(x+x_ptr, d+d_ptr, len),我在verilog里的写法是
:
: reg [7:0] out[0:127];
:
--
FROM 223.104.3.*
为什么要copy 用引用不行么
数据更新频率和访问频率是什么特征
【 在 lwd 的大作中提到: 】
: 对两个向量x[128]和data[128],还有两个指针x_ptr, d_ptr和长度len,想实现 的功能是memcpy(x+x_ptr, d+d_ptr, len),我在verilog里的写法是
: reg [7:0] out[0:127];
: always @ (posedge clk)
: ...................
--
FROM 106.39.50.*
引用倒是也可以,不过用起来不方便,每次引用时都需要做判断,每个元素要使用哪个数组中的值
【 在 Qlala () 的大作中提到: 】
: 为什么要copy 用引用不行么
: 数据更新频率和访问频率是什么特征
: 【 在 lwd 的大作中提到: 】
--
FROM 223.72.43.*
看我说的第二句话
要列出使用场景 更新频率等特征 才能有相应的处理办法
编译器都知道优化memcpy 你在fpga里搞这个简直不忍直视
【 在 lwd 的大作中提到: 】
: 引用倒是也可以,不过用起来不方便,每次引用时都需要做判断,每个元素要使用哪个数组中的值
:
--
FROM 106.39.50.*