verilog 下降沿中如何对两个信号的下降沿进行检测计算出下降沿时间差并计数

转速传感器误差的测量方法
专利名称转速传感器误差的测量方法
技术领域本发明涉及一种传感器误差的测量方法,尤其是一种转速传感器误差的测量方法。
背景技术曲轴传感器(即本文中的转速传感器)是发动机电控系统中最主要的传感器之一,用于检测活塞上止点,曲轴转角及发动机转速,向ECU提供喷油时刻。准确的喷油时刻对发动机燃油经济型及排放有着重要的影响。随着电控共轨系统开发与应用的进一步深入,对曲轴信号的准确性要求也在不断提高。这就要求曲轴传感器提供精确的曲轴位置。中国专利CNA公开的目标轮位置检测系统,该系统提供用于精确学习齿论的齿间距的技术,允许系统对于小间隔精确计算位置信息,弥补由于制造公差、零件间变化、齿轮传感器和齿轮传感器系统变化造成的误差,但是无法测量齿轮传感器自身以及整个信号传输系统所产生的固定延迟误差,造成齿轮实际位置与传感器输出信号存在误差。
本发明提供一种转速传感器误差的测量方法,能够准确测量转速传感器自身误差(传感器延迟),以及发动机线束以及硬件电路信号处理产生的信号延迟造成的齿轮实际位置与转速传感器信号之间误差(传输延迟)。本发明采用的技术方案是
一种转速传感器误差的测量方法,包括以下两大步骤
步骤一传感器延迟时间Tl的测量;
所述步骤一包括
步骤101,使用驱动设备带动曲轴齿盘转动达到起始测试转速,在测试PC机上读出起始测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;多次重复测量,取平均值;
步骤102,使用驱动设备带动曲轴齿盘转动,逐步提高测试转速,在起始测试转速与最高测试转速之间的一个或多个中间测试转速上,在测试PC机上读出中间测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;在每个中间测试转速上均多次重复测量,取平均值;
步骤103,使用驱动设备带动曲轴齿盘转动达到最高测试转速,在测试PC机上读出最高测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;多次重复测量,取平均值;
步骤104,根据上述测量的中间测试转速或者最高测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数,以及起始测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数,计算出转速传感器在一个或多个中间测试转速以及最高测试转速时对应的传感器延迟时间Tl ;
步骤二,传输延迟时间T2的测量;
所述步骤二包括
步骤201,分别从转速传感器的信号输出端和发动机的CPU曲轴信号输入端采集信号,根据采集到的两信号的时间差,判断信号的传输延迟;
步骤202,调整曲轴齿盘的转速,重复步骤201,测量转速传感器的信号输出端和发动机的CPU曲轴信号输入端的两信号的时间差。所述转速传感器的信号输出端和发动机的CPU曲轴信号输入端的两信号的时间差在多次测量中一致,即为传输延迟时间T2。进一步地,所述步骤一中,测试PC机安装NI DAQ测量软件,使用NI DAQ测量软件完成Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数的测量。本发明的优点本发明可以准确的测出不同转速下转速传感器的误差,进而可以在实际应用中弥补转速传感器系统造成的误差,从而确定准确的喷油时刻,使汽缸中燃油充分燃烧,既节约燃料,又能降低车辆排放的尾气污染。
图1为本发明的曲轴齿盘、编码器、转速传感器安装示意图。图2为本发明的曲轴齿信号与编码器的Z、A、B相信号图。图3为本发明的DAQ脉冲的边沿测量方法图。图4为本发明的A、B相的脉冲信号同或处理示意图。图5为本发明不同转速下A、B两相上升沿及下降沿的总边沿数分布图。
具体实施例方式下面结合具体附图和实施例对本发明作进一步说明。一种转速传感器误差的测量方法,在测量之前,需要先安装转速传感器误差测量系统,包括安装曲轴齿盘1、编码器2、转速传感器3,采集卡、测试PC机;转速传感器3与曲轴齿盘I的位置固定;编码器2与曲轴齿盘I同轴连接;采集卡安装在测试PC机上;
编码器2的A相、B相每转分别输出相同固定数量(本例是3600个)的脉冲信号,Z相每转输出单个脉冲信号;编码器2的Z相脉冲信号输出到采集卡上每个计数器的AUX端;编码器2的A、B相的脉冲信号经过同或处理,产生A、B相同或后脉冲信号,并输出到采集卡上每个计数器的SOURCE端;转速传感器3输出的曲轴齿信号输出到采集卡上每个计数器的GATE 端。一种转速传感器误差的测量方法,包括以下两大步骤
步骤一传感器延迟时间Tl的测量;
所述步骤一包括
步骤101,使用驱动设备带动曲轴齿盘I转动达到起始测试转速,在测试PC机上读出起始测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;多次重复测量,取平均值;
步骤102,使用驱动设备带动曲轴齿盘I转动,逐步提高测试转速,在起始测试转速与最高测试转速之间的一个或多个中间测试转速上,在测试PC机上读出中间测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;在每个中间测试转速上均多次重复测量,取平均值;
步骤103,使用驱动设备带动曲轴齿盘I转动达到最高测试转速,在测试PC机上读出最高测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;多次重复测量,取平均值;
步骤104,根据上述测量的中间测试转速或者最高测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数,以及起始测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数,计算出转速传感器3在一个或多个中间测试转速以及最高测试转速时对应的传感器延迟时间Tl ;
步骤二,传输延迟时间T2的测量;
所述步骤二包括
步骤201,分别从转速传感器3的信号输出端和发动机的CPU曲轴信号输入端采集信号,根据采集到的两信号的时间差,判断信号的传输延迟;
步骤202,调整曲轴齿盘I的转速,重复步骤201,测量转速传感器3的信号输出端和发动机的CPU曲轴信号输入端的两信号的时间差;所述转速传感器3的信号输出端和发动机的CPU曲轴信号输入端的两信号的时间差在多次测量中一致,即为传输延迟时间T2。进一步地,所述步骤一中,测试PC机安装NI DAQ测量软件,使用NI DAQ测量软件完成Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数的测量。以下是详细说明。如图1所示,转速传感器误差测量系统,包括一个曲轴齿盘1、一个编码器2、一个转速传感器3。本测量系统使用直流无刷电机带动曲轴齿盘I转动,提供(Tl500r/min转速。转速传感器3固定于距离曲轴齿盘I的外周一定距离处,测量曲轴齿盘I上转过的齿引起的磁场变化,并产生曲轴齿信号(下文曲轴齿信号即为转速传感器3的输出信号)。转速传感器3可采用霍尔效应齿轮传感器,利用磁偏置的霍尔IC来精确测量类铁金属的移动或转动。编码器2采用欧姆龙E6HZ-CWZ6C旋转编码器,与曲轴齿盘I同轴连接,可以提供A、B、Z三相脉冲信号,如图2所不。A相、B相每转分别输出3600个脉冲信号,相位差90° ,Z相每转输出单个脉冲信号。编码器2安装完毕后,Z相的单个脉冲信号固定地对应曲轴齿盘I的某一位置。如图2所示,以编码器2的每转的Z相单脉冲信号的下降沿开始计算A相的脉冲数,到第一个曲轴齿信号的下降沿为止,观察不同转速下触发信号(Z相单脉冲信号的下降沿)到第一个曲轴齿信号的下降沿之间A相的脉冲数量的变化,来分析转速传感器3输出信号边沿(可以以第一个曲轴齿信号的下降沿为例)是否发生变化。编码器2每转的A相或者B相为3600个脉冲输出,因此如果只统计A相或者B相脉冲的一个边沿(上升沿或下降沿)的数量,那么测量精度为0.1°。为了提高测量精度,本文计算Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相的上升沿及下降沿的总边沿数,测量精度提高到 0.025。。转速传感器误差测量系统,还包括采集卡、测试PC机,测试PC机上安装有美国国家仪器公司(NI)的LabVIEW软件平台和NI DAQ测量软件。采集卡选用NI公司的PC1-6221板卡,安装在测试PC机上。如图3所示,所述采集卡包含两个计数器,每个计数器包含AUX端、GATE端、SOURCE端。若计数器的AUX端接入第一脉冲信号,GATE端接入第二脉冲信号,SOURCE端接入计数时钟信号,NI DAQ测量软件提供了一种测量功能,能够测量第一脉冲信号的某一个边沿(上升沿或者下降沿)开始到第二脉冲信号的第一个相邻同样边沿之间的计数时钟信号的脉冲个数(或者脉冲的边沿个数)。由于PC1-6221板卡只有两个计数器,无法对四个边沿(A相上升沿、下降沿,B相上升沿、下降沿)同时计数,如果用两张板卡的话可能存在同步的问题,因此,本文先对A、B相的脉冲方波进行同或处理,如图4所示。A、B相的脉冲信号经过同或处理后,产生的A、B相同或后脉冲信号的上升及下降沿的总边沿数即等于A、B两相上升沿及下降沿的总边沿数。在本实施例中,每个计数器的AUX端接入编码器2的Z相脉冲信号,GATE端接入转速传感器3输出的曲轴齿信号,SOURCE端接入编码器2的A、B相同或后脉冲信号。从Z相单脉冲信号的下降沿开始,到第一个曲轴齿信号的下降沿为止(简称测量周期),利用PC1-6221板卡的两个计数器同时分别测量A、B相同或后脉冲信号的上升沿和下降沿的个数,相加后得到Z相单脉冲信号的下降沿开始到第一个曲轴齿信号的下降沿为止,A、B两相上升沿及下降沿的总边沿数。以下详细说明转速传感器误差的测量过程。如果对曲轴齿盘I的齿边沿真实位置进行测量,那么需要确保不同转速下测得的齿盘的齿边沿位置与实际齿边沿位置一致,难点在于对齿边沿真实位置的测量。齿盘转速高,测量空间小,测量精度要求高。考虑到高转速下测量绝对齿边沿位置难度较大,成本较高,本文采用相对位置的测量。转速传感器误差的测量包括两大步骤。步骤一,传感器延迟时间Tl的测量。如图5所示,本文对不同转速下触发信号(Z相单脉冲信号的下降沿)到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数进行采集,为剔除霍尔传感器自身的测量误差,试验在恒温环境下进行,转速传感器3与曲轴齿盘I的距离固定。曲轴齿盘I的起始测试转速比较低,本例在20r/min,起始测试转速时转速传感器3的延迟非常微小,可以忽略。逐步提高转速,曲轴齿盘I在不停的转动,当齿边沿到来时,引起磁通量的变化,转速传感器3需要对该磁通量的变化进行捕捉然后进行信号放大,而这段时间中,曲轴齿盘I仍在转动,转速越高,信号与实际齿边沿的角度差越大,采集到的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数也就增多。本例为了提高测量精度,实际采集的是Z相单脉冲信号的下降沿开始到第一个曲轴齿信号的下降沿为止,A、B两相上升沿及下降沿的总边沿数。本例测试的起始测试转速是20r/min,测得的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数为52个(为了更准确,多次重复测量,取平均值)。逐步提高测试转速,分别测量在一个或多个中间测试转速上,一直到最高测试转速时候,Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数。本例测试的最高测试转速是1500r/min,测得的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数为61. 5个(为了更准确,多次重复测量,取平均值)。在最高测试转速时,转速传感器3的延迟时间Tl的计算曲轴齿盘I的最高测试转速1500转/分即25转/秒,根据A相或B相是发出3600个脉冲/转,那么计算出每秒A相或B相可以发出00个脉冲,每个A相或B相的脉冲周期对应4个A、B相同或后脉冲信号的边沿(上升沿加下降沿)。每秒也就是000个A、B相同或后脉冲信 号的边沿。那么最高测试转速时转速传感器3的延迟时间Tl=(61. 5-52) *(1/360000) ^ 26. 4us。同理也可以计算各中间测试转速对应的传感器3的延迟时间Tl。综上所述,步骤一包括下列各子步骤
步骤101,使用驱动设备带动曲轴齿盘I转动达到起始测试转速,在测试PC机上读出起始测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;多次重复测量,取平均值;
步骤102,使用驱动设备带动曲轴齿盘I转动,逐步提高测试转速,在起始测试转速与最高测试转速之间的一个或多个中间测试转速上,在测试PC机上读出中间测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;在每个中间测试转速上均多次重复测量,取平均值;
步骤103,使用驱动设备带动曲轴齿盘I转动达到最高测试转速,在测试PC机上读出最高测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;多次重复测量,取平均值;
步骤104,根据上述测量的中间测试转速或者最高测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数,以及起始测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数,计算出转速传感器3在一个或多个中间测试转速以及最高测试转速时对应的传感器延迟时间Tl ;
步骤二,传输延迟时间T2的测量。此步骤需要在汽车发动机上进行多次测量。霍尔传感器信号的传输是先通过发动机线速,ECU (发动机的电子控制单元)线速,再经过ECU硬件滤波,然后再进入发动机的CPU对其计算处理。由于信号传输过程中,曲轴仍在高速转动,因此,从转速传感器3发出齿轮信号到CPU采集到信号之间存在硬件延迟时间,使得CPU捕捉到曲轴齿盘I的齿位置与曲轴齿盘I实际齿位置产生偏差,影响喷油提前角的计算。测试结果表明,曲轴齿盘I不同转速下转速传感器3的传输延迟时间一致;
步骤二主要包括
步骤201,分别从转速传感器3的信号输出端和发动机的CPU曲轴信号输入端采集信号,根据采集到的两信号的时间差,判断信号的传输延迟;
步骤202,调整曲轴齿盘I的转速,重复步骤201,测量转速传感器3的信号输出端和发动机的CPU曲轴信号输入端的两信号的时间差;所述转速传感器3的信号输出端和发动机的CPU曲轴信号输入端的两信号的时间差在多次测量中一致,即为传输延迟时间T2。测试结果表明,曲轴齿盘I不同转速下转速传感器3的传输延迟时间一致,即为传输延迟时间T2。
转速传感器误差即等于传感器延迟时间Tl与传输延迟时间T2相加之和。
1.一种转速传感器误差的测量方法,其特征在于,包括以下两大步骤步骤一传感器延迟时间Tl的测量;所述步骤一包括步骤101,使用驱动设备带动曲轴齿盘(I)转动达到起始测试转速,在测试PC机上读出起始测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B 两相上升沿及下降沿的总边沿数;多次重复测量,取平均值;步骤102,使用驱动设备带动曲轴齿盘(I)转动,逐步提高测试转速,在起始测试转速与最高测试转速之间的一个或多个中间测试转速上,在测试PC机上读出中间测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数;在每个中间测试转速上均多次重复测量,取平均值;步骤103,使用驱动设备带动曲轴齿盘(I)转动达到最高测试转速,在测试PC机上读出最高测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B 两相上升沿及下降沿的总边沿数;多次重复测量,取平均值;步骤104,根据上述测量的中间测试转速或者最高测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数,以及起始测试转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数,计算出转速传感器(3)在一个或多个中间测试转速以及最高测试转速时对应的传感器延迟时间Tl ;步骤二,传输延迟时间T2的测量;所述步骤二包括步骤201,分别从转速传感器(3)的信号输出端和发动机的CPU曲轴信号输入端采集信号,根据采集到的两信号的时间差,判断信号的传输延迟;步骤202,调整曲轴齿盘(I)的转速,重复步骤201,测量转速传感器(3)的信号输出端和发动机的CPU曲轴信号输入端的两信号的时间差;所述转速传感器(3)的信号输出端和发动机的CPU曲轴信号输入端的两信号的时间差在多次测量中一致,即为传输延迟时间 T2。
2.如权利要求1所述的转速传感器误差的测量方法,其特征在于所述步骤一中,测试 PC机安装NI DAQ测量软件,使用NI DAQ测量软件完成Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数的测量。
本发明提供一种转速传感器误差的测量方法,包括步骤一,传感器延迟时间T1的测量和步骤二,传输延迟时间T2的测量。步骤一中,测量不同转速对应的Z相单脉冲信号的下降沿到第一个曲轴齿信号的下降沿之间的A、B两相上升沿及下降沿的总边沿数,计算出转速传感器在一个或多个中间测试转速以及最高测试转速时对应的传感器延迟时间T1。步骤二中,分别从转速传感器3的信号输出端和发动机的CPU曲轴信号输入端采集信号,根据采集到的两信号的时间差,判断信号的传输延迟。本发明用于转速传感器误差的测量。
文档编号G01P21/02GKSQ
公开日日 申请日期日 优先权日日
发明者丁俊东, 陆娟, 杨明, 王奇, 施华传, 李文文, 沈妍 申请人:中国第一汽车股份有限公司无锡油泵油嘴研究所51单片机中,测两个上升沿(外部信号)之间的时间差c程序应该则样写。_百度知道
51单片机中,测两个上升沿(外部信号)之间的时间差c程序应该则样写。
这两个信号是从两个管脚接入单片机中的。
提问者采纳
打开定时器,捕获一次,这样就可以用外部中断来捕获了,换成下降沿先在外部加一个反相器,捕获第二次关闭定时器
那要是直接测下降沿之间的时间差,应该怎样测?关键是这几个信号接在不同的I/O口上,编程 的时候这些咋处理?如果可以的话能不能告诉我程序咋写?万分感谢!
加上反相器就好了
好的,谢谢!
其他类似问题
为您推荐:
51单片机的相关知识
其他1条回答
看您的问题好像是硬件已经设计好了,而且待测I/O不是接在同一个口上而且不是外部中断口?那就只能用查询方式了,不断的查询口状态,只要有变化(上升沿是0变1,反之下降沿)就打开定时器,再次变化关闭定时器,读数据就行了,这样应该会有误差,但是比较小而且固定,看你的需要自己处理。 比如你要查询P10和P11两个脚上的上升沿时间差,假设P10先来,且正常情况下都是低电平。
void main()
init();//各种初始化,自己写。P10 P11要SBIT下。
while(!P10);//低电平的时候死循环,变高就说明上升沿来到,接着往下运行
startTimer0();//打开定时器,初始化和子函数自己写。
while(!P11);//如法炮制
stopTimer0();//停止定时器。
a=getTimer0();//读数,自己写。
.......//其他代码。
非常感谢你!我还有个疑问麻烦你能给我解释一下,这里面用的定时器装初值应该怎样装?开定时器和关定时器后,读取的时间是不是就是关定时器时的数据减去装的初值?
不用装初值啊,或者说初值就设置成0就可以了啊,读出的值就是时间值了,我说的初始化是对定时器的模式进行初始化,具体参考教科书。对了你必须要确定你要测的时间的范围,不要太长导致溢出,要是有溢出,还要自己做额外的处理。
奥 这个我明白了。还有就是这句a=getTimer0();读数具体怎么操作?我查了一上午资料都没找到这个怎么弄的。麻烦你了!谢谢!
其实就是A=TH0*256+TL0;//定时器0啊
高位乘以256加上低位我那么写就是为了给你示意一下。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁18747人阅读
verilog hdl 语法(11)
任务就是一段封装在“task-endtask”之间的程序。任务是通过调用来执行的,而且只有
在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会
执行的。调用某个任务时可能需要它处理某些数据并返回操作结果,所以任务应当有接收数
据的输入端和返回数据的输出端。另外,任务可以彼此调用,而且任务内还可以调用函数。&
1.任务定义
任务定义的形式如下:
task task_
&&& [declaration]
&&& procedural_statement
其中,关键词 task 和 endtask 将它们之间的内容标志成一个任务定义,task 标志着一个
任务定义结构的开始;task_id 是任务名;可选项 declaration 是端口声明语句和变量声明语
句,任务接收输入值和返回输出值就是通过此处声明的端口进行的;procedural_statement
是一段用来完成这个任务操作的过程语句,如果过程语句多于一条,应将其放在语句块内;
endtask 为任务定义结构体结束标志。下面给出一个任务定义的实例。
:定义一个任务。
task task_&&&&&&&&&&&&&&& //任务定义结构开头,命名为 task_demo
&&& input& [7:0] x,y;&&&&&&&&&& //输入端口说明
&&& output [7:0]&&&&&&&&&& //输出端口说明
&&& if(x&y)&&&&&&&&&&&&&&&&& //给出任务定义的描述语句
&&&&& tmp =
上述代码定义了一个名为“task_demo”的任务,求取两个数的最大值。在定义任务时,
有下列六点需要注意:
(1)在第一行“task”语句中不能列出端口名称;
(2)任务的输入、输出端口和双向端口数量不受限制,甚至可以没有输入、输出以及
双向端口。
(3)在任务定义的描述语句中,可以使用出现不可综合操作符合语句(使用最为频繁
的就是延迟控制语句) ,但这样会造成该任务不可综合。
(4)在任务中可以调用其他的任务或函数,也可以调用自身。
(5)在任务定义结构内不能出现 initial和 always过程块。
(6)在任务定义中可以出现“disable 中止语句” ,将中断正在执行的任务,但其是不
可综合的。当任务被中断后,程序流程将返回到调用任务的地方继续向下执行。
2.任务调用
虽然任务中不能出现 initial 语句和 always 语句语句, 但任务调用语句可以在 initial 语句
和 always 语句中使用,其语法形式如下:
task_id[(端口1,& 端口 2, ........,& 端口 N)];
其中 task_id是要调用的任务名,端口 1、端口 2,…是参数列表。参数列表给出传入任
务的数据(进入任务的输入端)和接收返回结果的变量(从任务的输出端接收返回结果) 。
任务调用语句中,参数列表的顺序必须与任务定义中的端口声明顺序相同。任务调用语句是
过程性语句,所以任务调用中接收返回数据的变量必须是寄存器类型。下面给出一个任务调
例:通过 Verilog HDL 的任务调用实现一个 4 比特全加器。
module EXAMPLE (A, B, CIN, S, COUT);
input [3:0] A, B;
input CIN;
output [3:0] S;
output COUT;
reg [3:0] S;
reg [1:0] S0, S1, S2, S3;
input A, B, CIN;
output [1:0] C;
reg [1:0] C;
reg S, COUT;
S = A ^ B ^ CIN;
COUT = (A&B) | (A&CIN) | (B&CIN);
C = {COUT, S};
always @(A or B or CIN) begin
ADD (A[0], B[0], CIN, S0);
ADD (A[1], B[1], S0[1], S1);
ADD (A[2], B[2], S1[1], S2);
ADD (A[3], B[3], S2[1], S3);
S = {S3[0], S2[0], S1[0], S0[0]};
COUT = S3[1];
在调用任务时,需要注意以下几点:
(1)任务调用语句只能出现在过程块内;
(2)任务调用语句和一条普通的行为描述语句的处理方法一致;
(3)当被调用输入、输出或双向端口时,任务调用语句必须包含端口名列表,且信号
端口顺序和类型必须和任务定义结构中的顺序和类型一致。需要说明的是,任务的输出端口
必须和寄存器类型的数据变量对应。
(4)可综合任务只能实现组合逻辑,也就是说调用可综合任务的时间为“0” 。而在面
向仿真的任务中可以带有时序控制,如时延,因此面向仿真的任务的调用时间不为“0” 。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:101559次
积分:1268
积分:1268
排名:千里之外
原创:24篇
评论:31条
(1)(1)(6)(2)(7)(7)(3)(3)【图文】常见模拟量信号的检测方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
常见模拟量信号的检测方法
上传于||文档简介
&&对​于​常​见​的​模​拟​量​信​号​的​一​些​检​测​方​法​的​讲​解
大小:885.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢verilog hdl 设计一下降沿触发,带低电平置位的触发器。 编写测试文件并仿真_百度知道
verilog hdl 设计一下降沿触发,带低电平置位的触发器。 编写测试文件并仿真
提问者采纳
rst = 1'DFF codemodule dff(q;b0;
always @(negedge clk)
#30 d = 1'= 1'b1;b1;
q &b0;testbench
#20 d = 1'
#20 rst =1'=
#10 d = 1'endmodule/
input clk,rst, clk, d);
initial begin
clk = 1'b0,
#5 clk = ~b1;b0;
#10 rst= 1'b0;
#10 d = 1'
reg q, d);
d = 1'b0;
wire q,&#47&#47,d;b1
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
其他类似问题
为您推荐:
低电平的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 格雷码计数器 verilog 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信