在硬件手册中,"assert"和"deassert"这两个术语经常出现。我总结了如下区别
assert 的定义:将信号驱动到其有效电压电平,无论是高电平还是低电平。
deassert 的定义:将信号驱动到其无效电压电平,无论是高电平还是低电平。
因此,对于不同的信号类型(如高有效或低有效),这些术语的含义会有所不同。例如:
对于高有效的信号,assert意味着将其拉高至VCC,而deassert则意味着将其拉低至GND
。
对于低有效的信号,assert意味着将其拉低至GND,而deassert则意味着将其拉高至VCC
。
具体到某些例子:
在某数据手册中写道:“The address line ADD is asserted at time t1 and is deasserted at time t2.” 这里的翻译应该是:“地址线ADD在t1时有效,在t2时无效。”。
另一个例子是:“The external power-control subsystem de-asserts nBATT_FAULT to signal that the main battery is connected and not discharged.” 这里的翻译应该是:“外部电源控制子系统通过解除nBATT_FAULT引脚来表示主电池已连接且未耗尽。”。
总结来说,将assert译为“有效”、deassert译为“无效”更为准确,而不是简单地将其分别译为“置位”和“清零”,因为这种翻译方式没有考虑到不同信号类型的特殊性.
assert and deassert的专业定义
也有人说可以把assert译为"置位",deassert译为"清零",但是我认为这样不妥.因为对于低电平有效的信号,assert代表的是清零,而不是置位.例如PXA270的数据资料中有一段话:The external power-control subsystem de-asserts nBATT_FAULT to signal that the main
battery is connected and not discharged.这句话的大意是:nBATT_FAULT引脚是高电平时,表示主电池正常.显然,些处把de-assert译为清零是不对的,而应该译是"无效".
今天在看PXA270数据手册时发现了INTEL对assert和deassert的解释(第40页).解释如下:
assert: Drive a signal to its active voltage level, either high or low.
deassert: Drive a signal to its inactive voltage level, either high or low.
其实这种说法就很好,assert译作有效,反之deassert为无效。
例如:
RDWR_B should be asserted before CSI_B to avoid causing an abort.
对应的时序:
assert和deassert在硬件设计中的具体应用场景是什么?
在硬件设计中,assert和deassert是用于验证电路行为的重要机制。具体应用场景如下:
assert的应用场景:
同步电路的响应验证:在协议验证过程中,assert可以用来确保在某些初始刺激后,一个变量或表达式会改变。例如,在同步电路中,可以通过assert来检查在请求之后,确认会在指定的周期内出现响应
。
状态机的行为验证:在有限状态机(FSM)的设计中,assert可以用来验证在接收到某些初始刺激后,状态机会改变或转换到特定的状态
。
子程序输入检查:在VHDL中, ASSERT语句可以用来检查子程序的输入是否满足基本要求,这在综合和仿真过程中非常有用
。
deassert的应用场景:
调试过程中的信号控制:在调试过程中,deassert用于驱动信号变为无效状态。例如,在ARM架构中,当处理器离开调试状态时,会通过deassertDBGRESTARTED信号来通知外设它可以从调试状态过渡到非调试状态
。
设备复位状态的管理:在硬件模块的驱动设计中,assert和deassert分别控制设备的复位状态生效和失效。例如,在Linux的复位框架中,这些操作用于管理设备的复位状态。
旁路操作:在FPGA开发中,TXDLYSRESET信号的deassert用于旁路操作,当所有通道的TXDLYSRESET被deassert时,再主张TXPHINIT信号以启动新的操作。
总结:
assert主要用于确保在特定条件下信号或状态的变化,常用于同步电路和状态机的行为验证以及子程序输入检查。
deassert则用于将信号恢复到其默认或无效状态,常用于调试过程中的信号控制、设备复位状态管理和旁路操作等场景。
如何根据信号的有效高低级别来确定assert和deassert的操作?
根据信号的有效高低级别来确定assert和deassert的操作,可以参考以下内容:
信号的活跃状态(Active State):
当一个信号被设置为“断言”(asserted)时,它被驱动到其活跃电压电平。这个电平可以是高电平或低电平。
例如,在某些系统中,如果信号是高真(active high),那么当信号为高时被认为是活跃的;如果是低真(active low),那么当信号为低时被认为是活跃的
。
信号的非活跃状态(Deactive State):
当一个信号被设置为“解除断言”(deasserted)时,它被驱动到其非活跃电压电平。这个电平同样可以是高电平或低电平。
在某些系统中,如果信号是高真(active high),那么当信号为低时被认为是非活跃的;如果是低真(active low),那么当信号为高时被认为是非活跃的
。
具体操作示例:
如果一个信号在某个时刻需要执行特定操作,则需要将其设置为断言状态(例如,将信号从低电平提升至高电平)。一旦操作完成,需要将信号设置为解除断言状态(例如,将信号从高电平降低至低电平)。
实际应用中的例子:
在中断处理过程中,CPU在处理完最高优先级的中断后,会通过写入LAPIC的EOI指令来通知IOAPIC清除remote IRR,并将该信号从断言状态转为解除断言状态。
在PCIe设备的冷重置过程中,Power Good信号的变化会触发PERST#的断言和解除断言操作,从而实现设备的冷重置。
总结来说,根据信号的有效高低级别来确定assert和deassert的操作,关键在于理解信号的活跃状态和非活跃状态,并根据具体需求进行相应的电压电平调整。