买的CH368+FPGA开发板,自己在linux下写驱动,IO空间的0xFA设置为了0x43
测试下来,读取32位和写入32位的速度差不多都在1600ns左右,之前用过PLX的芯片,读取也是在1600ns左右,但是写入不会耗这么多时间,是配置问题还是芯片设计就是这样的?
买的CH368+FPGA开发板,自己在linux下写驱动,IO空间的0xFA设置为了0x43
测试下来,读取32位和写入32位的速度差不多都在1600ns左右,之前用过PLX的芯片,读取也是在1600ns左右,但是写入不会耗这么多时间,是配置问题还是芯片设计就是这样的?
您好,速度寄存器是否配置基本不影响一次IO/MEM的并口操作总时间。对于CH368,写操作是快于读操作的。测试时建议循环测试多次ioread32/iowrite32的总时间,然后算平均一次的读写速度。正常情况下32位Memory写一次操作600ns左右。
系统用的是自己作的实时linux,内核驱动也是用到了最高优先级,测试程序是
ktime_get_ts64(&timew0);
iowrite32(led,ch368IO + 0x14);
iowrite32(led,ch368IO + 0x14);
iowrite32(led,ch368IO + 0x14);
iowrite32(led,ch368IO + 0x14);
ktime_get_ts64(&timew1);
ktime_get_ts64(&timer0);
texti = ioread32(ch368IO + 0x14);
ktime_get_ts64(&timer1);
ktime_get_ts64(&timeb);
ledCount++;
if(ledCount > 50 * 1000){
led--;
if (led < 0x0){
led = 0xff;
}
ledCount = 0;
printk("readime : %ld\n",diff_tv(timer0,timer1));
printk("writetime : %ld\n",diff_tv(timew0,timew1));
printk("sumtime : %ld \n",diff_tv(timea,timeb));
}
这段程序使用的hrtimer定的10us定时器中断,内核diff_tv是自己编写的计算时间差的程序,ns单位。内核打印如下
[14457.529909] readime : 1187
[14457.529910] writetime : 4581
[14457.529910] sumtime : 5936
[14458.029919] readime : 1194
[14458.029920] writetime : 4580
[14458.029920] sumtime : 5939
[14458.529929] readime : 1188
[14458.529930] writetime : 4556
[14458.529930] sumtime : 5911
[14459.029939] readime : 1198
[14459.029939] writetime : 4562
[14459.029940] sumtime : 5927
[14459.529949] readime : 1191
[14459.529949] writetime : 4594
[14459.529950] sumtime : 5947
[14460.029959] readime : 1189
[14460.029959] writetime : 4703
[14460.029960] sumtime : 6046
[14460.529968] readime : 1185
写入时间为4550ns,一共写入4次,差不多为1200ns一次
读取时间差不多也是1200ns
之前是1600ns是因为PCIE口使用了距离CPU远一点的,现在改为使用距离CPU最近的一条
和我之前找到的帖子回复还是有出入,包括600ns也不太对,是否有对写入速度有影响的参数或者电路设计?
这是之前的帖子
您好,速度和之前同事回复的速度差不多的。写20MB/S然后除以32,约为600ns写一次。你们那边用的什么CPU?
I5-10700,重新作了liunx实时系统,单独隔离出来一个核心来跑PCIE驱动