fluent udf中文帮助
fluent udf中文帮助本章简要地介绍了用户自定义函数(UDF)及其在 Fluent 中的用法。在 1.1 到 1.6 节中我们会介绍一下什么是 UDF;如何使用 UDF,以及为什么要使用 UDF,Makefile udfmakefile udf2DEF INE PROPERTYDEFINE DRIFT DI AM基础输运方程单元()面,区域()和线(操作求解器数据运仃输运方程求解器建立在有限容积法的基础上,这种方法将计算域离散为有限数目的控制体或是单元。网格单元是中基本的计算单元,这些单元的守恒特性必须保证。也就是说普通输运方程,例如质量,动量,能量方程的积分形式可以应用到锊个单元:/pad+,p·dA=中 TODa+/,SwAunsteadyeonv画 ctiondiffusiongeneration此处,是描述普通输运数量的变量()根据所求解的输运方程它可取不同的值。下面是在输运方程中可求解的的子集E守恒与否需要知道通过单元边界的通量。因此,需计算出单元和面上的属性值(单元()面,区域()和线(单元和单元面被组合为一些区域(),这些区域规定了计算域(例如,入口,出口,壁面)的物理组成)。当用户使用的时,用户的叮调用流体区域或是边界区域的计算变量(需要获得适当的变量,比如说是区域参考)和单元,以便标定各个单元。区域)是一群单元或单元面的集合,它可以由模型和区域的物理特征(比如入∏,出∏,壁面,流伓区域)来标定。例如,·些被指定为面域()的单元面可以被指定为类型,由此,速度也就可指定了。线()是据结构的内部名称,可被用来指定一个区域结构可作为数据储存器米使用,这些数据对于它所表示的单元和面来说是公用的(操作多数的任务需要在一个线的所有单元和面上重复执行。比如,定义一个自定义轮廓函数()则会对一个面线上)的所有单元和面进行循环。为了用户方使向用户提供了一些循环宏工具(来执行对单元,面,节点()和线()的重复操作例如,单元循环宏()可以对给定单元线上的所有单元进行循环操作()。而面循环宏()则可调用所有给定面线()的面。提供的循环工具请见在某些情况下需要对某个变量操作,而这个变量恰恰又不能直接被当作变量来传递调用。比如,如果用户使用宏来定义,求解器将不会向它传递指针。这种情况下,用户函数需要用提供的宏来调用线指针(见求解器数据通过用户界面将函数(它已被编译和连接)连接到求解器上可实现调用求解器变量。旦和求解器正确连接,无论何时,函数都可调用求解器数据。这些数据将会被作为用户变量自动地传递给注意,所有的求解器变量,不管是求解器传递给的,还是传递给求解器的,都使用单位。运行将会在侦定时刻被调用。但是,也可对它们进行异步执行,使用宏,还可在需要时()执行。详情请见解释和编译的比较编译和的构建方式一样。脚木被用来调用编译器来构建一个当地目标代码库()。目标代码库包含高级语言源代码的机器语言翻译。代码库在运行时由“动态加载”()过程连接到上。连接后,与共亨库的联系()将会被保存在用户的文件中这样,当以后再读入文件时,此编译库将会与自动连接。这些库是针对计算机的体系结构和·定版本的使用的。所以,当更新,或计算机操作系统改变,或是在不同类型的机器上运行时,这些库必须重新构建而解释则是在运行吋,直接从语言源代码编译和装载()。在运行中,源代码被编译为中介的独立于物理结构的使用预处理程序的机器代码(被调用时,机器代码由內部仿真器(),或注释器)执行。注释器不具备标准编译器的所有功能;它不支持语言的某些原理。所以,在使用吋,有语言限制(见)。例如,不能够通过废弃结构()来获得数据。要获得数据结构,必须使用由提供的预定义宏。另一个例子是不能识别指针数组。这些功能必须由来执行。编译后,用户的函数名称和内容将会被储存在文件中。函数将会在读入文件时被自动编译。独立于物理结构的代码的外层()叮能会导致执行错误(),但却可使共亨不同的物理结构,操作系统,和版本。如果运行速度较慢,不用被调节就可以编译代码的形式(运行中的和请见选择或是时,注意以下内容:对其它平台是便捷的(可作为()来运行不需编译器。慢需要较多的代码。在使用语言上有限制。不能与编译系统或用户库()连接。只能使用预定义宏来获得结构中的数据。(见和)比运行快在使用语言上不存在限制可用任何编译器编译。能调用以其他语言编写的函数机器物理结构需要用户建立的每个版本的共享库(如果包含有注释器()不能处理得语言元素,则不能作为)运行总的来说,当决定使用那种类型的时使用作为简单的函数使用作为复杂的函数,这些函数对有较大要求(例如每次运行时,在每个单元上均须调用的属性需要使用编译库一个例子编辑代码,并且在用户的模型中有效使用它,须遵循以卜七个基木步骤定义用户模型。编制语言源代码。运行读入,并设置文件。编译或注释()语言源代码。在中激活开始计算。分析计算结果,并与期望值比较。在开始解决问题前,用户必须使用定义希望解决的问题()。例如,加入用户希望使用来定义一个用户化的边界条件()。用户首先需要定义一系列数学方程来描述这个条件。接下来用户需要将这些数学方程(概念设计)用语言写成一个函数)。用户可用文本编辑器米完成这一步。以为后缀名米把这个文件保存在工作路径下。写完语言函数后,用户即可运行并且读入或设置文件()。对C语言源代码进行注释,编译,和调试),并在中激活用户函数()。最后,运行计算(),分析结果并与期望值比较。()。根据用户对结果的分析,可将上述整个过程重复几次。具体如下。定义用户模型生成和使用的第一步是定义用户的模型方程。如图所示的涡轮叶片。模拟叶片冑围的流玚使用了非结构化网格。计算域由底端的周期性边界()延伸到顶端的相同部分(),速度入口在左边,压力出口在右边。Irvine ua〔15512405危e893nde5)文中对入口速度为常数分布和抛物线分布的流场进行了比较。分段线性的分布可由边界场选项得到(),而多项式分布则只能使用用户自定义函数得到。进口速度为常数()的结果如图1.7.2和1.7.3所示。当流动沿着涡轮叶片进行时,初始速度场被改变了。了4101265105 tces. 89E.11电+01Turbine vane〔1551cl,2405他e,的93nde引假定现在要设涡轮叶片入∏速度不是常数值,其分布如下2un=20-2000745士变量在入口中心处为0.0,在入口上部和下部则分别为而入口中心处的速度为边界上为0。用户可用描述这一分布,并将它应运到模型中来解决这类问题。编制语言源代码。选定方程定义后,用户可用任意文本编辑器来书写C语言代码。以扩展名保存源代码文件保存到工作路径下。关于的书写请参考下面是一个怎样在中应用方程的例子。的功能由主要的宏()米定义。此处,宏用来表示下面的代码旨在给求解器捉供边界的轮廓信息。书中将在以后部分讨论其它的宏宏的第一个变量用来定义速度入口面板中的函数。名称可任意指定。在给定的边界区域上的所有单元面()上将会使用函数的这个方程。当用户在用户界面选定作为边界条件时,将会自动定义线()。下标由应用程序自动定义。中被用来形成对边界区域上所有单元面的循环()。对于每个面,面的质心()的坐标可由宏来获得。抛物线方程中用到了坐标,速度值通过宏来返回给面。宏和宏都是提供的宏。详情请见5读入,并设置文件建立后,用户开始设置在工作路径下启动读入(或设置)文件(如果文件以前设置过,请确认它是否被保存在了工作路径编详或注释()语言源代码这部分将例中的源代码作为来编译。注意,这个例子不可应用于的并行网络()。完整的编译和连接请见确认的文件(如果以前设置过)和语言源代码在工作路径卜。用面板编译例如, ud fexamp leInterpreted UDFSSource file rlameample+CCPP Command nameStack sizeH Display Assembly ListingH Use Contributed CPPCompilecospHelp在下键入语言源代码文件例如, udfexample.c。如果用户源代码不在目前工作路径下,则在编译,需在面板中间如文件完整的路径。在栏里,选择预处理器。省设置为如果用户函数的局部变量数目大于将会导致堆栈溢出。这种情況下,应将设置为比局部变量大的数
- 2020-11-04下载
- 积分:1
Vivado约束指导手册
Vivado约束指导手册输入端口到输出端口路径在从输入端口直接到输出端口的路径上,数据:不需要在器件内部锁存(atch),直接从输入端口到输出端口。他们通常被称为ln-to-out数据路径端口时钟可以是虚拟时钟也可以是设计时钟路径举例图3-1描述了上面所有的路径,在此例图中,设计时钟CLKo可被用作端口时钟,这样既可以约束D|N延时也可以约束DOUT延时FPGA DEVICEBoardDeviceInternal Delay REGAData Path DelayREGB Internal DelayBoardDINi DOUT Device○A4InpOutputDelayBUFGPort ClockCLKOPort clockIn-2-out Data PathFigure 3-1: Path Example时钟路径部分每一个时钟路径由三个部分组成:源时钟路径数据路径目标时钟路径源时钟路径源时钟路径是由源时钟从它的源点(典型的是输入端口)到发送时序单元的时钟引脚之间的路径。对于从输入端口起始的时序路径来说,就不存在源时钟路径数据路径对内部电路,数据路径是发送时序单元和捕捉时序单元之间的路径发送时序单元的有效时钟管脚称为路径起始点捕捉时序单元的数据输入管脚称为路径结束点对于输入端口路径,数据路径起始于输入端口。输入端口是路径的起始点对于输出端口路径,数据路径结朿语输岀端口。输岀端口是路径的结束点。目标时钟路径目标时钟路径是由目标时钟从其源点(典型的是输入端口)到捕捉时序单元的时钟管脚之间的路径。对于结束于输出端口的时序路径,就没有目标时钟路径图3-2显示了3段典型的时序路径REGAData PathREGBEndpointSource Clock PathStartpointDestination Clock PathFigure 3-2: Typical Timing PathSetup和Hold分析vⅳ ado ide分析时序并且在时序路径终点时候报告时序裕量。时序裕量是指在时序路径终点数据要求时间和抵达时间的差异。如果裕量为正,从时序的角度考虑此路径是有效的。Setup检查为了计算数据所需的 setup时间,时序引擎:1.决定源时钟和目的时钟之间的普通周期。如果没有被发现,为分析考虑多达1000个时钟周期。2.检查覆盖普通周期上的起始点和终点所有上升和下降沿。3.在任何两个有效 active沿之间的最小正差值dela。这个deta被称为 setup分析的时序路径要求Setup路径要求示例假象2个寄存器之间的一条路径,这些寄存器由其相应时钟上升沿触发。这条路径有效的时钟沿只有上升沿。时钟定义如下:.clko周期6nsck1周期4nsCommon periodclko launch edgesSetup(1)Setup(2)clk1 capture edgesOns 2ns 4nss 8n5 10ns 12nsFigure 3-3: Setup Path Requirement Example图33显示有2个单独的源和目的时钟沿有资格受到 setup分析: setup(1和 setup(2):源时钟发送沿时间:0ns+1*T(ck0)=6ns目的时钟抓取沿时间:0ns+2*(ck1)=8nsSetup Path Requirement=抓取沿时间-发送沿时间=2ns在计算路径要求时候,需要考虑2个重要的点:1.时钟沿是理想的,那就是说,时钟树插入延迟不在考虑之内2.默认时钟在0时间点是 phase-aligned,除非他们的波形定义引进了 phase-shit。异步时钟相位关系未知。时序引擎在分析其间路径时候会考虑默认值。关于异步时钟的更多内容看下部分Setup分析数据要求时间Setup分析数据要求时间是指为了让目的单元能安全的采样数据,数据必须在这个时间点之前稳定。这个值基于:目的时钟采样沿时间.目地时钟延时源时钟和目的时钟的不确定性目的单元 setup时间Setup分析的数据抵达时间Setup分析的数据抵达时间,是指由源时钟发送的数据在路径终点的稳定时候所需要的时间。它的值基于:源时钟发送沿时间源时钟延时数据路径延时数据路径延时包括所有从起点到终点的单元(cel)和线(ne延时。在时序报告中, Vivado将 setup时序考虑为数据路径的一部分。相应的,数据到达和要求时间的公式为:Data Required Time (setup)= destination clock capture edge time+destination clock path delayclock uncertaintyData Arrival Time(setup)= source clock launch edge timesource clock path delay+ datapath delaysetup timeSetup裕量是指要求时间和实际抵达时间的差值:Slack (setup)= Data Required Time -Data Arrival Time在输入数据引脚寄存器上 Setup裕量为负值,说明寄存器有可能锁存到未知的值跳转到错误状态Hod检查Hod裕量的计算与 setup裕量计算直接相关。当 setup分析证明了在最悲观的情况下数据可以被安全捕捉,hold分析确保了:同样的数据不可能被前面目地时钟沿错误的抓取下一个源时钟沿发送的数据不能被用来分析 setup的目的数据沿抓取因此,为了找到hold分析的时序路径,时序引擎考虑了所有为 setup分析的源和目的时钟沿结合的可能。对每一种可能的组合,时序引擎:检查发送沿和减去一个目的时钟周期的抓取沿之间的差值.检查了加上一个源时钟周期的发送沿和抓取沿之间的差值.只保留时间差值最大的发送沿和抓取沿hold路径要求示例采用page33中 setup路径要求示例中的时钟。对于 setup分析那仅有2个可能的时钟沿组合:Setup Path Requirement (S1)=1*T(clk1)-0*T(clk0)= 4nsSetup Path Requirement (S2)=2*T(clk1)-1*T(clk0)=2ns那么相应的hod要求如下:For setup s1:Hold path Requirement (Hla)-(1*T(clk1)-1*T(clk1))-0*T(clko)=onsHold Path Requirement (Hlb)=1*T(clkl)-(0*T(clk0)+I*T(clko))=-2nsFor setup $2:Hold Path Requirement (H2a)=(2*T(clk1)-1*T(clk1))-1*T(clko)2nsHold path Requirement(H2b)=2*T(clk1)-(1*T(clk0)+1*T(clk0))=-4ns从上面可以看出最大的要求时间是Ons,这正好与源时钟和目的时钟第一次上升沿相吻合。Hold路径要求示例,page36显示了 setup检查沿和他们相关的hold检查。cIko launch edgesHla S1 H1b/H2a522bclk1 capture edgesOns 2ns 4ns 6ns 8ns 10ns 12nsFigure 3-4: Hold Path Requirement Example此例中,最终的hod要求时间不是来源于最紧的 setup要求。这是因为所有可能的 setup沿都会被考虑在内,是为了找到最又挑战性的hod要求。正如在 setup分析中,数据要求时间和数据抵达时间是基于以下条件计算的:源时钟发送沿时间.目的时钟抓取沿时间源和目的时钟延时时钟不确定性数据延时.目的寄存器hod时间Data Required Time (hold)= destination clock capture edge timedestination clock path delayclock uncertaintyData Arrival Time (hold)= source clock launch edge timesource clock path delaydatapath delayhold timeHod裕量是要求时间和抵达时间的差值Slack (hold)= Data Arrival Time Data Required Time正的时序裕量意味着即使在最悲观的情况下数据也不会被错误的时钟沿抓取。而负的hold裕量说明抓取的数据错误,而且寄存器可能进入不稳定状态。矫正( recovery和移除( removal分析矫正和移除时序检查与 setup和hold检查相似,区别就是它们应用于异步数据管脚例如set或者clear o对于异步复位的寄存器.矫正时间是异步 reset信号为了锁定新数据已经切换到它的无效状态之后,到下一个有效时钟沿之间的最小时间。移除时间是在异步复位信号安全切换到其无效状态之前,到第一个有效时钟沿之后的最小时间。下面的等式描述了这两种分析的sack是如何计算的Recovery check下面的等式描述了下面如何计算:Data Required Time (recovery ) =destination clock edge start time+ destination clock path delayclock uncertaintyData Arrival Time (recovery )= source clock edge start timesource clock path delaydatapath delayrecovery timeSlack (recovery)= Data Required Time Data Arrival TimeRemoval checkData Required Time (removal)= destination clock edge start timedestination clock path delayclock uncertaintyData Arrival Time (removal)= source clock edge start timesource clock path delay+ datapath delayremoval timeSlack (removal)= Data Arrival Time -Data Required Time正如 setup和hold检査,一个负的 recovery裕量和 remova裕量说明寄存器可能进入亚稳态,并且将未知的电子层带入设计中。定义时钟时钟数字设计中,时钟提供了从寄存器到寄存器之间可靠的传输数据的时间参考。 Vivado ide时序引擎用时钟特征来:计算时钟路径要求以裕量计算的方式报告设计时序裕量更多信息,参考时序分析这章为了得到最精确的最大的时序路径覆盖,时钟必须合理的定义。可以用下面的特征定义时钟:源时钟是指定义在时钟驱动引脚或者时钟树跟端口的时钟时钟沿可以由周期和波形特性的组合描述周期是ns级的,与描述的波形的时间周期相匹配.时钟波形是在时钟周期里,在数ns内时钟上升沿和下降沿绝对时间的列表列表必须包含偶数个值。第一个值一般与第一个上升沿吻合,除非另外指定,默认的时钟占空比是50%相位是ns。如图4-1所示,ck0周期10ns,占空比50%,相位0ns。Ck1周期8ns,占空比75%,相位2ns。CIkO: period 10, waveform =10 5]CIk1: period =8, waveform=2850%50%ClaOns5ns10ns15ns25%75%clkbOns 2ns8ns 10ns16nsFigure 4-1: Clock Waveforms Example传播【 propagated clock)时钟周期和波形特征体现了时钟的理想特征。当时钟进入FPGA器件并且经过时钟树传播时候,时钟沿会有延时而且会随着噪声和硬件特性而改变。这些特点被称为时钟网络延时( latency)和时钟不确定{ uncertainty)时钟不确定性包含下面内容:clock jitterphase error任何额外指定的不确定Vivado会默认的将时钟作为传播时钟,这意味着,这是非理想的时钟。这么做是为了提供包含时钟树插入延时和不确定性的裕量的值。特定硬件资源
- 2021-05-06下载
- 积分:1