首页
📁归档
⏳时光机
🚩友链
📫留言
📧订阅本站
推荐
📕考研课程
🏜️ 免费壁纸
❤ 捐助本站
💰资助名单
🎵音乐实验
Search
1
【NPN/PNP三极管】放大电路饱和失真和截止失真的区别
20,043 阅读
2
论文写作中如何把word里面所有数字和字母替换为新罗马字体
10,606 阅读
3
【高数】形心计算公式讲解大全
9,037 阅读
4
Vivado-FPGA Verilog烧写固化教程
7,869 阅读
5
【概论】一阶矩、二阶矩原点矩,中心矩区别与概念
7,805 阅读
🪶微语&随笔
励志美文
我的随笔
写作办公
📡电子&通信
嵌入式&系统
通信&信息处理
编程&脚本笔记
⌨️IC&系统
FPGA&ASIC
VLSI&IC验证
EDA&虚拟机
💻电子&计算机
IP&SOC设计
机器学习
软硬件算法
登录
/
注册
📡电子&通信(共117篇)
找到
117
篇与
📡电子&通信
相关的结果
- 第 3 页
2023-03-13
Verilog-位宽计算的系统函数$clog2
一、什么是$clog2 clog2 这是一个系统函数,第一次出现于Verilog-2005版本中,在IEEE中处在17.11.1节的math functions中,因为log2是2进制的对数,所以这个系统函数在电路设计的计算位宽时体现出了自身的方便性,需要注意的是,这里的$clog2是向上取整的一个系统函数,比如 $clog2(5) 虽然真实的值为2.3,但经过向上取整后,最后的输出为3 二、$clog2的优势和案例 在老的IEEE verilog版本中,假如不用clog2去计算位宽,我们可能需要如下的function函数来进行位宽计算,这个函数本身很好理解,即通过移位去检测depth的位宽,之后我们需要再将计算得到的数字使用在端口定义的过程中。 function integer clog2( input integer depth ); begin if(depth == 0) clog2 = 1; else if(depth != 0) for(clog2 = 0; depth > 0;clog2 = clog2 + 1) depth = depth >> 1; end endfunction但是引入$clog2后,原function可以简化为如下的过程,很显然,通过对系统函数 $clog2的使用,我们大大减少了设计时端口宽度定义时需要code的量。 module clog2(a,b); parameter depth = 2034; input [$clog2(depth)-1:0] a; output [$clog2(depth)-1:0]b; //details about the design endmodule 三、额外补充 在Xlinix的官网的“44586 - 13.2 Verilog $clog2 function implemented improperly”中,作者发现了13.2版本的Xlinix的ISE对clog2系统函数的错误计算,按照文章中所言:“The $clog2 function returns the ceiling of the logarithm to the base e (natural logarithm) rather than the ceiling of the logarithm to the base 2.”意味着13.2版本的ISE以e为底计算clog2,而非以2为底,官方的回复是ISE 13.2 仅支持Verilog-2001,这个问题在ISE 14.1中进行了修复,所以读者假如使用的开发套件是老版本的,或者不支持Verilog-2005,都有可能因为使用clog2产生问题,需注意。具体额外补充参考如下。 44586 - 13.2 Verilog $clog2 function implemented improperly
编程&脚本笔记
# Verilog
刘航宇
3年前
0
3,238
1
HFSS软件笔记
目录 一、HFSS中的边界条件(Boundaries) 二、HFSS中的激励方式(Excitation) 三、求解类型和求解设置 四、HFSS中的变量和Optimetrics模块的使用 五、HFSS的数据后处理 六、天线问题的数据后处理 # HFSS软件学习笔记 一、HFSS中的边界条件(Boundaries) 边界条件定义了求解区域的边界以及不同物体交界处的电磁场特性,是求解麦克斯韦方程的基础。 只有在假定场矢量是单值、有界、并且沿空间连续分布的前提下,微分形式的麦克斯韦方程组才是有效的;而在求解区域的边界、不同介质的交界处和场源处,场矢量是不连续的,那么场的导数也就失去了意义。边界条件就是定义跨越不连续边界处的电磁场的特性,因此,正确地理解、定义并设置边界条件,是正确使用HFSS仿真分析电磁场场特性的前提。 边界条件的类型: 理想导体边界(Perfect E) 电场矢量垂直于物体表面,有两种边界被自动设为理想导体边界条件: 1、任何与背景相关联的物体表面将被自动定义为理想导体边界,并命名为outer边界 2、材料设为PEC(理想电导体)的物体表面被自动定义为理想导体边界,并命名为smental 理想磁边界/自然边界(Perfect H) 电场矢量与物体表面相切,磁场矢量与物体表面垂直。 自然边界(Natural):当理想导体边界和理想磁边界出现交叠时,理想磁边界也称为自然边界 注意:在理想导体边界上叠加理想磁边界将去掉理想导体边界的特性,相当于在理想导体表面开个口,允许电场穿过。 有限导体边界(Finite Conductivity) 有耗导体/非理性导体边界条件,电场垂直于物体表面,在电磁波的传播方向上电场会愈来愈小 用户需要设置的参数:导电率和导磁率 注意:当物体的材料设置为非理想导体(如铜、铝等金属材料)时,其表面自动定义为有限导体边界条件。 辐射边界(Radiation) 用于模拟开放的自由空间,模拟波辐射到空间的无限远处的情况,常用于天线问题的分析。当结构中包含辐射边界条件时,HFSS会自动计算结构的远区场。(使用Perfect H边界条件模拟开放空间时,不会计算远区场) 辐射边界条件是自由空间的近似,这种近似的准确程度取决于波的传播方向与辐射边界之间的角度,以及辐射源与边界之间的距离。辐射边界在各个方向上距离辐射体一般不小于1/4个波长。 对称边界(Symmetry) 模拟理想电壁或理想磁壁对称面,应用对称边界可以构造结构时仅构造一部分,减小结构的尺寸和设计的复杂性,缩短计算时间。 定义对称平面时,需要遵循以下原则: 1、对称平面必须暴露在背景中 2、对称面必须定义在平面表面上,不能定义在曲面上 3、在一个问题上最多只能定义三个正交对称面 决定对称面的类型: 1、如果电场垂直于对称面且对称,使用理想电壁对称面 2、如果磁场垂直于对称面且对称,使用理想磁壁对称面 此外使用对称边界条件需要设置阻抗乘法器: 1、理想电壁对称面将结构分为两部分时,只有一半的电压值和一半的能量被计算,由Zpu=U*U/P计算出的阻抗也只有真实值的一半,所以需要定义2倍的阻抗乘法器。 2、理想磁壁对称面将结构分为两部分时,只有一半的能量被计算,而电压保持不变,由Zpu=U*U/P计算出的阻抗是真实值的2倍,所以需要定义0.5倍的阻抗乘法器。图片 图片 在这里插入图片描述 阻抗边界(Impedance) 用于模拟已知阻抗的边界表面,如薄膜电阻表面;表面的阻抗Zs=Rs+jXs。 阻抗的计算: number of "Square"=Length(in direction of current flow)/Width Impedance per Square=Desired Lumped Impedance/number of square 集总RLC边界(Lumped RLC) 类似于阻抗边界条件,利用用户提供的R、L、C值计算出对应的阻抗值 与阻抗边界不同的是,集总RLC边界不需要提供以Ohms/Square为单位的电阻和电抗,而是要给出R、L和C的真实值;之后HFSS就能确定任意频率下集总RLC边界以Ohms/Square为单位的阻抗。 分层阻抗边界条件(Layered Impedance) 分层阻抗边界条件是用多层结构将物体表面模拟为一个阻抗表面,其效果与阻抗边界条件相同; 与阻抗边界条件不同的是,对于分层阻抗边界条件,HFSS是根据输入的分层结构数据和表面粗糙度来计算表面电阻和表面电抗的。 分层边界条件不支持快速扫频。 无限地平面(Infinite Ground Plane) 在设置理想导体边界、有限导体边界或阻抗边界时有"Infinite Ground Plane"复选框。 将有限大的边界表面模拟成无限大地平面的作用,设置无限大平面边界后,在后处理中会影响近区、远区辐射场的计算。 定义无限大平面时,需要满足以下条件: 1、必须暴露在背景上 2、必须定义在平面上、 3、无限大平面和对称面的总数不超过3个 4、所有无限大地平面和对称面必须相互垂直 主从边界(Master and slave) 简称为关联边界条件LBC,主要用于模拟平面周期性结构表面,例如阵列天线。 包括主边界条件(Master)和从边界条件(Slave),总是成对出现,且主边界表面和从边界表面的形状、大小和方向完全相同,主边界表面和从边界表面上的电场存在一定的相位差,该相位差就是周期性结构相邻单元之间存在的相位差。 定义主从边界表面时,用户需要正确设置U、V坐标系,保证主从边界表面大小和方向完全一致。 理想匹配层(PML) 理想匹配层,是能够完全吸收入射电磁波的假想各项异性材料边界。理想匹配层有两种典型的应用:一是用于外场问题中的自由空间截断,二是用于导波问题中的吸收负载。 对于导波的吸收负载,理想匹配层模拟导波结构均匀地延申到无穷远处。 对于自由空间截断地情况,理想匹配层地作用类似于辐射边界条件,PML表面能够完全吸收入射过来地电磁波。和辐射边界条件相比,理想匹配层因为能够完全吸收入射的电磁波,零反射,因此计算结果更精确;同时理想匹配层表面可以距离辐射体更近(差不过十分之一个波长即可),不需要像辐射边界表面一般需要距离辐射体大约四分之一个波长。二、HFSS中的激励方式(Excitation) HFSS中,激励是一种定义在三维物体表面或者二维物体上的激励源,这种激励源可以是电磁波激励、电压源或者电流源,激励端口是一种允许能量进入或流出几何结构的特殊边界条件类型。 激励类型: 波端口(Wave Port) 默认情况下,所有三维物体和背景之间的接触面都是理想导体边界,没有能量可以进出;波端口设置在背景上,用作模型的激励源并提供一个能量进入/流出的窗口。波端口一般设置在背景平面上,不允许端口平面弯曲。 波端口模式(modes):对于给定横截面的波导或传输线,特定频率下有一系列的解满足相应的边界条件和麦克斯韦方程组,每个解都称之为一种模式,或者说一种波形。通常,模式是根据电场和磁场沿导波系统传输方向上有无分量这一情况来命名的,假设导波系统沿z轴放置,上述分量是指z向的电场分量Ez和磁场分量Hz。 对于Ez=0、Hz=0一类的模,称之为横电磁模,即TEM模; 对于Ez=0、Hz不为0一类模,称之为横电模,即TE模; 对于Ez不为0、Hz=0一类的模,称之为横磁模,即TM模。 端口校准:波端口必须被校准以确保一致的结果;校准的目的有两个,确定场的方向、设置电压的积分路径。 端口平移(Deembed):是指平移端口的位置,查看其对计算结果的影响;选中使用端口平移功能,只影响数据后处理,HFSS不会重新进行仿真计算。HFSS端口平移中正数表示参考平面向模型内部移动,负数则是向外延申。 终端线(Terminal):对于终端驱动的求解类型,终端的S参数反映的是波端口节点电压和电流的线性叠加,通过波端口处的节点电流和电压可以计算出端口的阻抗和S参数矩阵。 集总端口(Lumped Por) 集总端口激励和波端口激励是HFSS中最常用的两种激励方式。 集总端口激励类似于传统的波端口,与波端口不同的是集总端口可以设置在物体模型内部,且用户需要设定端口阻抗;集总端口直接在端口处计算S参数,设定的端口阻抗即为集总端口上S参数的参考阻抗;另外集总端口不计算端口处的传播常数,因此集总端口无法进行端口平移操作。 集总端口激励的尺寸大小要比波端口小 Floquet端口(Floquet Port) 与波端口的求解方式类似,Floquet端口求解的反射和传输系数能够以S参数的形式显示。使用Floquet端口激励并结合周期性边界,能够像传统波导端口激励一样轻松的分析周期型结构的电磁特性,从而避免了场求解器复杂的后处理过程。 入射波(Incident Wave) 是用户设置的朝某一特定方向传播的电磁波,其等相位面与传播方向垂直;入射波照射到器件表面和器件表面的夹角称为入射角。入射波激励常用于雷达反射截面(RCS)问题的计算。 需要设置的参数有:波的传播方向(Poynting Vector)、电场的强度和方向。 电压源激励(Voltage) 电压源激励定义在两层导体之间的平面上,用理想电压源来表示该平面上的电场激励。 电压源激励时需要设置的参数有:电压的幅度、相位和电场的方向。 注意:电压源激励所在的平面必须远小于工作波长,且平面上的电场是恒定电场;电压源激励是理想的源,没有内阻,因此后处理时不会输出S参数。 电流源激励(Current) 电流源激励定义于导体表面或者导体表面的缝隙上,用理想电流源来表示该平面上激励。 电流源激励需要设定的参数有:导体表面缝隙的电流幅度、相位和方向。 注意:电流源激励所在的平面/缝隙必须小于工作波长,且平面/缝隙上的电流是恒定的;电流源激励是理想的源,没有内阻,因此后处理时不会输出S参数。 磁偏置激励(Magnetic Bias) 创建一个铁氧体材料时,必须通过设置磁偏置激励来定义网格的内部偏置场;该偏置场使得铁氧体中的磁性偶极子规则排列,产生一个非零的磁矩。 如果应用的偏置场时均匀的,张量坐标系可以通过旋转全局坐标系来设置 如果应用的偏置场时非均匀的,不允许旋转全局坐标来设置张量坐标系三、求解类型和求解设置 1、HFSS中有三种求解类型:模式驱动求解(Driven Model)、终端驱动求解(Driven Terminal)和本征模求解(Eigenmode) 模式驱动求解类型:以模式为基础计算S参数,根据导波内各模式场的入射功率和反射功率来计算S参数矩阵的解。 终端驱动求解类型:以终端为基础计算导体传输线端口的S参数;此时,根据传输线终端的电压和电流来计算S参数矩阵的解。 本征模式求解类型:本征模式求解器主要用于谐振问题的设计与分析,可以用于计算谐振结构的谐振频率和谐振频率处对应的场,也可以用于计算谐振腔体的无载Q值。 应用本征模式求解时注意: 不需要设置激励方式 不能定义辐射边界条件 不能进行扫频分析 不能包含铁氧体材料 只有场解结果,没有S参数求解结果2、自适应网格剖分:在分析对象内部搜索误差最大的区域并进行网格的细化,每次网格细化过程中网格增加百分比由用户事先设置,完成一次细化过程后,重新计算并搜索误差最大的区域,然后判断误差是否满足设置的收敛条件。如果满足收敛条件,则完成网格剖分;如果不满足收敛条件,继续下一次网格细化过程,直到满足收敛条件或者达到设置的最大迭代次数为止。 3、求解频率(网格自适应剖分频率)的选择 HFSS计算时自适应网格剖分是在用户设定的单一频点上进行的,网格剖分完成后,同一个求解设置项下其他频点的求解都是基于前面设定频点上所完成的网格划分。自适应频率设置越高,网格剖分就越细,网格个数就越多,计算结果也相应地更加准确,但同时计算过程中所占用地计算机内存也就越高,计算所花费地时间也越长。 下面给出几个常用问题类别的自适应频率的选择: 点频或窄带问题:对于点频或者窄带问题,自适应网格剖分直接选择工作频率。 宽带问题:对于宽带问题,应该选择最高频率作为自适应网格剖分频率。 滤波器问题:对于滤波器问题,由于阻带内电场只存在于断口处,所以自适应频率选择在通带内的高频段。 快速扫频问题:对于快速扫频问题,典型的做法就是选择中心频率作为自适应频率。 高速数字信号:对于高速数字信号完整性分析问题,需要借助转折频率(Knee Frequency)来决定自适应网格剖分频率 4、扫频分析 离散扫频(Discrete):是在频带内的指定频点处计算S参数和场解。例如,指定频带范围为1~2GHz、步长为0.25GHz,则会计算在1GHz、1.25GHz、1.5GHz、1.75GHz、2GHz频点处的S参数和场解。默认情况下,使用离散扫频只保存最后计算频率点的场解。如果希望保存指定的所有频率点的场解,需要选中设置对话框中Save Fields复选框。 快速扫频(Fast):采用ALPS算法,在很宽的频带范围内搜寻处传输函数的全部零、极点。快速扫频适用于谐振问题和高Q值问题的分析,可以得到场在谐振点附近行为的精确描述。使用快速扫频,一般选择频带中心频率作为自适应网格剖分频率进行网格剖分,计算出该频点的S参数和场分布,然后使用基于ALPS算法的求解器从中心频率处的S参数解和场解来外推整个频带范围的S参数和场解。使用快速扫频,计算时只会求解中心频点处的场解,但在数据后处理时整个扫频范围内的任意频点的场都可以显示。 插值扫频(Interpolating):插值扫频使用二分法来计算整个频段内的S参数和场解。使用插值扫频,HFSS自适应选择场解的频率点,并计算相邻两个频点之间的解的误差,找出最大误差,当两点之间的最大误差达到指定的误差收敛标准或者达到了设定的最大频点数目后,扫描完成;其他频率点上的S参数和场解由内插给出。 四、HFSS中的变量和Optimetrics模块的使用 HFSS不仅能够提供常规的电磁分析,还能够提供优化分析、参数扫描分析、灵敏度分析和统计分析等功能。这些功能都集中在HFSS中的Optimetrics模块中。要使用Optimetrics模块的这些分析和设计功能。首先需要定义和添加相关变量。 1、HFSS中变量的定义和使用 (1)HFSS中有两种类型的变量:工程变量(Project Variables)和设计变量/本地变量(Local Variables) 工程变量和设计变量的区别: 工程变量前面有一个"$"前缀,以和本地变量区分 工程变量作用区间是整个Project,本地变量作用区间是所在的Design 物体模型尺寸、物体的材料属性(工程变量)等都可以使用变量来表示。 (2)变量的定义 变量名:可以由数字、字母或下划线组成。每个变量在定义时都必须赋一个初始值,变量值可以是数值、数学表达式或者数学函数,也可以是数组、矩阵或者行列式。 添加/删除变量:工程变量和设计变量操作不同 添加和删除工程变量:Project > Project Variables 或者 [Project Tree] Project > Project Variables 打开 Project Properties 对话框 添加和删除设计变量:HFSS > Design Properties 或者 [Project Tree] Design > Design Properties 打开 Design Properties 对话框 在设计过程中,也可以直接输入未定义的变量代替设计参数,输入未定义的变量后,HFSS会自动弹出添加变量的对话框 2、Optimetrics模块的功能介绍 Optimetrics是集成在HFSS中的优化设计模块,该模块通过自动分析设计参数的变化对求解结果的影响,HFSS中Optimetrics模块能够提供如下分析设计功能: 参数扫描分析(Parametric) 参数扫描分析功能可以用来分析物体的性能随着指定变量的变化而变化的关系,在优化设计之前一般使用参数扫描分析功能来确定被优化变量的合理变化区间 参数扫描分析步骤: 首先需要定义变量并添加求解设置项 HFSS > Optimetrices > Add Parametric...弹出 Setup Sweep Analysis 对话框,添加扫描变量 或选中Project Manager 中的 Optimetrics,单击右键 Add > Parametric,弹出 Setup Sweep Analysis 对话框,添加扫描变量 设置好扫面变量后,点击”Analyze“就可以进行参数扫描分析 查看分析结果 优化设计(Optimization) 优化设计是HFSS软件结合Optimetrics模块根据特定的优化算法在所有可能的设计变化中寻找出一个满足设计要求的值的过程 优化设计的过程: 首先需要明确设计要求或设计目标 然后用户根据设计要求创建初始结构模型(Nominal Design)、定义设计变量并构造目标函数 最后指定优化算法进行优化。 图片 图片 在这里插入图片描述 调谐分析(Tuning) 调谐分析功能是改变变量值的同时实时显示对求解结果的影响程度 HFSS中的调谐分析功能是用户在手动改变变量值得同时能实时显示求解结果 图片 图片 在这里插入图片描述 灵敏度分析(Sensitivity) 灵敏度定义为电磁特性/求解结果的变化与电路参数的变化的比值,使用HFSS进行电磁分析时S参数是很常用的一个分析结果。灵敏度分析功能是用来分析设计参数的微小变化对求解结果的影响程度 统计分析(Statistical) 统计分析功能是利用统计学的观点来研究设计参数容差对求解结果的影响,常用的方法是蒙特卡洛法 图片 图片 在这里插入图片描述 五、HFSS的数据后处理 使用HFSS进行电磁问题的求解分析过程中以及完成求解分析之后,利用数据后处理功能能够直观地给出问题地各种求解信息和求解结果。 1、求解信息数据(Solution Data) HFSS > Results > Solution Data 命令,或者右键单机工程树Results节点,从弹出菜单中选择Solution Data命令,可以打开求解信息对话框,显示各种求解信息。 2、Results数值结果 (1)显示方式 HFSS后处理模块能够以多种方式来显示分析数值结果,这些数值结果地显示方式包括:(右击Results > Create Model Solution Data Report) Rectangular Plot:直角坐标图形显示 Rectangular Stacked Plot Polar Plot:极坐标图像显示 Data Table:数据列表显示 Smith Chart: 史密斯圆图显示 3D Rectangular Plot:三维直角坐标 3D Polar Plot:三维球坐标图形显示 Radiation Pattern:辐射方向图 (2)参数类型 模式驱动求解: Output Variables:用户自定义的输出变量 S Parameter:散射参数 Y Parameter:导纳参数 Z Parameter:阻抗参数 VSWR:电压驻波比 Gamma:传播常数 Port Zo:端口特征阻抗 Active S Parameter Active Y Parameter Active Z Parameter Active VSWR 终端驱动求解: Output Variables:用户自定义的输出变量 S Parameter:散射参数 Y Parameter:导纳参数 Z Parameter:阻抗参数 VSWR:电压驻波比 Power:功率 Voltage Transform matrix:电压传输矩阵 Terminal Port Zo:端口特征阻抗 Active S Parameter Active Y Parameter Active Z Parameter Active VSWR (3)输出变量 右键单击工程树下的Result节点,从弹出菜单中选择Output Variables命令,便可打开输出变量的定义对话框 3、Field Overlays场分布图 在HFSS求解完成之后可以通过右击 Field Overlays 来查看电场、磁场、电流密度、坡印廷矢量等场分布图。 (1)电场E Mag_E:电场幅度瞬时值 ComplexMag_E:电场幅度有效值 Vector_E:电场矢量 (2)磁场H Mag_H:磁场幅度瞬时值 ComplexMag_H:磁场幅度有效值 Vector_H:磁场矢量 (3)电流密度J Mag_Jvol:体电流密度瞬时值 ComplexMag_Jvol:体电流密度有效值 Vector_Jvol:体电流密度矢量 Mag_Jsurf:面电流密度瞬时值 ComplexMag_Jsurf:面电流密度有效值 Vector_Jsurf:面电流密度矢量 (4)其他 Vector_RealPoynting:坡印廷矢量 Local\_SAR和Average\_SAR:局部SAR值和平均SAR值 六、天线问题的数据后处理 1、天线方向图 创建天线的方向图:Results > Create Model Solution Data Report > 3D Polar Plot 天线的辐射场在固定距离上随球坐标系的角坐标 θ 、φ 分布的图形被称为辐射方向图,简称方向图。方向图通常在远区场确定。用辐射场强表示的方向图称为场强方向图,用辐射功率密度表示的方向图称为功率方向图。 2、天线性能参数 右击Radiation,创建好查看天线性能参数:右击天线辐射方向图 > Compute Antenna Parameters Incident Power:输入功率 HFSS中输入功率是指定义的端口激励功率 Acceptable Power:净输入功率 净输入功率是指世纪流入天线端口的输入功率,如果分别使用 Pacc 和 Pinc 表示净输入功率和输入功率,对于只有一个传输模式的单端口天线,有: 图片 Radiated Power:辐射功率 辐射功率是指经由天线辐射到自由空间里的电磁能量,天线的辐射功率可以用坡印廷矢量的曲面积分来计算: 图片 Radiation Efficiency:辐射效率 辐射效率是辐射功率和净输入功率的比值 图片 Max U:最大辐射强度 辐射强度U是指每单位立体角内天线辐射出的功率,Max U是辐射强度的最大值 图片 η 自由空间中的波阻抗为 377Ω,r 为远区场点与天线之间的距离 Peak Directivity:方向性系数 天线的方向性系数是指在相同的辐射功率和相同的距离的情况下,天线在最大辐射方向上的辐射功率密度与无方向性天线在该方向上的辐射功率密度的比值图片 Peak Gain:天线增益 天线增益是指在相同的净输入功率和相同距离的情况下,天线在最大辐射方向上的辐射功率密度与无方向性天线在该方向上的辐射功率密度的比值图片 Peak Realized Gain:最大实际增益 天线的最大实际增益是指在相同的输入功率和相同距离的情况下,天线在最大辐射方向上的辐射功率密度与无方向性天线在该方向上的辐射功率密度的比值 Front to back Ration:前后向比 又称为轴比(Axis Ratio),指方向图中前后瓣的最大比值,代表天线的极化程度 3、天线阵的处理 由相同的天线单元构成的天线阵的方向图等于单个天线单元的方向图与阵因子的乘积。其中,阵因子取决于天线单元之间的振幅、相位差和相对位置,与天线的类型、尺寸无关。在HFSS中,可以定义天线阵元排列结构和激励方式,然后通过仿真分析分析单个天线单元的方向图等天线参数和阵因子来仿真分析整个天线阵列的方向图等天线参数。HFSS支持两种天线阵列类型:规则排列的均匀天线阵列(Regular Uniform Array)和用户自定义排列(Custom Array)。 其中用户自定义阵列:允许用户使用文本文件自定义阵因子信息,然后导入到HFSS软件中,HFSS计算得到阵因子。用户自定义阵列允许更大的灵活性,可以构造天线阵元在空间任意分布的天线阵列。
通信&信息处理
# 天线设计
刘航宇
3年前
0
5,481
2
2023-03-08
天线设计2-电磁学基础与线形天线
第三章 辐射积分与辅助函数 求解辐射场的分析中,通常需要构造辅助函数来帮助求解。常见的辅助位函数为,磁矢量A- (也称为磁矢位)。 图片 远场辐射 很多天线的辐射场使用球面坐标来表示会较为方便,其一般形式是 图片 重要公式 图片 线形天线 Linear Wire Antenna 线形天线是最古老、最便宜、最简单、应用最广泛的天线。因此我们尝试从最小的天线结构和最简单的几何形状开始分析。我们以极小偶极子的辐射场特性为例,讲解辐射场的一般求解过程。 极小偶极子 Infinitesimal Dipole 极小偶极子对应于导线很短,很细,电流近似均匀分布的情况。 图片 图片 求解辐射场 图片 图片 这样我们就得到了极小偶极子的辐射电场和磁场。以上的分析在源以外的区域都是有效的。 功率密度和辐射电阻 利用前面计算的结果和坡印廷矢量的计算公式 图片 辐射场分布 前面所推导的极小偶极子的电磁场的分布 在源以外的区域都是适用的,但在不同的区域,场的一些特性可能有所区别。 近场 kr <<1 图片 中场 kr>1 图片 远场 kr>>1 在远场时,径向的电场几乎为0。能流密度垂直于径向,以辐射波为主。 从近场到远场的过渡动画: 动画 方向性 图片 一般远场辐射特性的求解过程 前面我们以极小偶极子为例,求解了极小偶极子的辐射特性。一般远场辐射特性的计算过程如下: 指定电流或者磁流密度 确定辅助场A 确定远场的E和H 计算(a)能流密度或(b)辐射强度 计算辐射功率 计算极化 计算归一化的功率图 计算辐射电阻和输入电阻 图片 有限长度偶极子 极小偶极子是一种将电流分割成无数小电流源的近似,实际情况中,需要求解的往往是有限长度的偶极子。我们假设电流在导线上的分布是正弦形式的,电流密度可以写成: 图片 图片 图片 图片 辐射电阻 根据前面辐射功率和辐射电阻的关系,可以得到 图片 图片 辐射电抗 图片 输入电阻 输入端看到的电阻与天线的辐射电阻未必是相同的。因为导线上的电流分布发生了变化。 图片 半波偶极子 图片 辐射阻抗 辐射电阻: 图片 图片
通信&信息处理
# 天线设计
刘航宇
3年前
0
1,269
2
天线设计-微带天线小型化技术
天线作为无线电通信的桥梁,是实现无线通信的关键。随着无线通信技术和电子技术的发展,日常生活中的无线电子产品变得越来越小,越来越薄,越来越轻,而功能变得越来越强大。天线的小型化跟不上电子设备小型化的步伐,经常成为无线电子产品体积缩小的瓶颈。理论上讲,天线的工作波长与天线尺寸成正比。换句话说,要想降低天线的工作频率就要增大天线的尺寸,这就使得天线的小型化成为了研究的难点,实现微带天线小型化设计的主要手段有: 1)提高介质基板的介电常数; 2)曲流技术; 3)短路加载技术; 4)附加有源网络; 5)应用用电磁带隙结构; 6)应用左手介质; 目录 1、提高介质基板的介电常数 曲流技术贴片表面开槽 接地板开槽 短路加载技术 附加有源网络 应用用电磁带隙结构 应用左手介质 1、提高介质基板的介电常数 图片 图片 曲流技术 我们知道增加天线的有效长度可以降低天线的谐振频率。曲流技术就是我们常说的表面开槽技术,它的实质就是增加了天线的有效长度,从而达到天线小型化的目的。 贴片表面开槽 图片 图(3-1)为表面开槽后的辐射贴片电流路径分布。从图中我们可以看出辐射贴片的电流路径在开槽处发生弯曲,有效地延长了电流路径,相当于天线的有效长度变大了。从而在不改变天线几何尺寸的情况下,降低了天线的谐振频率。 微带天线的辐射贴片表面上,各个共振模式的电流分布均不相同。如果在相同的共振模式下开槽,就会改变原有的共振模式的电流路径,延长电流路径,使得天线的共振波长变大。所所开凹槽的长度会影响天线的谐振频率,凹槽越长则天线的谐振频率越低。不过,所开凹槽的宽度不宜过大,太大会降低天线的辐射性能。 跟采用高介质常数基底的方法一样,辐射贴片表面开槽也有其弊端。表面开槽后天线会.产生垂直于主激发面的额外电流,从而增加了天线的交叉极化,使得天线的辐射效率降低。除此之外,开槽后天线的相对辐射面积就减小了,从而影响到天线的增益。 接地板开槽 图片 图片 短路加载技术 基本的矩形微带天线的为工作波长的二分之一,基本谐振模式为TM。,其电流在两个开路端之间成驻波分布。所以在两个开路端之间有--条零电位线。如果我们在此零电位线处让其接地,将微带天线的另一半舍去,就可以在开路和短路之间形成驻波分布,而不改变天线的内部场分布。这样一来天线的尺寸就减小 了一半,实现了天线小型化的目的。短路加载微带天线的方法有很多,包括短路面加载,短路片加载和短路探针加载。短路加载的数量,每个短路加载的面积以及天线的高度决定了短路加载的效果。图(3-3)分别给出了不同加载方式的示意图。 图片 图片 图(3-3a)是短路面加载的微带天线,它的尺寸缩小到了四分之一工作波长。所以此微带天线的尺寸比半波结构的微带天线尺寸减小了一-般。图(3-3a)所示的短路片加载微带天线和图(3-3b)所示的短路探针微带天线的结构比较相似,但实际上它们加载的结构带宽不一样。 附加有源网络 由于天线的辐射电阻会随着天线尺寸的减小而减小,所以天线尺寸的减小会降低天线的效率。除此之外,天线的带宽也常常因为天线尺寸的减小而降低。而天线性能的恶化会影响整个无线收发系统的性能,甚至使系统无法正常工作。 有源网络的放大作用和阻抗补偿技术可以用来弥补由天线尺寸减小而引起的天线性能下降的问题 有源天线具有以下优点: 1)频带宽; 2)高增益; 3)容易实现阻抗匹配;. 但是有源网络会影响天线的互易性。 应用用电磁带隙结构 电磁带隙结构(Electromagnetic B and-Gap)是周期结构的统称,包括光子带隙(Photonic Band Gap, PB)、频率选择表面(Frequency Select Surface, FS)以 及光子晶体(photonic Crystal,PC)等周期结构。电磁波与周期结构互相作用的时候,会出现--些如频率禁带、通带以及频率间隙等特性。 电磁带隙结构是微带辐射贴片的下方及周围、天线的基片内钻出或刻蚀出一系列间隔非常近的小孔(≤h/10),通过改变孔间距和孔的大小来改变有效介电常数。EBG 是人造的周期性结构,在此种结构中,一-定范围内的电磁波无法传播。将电磁带隙结构附加在天线辐射贴片的背面,可以抑制天线的表面波,从而实现天线小型化的目的。 目前,比较常见的电磁带隙结构有: 1)基底打孔型; 2)高阻抗表面型; 3)地面腐蚀型; 4)夹层式结构; 5)共面紧凑型; 应用左手介质 图片 图片 图片 如图(3-5)所示,将左手介质和右手介质相叠加,当电磁波在当中传播时,由于介质两边相位相反,左手介质会对右手介质进行相位补偿,相位变化会完全抵消。这样,由辐射贴片、右手介质、左手介质以及接地板所组成的微带天线的谐振方程不再依赖于d,和d,而只取决于d2/d,.由于传统的谐振腔谐振至少需要半个波长,而这种结构就突破了这个限制,从而很好地降低了天线的高度,实现了微带天线小型化的目的。
通信&信息处理
# 天线设计
刘航宇
3年前
0
3,707
7
2023-03-03
天线设计1-基本参数
第一章 导言 天线类型 图片 辐射机理 电磁波是如何产生,并最终与天线“分离”而在自由空间中传播的呢? 我们讨论以下几种辐射源的辐射原理。 单根导线 图片 图片 这一方程表示了电流和电荷之间的关系,也是电磁辐射的基本条件:要产生电磁辐射,需要有电流或电荷的加速(或减速)。 要产生电荷的加速或减速,需要导线弯曲、不连续、或者端接。就如同水流一样,当管道宽度变化,流速发生变化,在管道宽度变化的区域,就有水流的加速/减速。 为了定性的的了解辐射机理。考虑一个脉冲源连接到一个导线,导线与GND存在RC寄生参数,到导线通电时,导体中的电子被加速;在终端的电子被减速,即反射;从而在导线的两端和导线上产生辐射场。在这个过程中,电荷加速是外部源造成的,电场使电荷运动;电荷减速,则于是由于感应场有关的力造成的,例如导线两端的电荷积累。因此激励电场引起电荷加速,而导线阻抗不连续导致辐射的产生。 传输线 图片 考虑一个电压源连接到图1.11(a)所示的两根导线上。导线间的交变电压使得电荷加速或减速,交变电场感应出交变的磁场,反之亦然,因此,从天线端产生了电磁波,并传播到自由空间中。 结论:激发电场需要电荷,单维持电场不需要。(这就类似水波的产生) 偶极子 首先我们要接受电磁场传播的速度是有限的。两个偶极子在每T/2的时间内交换位置,每个T/2时间内,电场只能传播的距离。每次偶极子交换位置时,电场的极性发生了变化,因此传播的电场变成交变电场,产生交变磁场,从而形成了脱离源的电磁波。 图片 电流在细导线上的分布 讨论天线的辐射场时,需要知道电流的分布。 图片 图片 图片 图片 分析方法 在过去,分析复杂天线问题通常用积分方程方法、几何衍射理论来求解。此类方法用于线型天线较为方便。然而当辐射系统为多个波长时,低频的方法计算效率不高,最近广为关注和应用的GTD/UTD方法,它是几何光学的拓展,通过引入衍射机制,克服了几何光学的局限性。有限差分时域是另一种在散射方面受到广泛关注的方法,现已应用到天线辐射问题。有限元是一种在解决天线问题中获得巨大成功的方法。 遇到的挑战 目前仍有许多挑战和需要解决的问题,例如单片集成MIC技术和相控阵架构依然是最具挑战的问题。复杂问题的计算电磁学。创新的天线设计。多功能、多频带、超宽带、可重构天线等。 第二章 天线的基本参数和FOM 在描述天线性能前,需要定义一些参数,一些参数可能是相互关联的。书中的许多带引号的定义来源于 IEEE Standard Definitions of Terms for Antennas [IEEE Std 145-1993.Reaffirmed 2004(R2004)] Radiation Pattern 辐射图 在天线研究中,通常用球面坐标来表示电磁场会较为方便,因此首先介绍球面坐标系 图片 图片 图片 辐射波瓣(radiation lobe):以辐射强度较弱的区域为边界,将辐射图分割成几个区域。 最大的辐射波瓣称为主瓣(major lobe),其他则为次瓣(minor lobe)。副瓣(side lobe)通常表示功率水平最高的次瓣。后瓣(back lobe)方向与主瓣方向相反的次瓣。 图片 图片 图片 各向同性、定向、全向天线 图片 其中全向天线是定向天线的特殊类型。 主平面 对于线性极化的天线,通常用其主要平面图来描述其性能,包括: 电场平面(E-plane):包含最大电场矢量与最大辐射方向的平面。 磁场平面(H-plane):包含最大磁场矢量与最大辐射方向的平面。 大多数天线的通常的做法是让至少一个电磁平面与几何平面重合。例如图2.5中,可以定义XOZ平面为电场的主平面,而XOY为磁场的主平面。 图片 图片 Field Regions 场区 天线周围空间可分成三个区域: 图片 图2.8显示了,从近场到远场时,场的形状随距离的典型变化趋势。在近场中,场更加分散,几乎均匀,只有很小的变化,随着距离到辐射近场区,图案变得圆滑,逐渐形成波瓣。在远场区,形成了类似花瓣的图案。 图片 弧度和球面度 图片 图片 波束宽度 HPBW Half power beam width 半波束宽度 FNBW First Null Beam width 第一组零点之间的宽度 方向性 定义:在给定方向上的辐射强度与各项同性源的辐射强度之比。 图片 波束立体角 波束立体角定义:假如辐射强度是恒定的,且等于最大值,流过某一个立体角的功率等于天线辐射功率,那么该立体角称为波束立体角。 图片 图片 图片 传导效率和介电效率通常很难计算,可以通过实验测量,但也很难区分出二者,因此把两项合并成传导-介电效率 极化 辐射波的极化定义为:沿着传播方向观察电场的矢量箭头,随时间变化,绘制的轨迹图。 极化可以分成线性、圆形和椭圆。如果电场的矢量始终沿着一条直线变化,则该电场称为线性极化;但一般而言,电场矢量箭头的路径通常是椭圆形,这称为椭圆极化。圆形和线性实际上是椭圆的特赦情况。 假如有一个沿着负z轴方向传播的平面波。其电场可以写成: 图片 图片 输入阻抗 图片 重要公式 图片
通信&信息处理
# 天线设计
刘航宇
3年前
0
1,663
1
2023-02-09
VCS、Verdi与Makefile使用简介
前期工作 1、.fsdb文件 在使用Makefile文件前,先在测试文件中加入这样一句。 initial begin $fsdbDumpfile("tb.fsdb");//这个是产生名为tb.fsdb的文件 $fsdbDumpvars; end需要注意:对于用于仿真的testbench,需要额外建立一个 initial 块,调用产生有关 fsdb 格式的波形文件: 首先调用 fsdbDumpfile 函数,产生一个叫 .fsdb 的波形文件 然后调用 fsdbDumpvars 函数,声明需要保存那些信号的波形,括号内不加任何参数,则默认全部保存。 2、 filelist.f文件 filelist.f里存放所有需要仿真的.v文件。 创建filelist.f的方法: find -name "*.v" >filelist.f 1. Makefile作用? 编写makefile文件本质上是帮组make如何一键编译,进行批处理,makefile文件包含的规则命令使我们不需要繁琐的操作,提高了开发效率。 Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。 2. Makefile应用 利用Makefile 实现简单的前端设计流程,包括VCS编译,Verdi仿真,DC综合,后续流程待补充。 目录结构 图片 #use "make" for help help: @echo "make help" @echo "make com to compile" @echo "make sim to run simulation" @echo "make clean to delete temporary files" #need to midify design name design_name = div_top fsdb_name = $(design_name).fsdb # use command "make com" to run vsc and product fsdb file com: cd RTL && vcs \ -full64 \ -f flist.f \ -debug_all \ -l com.log \ +v2k \ -P ${Verdi_HOME}/share/PLI/VCS/LINUXAMD64/novas.tab ${Verdi_HOME}/share/PLI/VCS/LINUXAMD64/pli.a # cd RTL && ./simv -l sim.log +fsdbfile+$(fsdb_name) #simulation:product fsdb file and sim log sim: ./RTL/simv cd RTL && ./simv -l sim.log +fsdbfile+$(fsdb_name) # use verdi to observe the waveform verdi: cd RTL && verdi \ +v2k \ -f flist.f \ -ssf $(fsdb_name) & #use fsdb file # run dc for synthesize syn: cd dc_script && dc_shell -64bit -topographical -f top_syn.tcl | tee -i syn.log #delete all files except .v and makefile clean: #rm -rf `ls | grep -v "Makefile"|grep -v "flist.f" | grep -v "\.v" | grep -v "dc_script"` make -C RTL clean make -C dc_script clean/RTL目录下MakeFile #delete temporary files clean: rm -rf `ls | grep -v "Makefile"|grep -v "flist.f" | grep -v "\.v"` dc_script目录下Makefile #delete temporary files clean: rm -rf `ls | grep -v "Makefile"|grep -v "script" | grep -v ".*.tcl"` make com :调用vcs编译 make sim:调用vcs仿真 make verdi 波形,shifrt+l可刷新重新编译结果 make clean 删除所有子目录下的临时生成文件 详细命令 执行“make vcs” 编译仿真 执行“make verdi” 打开波形 verdi常用快捷键 ctrl+w: 添加信号到波形图 h: 在波形窗口显示详细的信号名(路径) File>save signal,命名*.rc,下次直接打开rc文件就行 c/t: 修改信号的颜色(t可以直接切换颜色) 在波形窗口显示状态机的名字: 在rtl窗口,tools>Extract internative FSM ,可选first stage(仅展开目前所指定的FSM state),all stage (展开所有的FSM state) 改变颜色填充波形: Tools>waveform>view options>waveformpane> paint waveform with specified color/pattern 在rtl窗口按x: 标注出信号的值 z: 缩小波形窗口 Z: 放大波形窗口 f: 全屏 l: 上一个视图 L: 重新加载设计波形或文件 n: 向前查找 N: 向后查找 ctrl+→: 向右移动半屏 ctrl+←: 向左移动半屏 双击信号波形: 跳转到rtl中信号位置,并高亮新号 b: 跳到波形图开头 e: 跳到波形图尾部 2.不使用Makefile直接执行 vcs -R -f flist.f -full64 -fsdb -l name.log verdi -f flist.f -ssf name.fsdb 图片
编程&脚本笔记
EDA&虚拟机
# EDA&虚拟机
# Makefile
刘航宇
3年前
0
1,661
2
TCL脚本语言用法简介
前言(TCL综述) TCL(Tool Command Language)是一种解释执行的脚本语言(Scripting Language)。 它提供了 通用的编程能力:支持变量、过程和控制结构;同时 TCL还拥有一个功能强大的固有的核心命令集。 由于TCL的解释器是用一个C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作一个C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,可以很容易就在C\C++应用程序中嵌入TCL,而且每个应用程序都可以根据自己的需要对TCL语言进行扩展。我们可以针对某一特定应用领域对TCL语言的核心命令集进行扩展,加入适合于自己的应用领域的扩展命令,如果需要,甚至可以加入新的控制结构,TCL解释器将把扩展命令和扩展控制结构与固有命令和固有控制结构同等看待。扩展后的TCL语言将可以继承TCL 核心部分的所有功能,包括核心命令、控制结构、数据类型、对过程的支持等。根据需要,我们甚至可以屏蔽掉TCL的某些固有命令和固有控制结构。通过对TCL的扩展、继承或屏蔽,用户用不着象平时定义一种计算机语言那样对词法、语法、语义、语用等各方面加以定义,就可以方便的为自己的应用领域提供一种功能完备的脚本语言。 TCL良好的可扩展性使得它能很好地适应产品测试的需要,测试任务常常会由于设计和需求的改变而迅速改变,往往让测试人员疲于应付。利用TCL的可扩展性,测试人员就可以迅速继承多种新技术,并针对产品新特点迅速推出扩展TCL命令集,以用于产品的测试中,可以较容易跟上设计需求的变化。 另外,因为TCL是一种比C\C++ 语言有着更高抽象层次的语言,使用TCL可以在一种更高的层次上编写程序,它屏蔽掉了编写C\C++程序时必须涉及到的一些较为烦琐的细节,可以大大地提高开发测试例的速度。而且, 使用TCL语言写的测试例脚本,即使作了修改,也用不着重新编译就可以调用TCL解释器直接执行。可以省却不少时间。TCL 目前已成为自动测试中事实上的标准。 目录 前言(TCL综述) 语法脚本,命令和单词符号 置换(substitution) 变量置换variable subtitution 命令置换command substitution反斜杠置换backslash substitution 双引号和花括号 变量简单变量 数组 append和incr expr List concat lindex llength linsert lreplace lrange lappend lsearch 控制流 if 循环命令:while 、for 、 foreach while for break和continue命令 switch source 过程(procedure) 附录(Tcl的安装) 直接打开终端(terminal),输入 sudo apt install tcl即可进行安装,这里的截图是笔者安装成功后的实例。 图片 之后输入tclsh即可 语法 脚本,命令和单词符号 一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的: set a 1 set b 2 或使用分号隔开 set a 1;set b 2TCL解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL 解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换(substitution); 在执行阶段,TCL 解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。 置换(substitution) TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如: %set x 10 //定义变量x,并把x的值赋为10 10 %set y x+100 //y的值是x+100,而不是我们期望的110 x+100上例的第二个命令中,x被看作字符串x+100的一部分,如果我们想使用x的值’10’ ,就必须告诉 TCL解释器:我们在这里期望的是变量x的值,而非字符’x’。怎么告诉TCL解释器呢,这就要用到TCL语言中提供的置换功能。置换功能分为三种.TCL提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套。 变量置换variable subtitution 变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中。例如之前的一个例子 %set x 10 //定义变量x,并把x的值赋为10 10 %set y x+100 //y的值是x+100,而不是我们期望的110 x+100 %set y $x+100 //y的值是我们期望的110 110命令置换command substitution 命令置换是由[]括起来的TCL命令及其参数,命令置换会导致某一个命令的所有或部分单词被另一个命令的结果所代替。例如: %set y [expr $x+100] 110这里当TCL解释器遇到字符’[‘时,它就会把随后的expr作为一个命令名,从而激活与expr对应的C/C++过程,并把expr和变量置换后得到的10+100传递给该命令过程进行处理。 反斜杠置换backslash substitution TCL语言中的反斜杠置换类似于C语言中反斜杠的用法,主要用于在单词符号中插入诸如换行符、空格、[、$等被TCL解释器当作特殊符号对待的字符。 %set msg money\ \$3333\ \nArray\ a\[2] //这个命令的执行结果为: money $3333 Array a[2]双引号和花括号 除了使用反斜杠外,TCL提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不作特殊处理,这就要使用双引号和花括号({})。 TCL解释器对双引号中的各种分隔符将不作处理,但是对换行符 及$和[]两种置换符会照常处理。而在花括号中,所有特殊字符都将成为普通字符,失去其特殊意义,TCL解释器不会对其作特殊处理。 %set y "$x ddd" 100 ddd %set y {/n$x [expr 10+100]} /n$x [expr 10+100]注释 TCL中的注释符是#,#和直到所在行结尾的所有字符都被TCL看作注释,TCL解释器对注释将不作任何处理。不过,要注意的是,#必须出现在TCL解释器期望命令的第一个字符出现的地方,才被当作注释。 %set a 100 # Not a comment wrong # args: should be "set varName ?newValue?" %set b 101 ; # this is a comment 101变量 变量分为简单变量和数组 简单变量 一个 TCL 的简单变量包含两个部分:名字和值。名字和值都可以是任意字符串。 % set a 2 2 set a.1 4 4 % set b $a.1 2.1在最后一个命令行,我们希望把变量a.1的值付给b,但是TCL解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是’.’)之间的单词符号(这里是’a’)当作要被置换的变量的名字,所以TCL解释器把a置换成2,然后把字符串“2.1”付给变量b。这显然与我们的初衷不同。 当然,如果变量名中有不是字母、数字或下划线的字符,又要用置换,可以用花括号把变量名括起来。例如: %set b ${a.1} 4数组 数组是一些元素的集合。TCL的数组和普通计算机语言中的数组有很大的区别。在TCL中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中,数组元素的名字包含两部分:数组名和数组中元素的名字,TCL中数组元素的名字(下标〕可以为任何字符串。 例如: set day(monday) 1 set day(tuesday) 2 set a monday set day(monday) 1 set b $day(monday) //b 的值为 1 ,即 day(monday) 的值。 set c $day($a) //c 的值为 1 ,即 day(monday) 的值。其他命令 unset % unset a b day(monday)上面的语句中删除了变量a、b和数组元素day(monday),但是数组day并没有删除,其他元素还存在,要删除整个数组,只需给出数组的名字。 append和incr 这两个命令提供了改变变量的值的简单手段。 append命令把文本加到一个变量的后面,例如: % set txt hello hello % append txt "! How are you" hello! How are youincr命令把一个变量值加上一个整数。incr要求变量原来的值和新加的值都必须是整数。 expr 可以进行基本的数学函数计算 %expr 1 + 2*3 7List list这个概念在TCL中是用来表示集合的。TCL中list是由一堆元素组成的有序集合,list可以嵌套定 义,list每个元素可以是任意字符串,也可以是list。下面都是TCL中的合法的list: {} //空list {a b c d} {a {b c} d} //list可以嵌套list是TCL中比较重要的一种数据结构,对于编写复杂的脚本有很大的帮助 list 语法: list ? value value…? 这个命令生成一个list,list的元素就是所有的value。例: % list 1 2 {3 4} 1 2 {3 4}使用置换将其相结合 % set a {1 2 3 4 {1 2}} 1 2 3 4 {1 2} % puts $a 1 2 3 4 {1 2}concat 语法:concat list ?list…? 这个命令把多个list合成一个list,每个list变成新list的一个元素。 % set a {1 2 3} 1 2 3 % set b {4 5 6} 4 5 6 % concat $a $b 1 2 3 4 5 6lindex 语法:lindex list index 返回list的第index个(0-based)元素。例: % lindex {1 2 {3 4}} 2 3 4llength 语法:llength list 返回list的元素个数。例 % llength {1 2 {3 4}} 3 % set a {1 2 3} 1 2 3 % llength $a 3linsert 语法:linsert list index value ?value…? 返回一个新串,新串是把所有的value参数值插入list的第index个(0-based)元素之前得到。例: % linsert {1 2 {3 4}} 1 7 8 {9 10} 1 7 8 {9 10} 2 {3 4} % linsert {1 2 {3 4}} 1 {1 2 3 {4 5}} 1 {1 2 3 {4 5}} 2 {3 4} % set a {1 2 3} 1 2 3 % linsert $a 1 {2 3 4} 1 {2 3 4} 2 3lreplace 语法:lreplace list first last ?value value …? 返回一个新串,新串是把list的第firs (0-based)t到第last 个(0-based)元素用所有的value参数替换得到的。如果没有value参数,就表示删除第first到第last个元素。例: % lreplace {1 7 8 {9 10} 2 {3 4}} 3 3 1 7 8 2 {3 4} % lreplace {1 7 8 2 {3 4}} 4 4 4 5 6 1 7 8 2 4 5 6 % set a {1 2 3} 1 2 3 % lreplace $a 1 2 4 5 6 7 1 4 5 6 7 % lreplace $a 1 end 1lrange 语法:lrange list first last 返回list的第first (0-based)到第last (0-based)元素组成的串,如果last的值是end。就是从第first个直到串的最后。 例: % lrange {1 7 8 2 4 5 6} 3 end 2 4 5 6 % set a {1 2 3} 1 2 3 % lrange $a 0 end 1 2 3lappend 语法:lappend varname value ?value…? 把每个value的值作为一个元素附加到变量varname后面,并返回变量的新值,如果varname不存在,就生成这个变量。例: % set a {1 2 3} 1 2 3 % lappend a 4 5 6 1 2 3 4 5 6lsearch 语法:lsearch ?-exact? ?-glob? ?-regexp? list pattern 返回list中第一个匹配模式pattern的元素的索引,如果找不到匹配就返回-1。-exact、-glob、 -regexp是三种模式匹配的技术。-exact表示精确匹配;-glob的匹配方式和string match命令的匹配方式相同;-regexp表示正规表达式匹配。缺省时使用-glob匹配。例: % set a { how are you } how are you % lsearch $a y* 2 % lsearch $a y? -1-all 返回一个列表,返回的列表中的数值就是字符在列表中的位置 默认全局匹配,返回第一个字符在列表中的位置,其位缺省状态 % lsearch {a b c d e} c 2 % lsearch -all {a b c a b c} c 2 5 % lsearch {a b c d c} c 2匹配不到返回-1 % lsearch {a b c d e} g -1控制流 主要是对于所有的控制流,包括 if、while、for、foreach、switch、break、continue 等以及过程, if 语法: if test1 body1 ?elseif test2 body2 elseif…. ? ?else bodyn? TCL先把test1当作一个表达式求值,如果值非0,则把body1当作一个脚本执行并返回所得值,否则把test2当作一个表达式求值,如果值非0,则把body2当作一个脚本执行并返回所得值……。例如: if { $x>0 } { ..... }elseif{ $x==1 } { ..... }elseif { $x==2 } { .... }else{ ..... }if { $x<0 } { puts "x is smaller than zero" } elseif {$x==1} { puts "x is equal 1" } elseif {$x==2} { puts "x is equal 2" } else { puts "x is other" } 这里需要注意的是, if 和{之间应该有一个空格,否则TCL解释器会把’if{‘作为一个整体当作一个命令名,从而导致错误。 ‘{‘一定要写在上一行,因为如果不这样,TCL 解释器会认为if命令在换行符处已结 束,下一行会被当成新的命令,从而导致错误的结果需要将}{ 分开写, 否则会报错extra characters after close-brace 循环命令:while 、for 、 foreach while 语法为: while test body 参数test是一个表达式,body是一个脚本,如果表达式的值非0,就运行脚本,直到表达式为0才停止循环,此时while命令中断并返回一个空字符串。 例如:假设变量 a 是一个链表,下面的脚本把a 的值复制到b: % #首先生成一个集合 % set a {1 2 3 4} 1 2 3 4 % set b " " % #计算生成集合的长度(从0开始这里需要减去1例如:0-3一共有四个数) % set i [expr [llength $a] -1] 3 #接下来进行判断,将集合a中的元素全部按顺序写入b中 % while {$i>=0} { #思考执行该行代码替换会有怎样的结果打印出来 #lappend b [lindex $a $i] lappend b [lindex $a [expr [llength $a] - 1 - $i]] incr i -1 } #打印观察结果 % puts $b 1 2 3 4对代码进行分析 set 变量a为一个list,b为一个空list 然后计算列表里有几个元素,将其减一后的值赋值给i,这里减一的目的是从零开始计数会多一个 开始进行循环,首先i的值是4大于0,表达式为真,开始执行脚本。 脚本为将数组a的第i个位置的元素添加到b list 里,然后给i减一同时进行下一次判断即可。 最后输出b的值 for 语法为: for init test reinit body 参数init是一个初始化脚本,第二个参数test是一个表达式,用来决定循环什么时候中断,第三个参数reinit是一个重新初始化的脚本,第四个参数body也是脚本,代表循环体。下例与上例作用相同:(注意这里复制打印顺序的不同) % set a {1 2 3 4} 1 2 3 4 % set b " " % for {set i [expr [llength $a] -1]} {$i>=0} {incr i -1} { lappend b [lindex $a $i] } % puts $b 4 3 2 1例 % for {set i 0} {$i<4} {incr i} { puts "I is: $i " } I is: 0 I is: 1 I is: 2 I is: 3 foreach 这个命令有两种语法形式 1, foreach varName list body 第一个参数varName是一个变量,第二个参数list 是一个表(有序集合),第三个参数body是循环体。每次取得链表的一个元素,都会执行循环体一次。 下例与上例作用相同: % set a {1 2 3 4} 1 2 3 4 % set b " " % foreach i $a { set b [linsert $b 0 $i] } % puts $b 4 3 2 1% foreach var {a b c d e f} { puts $var } a b c d e f2, foreach varlist1 list1 ?varlist2 list2 ...? Body 这种形式包含了第一种形式。第一个参数varlist1是一个循环变量列表,第二个参数是一个列表list1,varlist1中的变量会分别取list1中的值。body参数是循环体。 ?varlist2 list2 …?表示可以有多个变量列表和列表对出现。例如: set x {} foreach {i j} {a b c d e f} { lappend x $j $i }这时总共有三次循环,x的值为”b a d c f e”。 % foreach i {a b c} j {d e f g} { puts $i puts $j } a d b e c f gset x {} foreach i {a b c} j {d e f g} { lappend x $i $j }这时总共有四次循环, x的值为”a d b e c f {} g set x {} foreach i {a b c} {j k} {d e f g} { lappend x $i $j $k }这时总共有三次循环,x的值为”a d e b f g c {} {}”。 例子: 图片 break和continue命令 在循环体中,可以用break和continue命令中断循环。其中break命令结束整个循环过程,并从循环中跳出,continue只是结束本次循环 这里有一个特别好的例子 说明:这里首先进行给一个list,然后使用foreach循环进行写入数据当遇见break时候直接退出了循环,而continue仅仅只是跳出此次循环继续向b里写入数 % set b {} % set a {1 2 3 4 5} 1 2 3 4 5 % foreach i $a { if {$i == 4} break set b [linsert $b 0 $i] } % puts $b 3 2 1% set b {} % set a {1 2 3 4 5} 1 2 3 4 5 % foreach i $a { if {$i == 4} continue set b [linsert $b 0 $i] } % puts $b 5 3 2 1switch 和 C 语言中 switch 语句一样,TCL 中的 switch 命令也可以由 if 命令实现。只是书写起来较为烦琐。 switch 命令的语法为: switch ? options? string { pattern body ? pattern body …?} 注意这里进行的是字符匹配 图片 set x a; set t1 0;set t2 0;set t3 0; switch $x { a - b {incr t1} c {incr t2} default {incr t3} } puts "t1=$t1,t2=$t2,t3=$t3"x=a时执行的是t1加2 其中 a 的后面跟一个’-’表示使用和下一个模式相同的脚本。default 表示匹配任意值。一旦switch 命令 找到一个模式匹配,就执行相应的脚本,并返回脚本的值,作为 switch 命令的返回值。 source source 命令读一个文件并把这个文件的内容作为一个脚本进行求值 以上边的switch第一段代码为例 使用VIM新建一个文件,写入文件后保存退出 vim switch1.tcl键入wish然后输入source switch1.tcl 图片 过程(procedure) TCL 支持过程的定义和调用,在 TCL 中,过程可以看作是用 TCL 脚本实现的命令,效果与 TCL的固有命令相似。我们可以在任何时候使用 proc 命令定义自己的过程,TCL 中的过程类似于 C中的函数。 TCL 中过程是由 proc 命令产生的: 例如: % proc add {x y } {expr $x+$y} roc 命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用空格隔开,第三个参数是一个 TCL 脚本,代表过程体。 proc 生成一个新的命令,可以象固有命令一样调用: % add 1 2 3
编程&脚本笔记
# TCL脚本
刘航宇
3年前
0
1,775
0
2022-12-31
LoRa码元调制、编码与解调
LoRa调制链路 ●LoRa调制链路由五部分组成,分别是纠错编码机、交织器、扩频序列产生器、笛卡 尔极坐标转换器、Delta-sigma调制器。 image.png图片 纠错编码器 ●当一组数据(用户的有效载荷(Payload) )被推入数据包接口( Packet Interface)时,调制过程开始。调制器通过纠错编码机将前向纠错编码(ForwardErrorCorrection,FEC)添加到这些字节中。 ●这些有效载荷数据每个字节首先分成半字节(4比特一组)。然后,根据编码速率配置, 在1到4冗余纠错位之间选择并追加到每个半字节。调制器编码速率通过CR寄存器进行设置,表3-1为前向纠错编码配置表。 image.png图片 交织器 ●纠错编码后,产生的(4+CR)位比特段,随后被存储到交织器的存储阵列中。交织器(Interleaver) 有(4+CR)列和SF行。一旦交织器满了,它的内容将编码到码元上。每个码元都带有SF位。因此,交织器内有(4+CR) *SF 比特,独立于扩频因子SF被编码到4+CR码元上。 ●这里举一一个例子让读者理解交织器。假设此时CR=1,,, SF=7, 其交织器为7行、5列。需要传输的数据流为:00000001001000110100010101100111。先将这些比特流分为4b一组(b1,b2,b3,b4) : 0000; 0001; 0010; 0011; 0100;0101; 0110; 0111; 对上述数据增加1比特校验位(b1,b2,b3,b4,C) 后为: 00000; 00011; 00101; 00110; 01001;01010; 01100; 01111; 再将,上述数字填入交织器的存储列阵中,当35b数据进入交织器的存储列阵后,交织器存储满了,下一组数据(b1,b2,b3,b3,C) 需要填入下一个交织器中。 image.png图片 扩频序列产生器 image.png图片 门坐标转换、Delta-sigma调制输出 image.png图片 解调 image.png图片 编码 下是一个SF=7的LoRa调制编码图, 从图中可以看出码元、码片、比特速率、载荷数据之间的关系。 图中SF=7, 所以发送信号带宽切分为128(27-128)个频率段的码片。假设该系统工作频率为470MHz,BW=250kHz,相邻码片间隔为250kHz/128=1 .95kHz,此时f0=470MHz,f1=470.00195MHz,f2=470.0039MHz,.. .f127=470.24805MHz. 图3-9中有三个时间长度分别是码片率(Chip rate),比特速率(Data rate),码元率(Symbol rate),可以清楚地看出它们的对应关系. 图片 解释一下:如果要发送f64,就在f64频率出加到f127,然后再从f0加到f64 不同的SF对应带宽BW除以时间的斜率,SF越大倾斜角度越小。SF和BW对应一种LoRa调制方式,只有接收机也采用对应的SF和BW才能正常解调,否则信号在相干解 调中会淹没在噪声中。在实际的相干解调中,LoRa调制在不同的SF信号或不同的BW下都是正交的,频带可以充分利用。比如在BW=125kHz的同频段内,一个SF=7信号 Psez和一个SF=8信号Psps都在发射,频段内的噪声为N,,当两个信号都满足解调信噪比要求时(SNRsf7 >=-7.5dB; SNRsf8>=-10dB) ,两个信号都可以正常解调。这里需要注意,当计算SNRsf7时,SF=8的信号表现为此系统噪声,SNRsF7= Psp/(N0+Psf8) ; 同理当计算SNRsf8时,SF=7的信号表现为此系统噪声,SNRsf8=Psf8/(N0+Psf7). 图片
通信&信息处理
# 信号处理
刘航宇
4年前
0
1,244
1
【LoRa】Chirp调制
线性调频信号的表征与特征 线性调频(Linear Frequency Modulation, LFM) 是一种不需要伪随机编码序列的扩展频谱调制技术。因为线性调频信号占用的频带宽度远大于信息带宽,所以也可以获得很大的系统处理增益。线性调频信号也称为鸟声(Chirp) 信号,因为其频谱带宽落于可听范围,听着像鸟声(英文单词Chirp为鸟叫的意思),所以又称Chirp护展频谱(Chirp SpreadSpectrum,CSS)技术。LFM技术在雷达、声纳技术中有广泛应用,例如,在雷达定位技术中,它可用来增大射频脉冲宽度、加大通信距离、提高平均发射功率,同时又保持足够的信号频谱宽度,不降低雷达的距离分辨率。 将CSS技术用于扩频通信的研究发展日益活跃,尤其随着超宽带(UWB) 技术的发展,将CSS技术与UWB的宽带低功率谱相结合形成的Chi rp-UWB通信,它利用Chi rp技术产生超宽带宽,具备二者优势,增强了抗干扰与抗噪声的能力。CSS技术已成为传感网络通信标准,IEEE802. 15中物理层候选标准。 FM、FSK、CSS信号比较 图片 线性调频(LFM)信号 图片 Chirp信号调制技术的产生与检测 Chirp通信信号-般形式 通信的二元数据也可用LFM信号,常称为Chirp信号来传输。最常用做法是用围绕着中心频率f的正向和负向频率斜升变化来代表二元信码“1”与“0” 接收端采用两个相应的匹配滤波器来检测。匹配滤波器 输出是一个峰值功率正比于时间带宽积FT的压缩脉冲, 通过取样判决可以恢复出信码“1”。代表信码“0”的负斜 率Chirp信号通过对应的负斜率匹配滤波器可得出与正斜 率匹配滤波器相同结论的压缩脉冲,通过取样判决确定 信码“0”。 图片 2.信号调制 图片 3.Chirp信号解调和检测 图片 LoRa调制 图片 图片 图片
通信&信息处理
# 信号处理
刘航宇
4年前
0
2,056
3
基本微带贴片天线设计理论与尺寸算法
理论 图片 贴片形式 图片 馈电方式 图片 尺寸推导 图片 图片 尺寸算法 %微带天线尺寸算法 c=3e8; f=0.915e9 %频率915MHZ er=2.2;%板材介电常数 h=1.575e-3;%板材厚度 w=c/(2*f)*sqrt(2/(er+1)) ereff=(er+1)/2+(er-1)/2*(1+12*h/w)^(-0.5); dL=(0.412*(ereff+0.3)*(w/h+0.264)*h)/((ereff-0.258)*(w/h+0.8)); Leff=c/(2*f*sqrt(ereff)); L=Leff-2*dL erl=(er+1)/2+(er-1)/2*(1+12*h/L)^(-0.5); Xf=L/2-L/(2*sqrt(erl)) Lgnd=L+6*h; Wgnd=w+6*h;微带线馈电 图片 1/4波长变换器 图片 计算推导 图片 尺寸算法 %微带天线尺寸算法 clear all; c=3e8; f=0.915e9 %频率915MHZ er=2.2;%板材介电常数 h=1.575e-3;%板材厚度 w=c/(2*f)*sqrt(2/(er+1)) ereff=(er+1)/2+(er-1)/2*(1+12*h/w)^(-0.5); dL=(0.412*(ereff+0.3)*(w/h+0.264)*h)/((ereff-0.258)*(w/h+0.8)); Leff=c/(2*f*sqrt(ereff)); L=Leff-2*dL erl=(er+1)/2+(er-1)/2*(1+12*h/L)^(-0.5); Xf=L/2-L/(2*sqrt(erl)) Lgnd=L+6*h; Wgnd=w+6*h; %Microstrip Line feed lambda_0=c/f; if w<=lambda_0 G=w^2/(90*lambda_0^2); else G=w^2/(120*lambda_0^2); end Yin=2*G; Rin=1/Yin ZT0=sqrt(Rin*50)
通信&信息处理
# 天线设计
刘航宇
4年前
1
3,600
11
2022-11-27
【天线/射频】什么是回波损耗?什么是插入损耗?
一、前言 什么是回波损耗?什么又是插入损耗? 这个貌似很容易回答,回波损耗吗,就是Return Loss,缩写为RL,S11,插入损耗就是 Insertion Loss,IL,S21。确实没错,就是这么简单。但是为什么叫做回波呢?为什么又叫做插入呢?今天我们仔细掰扯掰扯。 二、回波损耗 回波损耗,又称为反射损耗。( 越大越好 )是电缆链路由于阻抗不匹配所产生的反射,是一对线自身的反射。不匹配主要发生在连接器的地方,但也可能发生于电缆中特性阻抗发生变化的地方,所以施工的质量是提高回波损耗的关键。回波损耗将引入信号的波动,返回的信号将被双工的千兆网误认为是收到的信号而产生混乱。 回波损耗:return loss。回波损耗是表示信号反射性能的参数。回波损耗说明入射功率的一部分被反射回到信号源。例如,如果注入1mW (0dBm)功率给放大器其中10%被反射(反弹)回来,回波损耗就是-10dB。从数学角度看,回波损耗为-10 lg [(反射功率)/(入射功率)]。回波损耗通常在输入和输出都进行规定。 三、插入损耗 插入损耗:insertion loss。( 越小越好 )指在传输系 统的某处由于元件或器件的插入而发生的负载功率的损耗,它表示为该元件或器件插入前负载上所接收到的功率与插入后同一负载上所接收到的功率以分贝为单位的比值。 1.插入损耗是指发射机与接收机之间,插入电缆或元件产生的信号损耗,通常指衰减。插入损耗以接收信号电平的对应分贝(dB)来表示。 2.插入损耗多指功率方面的损失,衰减是指信号电压的幅度相对测量插入损耗的电路原信号幅度的变小。 通道的插入损耗是指输出端口的输出光功率与输入端口输入光功率之比,以dB为单位。插入损耗与输入波长有关,也与开关状态有关。定义为:IL=-10log(Po/Pi) 四、插入损耗和回波损耗系统介绍 图片 首先,我们拿到一个系统,就是上面这个黑盒子,当电磁波信号进入这个黑盒子时,我们通常不需要去关心电磁波在里面经历了什么。我们只要知道它出来是什么就行了。但是,当电磁波从外面进入这个黑盒子时,相当于从一个介质进入到另一个介质,在交界面上会有一部分电磁波被挡在外面,这部分被挡在外面的电磁波就被反射回去了,返回去的电磁波就是回波。而进去的这部分电磁波在通过这个黑盒子时,就必然会被这个黑家伙影响到,如果这家伙有一点点贪心,肚子里装了一点点的小电阻材料,那么就留一点点买路钱就够了,就去的电磁波在交完买路钱之后,大部分会传输出去,这个被劫走的一部分电磁波能量我们就认为被损失了,无论是回波还是黑盒子吃掉的都是电磁波能量时导致的能量的损耗,都是由于黑盒子插入进来导致的损耗,所以通常被称为插入损耗。如下图所示。 图片 所以我们知道,其实一个微波元器件的插入损耗是由两部分组成的:回波损耗和电阻损耗。 回波损耗的这部分电磁波能量被端口的不匹配给反射回去了,并没有转化成热散出去,所以我们在射频系统设计和分析中,要提防着这部分回波倒灌会对系统带来的影响。通常这部分倒灌的能量不是很大,怎么计算呢? 举个简单的例子,比如上图端口1输入的电磁波功率是1W,即30dBm,如果端口1 的回波损耗RL=20dB。那么反射回去的回波的功率就是:30dBm-20dB=10dBm,也就是有10mW的功率被反射回去了。如果端口1 输入的功率是1kW,即60dBm,那么反射回去的回波功率就有10W了。如果端口1的回波损耗只有10dB,那将会有100W的功率被反射回去。这也证明了匹配的端口阻抗匹配的重要性。还有就是,功率越大,我们系统所要求的回波损耗就越小,在一些小功率的产品中,比如手机,匹匹配有个10dB就足够了。但是在电视发射系统中,因为发射机的功率通常会有上千瓦,所以,回波损耗通常要求在26dB以下。 注意,插入损耗的部分损耗也是有回波导致的啊,所以回波损耗越差,插入损耗就越大。 在端口匹配良好的系统中,插入损耗主要是由器件的电阻性材料导致的,这些电阻性材料导致的损耗,会转化成热。就像我们在衰减器中介绍的一样。其实转化成热,有时候更让我们头疼。因为热这个东西太可怕了,几乎所有的电子器件都有一个可以正常工作的温度范围,当超过这个温度了之后,工作就不正常了。长期在高温环境下工作,器件老化速率会加快,更容易损坏。
通信&信息处理
# 天线设计
刘航宇
4年前
1
4,207
1
2022-10-16
UART串行接口设计及通信实现
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器。 图片 异步串行、接口原理分析 串行通信电气特性 通常,UART串行接口采用RS-232-C电气标准进行通信。RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。对于一般的通信,不需要掌握RS-232-C的所有信号的定义,只需要使用其中的2个信号TXD(数据发送)和RXD(数据接收),另外,参加通信的设备要将GND(地)要连到一起(共地)。 数据线TxD和RxD的电平标准为: 逻辑1=-3V~-15V;逻辑0=+3~+15V RS-232-C标准规定的数据传输速率为9600、19200、115200等波特率。波特率是衡量资料传送速率的指标,表示每秒钟传送的符号数。如果波特率为9600,那么发送和接收数据都应该为9600bits/s。本节采用9600bit/s进行通信。 图片 UART串行数据格式 起始位(逻辑0 )+数据位(本节为8位数据位)+奇偶校验位(本节为偶校验)+停止位(本节使用1位停止位)+空闲位(逻辑1) 图片 通信的安全性问题 串行异步通信,发送方和接收方使用各自的时钟。例如从FPGA电路板和计算机之间的通信,因此,不能保证两者的时钟完全相同。 为保证接收数据的准确性,因此需要用较高的采样率进行采样,本节采用16倍的采样率进行采样,简单的选取中间采样点的值作为接收的数据。如图采用16倍波特率的采样率执行采样,一个比特可采集16个点,选取中间点即从第一个采样点开始的第8或第9个采样点(笑脸附近上升沿)采集该位数据,在接收双方始终频率相差不大的情况下,能够正确的完成通信。 图片 功能设计和演示 预计实现的功能(演示): 将拨码开关代表的数据发送到串口(8位); 从串口接收电脑发来的数据,以数码管显示(8位)。 主模块设计 ⚫ 调用分频模块 ⚫ 调用数码管显示IP ⚫ 调用按键消抖动IP ⚫ 调用串口发送模块 ⚫ 调用串口接收模块 module v1( input clk, input [11:0] sw, input [3:0] btn,//行列键盘的输入 output [3:0] row,//行列键盘的行输出 output [7:0] seg, output [5:0] an, output [11:0] led, output txd, input rxd ); wire clk_ms,clk_20ms,clk_16x,clk_x; wire [3:0] btnout; wire [23:0] data_disp; wire data_ready; wire data_error; assign row[3:0]=1;//输出全部为高电平, 本例程只用4个 divclk my_divclk(.clk(clk),.clk_ms(clk_ms),.btnclk(clk_20ms),.clk_16x(clk_16x),.clk_x(clk_x)); //调用分频模块 ip_disp_0 uut_disp(//调用显示IP .clk(clk), .rst(0), .dispdata({data_disp[11:0],sw[11:0]}), .seg(seg), .an(an) ); ip_ajxd_0 uut_ajxd(//调用按键消抖动IP .btn_clk(clk_20ms), .btn_in(btn), .btn_out(btnout) ); uart_tx (.clk_x(clk_x),.data_in(sw[7:0]),.btn(btnout),.txd(txd),.led(led)); //调用串口发送模 块 uart_rx(.clk_16x(clk_16x),.rst(btnout[0]),.rxd(rxd),.data_disp(data_disp),.data_ready(data_rea dy),.data_error(data_error));//调用串口发送模块 endmodule图片 串口发送程序设计 图片 串口接收程序设计 图片 图片
嵌入式&系统
通信&信息处理
# ASIC/FPGA
刘航宇
4年前
0
808
0
上一页
1
2
3
4
...
10
下一页