Formality:匹配(match)是如何进行的?

news2025/1/5 13:24:06

相关阅读Formalityicon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482


匹配点、对比点和逻辑锥

        匹配指的是Formality工具尝试将参考设计中的每个匹配点与实现设计中的相应匹配点进行配对,这里的匹配点包括对比点(Compare Points)以及普通的匹配点(Points)。

        在介绍匹配点前首先需要了解逻辑锥(Logic Cones)的概念,逻辑锥是指从特定的设计对象出发,并向后延伸至某些设计对象的组合逻辑结构,之所以被称为锥,是因为其就像椎体一样(一般)拥有一个顶点和多个底点,如图1所示。

图1 逻辑锥

        Formality进行两个设计等价性检查的过程,就是验证两个设计中相应逻辑锥等价性的过程,这个过程会在两者相应逻辑锥底点提供相同的测试信号并观察顶点的输出,如果输出相同则代表两逻辑锥等价,由于对比的是逻辑锥的顶点,因此赋予它另一个名字——对比点,即逻辑锥等价和对比点等价是一个意思。

        为了确定两个设计的相应逻辑锥,需要匹配逻辑锥的顶点和底点,其中顶点自不用说,它一定是对比点,而底点既可以是另一个逻辑锥的顶点(对比点)也可以是普通匹配点。

        对比点可以是:输出端口、触发器、锁存器、黑盒输入引脚、循环断开点、多驱动线网、Cut-Point。而普通匹配点可以是:输入端口和黑盒输出引脚。

        下面以一个例子进行说明,其中参考设计(reference design)是RTL代码,而实现设计(implementation design)是综合后的网表。

// reference design
module adder (
    input [2:0] a, 
    input [2:0] b, 
    input clk, 
    output reg [2:0] sum, 
    output reg c
);
    // 定义中间信号
    wire [3:0] blackbox_result;

    // 实例化黑盒模块
    BlackBox u_blackbox (
        .in1(a),
        .in2(b),
        .result(blackbox_result)
    );

    // 使用黑盒的输出计算结果
    always @(posedge clk) begin
        {c, sum} <= blackbox_result;
    end
endmodule

// implementation design
module adder ( a, b, clk, sum, c );
  input [2:0] a;
  input [2:0] b;
  output [2:0] sum;
  input clk;
  output c;

  tri   [2:0] a;
  tri   [2:0] b;
  tri   [3:0] blackbox_result;

  BlackBox u_blackbox ( .in1(a), .in2(b), .result(blackbox_result) );
  DFFQXL c_reg ( .D(blackbox_result[3]), .CK(clk), .Q(c) );
  DFFQXL \sum_reg[2]  ( .D(blackbox_result[2]), .CK(clk), .Q(sum[2]) );
  DFFQXL \sum_reg[1]  ( .D(blackbox_result[1]), .CK(clk), .Q(sum[1]) );
  DFFQXL \sum_reg[0]  ( .D(blackbox_result[0]), .CK(clk), .Q(sum[0]) );
endmodule

        由于在该例中存在黑盒,使用set_top命令设置顶层模块前需要将hdlin_unresolved_modules变量设置为black_box,否则会有以下报错。

Error: Unresolved references detected during link. (FM-234)

        当使用match命令进行匹配后,结果如图2所示。

图2 匹配结果

        从图1中可以看出,一共有三类匹配点,端口(输入/输出不区分)、触发器(输入引脚/输出引脚不区分)和黑盒引脚(输入引脚/输出引脚不区分),总计25个。

        使用report_matched_points命令也可以得到相似的结果,如下所示。

Formality (match)> report_matched_points
**************************************************
Report         : matched_points

Reference      : r:/WORK/adder
Implementation : i:/WORK/adder
Version        : O-2018.06-SP1
Date           : Sun Dec 29 17:22:41 2024
**************************************************

25 Matched points:

  Ref  DFF        Name(Last) r:/WORK/adder/c_reg
  Impl DFF        Name(Last) i:/WORK/adder/c_reg

  Ref  DFF        Name(Last) r:/WORK/adder/sum_reg[0]
  Impl DFF        Name(Last) i:/WORK/adder/sum_reg[0]

  Ref  DFF        Name(Last) r:/WORK/adder/sum_reg[1]
  Impl DFF        Name(Last) i:/WORK/adder/sum_reg[1]

  Ref  DFF        Name(Last) r:/WORK/adder/sum_reg[2]
  Impl DFF        Name(Last) i:/WORK/adder/sum_reg[2]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/in1[0]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/in1[0]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/in1[1]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/in1[1]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/in1[2]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/in1[2]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/in2[0]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/in2[0]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/in2[1]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/in2[1]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/in2[2]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/in2[2]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/result[0]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/result[0]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/result[1]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/result[1]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/result[2]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/result[2]

  Ref  BBPin      Name(Last) r:/WORK/adder/u_blackbox/result[3]
  Impl BBPin      Name(Last) i:/WORK/adder/u_blackbox/result[3]

  Ref  Port       Name(Last) r:/WORK/adder/a[0]
  Impl Port       Name(Last) i:/WORK/adder/a[0]

  Ref  Port       Name(Last) r:/WORK/adder/a[1]
  Impl Port       Name(Last) i:/WORK/adder/a[1]

  Ref  Port       Name(Last) r:/WORK/adder/a[2]
  Impl Port       Name(Last) i:/WORK/adder/a[2]

  Ref  Port       Name(Last) r:/WORK/adder/b[0]
  Impl Port       Name(Last) i:/WORK/adder/b[0]

  Ref  Port       Name(Last) r:/WORK/adder/b[1]
  Impl Port       Name(Last) i:/WORK/adder/b[1]

  Ref  Port       Name(Last) r:/WORK/adder/b[2]
  Impl Port       Name(Last) i:/WORK/adder/b[2]

  Ref  Port       Name(Last) r:/WORK/adder/c
  Impl Port       Name(Last) i:/WORK/adder/c

  Ref  Port       Name(Last) r:/WORK/adder/clk
  Impl Port       Name(Last) i:/WORK/adder/clk

  Ref  Port       Name(Last) r:/WORK/adder/sum[0]
  Impl Port       Name(Last) i:/WORK/adder/sum[0]

  Ref  Port       Name(Last) r:/WORK/adder/sum[1]
  Impl Port       Name(Last) i:/WORK/adder/sum[1]

  Ref  Port       Name(Last) r:/WORK/adder/sum[2]
  Impl Port       Name(Last) i:/WORK/adder/sum[2]

 [BBNet: multiply-driven net
  BBox:  black-box
  BBPin: black-box pin
  Block: hierarchical block
  BlPin: hierarchical block pin
  Cut:   cut-point
  DFF:   non-constant DFF register
  DFF0:  constant 0 DFF register
  DFF1:  constant 1 DFF register
  DFFX:  constant X DFF register
  DFF0X: constrained 0X DFF register
  DFF1X: constrained 1X DFF register
  LAT:   non-constant latch register
  LAT0:  constant 0 latch register
  LAT1:  constant 1 latch register
  LATX:  constant X latch register
  LAT0X: constrained 0X latch register
  LAT1X: constrained 1X latch register
  LATCG: clock-gating latch register
  TLA:   transparent latch register
  TLA0X: transparent constrained 0X latch register
  TLA1X: transparent constrained 1X latch register
  Loop:  cycle break point
  Net:   matchable net
  Port:  primary (top-level) port
  Und:   undriven signal cut-point
  Unk:   unknown signal cut-point

  Func:  matched by function
  Name:  matched by name
  Topo:  matched by topology
  User:  matched by user

  Last:  matched during most recent matching]

        除了在GUI窗口能观察到匹配结果,在使用match命令后会得到匹配的总体情况,如下所示。

Formality (setup)> match 
Reference design is 'r:/WORK/adder'
Implementation design is 'i:/WORK/adder'
Status:  Checking designs...

Warning: Design r:/FM_BBOX/BlackBox is a black box and there are cells referencing it (FM-160)

Warning: Design i:/FM_BBOX/BlackBox is a black box and there are cells referencing it (FM-160)

Warning: 1 (1) black-box references found in reference (implementation) design; see formality4.log for list (FM-182)
Status:  Building verification models...
Status:  Matching...

*********************************** Matching Results ***********************************
 14 Compare points matched by name
 0 Compare points matched by signature analysis
 0 Compare points matched by topology
 11 Matched primary inputs, black-box outputs
 0(0) Unmatched reference(implementation) compare points
 0(0) Unmatched reference(implementation) primary inputs, black-box outputs
****************************************************************************************

        可以看出, Matching Results中的匹配结果将对比点(Compare points matched by ...)和普通匹配点(Matched primary inputs, black-box outputs)区分开来了,其中对比点有14个而普通匹配点有11个。

匹配的具体过程

        匹配可以是基于名称的,也可以是其他方式的,当进行匹配时,默认会使用以下匹配技术,并按照以下顺序执行:

  1. 精确名称匹配(基于名称的匹配)
  2. 名称过滤(基于名称的匹配)
  3. 拓扑等价(不基于名称的匹配)
  4. 签名分析(不基于名称的匹配)
  5. 基于线网名称的匹配(基于名称的匹配)

        还有四种用户指定的匹配技术可用,但它们通常用于调试未匹配的点,它们是:使用用户指定名称进行匹配;使用匹配规则进行匹配;使用名称子集进行匹配;重命名用户提供的名称或使用映射文件。本文的重点不是它们,因此将不会讨论。

        当某种技术成功将一个设计中的匹配点与另一个设计中的匹配点匹配后,该点将免于其他匹配技术的处理,接下来的章节将详细描述每种默认的匹配技术。

        表1列出了控制匹配的变量,部分变量将在以下章节中进行描述。

变量名默认值
name_match

all

name_match_allow_subset_matchstrict
variablename_match_based_on_netstrue
name_match_filter_chars‘~!@#$%^&*()_+=|\{}[]”:;<>?,./
name_match_flattened_hierarchy_separator_style/
name_match_multibit_register_reverse_orderfalse
name_match_use_filtertrue
signature_analysis_match_primary_inputtrue
signature_analysis_match_primary_outputfalse
signature_analysis_match_compare_pointstrue
verification_blackbox_match_modeany

精确名称匹配

        Formality首先进行精确的区分大小写名称匹配,然后进行精确的不区分大小写名称匹配。精确名称匹配技术是每次验证中默认使用的算法,使用该算法时,Formality会匹配参考设计和实现设计中名称相同的所有匹配点。

        例如,以下设计对象将由Formality的精确名称匹配技术自动匹配:

Reference: /WORK/top/memreg(56)
Implementation: /WORK/top/MemReg(56)

        要控制是使用基于名称的匹配,还是仅依赖拓扑等价和签名分析来进行匹配,可按如下所示设置name_match变量:

fm_shellGUI
使用set_app_var name_match
[all | none | port | cell ]命令

1、点击Match

2、选择Edit > Formality Tcl Variables,将会显示Formality Tcl Variables对话框。

3、在Matching部分,选择name_match变量。

4、在Choose a value列表中,选择all、none、port或cell。

5、选择 File > Close。

        默认值all会执行所有的基于名称的匹配;使用none可禁用除输入端口外的所有基于名称的匹配;使用port只对于端口执行基于名称的匹配;使用cell只对于触发器、锁存器、黑盒输入和输出引脚执行基于名称的匹配。

名称过滤

        在精确名称匹配之后,Formality会尝试过滤后的不区分大小写的名称匹配,通过过滤对象名称中的某些字符来进行匹配。

        要关闭默认的过滤名称匹配行为,可以按照以下方法使用Formality Shell或GUI:

fm_shellGUI
使用set_app_var name_match_use_filter
false命令

1、点击Match

2、选择Edit > Formality Tcl Variables,将会显示Formality Tcl Variables对话框。

3、在Matching部分,选择name_match_use_filter变量。

4、取消选中Use name matching filter

5、选择 File > Close。 

        name_match_use_filter变量由name_match_filter_chars变量支持,以下是匹配过滤的规则:

  1. 忽略列表中的所有字符都会被替换为一个"_",注意:多个连续的字符只会被替换为一个"_"。
  2. 如果忽略的字符是第一个或最后一个字符,则不会替换为"_",而是直接丢弃。
  3. 数字与字符之间会以"_"分隔。例如,"bar2"将被转换为"bar_2"。
  4. 如果同一设计中的两个字符串在过滤后变为相同的字符串,则这两个字符串均不会通过名称过滤来匹配。

        下面两个例子中的设计对象将通过Formality名称过滤算法匹配:

Reference: /WORK/top/memreg__[56][1]
Implementation: /WORK/top/MemReg_56_1

        其中需要重点注意的是:参考设计的"__["被替换为"_","]["被替换为"_","]"被丢弃。

Reference: /WORK/top/BUS/A[0]
Implementation: /WORK/top/bus__a_0

        其中需要重点注意的是:参考设计的"/"被替换为"_","["被替换为"_","]"被丢弃;实现设计的"__"被替换为"_"。作为层次分隔符的"/"也会被替换,就像名称中的”/“那样(可能来自ungroup命令),详情见Verilog基础:简单标识符和转义标识符。

        下面一个例子中的不会通过Formality名称过滤算法匹配:

Reference: /WORK/top/BUS/A[0]
Implementation: /WORK/top/busa_0

        可以在name_match_use_filter变量中移除或附加字符,默认的字符列表是:

~!@#$%^&*()_-+=|\[]{}”':;<>?,./

        例如,以下命令在默认的过滤字符列表中添加包括字符V:

fm_shell (match)> set_app_var name_match_filter_chars \
{~!@#$%^&*()_-+=|\[]{}"':;<>?,./V}

拓扑等价

        Formality尝试通过拓扑等价来匹配剩余的未匹配点——也就是说,如果驱动两个未匹配点的逻辑锥(logic cones)在拓扑上是等价的,那么这两个点将被匹配。

签名分析

        签名分析是对匹配点的功能性和拓扑签名进行的迭代分析。功能性签名来自于随机模式仿真;拓扑签名来自于输入锥(fan-in cone)拓扑。

        签名分析算法使用仿真生成输出数据模式或输出寄存器的值签名,签名分析中的仿真过程用于唯一地识别一个控制节点。

        例如,如果一个向量使得一个寄存器对的值变为1,而所有其他控制寄存器的值在两个设计中都变为0,那么签名分析完成了一次匹配。

        为了使签名分析正常工作,两个设计中的输入端口必须具有匹配的名称,或者在必要的时候使用set_user_match、set_compare_rule或rename_object命令手动匹配它们。

        在签名分析过程中,Formality工具会自动尝试匹配先前未匹配的数据路径和层次结构块及其引脚。要关闭自动匹配数据路径块和引脚,可以将signature_analysis_match_datapath变量设置为false。要关闭自动匹配层次结构块和引脚,可以将signature_analysis_match_hierarchy变量设置为false。在后一种情况下,如果在运行层次化验证时发现性能下降,可以将signature_analysis_match_hierarchy的设置改为false。

        要禁用所有签名分析匹配并忽略其他signature_analysis*变量,可以将signature_analysis变量设置为false,其默认值为true。

        如果未匹配对象的数量有限,Formality中的签名分析效果良好,但如果匹配点存在数千个不匹配的情况,算法的效果可能较差。在这种情况下,为了节省时间,可以在Formality shell或GUI中关闭该算法,如下表所示。

fm_shellGUI
使用set_app_var
signature_analysis_match_compa
re_points false命令

1、点击Match

2、选择Edit > Formality Tcl Variables,将会显示Formality Tcl Variables对话框。

3、在Matching部分,选择signature_analysis_match_compare_points变量。

4、取消选中Use signature analysis

5、选择 File > Close。 

        默认情况下,签名分析不会尝试匹配输出端口,可以通过将 signature_analysis_match_primary_output变量设置为true来指定输出端口的匹配。

        通过编写比较规则(set_compare_rule)而不是禁用签名分析,可能会减少匹配的运行时间。例如,如果参考设计和实现设计中都有额外的寄存器,使用比较规则效果好。

        注意:Formality使用签名分析来匹配具有不同名称的黑盒子。在黑盒子匹配之后,工具首先尝试通过名称匹配黑盒子的引脚。如果黑盒子引脚的名称相同,则匹配这些引脚。如果引脚名称不同,则工具会再次使用签名分析来功能性地匹配引脚。

基于线网名称的匹配

        Formality通过精确匹配和过滤匹配其连接的线网来匹配所有剩余未匹配的比较点,匹配可以通过直接连接的驱动网络或被驱动网络进行。

        要关闭基于网络名称的比较点匹配,可以按照以下方法使用Formality Shell或GUI:

fm_shellGUI
使用set_app_var
name_match_based_on_nets false命令

1、点击Match

2、选择Edit > Formality Tcl Variables,将会显示Formality Tcl Variables对话框。

3、在Matching部分,选择name_match_based_on_nets变量。

4、取消选中Use net names

5、选择 File > Close。 

        例如,以下设计对象有不同的名称:

Reference: /WORK/top/memreg(56)
Implementation: /WORK/top/MR(56)

        Formality无法通过精确名称匹配技术将它们匹配,但如果这些寄存器输出驱动的网络名称相同,Formality将成功匹配这些寄存器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈电力监控系统在厂房电力工程中的设计与应用

安科瑞汪洋/汪小姐/汪女士---Acrelwy 摘要 &#xff1a;电力监控系统在厂房电力工程中的应用&#xff0c;稳步提升了电力系统管理的智能化、信息化水平&#xff0c;确保电力资源的合理化应用&#xff0c;满足工业生产的基本需求。为确保电力监控系统与厂房电力工程的有效结合&…

AIGC生图实战技巧分享

目录 引言 &#x1f343;安装与配置代码 &#x1f343;数据处理代码 &#x1f343;生图请求代码 引言 本文展示了 AIGC 生图相关的代码示例&#xff0c;包括安装与配置、数据处理以及生图请求等不同阶段的代码&#xff0c;清晰呈现了整个技术实现过程中代码层面的操作要点和…

Mac iTerm2集成DeepSeek AI

1. 去deepseek官网申请api key&#xff0c;DeepSeek 2. 安装iTerm2 AI Plugin插件&#xff0c;https://iterm2.com/ai-plugin.html&#xff0c;插件解压后直接放到和iTerms相同的位置&#xff0c;默认就在/Applications 下 3. 配置iTerm2 4. 重启iTerm2,使用快捷键呼出AI对话…

akamai3.0反爬教程逆向分析9个视频汇总

目录 一、akamai2.0文章二、akamai3.0每月疑似改版点二、9个视频汇总如下 一、akamai2.0文章 文章1cookie反爬之akamai_2.0-上文章2cookie反爬之akamai_2.0-上文章3cookie反爬之akamai_2.0-上文章中akamai2.0对应调试html与js文件 二、akamai3.0每月疑似改版点 详细文字与2.…

解决chatgpt(mac app登陆)出现报错:获取您的 SSO 信息时出错

由于我们是app登陆的&#xff0c;不能直接修改网站的链接&#xff0c;将 URL 的域名部分从 auth.openai.com 变更为 auth0.openai.com&#xff0c;然后加载新的地址&#xff0c;这时候应该就可以正常登录或注册了。 所以我们使用邮箱先载入auth0的地址&#xff0c;再更改自己的…

基于Springboot + vue实现的高校办公室行政事务管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

UE5通过蓝图节点控制材质参数

通过蓝图节点控制材质的参数 蓝图节点 在材质上设置标量值 和 在材质上设置向量参数值 Set Scalar Parameter Value on Materials Set Vector Parameter Value on Materials 这两个蓝图节点都可以在蓝图中&#xff0c;控制材质的参数值和向量值

DeepSeek-VL2

《DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding》是 DeepSeek-AI 团队发布的关于视觉语言模型 DeepSeek-VL2 的论文&#xff0c;以下是对该论文的详细介绍&#xff1a; 研究背景与动机 多模态理解的重要性&#xff1a;在当…

【第二部分--Python之基础】03 容器类型的数据

Python内置的数据类型如序列&#xff08;列表、元组等&#xff09;、集合和字典等可以容纳多项数据&#xff0c;我们称它们为容器类型的数据。 序列 序列&#xff08;sequence&#xff09;是一种可迭代的、元素有序的容器类型的数据。 序列包括列表&#xff08;list&#xff…

大型概念模型:在句子表示空间中的语言建模

《Large Concept Models: Language Modeling in a Sentence Representation Space》这篇论文介绍了一种新的语言模型方法&#xff0c;它在句子表示空间中进行建模。该方法旨在改进传统语言模型的局限性&#xff0c;通过捕捉更高级别的语义信息来提高自然语言处理任务的表现。 模…

日期时间选择(设置禁用状态)

目录 1.element文档需要 2.禁用所有过去的时间 3.设置指定日期的禁用时间 <template><div class"block"><span class"demonstration">起始日期时刻为 12:00:00</span><el-date-pickerv-model"value1"type"dat…

Mac 安装Mysql启动Mysql以及数据库的常规操作

Mac 安装Mysql启动Mysql以及数据库的常规操作 一、mysql的安装 1、登录官方网站:dev.mysql.com/downloads/mysql/ 二、查看系统架构 uname -m 在MAC中&#xff1a; 如果输出结果是 x86_64&#xff0c;则表示你的系统是 x86-64 架构。 如果输出结果是 arm64&#xff0c;则表示…

2011-2020年各省粗离婚率数据

2011-2020年各省粗离婚率数据 1、时间&#xff1a;2011-2020年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;地区、年份、粗离婚率 4、范围&#xff1a;31省 5、指标解释&#xff1a;粗离婚率指某地区当年离婚对数占该地区年平均人口的比重。计算公式为&#xff1a…

【Cocos TypeScript 零基础 2.1】

目录 cocos常识新建动画添加组件 cocos 下载就不讲了,多的很 cocos 界面设置中文 新建一个2D项目 SIKI_学院_点击跳转 常识 竖屏 宽720 高1280 如果背景图确定是竖屏也可以根据背景图片大小来确定项目宽高 鼠标功能 左键 选中 滚轮 放大缩小 右键 移动视角位置 场景 双击…

UE蓝图战利品掉落动画

战利品掉落动画&#xff0c;其实就是添加个冲量 add impulse 什么是冲量&#xff1f; 冲量 &#xff08;impulse&#xff09;是作用在物体上的力 在 时间上的累积效果

Transformer从零详细解读——DASOU讲AI

1. 从全局角度概括Transformer transformer的任务是什么&#xff1f; 进一步细化 进一步细化&#xff0c;注意&#xff1a;每个encoder结构相同&#xff0c;参数不同&#xff1b;decoder同理 原论文中的图如下&#xff1a; 2.Encoder 2.1 输入部分 &#xff08;1&#xff09…

(四)配置有线网口、SSH登陆、文件传输以及运行交叉编译程序测试

文章目录 配置有线网口原因自动分配不行第一步 设置前先停止网络接口第二步 手动分配ip第三步 使配置的网口ip永久生效第四步 测试一下网络是否通了 SSH登陆文件传输以及运行交叉编译程序测试第一种借助基于SSH的命令行工具SCP传输文件第二种借助基于MobaXterm 软件直接上传测试…

欧美短剧系统出海:小体量撬动大市场

近年来&#xff0c;出海短剧在欧美市场掀起了一阵热潮&#xff0c;成为了全球娱乐产业中一颗冉冉升起的新星。 欧美短剧凭啥爆火&#xff1f; 精准把握碎片化娱乐需求 现代欧美社会生活节奏飞快&#xff0c;人们的时间愈发碎片化。出海短剧每集约 3 分钟的时长&#xff0c;完…

折旧后将成本中心折旧费调整到订单中

背景&#xff1a;设备原作为通用设备&#xff0c;按成本中心折旧&#xff0c;在12月月结正常折旧后才明确为专用设备&#xff0c;需要按内部订单折旧。 问&#xff1a;折旧能不能冲销。 回复&#xff1a; 在SAP中&#xff0c;折旧凭证是无法直接冲销的。如果折旧计提有误&#…

前端CSS3学习

学习菜鸟教程 火狐-moz- 谷歌 Safari -webkit- 前面都加这个&#xff0c;可能才生效 边框 border: 1px solid #ddd 粗细 样式 样色 经常和border-radius 一块用 border-radius: 50px 20px 第一个左右 第二个右左 border-top-left-radius … box-shadow: 10px 5px 10px 0 #88…