- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用旋风 V 在双端口 RAM (HPS_master->FPGA_slave) 上执行读/写。对于 32 位数据,它可以通过使用 ioread32 和 iowrite32 来执行,但它不能满足我们的数据传输目标速度(在仅调整到 400MHz 后在信号选项卡中需要更长的周期)。Cyclone V 使用 ARM Cortex-A9 MPCore 处理器( 32 位),但如数据表中所述,AXI 总线能够配置高达 64 位。 asm/io.h 只支持到 ioread32/iowrite32。我们尝试使用 altera 软件在 HPS-FPGA 中配置 64 位,我尝试使用下面的代码进行读/写,但我得到了错误的数据。任何适当的解决方案和方法来验证这一点?
static void iowrite64(u64 val, u64 addr)
{
iowrite32((u32)val, (u32) addr);
iowrite32(val >> 32, (u32)addr + 1);
}
static u64 ioread64 (u64 addr)
{
return ioread32(addr) | ((u64)ioread32((u32)addr + 1) << 32);
}
static inline u64 __raw_readq(const volatile void __iomem *addr)
{
u64 val;
asm volatile("ldrd r2, %0" : "+Qo" (*(volatile u64 __force *)addr));
register u32 v1 asm ("r2");
val = v1;
register u32 v2 asm ("r3");
val=(val<<32) | v2;
return val;
}
最佳答案
这些 ARM 版本位于 arch/arm/include/asm/io.h . iowrite32
宏最终会调用这些。您可以查看 32 位的实现。
static inline void __raw_writel(u32 val, volatile void __iomem *addr)
{
asm volatile("str %1, %0"
: "+Qo" (*(volatile u32 __force *)addr)
: "r" (val));
}
strd
的 ARMv5+ 指令它需要两个寄存器并写入它们。如果您的 BUS 结构配置正确,它可能会将其作为单个循环运行。但是,您需要正确设置许多其他内容。 I/O 页面的 MMU 权限以及 ARM AXI 到 FPGA 设备的物理/FPGA 连接。
r0
中一样和
r1
我们可以使函数永远不会内联。
static noinline void __raw_write64(u64 val, volatile void __iomem *addr)
{
register u32 v1 asm ("r0") = val >> 32;
register u32 v2 asm ("r1") = val & 0xfffffffUL;
asm volatile("strd r0, %0"
: "+Qo" (*(volatile u64 __force *)addr)
: "r" (v1), "r" (v2));
}
关于linux-kernel - 使用 32 位操作执行 ioread/write64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20088419/
假设您有一个 PCIE 设备,它显示一个 BAR 和一个用 pci_alloc_consistent(..) 声明的 DMA 区域。 BAR 的标志指示不可预取、不可缓存的内存区域。 读DMA区延迟的
我正在使用旋风 V 在双端口 RAM (HPS_master->FPGA_slave) 上执行读/写。对于 32 位数据,它可以通过使用 ioread32 和 iowrite32 来执行,但它不能满足
我有一个 pci 设备,我只想通过从/dev/pcidevice 中“cat”来读取它的内存。我对 char 设备的读取功能的第一次尝试如下所示: ssize_t cdev_read(struct f
我是一名优秀的程序员,十分优秀!