VCS:三步法的仿真流程

相关阅读

VCSicon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12828763.html


         使用三步流程仿真设计涉及三个基本步骤:

  • 分析(Analysis)
  • 展开(Elaboration)
  • 仿真(Simulation)

        VCS使用这三个步骤编译任何设计,无论所使用源代码的是HDL、HVL或其他支持的技术。

分析

        分析是仿真设计的第一步。在这个阶段,设计者使用vdhlan或vlogan命令分析VHDL、Verilog、SystemVerilog和OpenVera文件,以下部分包含了一些示例命令行来分析设计文件:

分析VHDL文件

% vhdlan [vhdlan_options] file1.vhd file2.vhd

分析Verilog文件

% vlogan [vlogan_options] file1.v file2.v

分析SystemVerilog文件

% vlogan -sverilog [vlogan_options] file1.sv file2.sv file3.v

分析OpenVera文件

% vlogan -ntb [vlogan_options] file1.vr file2.vr file3.v

同时分析分SystemVerilog和OpenVera文件

% vlogan -sverilog -ntb [vlogan_options] file1.sv file2.vr file3.v

        可以在同一个vlogan命令行中同时分析SystemVerilog文件或OpenVera文件以及其他Verilog文件,如上例所示。

        在分析阶段,VCS会检查设计中的语法错误,生成展开阶段所需的中间文件,命令行中的所有源文件属于同一个编译单元(VCS使用多文件单编译单元),源文件中每个设计元素(如module,program,package等)都有相应的中间文件,所有的中间文件在完成编译后会被保存在默认逻辑库中(或使用-work选项来指示VCS将这些中间文件保存到指定的逻辑库中),可以使用llib命令查看逻辑库的内容。synopsys_sim.setup文件中定义了从逻辑库到物理目录的库映射,如果使用-work选项,需要确保指定的逻辑库存在,否则VCS将提示错误消息并退出。

        下面是一个synopsys_sim.setup文件的示例。

WORK > DEFAULT
DEFAULT : ./work
lib1 : ./lib1
lib2 : ./lib2

        需要注意编译单元和逻辑库的区别,每条vlogan命令都会创建一个编译单元,而将编译结果保存在逻辑库中。

使用vhdlan

        vhdlan可执行文件用于分析VHDL设计文件,并将生成的中间文件存储在逻辑库中,语法如下所示:

% vhdlan [vhdlan_options] VHDL_filename_list

常用的命令行选项和参数

-help

        显示vhdlan的使用信息。

-nc

        不显示Synopsys版权信息。

-q

        不显示所有vhdlan信息。

-version

        显示vhdlan的版本号并直接退出,不执行分析。

-full64

        为64位仿真分析设计。

-work library

        指定一个保存中间文件的逻辑库或物理目录(该逻辑库或物理目录必须在设置文件中进行了映射)。

-vhdl87

        允许分析包含VHDL-93保留字的非可移植VHDL代码。

-vhdl02

        允许分析VHDL 2002受保护类型。

-vhdl08

        允许分析VHDL 2008结构。

-output outfile

        将标准输出(通常显示在屏幕上)重定向到指定的文件。

-xlrm

        启用超出LRM描述的VHDL特性。

-f filename

        指定一个包含源文件列表的文件,应首先指定最底层的VHDL实体,然后向上移动。

-functional_vital

        指定生成功能性VITAL仿真模式的代码。

-l filename

        指定一个日志文件,在其中记录分析过程中的信息。 

-no_functional_vital

        指定生成全时序性VITAL仿真模式的代码。

VHDL_filename_list

        指定要分析的VHDL源文件名,如果未提供扩展名,则默认其为.vhd。

-init_std_logic value

        用给定的九种值中的一种初始化所有未初始化的VHDL信号、端口和变量,数据类型为STD_LOGIC或STD_ULOGIC(无论矢量还是标量)。这两种类型的VHDL信号或变量可以取以下值:‘U’,‘X’,'0','1','Z','W','L','H','-'。

        也可以在synopsys_sim.setup文件中初始化值,在该文件中可以将九种值中的一种设置给变量INIT_STD_LOGIC,例如,INIT_STD_LOGIC=0。

使用vlogan

        vlogan可执行文件用于分析Verilog等设计文件,并将生成的中间文件存储在逻辑库中,语法如下所示:

% vlogan [vlogan_options] Verilog_filename_list

常用的命令行选项和参数

-help

        显示vlogan的使用信息。

-nc

        不显示Synopsys版权信息。

-q

        不显示所有vlogan信息。

-f filename

        指定一个包含源文件列表的文件。

-full64

        为64位仿真分析设计。

-ignore keyword_argument
        不显示指定参数的警告消息,keyword_argument可以是:

        unique_checks:关于unique if和unique case语句的警告消息。

        priority_checks:关于priority if和priority case语句的警告消息。

        all:包括以上两者。

-l filename

        指定一个日志文件,在其中记录分析过程中的信息。

-liblist logical_lib1+logical_lib2+...logical_libn

        在SystemVerilog中,包(package)导入需要在分析阶段就进行:

        1、如果编译单元内,包导入前有编译到相应的包,则使用编译单元内的包进行解析。

        2、如果编译单元内,包导入前没有编译到相应的包,则在逻辑库中进行查找。该选项指定了查找包时的逻辑库搜索顺序,如果未包含-liblist选项,vlogan将首先搜索指定的逻辑库(如果未指定-work选项,这指的是默认逻辑库),如果在其中没有找到,再依次搜索synopsys_sim.setup文件中的所有其他逻辑库并在找到包时停止。

-ntb

        启用OpenVera测试基准语言结果。

-ntb_define macro

        定义任意个OpenVera宏,可以使用加号(+)连接多个宏定义。

-ntb_filext .ext

        指定OpenVera文件扩展名,可以使用加号(+)连接多个文件扩展名。

-ntb_incdir directory_path

        指定OpenVera文件的包含目录路径,可以使用加号(+)指定多个包含目录。

-ova_file filename

        将filename识别为断言文件(如果文件名以.ova结尾则不需要此选项),对于多个断言文件,请对每个文件重复此选项。

-sverilog
        启用对SystemVerilog源代码的分析。

-sv_pragma
        指示编译在单行或多行注释中紧随sv_pragma关键字后的SystemVerilog断言代码。

-timescale=time_unit/time_precision
        为未包含`timescale编译指令的源文件指定时间单位和时间精度,覆盖那些包含`timescale编译指令的源文件的时间单位和时间精度。指定此选项的参数时,请勿包含空格。

-v library_file
        指定一个库文件,在所有源文件的分析结束后,如果编译单元内存在未解析的设计元素,将继续分析库文件,如果与未解析的设计元素匹配,则会将该设计元素以库格式加入逻辑库中(之前所有设计元素加入逻辑库指得都是以设计格式),多个-v选项指定的库文件是从左至右进行分析的(如有必要)。

        有关编译单元的相关知识,见下面这篇博客。

Verilog基础:八种命名空间-CSDN博客文章浏览阅读1.0k次,点赞46次,收藏27次。Verilog有八个标识符命名空间:其中两个是全局的(定义命名空间和文本宏命名空间),六个是局部的(模块命名空间,块命名空间、生成块命名空间、端口命名空间、specify块命名空间、属性命名空间)。_verilog 层次命名 实例https://blog.csdn.net/weixin_45791458/article/details/142132358?sharetype=blogdetail&sharerId=142132358&sharerefer=PC&sharesource=weixin_45791458&spm=1011.2480.3001.8118        下面将以一个例子,说明该选项的作用。

// 例1
// 文件:top.v
module top();hello1 i_hello1();hello i_hello();
endmodule// 文件:hello.v
module hello();initial $display("This is hello.v");
endmodule// 文件:hello1.v
module hello1();hello2 i_hello2();
endmodulemodule nihao();initial $display("This is nihao");
endmodule// 文件:hello2.v
module hello2();initial $display("This is hello2.v");
endmodule
% vlogan -full64 top.v hello.v -v hello1.v -v hello2.v

        vlogan将先后分析top.v和hello.v,此时编译单元中含有模块top和hello,hello1模块是未解析的。随后从左至右依次分析-v选项指定的库文件,首先分析hello1.v,在文件中找到了hello1模块的定义,将该模块加入编译单元中,此时编译单元中含有模块top、hello和hello1,但hello1模块内例化了hello2模块,而此时编译单元内不含该模块,hello2模块被认为是未解析的(注意,nihao模块不会加入编译单元中,因为它此时没有被编译单元中的任何模块例化,或者说它并不需要解析,这点与源文件不同,源文件会无条件将所有设计元素都加入编译单元)。由于存在未解析的模块,继续分析hello2.v,在文件hello2.v中找到了hello2模块的定义,将该模块加入编译单元中,最后编译单元中的所有中间文件保存到指定的逻辑库中(注意,假设分析的最后存在未解析模块,也不会有任何问题,只要在展开阶段使用逻辑库中的模块对顶层模块进行解析时不要出现未解析模块就行)

-y library_directory
        指定一个库目录,在所有源文件的分析结束后,如果编译单元内存在未解析的设计元素,在库目录中查找与实例中的设计元素同名的文件并分析它,如果与未解析的设计元素匹配,则会将该设计元素以库格式加入逻辑库中(之前所有设计元素加入逻辑库指得都是以设计格式),多个-y选项指定的库目录是从左至右进行查找的(如有必要)。

        -y选项和-v选项的地位是相同的,例如对于下面的命令,查找顺序是:首先在hello.v中查找模块hello1的定义,然后在当前目录下查找文件hello2,在其中查找模块hello2的定义。

% vlogan -full64 top.v -v hello1.v -y ./

+libext+extension+
        指定仅在库目录中搜索具有指定文件名扩展名的文件(默认没有后缀),可以使用加号(+)分隔多个扩展名(需要注意的是,添加文件扩展名的顺序并不表示搜索的顺序)。

-work library

        指定一个保存中间文件的逻辑库(该逻辑库必须在设置文件中进行了映射)。

+define+macro
        定义任意个文本宏,可以覆盖源代码中的宏定义,可以使用加号(+)连接多个宏定义。

+lint=[no]ID|none|all
        提供关于Verilog代码包含不良风格的提示:

        +lint=ID=:启用指定的特定风格检查。

        +lint=noID:禁用指定的风格检查。

        +lint=none:禁用所有风格检查。

        +lint=all:启用所有风格检查。

+liborder

+librescan

        使用一个例子可以说明这两个选项的作用。

// 例2
// 文件:top.v
module top();hello1 i_hello1();
endmodule// 文件:hello1.v
module hello1();hello2 i_hello2();
endmodulemodule nihao();initial $display("This is nihao in hello1.v ");
endmodule// 文件:hello2.v
module hello2();initial $display("This is hello2.v");nihao i_nihao();
endmodule// 文件:nihao.v
module nihao();initial $display("This is nihao.v");
endmodule
% vlogan -full64 top.v -v hello1.v -v hello2.v -v nihao.v

        和例1一样,在hello1.v被分析后,模块nihao不会加入编译单元中, 但在分析hello2.v时,出现了一个未解析的模块nihao,vlogan继续分析nihao.v并在其中找到了模块nihao的定义,这是默认的行为,也是+liborder选项的作用,即保证搜索的顺序(如果nihao.v中还是找不到模块nihao的定义,会重新回到hello1.v并开始新的一轮搜索)。

        如果使用+librescan选项,一旦发现有未解析的模块,就会重新回到hello1.v并开始新的一轮搜索,此时会在hello1.v中找到模块nihao的定义,而不是在nihao.v中。

        这个选项同时会影响-v和-y选项指定的库文件和库目录。

+incdir+directory

         指定编译指令`include中文件搜索的额外目录(优先级最低),可以指定多个目录,每个路径名称之间用加号(+)分隔,多个目录会从左到右进行搜搜索(在编译指令中使用绝对路径时,该选项是没有意义的)。

+nowarnTFMPC

        不显示"Too few module port connections"警告消息,这出现了模块端口未完全连接时。

+systemverilogext+ext

        指定SystemVerilog源文件的文件扩展名,可以使用加号(+)分隔多个扩展名,使用该选项就无需使用-sverilog选项了。

+verilog2001ext+ext

         指定使用2001标准编译的Verilog源文件的文件扩展名,可以使用加号(+)分隔多个扩展名。

+verilog1995ext+ext

        指定使用1995标准编译的Verilog源文件的文件扩展名,可以使用加号(+)分隔多个扩展名。

+warn=[no]ID|none|all

        提供关于Verilog代码警告信息的提示:

        +lint=ID=:启用指定的警告。

        +lint=noID:禁用指定的警告。

        +lint=none:禁用所有警告。

        +lint=all:启用所有警告。

Verilog_source_filename

        不属于任何选项的参数,指定了源文件的名字。

-incr_vlogan

        使用此选项后,当以下内容没有变化时,vlogan命令不进行分析:

        1、在之前的中,该命令分析的源文件。

        2、在该命令分析的源文件中引用的导入的包。

        3、命令行选项。

        4、某些shell环境变量。

        注意:下面的情况会导致重新进分析:

% vlogan -full64 test1.v
% vlogan -full64 test2.v
% vlogan -full64 -incr_vlogan test1.v test2.v # 重新分析
% vlogan -full64 -incr_vlogan test2.v test1.v # 重新分析

注意

        下面的这些选项只能在解析时使用,如果在展开时使用,则会出现错误:

-ignore keyword_argument

-ntb_define macro

-ntb_filext .ext

-sv_pragma

-v library_file

-y library_directory

-sverilog

-incr_vlogan

+define+macro

+incdir+directory

+libext+extension+

+systemverilogext+ext

+verilog1995ext+ext

+verilog2001ext+ext

+lint=[no]ID|none|all

+nowarnTFMPC

+warn=[no]ID|none|all

展开

        展开是仿真设计的第二步。在这个阶段,VCS将使用分析过程中生成的中间文件来构建实例层次结构,并生成一个二进制可执行文件simv,该文件稍后用于仿真。在这个阶段可以选择以优化模式或调试模式来展开设计。仿真的运行时性能取决于你选择的模式和仿真过程中所需的灵活性级别,建议在确保设计正确性之前使用完整调试模式或部分调试模式,然后切换到优化模式。

        优化模式(也称为批处理模式)能获得最佳的编译时间和运行时性能,通常在进行回归测试或不需要广泛的调试功能时使用。

        调试模式下(也称为交互模式)通常是在开发周期的初期阶段,或者在你需要更多调试功能或工具来调试设计问题时使用。在此模式下获得的不是总体最佳性能,但通过使用某些编译时选项,可以将设计编译为完整调试模式或部分调试模式,从而在调试模式下获得局部最佳性能。

使用VCS

        使用VCS的语法如下:

% vcs [elab_options] [libname.]design_unit

        其中libname指的是需要展开的顶层模块、实体或配置所在的库名。如果未指定,VCS会根据synopsys_sim.setup文件中指定的顺序,在库列表中查找指定的design_unit。

        其中design_unit可以是一下之一:

        module:Verilog 顶层模块名。

        entity:VHDL 顶层实体名。

        entity__archname:要仿真的顶层实体和架构名称。默认情况下,archname是最近分析的架构。

        cfgname:顶层配置名称。

常用的命令行选项和参数

-h或-help

        列出了最常用的编译时和运行时选项的描述。

-ID

        返回了一些有用的信息,例如VCS版本和构建日期、VCS编译器版本(与VCS版本相同)、以及你的工作站名称、平台和主机ID(用于授权)。

-full64
        启用 64 位模式下的展开和仿真,也可以使用VCS_TARGET_ARCH环境变量来启用64位模式架构下的展开和仿真。

-file filename

        指定一个包含展开选项的文件。

-R

        在可执行文件生成后立即运行该文件。

-o name

        指定生成的可指定文件的名字,默认为simv。

-gfile cmdfile
        使用来自cmdfile文件的值覆盖设计通用参数或参数的默认值,cmdfile文件是一个包含指向设计通用参数的赋值命令的包含文件。

-notice

        启用详细的诊断消息。

-q

        不显示所有信息,例如关于VCS使用的C编译器、VCS正在解析的源文件、顶层模块或指定的时间尺度的消息。

-V
        详细输出模式:VCS在运行C编译器、汇编器和链接器时,会打印它执行的命令。

-l filename

        指定一个文件,VCS将在其中记录展开过程中的消息。如果还使用了-R选项,VCS将在同一个文件中记录来自展开和仿真的消息。

-liblist logical_lib1+logical_lib2+...logical_libn

        -liblist选项指定了在展开时,解析模块的库搜索顺序,VCS会按照-liblist中指定的顺序开始搜索库。它不会遵循synopsys_sim.setup文件中指定的库顺序(默认),也不会查看synopsys_sim.setup文件中存在的其他库。

        下面以一个例子说明这该选项的用法。

// 例3
// 文件:top.v
module top();hello1 i_hello1();
endmodulemodule hello1();initial $display("This is top.v");
endmodule// 文件:hello1.v
module hello1();initial $display("This is hello1.v");
endmodule
WORK > DEFAULT
DEFAULT : ./work
lib1 : ./lib1
lib2 : ./lib2
% vlogan -full64 top.v -work lib1
% vlogan -full64 hello1.v
% vcs -full64 lib1.top

        在上例中,逻辑库work中存在模块hello1(来自于top.v),而逻辑库lib1中存在模块top和模块hello1(来自于hello1.v),在对顶层模块top进行展开时,会选择来自top.v的模块hello1进行解析。使用-liblist选项,可以改变解析搜索的范围和顺序。

% vcs -full64 lib1.top -liblist lib1

        这里还需要谈谈设计单元和库单元,之前我们说到,在分析时如果使用-v或-y选项,可能导致一个模块以库格式加入逻辑库中。在逻辑库进行搜索时,库格式的模块优先级低于设计格式的模块,也即会先尝试以设计格式进行解析,随后再以库格式进行解析,使用-liblist_nocelldiff选项可以消除库格式和设计格式的优先级差异。

        一个模块只能以设计格式或库格式之一存在于一个逻辑库,因此可能会出现覆盖情况,如下所示。

// 例4
// 文件:top.v
module top();hello1 i_hello1();
endmodule// 文件:hello1.v
module hello1();initial $display("This is hello1.v");
endmodule
% vlogan -full64 top.v -v hello1.v -work lib1 # 模块hello1以库格式加入lib1
% vlogan -full64 hello1.v -work lib1 # 模块hello1以设计格式加入lib1,覆盖

仿真

        在展开阶段,VCS使用生成的中间文件创建一个二进制可执行文件simv,使用simv来运行仿真。根据设计的展开方式,可以使用以下两种模式运行仿真:

  • 调试模式(也称为交互模式)
  • 优化模式(也称为批处理模式)

调试模式

        在设计周期的初始阶段,可以在调试模式(也称为交互模式)下展开设计。在此阶段,您需要使用图形用户界面(GUI)或命令行来调试设计问题。要使用GUI进行调试可以使用Verdi;要使用命令行接口进行调试可以使用统一命令行接口。

        注意:要在交互模式下仿真设计,请使用-debug_access+r、-debug_access+all展开设计。

优化模式

        当大多数设计问题已解决时,可以在优化模式(也称为批处理模式)下展开设计。在此阶段,可以实现更好的性能,以最小的调试能力运行回归测试。

常用的运行时选项

        使用以下命令行来仿真设计:

% simv_executable [runtime_options]

-gui

        此选项在设置了VERDI_HOME时启动Verdi。

-ucli
        此选项以UCLI模式启动simv。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万字长文解读深度学习——Transformer

文章目录 🌺深度学习面试八股汇总🌺初识Transformer1. 编码器-解码器架构解码器的额外结构 2. 自注意力机制(Self-Attention Mechanism)解码器中的注意力机制的2点特殊 3. 位置编码(Positional Encoding)4.…

花指令例子

如图所示: 指令EB FF的汇编代码为jmp -1,CPU执行到地址处0x6c80c0的指令EB FF时(jmp -1),EIP为6c80c2, 执行后,EIP为0x6c80c1。但是反汇编器无法自动识别该指令。

校园周边美食探索及分享平台

摘要: 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起,互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域,传统的美食业进而也面临着巨大的挑战&#xff0…

CSS高级技巧_精灵图_字体图标_CSS三角_vertical-align(图像和文字居中在同一行)_溢出文字省略号显示

目录 CSS高级技巧 1. 精灵图 1.1 为什么需要精灵图 1.2 精灵图(sprites)的使用 1.2 精灵图的使用 案例:拼出自己名字 2. 字体图标 2.1 字体图标的产生 2.2 字体图标的优点 2.3 字体图标的下载 2.4 字体图标的引入 2.4.1 字体文件格…

SpringBoot框架在资产管理中的应用

3系统分析 3.1可行性分析 通过对本企业资产管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本企业资产管理系统采用Spring Boot框架,JAVA作…

停车场微信小程序的设计与实现(lw+演示+源码+运行)

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了停车场微信小程序的开发全过程。通过分析停车场微信小程序管理的不足,创建了一个计算机管理停车场微信小程序的方案。文章介绍了停车场微信小程序的…

CCF ChinaOSC |「开源科学计算与系统建模openSCS专题分论坛」11月9日与您相约深圳

2024年11月9日至10日,以“湾区聚力 开源启智”为主题的2024年中国计算机学会中国开源大会(CCF ChinaOSC)将在深圳召开。大会将汇聚国内外学术界、顶尖科技企业、科研机构及开源社区的精英力量,共同探索人工智能技术和人类智慧的无…

「C/C++」C++ STL容器库 之 std::map 键值容器类

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

Oracle简介、环境搭建和基础DML语句

第一章 ORACLE 简介 1.1 什么是 ORACLE ORACLE数据库系统是美国ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器体系结构的数据库之一。 英文官网:Database | Oracle 中文官网&#xff…

考研要求掌握C语言(归并排序)

归并排序考啥? 在考研中归并排序只出在选择题,理解原理很重要 且在考研中考靓靓归并,还是比较简单的 归并排序原理 就是每次分一半,直到每一半只含有一个或不能再分时,一半一半的进行排序,最终合并两个…

软件工程概论项目(一)

距离软工概论项目答辩还有五个周的时间,需要做一个项目,把心得体会都做一个记录。以便以后进行回顾和反思 这里写目录标题 一、环境的配置gitbash 一、环境的配置 gitbash 安装gitbash,简单说两句,git用于多人协作和代码托管&am…

Linux网络设置、FTP

Linux网络设置、FTP 文章目录 Linux网络设置、FTP查看网络接口信息 ifconfig查看主机名称 hostname命令查看路由表条目 route命令查看网络连接情况 netstat命令获取socket统计信息 ss命令测试网络连接 ping命令跟踪数据包 traceroute命令域名解析 nslookup命令设置网络参数的方…

【css flex 多行均分有间隙布局】

小程序、web均可使用&#xff0c;我当前用的是小程序 <view class"job_tab_container flex_between"><view class"job_tab_item"></view><view class"job_tab_item"></view><view class"job_tab_item&qu…

基于redis实现API接口访问次数限制

一&#xff0c;概述 日常开发中会有一个常见的需求&#xff0c;需要限制接口在单位时间内的访问次数&#xff0c;比如说某个免费的接口限制单个IP一分钟内只能访问5次。该怎么实现呢&#xff0c;通常大家都会想到用redis&#xff0c;确实通过redis可以实现这个功能&#xff0c…

口子查好做吗?有什么特点?

大家好&#xff0c;我是橙河老师&#xff0c;一家问卷公司老板&#xff0c;今天讲一讲“口子查好做吗&#xff1f;有什么特点&#xff1f;” 1.口子查是公开性资源&#xff0c;由国外问卷公司直接发布在主流的平台上&#xff0c;比如我们的抖音、百度这些平台&#xff0c;竞争…

【Windows】Android Studio 上cmd 换为Powershell 终端

最近在Windows 环境下Android Studio 的Terminal 终端&#xff0c;低版本默认用的是cmd.exe&#xff0c;好多linux 命令不支持&#xff0c;有时候一不小心就记忆错了&#xff1b;干脆直接换成Windows PowerShell 得了。 下载Powershell&#xff1a;https://aka.ms/PSWindows 选…

【Linux-进程间通信】了解信号量 + 共享内存 + 消息队列的应用

信号量&#xff08;了解&#xff09; 1.概念理论渗透 1.多个执行流&#xff08;进程&#xff09;&#xff0c;能看到的同一份资源&#xff1a;共享资源 2.被保护起来的资源-----临界资源---同步和互斥----用互斥的方式保护共享资源----临界资源 3.互斥&#xff1a;任何时刻…

Cesium着色器的创意和方法(五——Polyline)

不接受反驳&#xff0c;线段在三维里面的渲染比多边形的渲染更复杂。因为线是没有宽度的&#xff0c;并且还需要时时刻刻向着你。 首先看下Cesium的线段的一些效果。这条线段非常宽&#xff08;20个像素&#xff09;&#xff0c;有两个需要留意观察的。一是线段并非实时面对我…

头歌——数据库系统原理(数据高级查询实验2)

文章目录 AVG() 函数的使用代码 COUNT() 函数的使用代码 MAX() 函数和 MIN() 函数的使用代码 SUM() 函数的使用代码 AVG() 函数的使用 返回某一字段的平均值 AVG() 函数通过计算某字段&#xff08;列&#xff09;内容&#xff08;行&#xff09;的个数和它们的数值之和来返回某…

【基于轻量型架构的WEB开发】课程 12.5 数据回写 Java EE企业级应用开发教程 Spring+SpringMVC+MyBatis

12.5 数据回写 12.5.1 普通字符串的回写 接下来通过HttpServletResponse输出数据的案例&#xff0c;演示普通字符串的回写&#xff0c;案例具体实现步骤如下。 1 创建一个数据回写类DataController&#xff0c;在DataController类中定义 showDataByResponse()方法&#xff…