- 博客(10)
- 收藏
- 关注
原创 FPGA组合逻辑和时序逻辑的同时到达与为什么时序逻辑总是“慢一拍”
那么当时钟上升沿和en从0变为1同时到来时cnt如何变换呢?这里其实有一个误区,所谓同时变换只有在仿真时才会出现,而真实情况下触发器只有在满足建立时间和保持时间的情况下才能正确输入,也就是说想要在第二个时钟上升沿en为1 en信号必须在clk上升沿之前就以及为1并且保持一段时间。那么在仿真情况下同时变换会怎样呢不同仿真器对同一时刻事件的执行顺序不同:有的仿真器先执行en = 1;有的仿真器先执行clk = 1;这样的仿真结果是我没无法接受的同时与现实情况也不符。推荐将信号错开,符号现实情况。
2025-07-29 20:58:12
478
原创 LINUX驱动的私有变量
此外,file->private_data仅能作用与此时打开的驱动,如果一个设备创建多个驱动,对于file->private_data来说彼此之间独立。而platform_set_drvdata()更倾向于全局变量,即使对应多个驱动,platform_set_drvdata()也只有一个。可以在任何包含struct platform_device *pdev参数的函数中使用,只要传递了pdev参数,就可以使用。只能用在 字符设备的文件操作结构体。
2025-02-24 14:59:33
257
原创 linux驱动中断
可以在include/linux/interrupt.h中查看,中断标志可以分为两部分,触发方式IRQF_TRIGGER与中断方式IRQF_;但不能执行睡眠,调度等耗时工作。由于中断会打断其他进程,耗时的中断函数会影响其他进程,因此中断函数分为上下半部,耗时的操作放在下半部,上半部用于重要的处理。参数1为中断号,2为中断函数,3为中断标志,4为中断名称(自己命名)5为中断函数参数。当下半部需要睡眠,调度等复杂操作时需要工作队列,其属于线程上下文,是线程的高级封装。进程上下文,线程上下文,中断上下文。
2024-12-26 16:18:15
415
原创 disagrees about version of symbol module_layout;invalid module format
错误原因:内核linux版本和模块linux版本不匹配。移植了新编译的内核,模块没有重新编译就会报错。编译了内核但忘移植,模块重新编译也会报错。
2024-12-26 15:53:16
542
原创 AXI DMA LINUX驱动 proxy解析
在上一篇文章中我们通过驱动将DMA的数据转移到内核。链接:link但应用程序无法直接使用内核数据。我们需要优化dma客户端驱动。
2024-12-14 09:37:25
1222
原创 设备 字符设备 类 平台总线的关系与位置
要使用modprobe 需先使用depmod命令,其会在/lib/module/ kernel-version/下生成modules.dsp文件。modprobe + 模块 能够自动加载模块依赖 但模块必须在/lib/module/ kernel-version/下 如/lib/module/5.4.0-xilinx/:在驱动的开发和调试阶段,我们往往使用动态编译。方法:将我们的驱动文件置入对应目录(如:内核/divers/char),修改对应目录的。位置:在/sys/module/下可以找到注册的驱动。
2024-12-12 14:32:41
1585
原创 FPGA的时延与耗时
如图为例Tcpd代表关键路径的耗时,关键路径小于时钟周期,算法可以正常使用,如果Tcpd再长一点超过了一个时钟周期长度,这意味这第二个时钟周期到来的时候,组合逻辑没有执行完成,B就不会变换,算法失效。以50M时钟频率为例,时钟周期是20ns,算法的关键路径耗时必须小于20ns,算法才能在50M的频率下运行,否则就需要降频,或者想办法减少耗时。时延:但FPGA是并行流水线结构,虽然输入数据到输出数据也时间差,但是FPGA在处理数据时依然可以输入,那么我认为FPGA的算法时间差是时延。:电流流经线缆的耗时。
2024-12-11 13:26:16
678
原创 AXI DMA LINUX 驱动
DMA全称Direct Memory Access 直接内存访问,是一种无需经过CPU即可实现内存搬运的数据传输方式。要实现DMA就必须要有DMAC即DMA控制器,硬件DMAC一般集成在SOC中。AXI DMA是在PL端以软核的形式实现的DMAC,通过AXI HP高速总线直接访问DDR。
2024-12-10 17:21:43
3214
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1