SignalTap II 中抓到的信号和实际程序中描叙的反相,高低电平正好反过来了,这是怎么回事儿呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SignalTap II 中抓到的信号和实际程序中描叙的反相,高低电平正好反过来了,这是怎么回事儿呢相关的知识,希望对你有一定的参考价值。

很明显除了rst那个信号之外程序上是低电平的信号在signaltap抓的图上是高电平,不只是我设置有问题还是怎么回事儿

参考技术A 只要保证SignalTap里面信号名称的颜色是黑色,不是蓝色或者红色,就能采集到正确的数据。图中的信号名称的颜色是蓝色,所以有采集到不正确数据的可能。
为了保证信号颜色不出现蓝色,在添加信号的时候,Filter下拉框应该选择Design Entry (all
names),而不应该选择SignalTap II:
post-fitting或者Post-synthesis(综合后的结果)。因为综合后,信号的值已经被优化了。
将信号列表原有的蓝色信号删除,重新添加信号。Filter选择Design Entry (all names),然后点击List按钮,选择左边要添加的信号,点击>按钮添加到右边。
重新添加后,信号颜色就是黑色的了。保存stp1.stp文件,编译并烧写程序,这下就能采集到正确的结果了,没有被反相了。
这种寄存器反相优化是无法通过(* keep *)、(* noprune *)、(* preserve *),以及(* syn_encoding = "user" *)指令消除的。
参考技术B 送的政府不会的发挥你的号南京的发给你阖家幸福追问

请讲国语……

参考技术C 什么抓的图都是高电平?追问

SignalTap II 得到的上边源文件的波形和源文件不相符

μC/OS-II 信号量集

简介

在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式。μC/OS-II 为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集。
信号量集所能管理的信号量都是一些二值信号,所有信号量集实质上是一种可以对多个输入的逻辑信号进行基本逻辑运算的组合逻辑,其示意图如下图所示:

信号量集的标志组

不同于信号量、消息邮箱、消息队列等事件,μC/OS-II 不使用事件控制块来描述信号量集,而使用了一个叫做标志组的结构 OS_FLAG_GRP。
OS_FLAG_GRP 结构如下:

typedef struct{
	INT8U OSFlagType;	     //识别是否为信号量集的标志
	void *OSFlagWaitList;    //指向等待任务链表的指针
	OS_FLAGS OSFlagFlags;	 //所有信号列表
}OS_FLAG_GRP;

成员 OSFlagWaitList 是一个指针,当一个信号量集被创建后,这个指针指向了这个信号量集的等待任务链表。

等待任务链表

与其他事件不同,信号量集用一个双向链表来组织等待任务,每一个等待任务都是该链表中的一个节点(Node)。标志组 OS_FLAG_GRP 的成员 OSFlagWaitList 就指向了信号量集的这个等待任务链表。
等待任务链表节点 OS_FLAG_NODE 的结构如下:

typedef struct {
    void *OSFlagNodeNext;        //指向下一个节点的指针
    void *OSFlagNodePrev;        //指向前一个节点的指针
    void *OSFlagNodeTCB;         //指向对应任务控制块的指针
    void *OSFlagNodeFlagGrp;     //反向指向信号量集的指针
    OS_FLAGS OSFlagNodeFlags;    //信号过滤器
    INT8U OSFlagNodeWaitType;    //定义逻辑运算关系的数据
} OS_FLAG_NODE;

添加任务结点

给等待任务链表添加节点的函数为 OS_FlagBlock( ),这个函数的原型为:

static  void  OS_FlagBlock (
OS_FLAG_GRP *pgrp, 	 //信号量集指针
OS_FLAG_NODE *pnode, //待添加的等待任务节点指针
OS_FLAGS flags, 	 //指定等待信号的数据
INT8U wait_type, 	 //信号与等待任务之间的逻辑
INT16U timeout		 //等待时限
);		

这个函数将在请求信号量集函数 OSFlagPend ( ) 中被调用。

删除任务结点

从等待任务链表中删除一个节点的函数为 OS_FlagUnlink( ),这个函数的原型为:

void  OS_FlagUnlink (OS_FLAG_NODE *pnode);

这个函数将在发送信号量集函数 OSFlagPost( ) 中被调用。

创建信号量集

任务可以通过调用函数 OSFlagCreate ( ) 来创建一个信号量集。OSFlagCreate ( ) 的函数原型为:

OS_FLAG_GRP  *OSFlagCreate (
OS_FLAGS flags,	//信号的初始值
INT8U *err		//错误信息
)

请求信号量集

任务可以通过调用函数 OSFlagPend( ) 请求一个信号量集,OSFlagPend( ) 函数的原型为:

OS_FLAGS  OSFlagPend (
OS_FLAG_GRP *pgrp,  //所请求的信号量集指针
OS_FLAGS flags, 	//滤波器
INT8U wait_type, 	//逻辑运算类型
INT16U timeout, 	//等待时限
INT8U *err		    //错误信息
);

向信号量集发送信号

任务可以通过调用函数 OSFlagPost ( ) 向信号量集发信号,OSFlagPost ( ) 函数的原型为:

OS_FLAGS  OSFlagPost (
OS_FLAG_GRP *pgrp, //信号量集指针
OS_FLAGS flags,    //选择所要发送的信号
INT8U opt, 		   //信号有效的选项
INT8U *err		   //错误信息
);		

所谓任务向信号量集发信号,就是对信号量集标志组中的信号进行置“1”(置位)或置“0”(复位)的操作。至于对信号量集中的哪些信号进行操作,用函数中的参数flags来指定;对指定的信号是置“1”还是置“0”,用函数中的参数opt来指定(opt = OS_FLAG_SET 为置“1”操作;opt = OS_FLAG_CLR 为清“0”操作)。

参考自:《μC/OS-II 入门教程》

以上是关于SignalTap II 中抓到的信号和实际程序中描叙的反相,高低电平正好反过来了,这是怎么回事儿呢的主要内容,如果未能解决你的问题,请参考以下文章

如何用Signaltap ii观察器件内部信号

时钟芯片给FPGA供给差分100M时钟,但是signaltap捕捉不到该时钟?

Quartus prime 16.0 signaltap II 使用

Quartus II 11.1中使用Signaltap ii分析采集正弦波幅值数据后如何呈现完整正弦波形?

1.用modelsim-altera 6.5e仿真的时候 显示 no data 2.signaltap ii 选择signal clock时出现错误

工具篇——SignalTap II