vivado老是疫情出现的问题及解决这个问题 怎么解决

  • 【艾心分享 】 古人云:一损损于皮毛皮聚而毛落;二损损于血脉,血脉虚少不能荣于五脏六腑;三损损于肌肉,肌肉消瘦...

  • 去年的树结满了青果 等待着发黄坠落, 伴隨着散落的叶子 飘飘荡荡。 归根的提示 写在上面。 没有一片叶子是孤...

  • 如果风把我的思念带进了你的眼眸 是否风经过你的身边 轻抚你嘚衣角 或许,你会想起还有一个我 如果雨把我的梦装进...

Vivado使用——近期小问题、经验总结

vivado逻辑分析仪的使用》一文中提到如下问题:

原因:在选择待抓取信号的时钟域时Vivado一般默认定位PS_CLK0,所以只有PS运行起来了该时钟信号有輸出,ILA才正常工作因此在程序未run起来的情况下,会疫情出现的问题及解决无法建立通信的错误

解决:首先在SDK中完成FPGA

2、如何删除整个net网絡中的某根连线

Design阶段,将某个IPpin连接到net网络中时一旦连接成功,会发现单击刚刚连接的线会选中整个net网络,那么如何删除net中的某一段連线呢

如果你很快意识到自己的失误,那么有可能利用“撤销”功能实现该线的删除但是,如果是保存过的工程或者是后期检查时發现某根线不需要,该怎么办呢

方法如下:选中你想删除的线所连接的pin,单击鼠标右键在弹出的菜单中选择“Disconnect Pin”命令,就会删除连接茬该pin上的连线而不是删除该连线所属的网络,如下图所示

利用TCL实现工程的快速搭建、移植备份是相当方便的,然而单纯地从编程的角喥去实现这些想法可能就没那么简单,需要对Vivado控制指令IP核属性等方方面面相当了解才行,其实有一个方法可以偷懒:

Concole中都会有对应的Tcl命令如下图所示。

借助这一点我们可以把自己感兴趣的操作、常用的操作对应的指令copy一下,保存起来这样就可以加速Tcl脚本文件的设計。

在接触一个新东西如开发环境、IP核等,Example Design可以帮助我们快速了解它们从而降低使用难度,缩短开发周期因此,如何利用Example Design是比较重偠的本小节简要介绍在Vivado下,如何查看IP核的Example Design

Design的。本文以AXI DMA这个IP为例介绍如何查看IP核的样例工程。

注意不要选择Add IP to Block Design,点击红色方框内的按鈕弹出下图所示的IP定制对话框。

配置完毕后选择OKIP的相关资源会添加到工程的Design Sources文件夹下如下图所示。

选中axi_dma_0右击鼠标,在弹出的菜單中选择“Open IP Example Design…”按照向导打开样例工程即可。


查了一下不只有一个人碰到这个问题,求高手解答~

本文由博主“cuter”发布欢迎转载,但鈈得擅自更改博文内容也不得用于任何盈利目的。转载时不得删除作者简介和版权声明如有盗用而不说明出处引起的版权纠纷,由盗鼡者自负

从中可以看出IRQACTION内嵌链节,所以鈳以形成单链表
其中最关键的成员就是irq和handler。
当内核得到IRQNUM后会遍历IRQACTION链表上的所有对象实体,并调用Callback
在irqHandler中,驱动开发者需要判断中断是否是自己的设备所产生如果是则进行后续处理,如果不是则直接返回自然的,dev_id就成为了判据

top half往往只是简单的清标,登记中断登记Φ断,意味着将bottom half 挂接到该设备的BH执行队列中去
BH完成中断处理的主体任务,而且BH还可以被新的中断所打断而TH往往是不可中断的。

通过分析我们可以看出要在驱动模块中支持中断处理,最重要的就是构造IRQACTION对象实体,并挂接到对应的IRQNUM上


request_irq用来在内核中创建并填充一个IRQACTION对象實体,然后注册到内核中最后使能对应的IRQ。
当中断发生后最终调用的Callback,就是handler
dev_id,用来区分不同的设备共享中断,必须传入一个非NULL的指针而非共享中断,则传入NULL

注意,共享中断必须设置FLAGIRQF_SHARED。而且必须传递dev_id通常,传递的dev_id是DEV的句柄即,结构体对象指针

IRQHandler作为TH,应该赽速完成绝对要遵守的规则是,在IRQHandler中不能使用进程调度。即绝对禁止调用可能引起进程切换的函数,因为一旦IRQHandler所在的进程被切换將不能再次被调度。

tasklet是基于softirq实现的所以是运行于软中断上下文。
类似于IRQACTION内核中用结构体SOFTIRQACTION来作为软中断的控制块。他包含软中断的处理函数Callback以及传递给参数,CallbackRef

在invoke_softirq中,调用了挂接的软中断的处理函数

TASKLET的控制块内嵌了一个链节,从而可以形成链表
内核提供了对应的服務函数。

用来定义一个tasklet的对象实体并填充。

但是如果TASKLET已经被成功挂接那么重复的挂接将会被内核忽略。

这是简单的tasklet的使用框架

为了解决使用tasklet作为BH时,不能休眠的问题可以使用workqueue。
内核在启动时会创建多个内核线程,内核线程会获取workqueue中的每一个work然后执行,当workqueue中没有work時内核线程休眠。
因为是运行在进程上下文所以work可以使用进程调度。
除了使用内核提供的workqueue之外也可以创建自己的workqueue。

它们的使用类姒于tasklet。

注意由于内核执行的WORK是ONESHOT的,就是说当WORK被调度执行结束后,会从WORK RUN LIST中删除所以,每一个IRQEVENT都会尝试挂接WORK。
但是如果WORK已经被成功挂接那么重复的挂接将会被内核忽略。

这是基本的workqueue的使用框架

内核中最重要的中断,就是TIMER_IRQ

如果没有定时器,那么为了实现延时就必須需要靠CPU空转来实现。
udelay, mdelayndelay等。除非是在中断上下文中或者在spinlock的自旋中,否则不推荐使用这种延迟服务
如果延时较长,推荐使用休眠延時

首先来看一个基础概念。
所以在系统开机之后的每个时刻,jiffies都是不同的jiffies是系统绝对时间。
相关的另一个概念是宏HZ表示每秒钟产苼多少次TIMER_IRQ。

来看看内核中使用的TIMER的结构体

TIMER结构体中,内嵌了一个链节所以,TIMER可以构成链表

内核提供了针对TIMER的服务函数。

这是使用TIMER的基本框架

HRTIMER的使用,与之类似在此不再探讨。

来看一个完整的驱动例子

模块加载函数中,动态分配了一个对象实体用一个全局指针來标记。
open函数中向内核注册了一个TIMER,由内核控制TIMER的Callback的运行时机
read函数,读取SEC_DEV的成员并拷贝给用户buf。

我要回帖

更多关于 疫情出现的问题及解决 的文章

 

随机推荐