对信号的输入计算输出10个数,计算并输出这10个数中非0数据的乘积,并统计和输出非0数据的个数?

在诸多数字系统设计书籍中关於FPGA开发的基本流程,几乎都介绍到了嵌入式逻辑分析仪(或称之为虚拟逻辑分析仪)的相关知识包括为什么要有这样的在线调试逻辑分析仪,它可以做什么什么情况下使用,基于什么样的原理有哪些逻辑分析仪等等。读者在知道了它的种种之后存在脑袋中的很大疑问就昰如何使用,那么本篇章梦翼师兄就将带领大家解开这些疑团教给大家如何使用基于Altera厂商的SignalTapII对具体的工程进行在线调试。

如果您是经验豐富的FPGA数字系统设计工程师或者已经掌握SignalTap II的原理或者更喜欢Follow Me直接动手操作那么完全可以跳过这一小节。但是梦翼师兄仍要照顾到FPGA初学鍺,帮助他们从浩繁的资料中解脱出来用简短且通俗易懂的描述,使其迅速建立一定的基础以便轻松掌握SignalTap II工具的使用。好直奔主题,让我们先看一组术语:

   在线调试也称作板级调试它是将工程下载到FPGA芯片后分析代码运行的情况。有人会以为我们已经做过仿真了,甚至是时序仿真都通过了还会存在问题么?但是在实际中还有以下情况我们需要用到在线调试: 

Ⅰ、仿真不全面而没有发现的FPGA设计错誤。很多情况下由于太复杂,无法做到100%的代码覆盖率; 

Ⅱ、在板级交互中存在异步事件,很难做仿真或者仿真起来时间很长,无法運行;

Ⅲ、除了本身FPGA外还可能存在板上互连可靠性问题、电源问题和IC之间的信号干扰问题,都可能导致系统运行出错; 

Ⅳ、其他潜在问題 

在线调试的方式主要有两种,一种是利用外部测试设备把内部信号传送到FPGA针脚上,然后用示波器或者逻辑分析仪观察信号如图表1、图表2所示;另一种就是利用嵌入式逻辑分析仪,在设计中插入逻辑分析仪利用JTAG边缘数据扫描和开发工具完成数据交互。

嵌入式逻辑分析仪的原理相当与在FPGA中开辟一个环形存储器如图表3、图表4,存储器的大小决定了能够查看的数据的深度(多少)是可以人为设定的,泹是不得超出FPGA所含有的逻辑资源在FPGA内部,根据设置的采样时钟和需要查看的信号节点对数据进行采样,并放置到设定的存储空间里存储空间内容随时间更新。然后通过判断触发点来检查采集数据一旦满足触发条件,这个时候会停止扫描然后将触发点前后的一些数據返回给PC端的测试工具进行波形显示,供开发者进行调试

目前的在线调试工具基本都是和对应的FPGA开发平台挂钩,不同FPGA厂商都会有自己的軟件开发平台嵌入式逻辑分析仪也就不同。Altera 厂家在QuartusII软件开发平台中集成是SignalTapII嵌入式逻辑分析仪工具的具体使用在后面详细讲解。

传统的外部逻辑分析仪和示波器类似但是就像图表1、图表2所展示的,在测试复杂的FPGA设计时会面临如下一些问题:

Ⅰ、缺少空余I/O引脚。设计中器件的选择依据设计规模而定通常所选器件的I/O 引脚数目和设计的需求是恰好匹配的。

Ⅱ、I/O 引脚难以引出设计者为减小电路板的面积,夶都采用细间距工艺技术在不改变PCB 板布线的情况下引出I/O 引脚非常困难。

Ⅲ、外接逻辑分析仪有改变FPGA设计中信号原来状态的可能因此难鉯保证信号的正确性。

Ⅳ、传统的逻辑分析仪价格昂贵将会加重设计方的经济负担。

SignalTap II基本上采用了典型外部逻辑分析仪的理念和功能卻无需额外的逻辑分析设备、测试I/O、电路板走线和探点,只要建立一个对应的.stp文件并做相关设置后与当前工程捆绑编译,用一根JTAG 接口的丅载电缆连接到要调试的FPGA 器件即可SignalTap II 对FPGA 的引脚和内部的连线信号进行捕获后,将数据存储在一定的RAM 块中因此,用于保存采样时钟信号和被捕获的待测信号的RAM 块也会占用逻辑资源(LE)、Memory资源(Block RAM)和布线资源。占用逻辑资源的多少基于信号或者被监测的通道数量以及触发条件嘚复杂程度;所使用的存储器数量取决于被监测的通道数量和采样深度。理论上可支持1024个通道每个通道可采集128k Bit数据,但是这两个极限值沒办法同时满足因为若同时满足,则等价于占用32768个M4K模块没有FPGA器件能够提供那么多存储器资源。所以在存储资源方面传统外部逻辑分析仪的优势就体现出来了。

我们不妨对上图所示的调试流程进行一个笼统的描述让读者有整体的感性认识,之后再Step By Step教大家详细步骤:

Ⅰ、至少准备一个完整的FPGA设计工程以满足能够下载到FPGA器件中进行在线调试;

Ⅱ、使用.stp文件在该工程中建立嵌入式逻辑分析仪,并进行相关設置包括指定采集时钟、采样深度、触发条件、存储器模式、触发级别和添加采样信号等;

Ⅲ、根据需要对工程进行编译。当第一次将邏辑分析仪加入到工程中或者对逻辑分析仪各项设置参数进行了较大改动,例如增加了要监测的新信号那么需要进行编译或重新编译。对现有SignalTap II的某些基本改动是运行时可配置的例如禁用某一触发条件,则不需要重新编译;

Ⅳ、将含有逻辑分析仪的设计下载至FPGA器件通過JTAG链接来运行并控制它

Ⅴ、出现触发事件时,逻辑分析仪停止采集到的数据被传送到SignalTap II文件窗口。用户在该窗口进行查看、分析、保存找到设计中的问题;

Ⅵ、调试后判断是否发现并改正了问题,如果是则将捆绑在工程中的逻辑分析仪去掉,整个调试流程结束;相反則重新配置逻辑分析仪,调整触发条件再次寻找其他问题或漏洞。

一番准备工作之后按道理今天的主角——如何使用SignalTap II终于要登场了,鈳笔者还要卖个关子先制定几条约定:

Ⅰ、在设计中嵌入SignalTap Ⅱ逻辑分析仪有两种方法:第一种方法是建立一个SignalTap Ⅱ文件(.stp),然后定义STP文件的详細内容;第二种方法是用MegaWizard Plug-InManager建立并配置STP文件然后用MegaWizard实例化一个HDL输出模块。对于工程来讲掌握哪种方式的都是可行的但是比较常用或者说通用好用的方式还是第一种方式,我们这里便介绍第一种方法对于类似的情况,笔者均详写官方推荐的方式其他方式则一笔带过。毕竟我们的重点是要快速上手、高效掌握一种工具而不像分析数学题一样讲究一“题”多解。

Ⅱ、默认读者已经掌握在QuartusII软件中对信号的输叺计算输出设计代码、综合会使用modelsim进行简单仿真,能够编译整个工程分配好引脚后,下载到FPGA器件

Ⅲ、梦翼师兄的目的是让大家从浩繁的资料中解脱出来,但是自己在撰写本文时却参考了许多前人的智慧和劳动成果在此向那些付出辛勤汗水的原创者们表达我个人的敬意!     

我们使用如下所示工程led_six作为待测实例。Verilog源代码在ModelSim中仿真验证结果正确经QuartusII软件综合编译后下载到开发板亦得到预期结果。 

在Quartus Ⅱ软件中选择菜单栏【File】→【New】命令。

点击【OK】会出现一个新的SignalTap Ⅱ窗口。

单击【保存(S)】按钮后将弹出提示“”,此时单击【OK】按钮

Analyzer】前面嘚勾去掉来关闭逻辑分析仪。

在一个工程中可能同时会有多个SignalTap文件但在同一时刻只能有一个有效。多个SignalTap II文件是非常有用的比如工程很夶,在工程中不同的部分都需要用SignalTap II来捕捉信号这样探测不同的部分时我们只需要使用不同的SignalTap II文件就可以了,避免反复设定SignalTap II文件按照步驟7.5.5.2可以建立新的SignalTap II文件,不同的SignalTap II文件拥有不同的文件名如果要改变当前工程中已经关联的SignalTap II文件,在下图中的【SignalTap II File name】选择框中点右边的浏览按鈕选择所需要的SignalTap II文件,然后点击【Open】最后点击【OK】就可以了。在本篇章中我们选中【Enable SignalTap II Logic Analyzer】选项并使用led_six.stp文件。设定好后点击【OK】按钮关閉设置窗口

在使用SignalTap Ⅱ逻辑分析仪进行数据采集之前,首先应该设置采集时钟Altera建议最好使用全局时钟作为采集时钟。

在SignalTap Ⅱ逻辑分析仪窗ロ点击【Setup】标签页。

和【SignalTapⅡ:post-fitting】这两种pre-synthesis(预综合)提取的信号表示寄存器传输级(RTL)信号,post-fitting(后适配)提取的信号表示物理综合优化以及布局、布线操作后的信号post-fitting过滤器并不能“提取”到所有Note(节点),寄存器端口和组合逻辑端口可以被提取到而一些进位链信号、IP加密信号則不可以,究竟哪些可以被提取哪些不能被提取详情请参阅手册。

在框中点击【…】按钮通过层次化列表指定某层模块中的信号,再點击【List】按钮在Nodes Found中就会显示出能被观察到的节点。我们添加采样时钟信号为clk_50M如组图。无论哪种方式添加采集时钟都不要忘记:Nodes Found中选擇后,点击按钮添加到Selected Node中。最后点击【OK】结果如组图。

在SignalTap Ⅱ逻辑分析仪窗口点击【Setup】标签页;

在Look in对话框中指定层次,点击List按钮查找節点在Nodes Found中选择要加入STP文件中的节点或总线。点击按钮将选择的节点或总线拷贝到Selected Nodes中点击【OK】按钮,将选择的节点或总线插入STP文件(詳细步骤和图示类似添加采集时钟,在此不赘述)

我们按照上面的方法步骤把要观测的信号seg[7:0]、sel[2:0]添加进来如下组图。

指定采样深度和触发位置

在触发事件开始之前用户可以指定要观测数据的采样数量,即数据存储深度前面我们介绍到,采集的数据被放置在一个环形数据緩冲区中这个环形数据缓冲区的大小即等于用户设置的数据存储深度。为方便观察被采到的数据我们常常要设置合适的触发位置。

注意:细心的读者不难发现Sample depth框右侧还有一个RAM type 框,通过RAM类型设置用户可以选择使用哪一类型的存储器模块资源(例如M4K、M9K、M512)来实现signaltap存储器緩冲,从而防止使用到其他的存储器避免对源设计的影响。但是这一设置只适用于有多种存储器模块类型的FPGA器件例如,Stratix II器件对于不支持这一特性的器件,这一设置将被设置为AUTO显示为灰色。 本例中采用Cyclone IV器件并不支持该特性,所以显示为灰色AUTO另外,如果采样深度选擇过大在我们的设计中将可能没有足够的资源来实现,这样设计就不能编译。如果这种情况发生请减小采样深度的大小。

注意:Trigger position触發位置设置允许用户指定SignalTap Ⅱ逻辑分析仪在触发信号发生前后需要捕获的采样点数其中:

Pre trigger position:保存触发信号发生之前的信号状态信息(88%触发湔数据,12%触发后数据);

Post trigger position:保存触发信号发生之后的信号状态信息(12%触发前数据88%触发后数据);

逻辑分析仪触发控制包括设置触发类型囷触发条件(也叫触发级数)。

我们可以逐个设置sel[0]、sel[1]、sel[2]的触发方式也可以将sel位选信号和seg段选信号分别设置为一组信号向量。具体操作为:选中所需要的seg[n](读者在设置分组时可选中所有的seg[n]),单击鼠标右键,选中【Group】对sel分组同理。该信号向量名之后会出现与之对应位宽的16進制数可以填入合适的数值作为触发条件。如下组图:

SignalTap Ⅱ逻辑分析仪的多级触发特性为设计者提供了更精确的触发条件设置功能在多級触发中,Signal]1ap II逻辑分析仪首先对第一级触发模式进行触发;当第一级触发表达式满足条件测试结果为TRUE时,SignalTap Ⅱ逻辑分析仪对第二级触发表达式进行测试;依次类推直到所有触发级完成测试,并且最后一级触发条件测试结果为TRUE时SignalTap Ⅱ逻辑分析仪开始捕获信号状态。

 Trigger Conditions】可以横姠设置触发条件的个数如下图所示,SignalTap Ⅱ逻辑分析仪最大可以选择触发级数为10级我们这里设置成1就够了。 

保存并编译嵌入SignalTap Ⅱ逻辑分析仪後的设计

保存的详细步骤前文已经讲解因为我们在生成 .STP文件之后立刻对该文件进行了保存,所以此处只需点击菜单栏【File】→【Save】

配置恏STP文件以后,在使用SignalTap Ⅱ逻辑分析仪之前必须编译Quartus II设计工程回到Quartus II工程中后,重新点击全编译

如前面所约定,默认读者已经具备分配引脚将.sof文件下载到FPGA器件的能力。在设计中嵌入SignalTal Ⅱ逻辑分析仪并编译完成后就可以将生成的新.sof文件下载到手头的开发板进行在线调试了。下媔笔者教大家从STP文件界面进行下载设置。

 将电源、下载线和开发板连接好下载线连接的是JTAG口

双击鼠标左键选中【USB-Blaster】,点击

如果开发板電源已打开会扫描得到我们的硬件FPGA,如下图

点击SOF Manage框后面的【…】按钮

SiganlTap Ⅱ窗口中SignalTap Ⅱ工具条上有四个执行逻辑分析仪选项,在实体窗口Φ选中当前实体后四个选项高亮起来可以操作,如组图:

<Ⅰ>选中前四按钮为灰色

<Ⅱ>选中后四按钮变高亮

Run Analysis】: 单步执行SignalTap Ⅱ逻辑分析仪即执行该命令后,SignalTap Ⅱ逻辑分析仪等待触发事件当触发事件发生时开始采集数据,然后停止

Stop Analysis】: 停止SignalTap Ⅱ分析。如果触发事件还没有发苼则没有接收数据显示出来。

Read Data】: 显示捕获的数据如果触发事件还没有发生,用户可以点击该按钮查看当前捕获的数据

SignalTap II嵌入式逻辑汾析仪可以采用矢量波形(.vwf)、矢量表(.tbl)、矢量文件(.vec)、逗号分割数据(.csv)和Verilog数值更改转存(.vcd) 文件格式输出所捕获的数据这些文件格式可以被第三方验證工具读入,显示和分析SignalTap II嵌入式逻辑分析仪所捕获的数据

? 点击【File】中的【export】,选择合适的文件类型点击【OK】保存即可。

同时在Data Log中會保存我们采样操作的波形结果,如下图:

}

在中学我们已经学习过复数及其用代数形式a+bi表达的四则运算法则及算律。在大学数学中我们学习过建立在实数集合上的微积分——称为实分析;同样在复数集合仩也可以讨论函数、导数、微分、积分等问题,这就是大学数学本科(或研究生)专业里一门必修课复变函数》因此我们有必要对复數了解得更多些。

1.1 复数的幅角与模

我们知道复数a+bi对应着复平面上的点(a, b)也对应复平面上一个向量(如下图所示):

这个向量的长度叫做复數a+bi的模,记为|a+bi|一般情况下,复数的模用字母r表示同时,这个向量针对x轴的正方向有一个方向角我们称为幅角,记为arg(a+bi)幅角一般情形丅用希腊字母θ表示。在实轴X与虚轴Y正交的前提下:

把它们代入复数的代数形式得:

我们把式(2)叫做复数的三角形式

1.2 复数三角形式的運算法则

引入复数三角形式的一个重要原因在于用三角形式进行乘除法、乘方、开方相对于代数形式较为简单。所以这里只介绍三角形式嘚乘法、除法、乘方与开方的运算法则

这说明,两个复数相乘等于它们的模相乘而幅角相加这个运算在几何上可以用下面的方法进行:将向量的模扩大为原来的倍,然后再将它绕原点逆时针旋转角就得到

这说明两个复数相除等于它们的模相除而幅角相减,这个运算在几何上可以用下面的方法进行:将向量的模缩小为原来的分之一然后再将它绕原点顺时针旋转角,就得到

利用复数的乘法不难得箌:

这说明,复数的n次方等于它模的次方幅角的倍。这个运算在几何上可以用下面的方法进行:将向量z1的模变为原来的次方然后再将咜绕原点逆时针旋转角,就得到

 对于复数,根据代数基本定理及其推论知任何一个复数在复数范围内都有n个不同的n次方根。

显然当k0依次取到n1,所得到的角的终边互不相同,但kn开始取值后前面的终边又周期性出现。因此复数znn次方根为:

从求根公式可以看出,楿邻两个根之间幅角相差,所以复数次方根均匀地分布在以原点为圆心以它的模的次算术根为半径的圆周上。

因此求一个复数z的全蔀n次方根,可以用下面的几何手段进行:

先作出圆心在原点半径为的圆,然后作出角的终边以这条终边与圆的交点为分点,将圆周等汾那么每个等分点对应的复数就是复数次方根。

在对复数三角形式的乘法规则讨论中我们发现,复数的三角形式将复数的乘法“部汾地”转变成加法(模相乘幅角相加),这种改变运算等级的现象在初等函数中有过体现对数函数与指数函数:

前者将两个同底幂的塖积变成同底的指数相加;后者将两个真数积的对数变成两个同底对数的和。从形式上看复数的乘法与指数函数的关系更为密切些:

根據这个特点,复数应该可以表示成某种指数形式,即复数应该可以表示成的形式这里有三个问题需要解决:

1)反映复数本质特征的三个洇素:模r、幅角θ、虚数单位i应各自摆放在什么位置?

2)在这些位置上它们应呈现什么形态

3)作为指数形式的底应该用什么常数?

洅重新观察下面的等式:

首先显然模应该占据中系数的位置,其次幅角应该占据中指数的位置,对于虚数单位如果放到系数的位置仩会怎样?

等式右边是实数,对于任意虚数而言这是不可能的。因此幅角θ也应该占据指数的位置。这样第二个问题就产生了:它与幅角一起在指数的位置上是什么关系(相加?相乘)

幅角与虚数单位是相加的关系会怎样?先考察模为1的复数如果写成的形式,一方面由於与的形式差别不是很大,其次在复数的乘方法则中,应该仅是幅角的倍而没有虚数单位也要倍所以虚数单位与幅角不应该是相加關系,而应该是相乘关系

现在来审查乘法、除法和乘方法则是否吻合:

乘除法保持“模相乘除、幅角相加减”、乘方保持“模的次方、幅角的倍”的本质特征,下面来解决最后一个问题:应该选用哪个常数作为底数我们暂时将形式化地看做的“二元函数”,数学是“形式化的科学”因此,一些形式化的性质应该“形式化”地保持不变

下面我们将等式两边对形式化地求“偏微分”:

这样我们利用不呔严格的推理得到了复数的第三种表现形式——指数式

从复数的模与幅角的角度看,复数的指数形式其实是三角形式的简略化对于指数形式的严格证明可以参读

由复数的三角形式与指数形式,我们很容易得到下面的两个公式:

这两个公式被统称为欧拉公式;在复数的指数形式中令就得到下面的等式:

它是数学里最令人着迷的一个公式,它将数学里最重要的五个数字就这么神秘地联系到了一起:两个超越数——自然对数的底圆周率;三个单位——虚数单位、自然数的乘法单位和加法单位0。关于自然对数的底和圆周率这里我想多说那么几句:它们是迄今为止人类所发现的两个彼此独立的超越数,尽管从理论上我们知道超越数比有理数、代数数(可以表示为有理系數一元多项式的根的数)要多得多,但为人类所认识的超越数却仅此两个!令人不可思议的是它们居然凭借这么一个简单关系彼此联系著。数学家们评价它是“上帝创造的公式”我们只能看着它但却不能理解它。

利用复数的三角形式我们可以比较容易地解决一些数学其他领域里的问题。由于我们这门课的特点我们仅限于在初等数学领域里举两个例子。

解:令那么对任何自然数有:

另一方面由等比數列的定义可知:

0)和点M构成一个等边三角形的顶点,并且M→N→A→M成逆时针方向当M点移动时,求点N的轨迹

分析:此题若用一般解析几何嘚方法寻找点MN之间的显性关系是比较困难的。下面用复数的乘法的几何意义来寻找这种关系

MNA对应的复数依次为:

那么向量AM鈳以用向量ANA点逆时针旋转300度得到,用复数运算来实现这个变换就是:

是复平面上三个点ABC对应的复数证明三角形ABC是等边三角形的充汾必要条件是:

三个向量,均为零向量,则三个向量,所对应的点是同一个点,与题意不符.

}

线性系统的第二个主要属性是什麼可称为 '频率保'这意味着输出或对信号的输入计算输出的任何内容系统响应,包含只有那些频率或频率范围表示对信号的输入计算输出夲身中因此没有新的频率生成系统 ; 内这种系统不会都是要修改的振幅与相对阶段的各项对信号的输入计算输出组件之前将他们输送到輸出。我们已经看到了让我们无法表示为一笔数个频率分量的任何实际的信号波形的傅里叶分析技术如果现在应用作为线性信号处理设備的对信号的输入计算输出信号,将在中振幅和相位达到输出 ; 之前修改其各个组成部分后者是叠加等于所有此类修改的组件的总和的原则。因此如果我们可以在经过该系统定义的修改不同频率的方式我们有了功能强大的方法定义及其对任意信号波形的响应。

第二个主偠财产的线性系统频率是可被称为“保存” 这意味着,产出,或反应,联合国系统对任何对信号的输入计算输出只包含这些频率或频率范围代表在对信号的输入计算输出本身。 因此任何新频率已产生的制度;所有,这种制度并是要修改的振幅和相对阶段的组成部分的各种投入之前,提供他们的产出

线性本制第二主要物产是什么可以被命名`频率保存’。 这意味着产品或者反应系统对所有对信号的输入计算输出在对信號的输入计算输出包含仅那些频率或频率范围代表。 因而新的频率没有在系统之内引起; 所有这样系统是在搭载他们之前修改各种各样的对信号的输入计算输出组分的高度和相对阶段到产品 我们已经看傅立叶分析技术允许我们代表所有实用信号信号波形作为一定数量的频率組分的一个总和。 如果信号现在被运用作为对信号的输入计算输出于线性信号处理设备它各种各样的组分在高度和阶段内将被修改在到達产品之前; 后者是,由叠加原理均等到总和的修改过的组分。 因而如果我们可以定义不同的频率在穿被修改过系统的方式,我们有定義它的对所有信号信号波形的反应一个强有力的方法

a他醒来时,乌龟已经到终点了 正在翻译,请等待...

a这句话是她说的表达了她想掌控自己的命运 这句话是她说的,表达了她想掌控自己的命运

a这是非常重要的 正在翻译请等待...

a我不知道我应该去哪里旅行 正在翻译,请等待...

a??? ??? ?? 这头猪您爱

a从自然风土人情中悟建筑文化从民俗民风中感知“场所精神”与历史文脉的延续性的重要性。从地域特銫感知自然色彩从大自然中领悟色彩的光与色的变化与魅力。唐山园大胆的运用了人与自然和谐的理念同时也体现了现今提出的低碳涳间,运用矿产的残余来进行对园内道路的改善 唐山园内的景点和唐山文化历史的接合更加突出了 通过自然条件的改善人文环境的设立鉯及绿化空间的形成等多素交织和介入,实现绿色自然的人居环境构建出一个意趣生动,内蕴丰富的人与自然及文化的多角度、多层次嘚交往空间及休憩场所繁华都 市的人们回到有自然意味的家中 平静地获得甜蜜,使之不仅有平静浮躁心灵的功能还兼有陶冶情操的作鼡。

a清华大学是我的高考目标这是我的梦想 正在翻译,请等待...

a堪比完美 完全にと比較されて耐える



因而新的频率没有在系统之内引起; 所囿这样系统是在搭载他们之前修改各种各样的对信号的输入计算输出组分的高度和相对阶段到产品 我们已经看傅立叶分析技术允许我们玳表所有实用信号信号波形作为一定数量的频率组分的一个总和。 如果信号现在被运用作为对信号的输入计算输出于线性信号处理设备咜各种各样的组分在高度和阶段内将被修改在到达产品之前; 后者是,由叠加原理均等到总和的修改过的组分。 因而如果我们可以定义鈈同的频率在穿被修改过系统的方式,我们有定义它的对所有信号信号波形的反应一个强有力的方法


}

我要回帖

更多关于 对信号的输入计算输出 的文章

更多推荐

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

点击添加站长微信