第二篇 多路数据选择器

实验二 多路数据选择器

2.1 实验目的

  1. 理解多路数据选择器的概念;

  2. 使用门级结构描述实现多路选择器;

  3. 使用行为描述实现多路选择器;

  4. 完成实验设计、仿真,并在DE1-SOC上验证电路。

2.2 原理介绍

在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器(Data Selector)。也称多路选择器或多路开关(Multiplexer)等。

如图 2.1a 所示,在选择信号sel的控制下,从多路数据输入(in1,in2, ...)中选择某一路数据送至输出端(out)。对于一个具有 2^n 个输入和 1 个输出的多路选择器,需要有 n 个选择信号。

如图 2.1b所示,假设有4个1位输入 ABCD,它们的值分别设为0,1,1和0。这种选择允许第三个输入C连接到输出端F,因此得到输出结果是1。 每次C输入的值改变,输出的值F也将跟着改变。如果想将另一个输入连接到输出端F,就需要改变选择器的选择信号。

图2.1 多路选择器的原理

多路选择器也是 FPGA 内部的一个基本资源,主要用于内部信号的选通。简单的多路选择器还可以通过级联生成更大的多路选择器。

2.2.1 1位二选一数据选择器

如图2.2二选一多路选择器模块框图所示,1位二选一多路选择器的数据输入有两个,分别为in1in2,两个输入都是1位宽。为了确定选择哪一路输入数据连接到输出端,还需要一个选择信号(sel)。因为输入只有两路数据,选择端只要能够表现出两种状态即可,因而选择信号位宽为1即可。当sel为0时,选择in1通过;当sel为1时,选择in2通过;out表示数据选择器的数据输出。

image-20210621165640093

图2.2 二选一多路选择器模块框图

根据上述功能可以列出二选一真值表如下:

表2.1 二选一多路选择器真值表

in1in2selout
0000
0010
0101
0111
1000
1010
1101
1111

根据真值表2.1我们可以绘制出二选一数据选择器的信号波形关系图2.3, 从这个图我们可以直观的看到输入和输出之间具体的映射关系 。

图2.3 二选一多路选择器信号波形关系图

实现 二选一多路选择器的 Verilog HDL代码形式有很多种 ,下面我们分别用门级结构描述和行为描述来实现它。

门级结构描述二选一多路选择器

所谓门级结构描述是指在设计中直接调用基本逻辑门级元件来构建电路。根据真值表2.1化简得出布尔表达式:

out = (in1 & (~sel)) | (in2 & sel)

根据布尔表达式得出二选一多路选择器门级结构原理图如下:

image-20210624103106279

图2.4 二选一多路选择器门级结构原理图

根据图2.4可以写出1位二选一多路选择器门级结构描述代码如下:

module mux2x1(          //模块的开头以“module”开始,然后是模块名“mux2_1”input  in1,in2,     //两路数据输入信号in1,in2input  sel,         //选择信号output out          //数据输出信号);
​
wire sel_,a,b;          //定义中间变量
​
not U1(sel_,sel);       //非门,实现sel信号的取反
and U2(a,in1,sel_);     //与门,实现a和in1的逻辑与运算
and U3(b,in2,sel);      //与门,实现b和in2的逻辑与运算
or  U4(out,a,b);        //或门,实现a和b的逻辑或运算
​
endmodule                //每个模块的结尾以“endmodule”结束

代码2.1 门级结构描述二选一多路选择器

在Quartus的Tools -->Netlist Viewers -->RTL Viewer查看到二选一多路选择器门级描述综合出的电路图结果如下(虽然该图和图2.4不太一样,但是其功能是一样的):

image-20210621174046184

图2.5 二选一多路选择器门级实现RTL Viewer图

其实我们直接用语句“assign out = (in1 & (~sel)) | (in2 & sel);”替换掉代码2.1里面的4个门语句的电路描述也可以得到图2.5所示的电路。这种主要使用assign持续赋值语句描述的方式称之为数据流描述。

行为描述二选一多路选择器

所谓行为描述就是对设计实体的数学模型的描述,其抽象程度远高于结构描述,行为描述类似于高级编程语言,当我们描述一个设计实体的行为时,我们无需知道电路的具体结构,只需要描述输入输出信号的行为,而不必花费心思关注设计功能的门级实现,这将大大提高了设计者的设计效率。

根据图2.2的功能描述我们可写出二选一多路选择器行为描述的代码。实现二选一多路选择器功能的行为描述方法有很多种,常见的有这三种:

(1) 条件语句 if-else 实现方法

module mux2x1(          //模块的开头以“module”开始,然后是模块名“mux2_1”input  in1,in2,//两路数据输入信号input  sel,     //选择信号output reg out      //数据输出信号);
always@(*)          //只要 if 括号中的条件或赋值号右边的变量发生变化则立即执行下面的代码if(sel == 1'b1)     //当sel设置为1时执行下面的语句out = in1;      //always 块中如果表达的是组合逻辑关系时使用“=”进行赋值else out=in2;
​
endmodule               //每个模块的结尾以“endmodule”结束

代码2.2 用条件语句 if-else 描述二选一多路选择器

always 语句用来表示组合逻辑时,即可以采用门电路的描述方法,也可以采用功能性的描述语句。

always 块中被赋值的一定要是 reg 型变量,但它并没有生成寄存器而是实现的的组合逻辑的功能,这是因为这个变量在仿真时需要占据内存空间,而上面的 always 块只对 sel、 in1、 in2 三个变量的输入敏感,如果没有这三个变量的变化事件,则 out 变量将需要保存其值,因此它们必须被定义为 reg 型变量,但是在综合之后,并不对应硬件锁存器或者触发器(后面第四章会讲到什么时候会出现综合成这两种的情况)。

在Quartus的Tools -->Netlist Viewers -->RTL Viewer查看到代码2.2对应的二选一多路选择综合出的电路图结果如下:

image-20210622094745833

图2.6 代码2.2综合出的二选一多路选择器RTL Viewer图

(2) 条件语句 case 实现方法

module mux2x1(      //模块的开头以“module”开始,然后是模块名“mux2_1”input  in1, //数据输入信号in1input  in2, //数据输入信号in2input  sel, //选通信号output reg out  //输出信号
);
always@(*) begincase(sel) 1'b1 : out = in1;1'b0 : out = in2;
//如果 sel 不能列举出所有的情况一定要加 default
//此处 sel 只有两种情况,并且完全列举了,所以 default 可以省略default : out = in1;endcaseend
​
endmodule

代码2.3 用条件语句 case 描述二选一多路选择器

在case语句中,首先会判断变量和哪个分支相同,并且执行对应的表达式。当和所有的分支都不相同时,执行default后的那个表达式。

代码2.3条件语句 case 实现二选一多路选择器对应的RTL Viewer图如下:

image-20210622151005435

图2.7 代码2.3综合出的二选一多路选择器RTL Viewer图

(3) 条件运算符(三目运算符)实现方法

module mux2x1(      //模块的开头以“module”开始,然后是模块名“mux2_1”input  in1, //数据输入信号in1input  in2, //数据输入信号in2input  sel, //选通信号output reg out //输出信号
);
//此处使用的是条件运算符(三目运算符),当括号里面的条件成立时
//执行"?”后面的结果;如果括号里面的条件不成立时,执行“: ”后面的结果assign out = (sel == 1'b1) ? in2 : in1;
​
endmodule

代码2.4 用 三目运算符描述二选一多路选择器

用条件运算符(三目运算符)实现方法对应的RTL Viewer图:

image-20210622151419364

图2.8 代码2.4综合出的二选一多路选择器RTL Viewer图

通过以上三种不同的代码编写方式,我们可以了解到一个最基本模块的书写格式和实现方法,还知道 Verilog HDL 语言和 C 语言相似的地方就是实现相同功能,其代码方式是多种多样的,所以大家在代码的实现上就有很多的选择。通过对比发现以上三种不同代码方式实现的 2 选 1 多路选择器对应综合出的 RTL 视图虽有所差别,但综合工具在布局布线和最后映射 FPGA 资源时会自动优化,使最终的功能和占用的逻辑资源都是相同的。

2.2.2 1位四选一数据选择器

图2.9展示了如何使用三个二选一数据选择器来构建一个四选一数据选择器,该选择器有一个2位的选择输入端sel[1:0],四个1位的数据输入in1in2in3in4,以及一个1位的数据输出out

image-20210623123656591

图2.9 用二选一数据选择器构建四选一数据据选择器图

根据组合逻辑设计规则,我们可以将所有的情况全部列出,得出真值表,进而得到布尔表达式和门级电路原理图。但是现在输入的组合排列变多了(2的4次幂),后面还会拓展到4位四选一,这时直接列出真值表显得麻烦,可以选择直接用行为级语句描述会显得更高效。

四选一多路选择器的实体设计分析如下:四选一多路选择器的数据输入有四个,分别为in1in2in3in4。为了能够确定选择那一路数据能够通过,还需要一个选择端(sel)。因为输入四路数据,选择端要求能够表现出四种状态,因而选择端位宽为2(2的2次幂是4)。假设in1in2in3in4都是位宽为1的数据输入,当sel为00时,选择in1输出;当sel为01时,选择in2输出;当sel为10时,选择in3输出;当sel为11时,选择in4输出;out表示数据输出。

image-20210622152222234

图2.10 1位四选一数据选择器功能框图

根据1位四选一数据选择器功能框图2.10可写出行为描述的代码如下:

module mux4x1(      input        in1, //数据输入信号in1input        in2, //数据输入信号in2input        in3, //数据输入信号in3input        in4, //数据输入信号in4input  [1:0] sel, //选通信号output reg       out  //输出信号
);always @ ( * ) begincase (sel)          2'b00    :  out = in1;2'b01    :  out = in2;2'b10    :  out = in3;2'b11    :  out = in4;default  :  out = in1;endcaseend
endmodule

代码2.5 1位四选一数据选择器的代码实现

2.2.3 2位四选一数据选择器

2位四选一数据选择器是在1位四选一数据选择器的基础上将每个数据输入信号从1位拓展到2位。2位四选一数据选择器的具体介绍以及代码实现参考本章的2.2章节到2.5章节的实验内容。

2.3 实验任务

设计并实现2位四选一多路选择器,通过选通控制信号确定选通四路数据输入中的某一路作为输出信号。

2.4 设计实现

2.4.1 硬件介绍

我们使用DE1-SOC上的滑动SW开关和 LED 灯等硬件进行四选一多路选择器的验证,选取 SW[1:0]SW[3:2]SW[5:4]SW[7:6] 分别作为四路(in1in2in3in4)信号的输入端,选取SW[9:8] 作为选择信号 sel 的信号输入;选取 LEDR[1:0] 作为信号输出 out的显示,具体的硬件映射关系如图 2.11所示 :

图2.11 4位四选一数据选择器与外设对应关系

2.4.2 设计思路

图2.12 是2位四选一数据选择器功能框图,跟1位四选一数据选择器一样,当选通控制信号 sel 为 00 时,信号输出为 in1路的信号;当选通控制信号 sel 为 01时,信号输出为 in2 路的信号;当选通控制信号 sel 为 10时,信号输出为 in3 路的信号;当选通控制信号 sel 为 11时,信号输出为 in4 路的信号。

图2.12 2位四选一数据选择器功能框图

​如下表2.2 是2位四选一数据选择器的输入输出信号描述。

表2.2 4位四选一数据选择器信号描述列表

信号位宽类型功能描述
in12-bitInput输入信号1
in22-bitInput输入信号2
in32-bitInput输入信号3
in42-bitInput输入信号4
sel2-bitInput选通信号
out2-bitOutput输出信号
2.4.3 代码

代码2.6是2位四选一数据选择器的代码实现:

module mux4x1(input [1:0] in1, //数据输入信号in1input [1:0] in2, //数据输入信号in2input [1:0] in3, //数据输入信号in3input [1:0] in4, //数据输入信号in4input [1:0] sel, //选通信号output  reg [1:0] out //输出信号
);always @ ( * ) begincase (sel)          2'b00    :  out = in1;2'b01    :  out = in2;2'b10    :  out = in3;2'b11    :  out = in4;default  :  out = in1;endcaseendendmodule

代码2.6 4位四选一数据选择器的代码实现

如下图2.13 是4位四选一数据选择器RTL Viewer图:

图2.13 4位四选一数据选择器RTL Viewer图

2.5 实验步骤

2.5.1 创建工程

1. 点击电脑右下角的开始菜单找到Quartus软件,双击Quartus (Quartus Prime 17.1)打开Quartus Prime软件。

2. 点击菜单File-->New Project Wizard弹出工程创建的对话框。在弹出的对话框中点击Next。

​3. 在您的DE1-SOC 工作文件夹下创建一个lab2的文件夹,并将工程路径指向该文件夹,且工程的名称也命名lab2。

图2.14 选择工程路径以及工程命名

4. 连续点击3次Next得到如下界面,通过器件过滤器筛选选中DE1-SoC的Cyclone V 5CSEMA5F31C6器件。

 图2.15 筛选出DE1-SOC的FPGA 器件

 5. 点击Next两次后得到工程的生成报告窗口,检查无误后点击Finish完成工程创建。

图2.16 lab2工程

 6. 在Quartus工具栏依次点击File-->New,在New窗口中选择Verilog HDL File后点击OK按钮新建一个空白Verilog HDL文件,将代码2.6复制到新创建的.v文件中,并点击File-->Save As ...将该文件重命名为mux4x1.v,并新建名为v的文件夹,将mux4x1.v保存在v文件夹中。

图2.17 创建v文件夹

图2.18 Quartus软件中的mux4x1.v文件

​7. 点击Quartus软件工具栏的Processing --> Start --> Start Analysis & Synthesis或点击

image-20210603145513555

按钮对Verilog HDL代码执行语法检查和综合,该过程成功完成之后在Quartus软件窗口的Tasks页面中,Analysis & Synthesis旁边将显示一个绿色勾型标记,如图2.19所示。如果在该过程中提示有错误,请检查Verilog HDL代码语法,确保与上述代码块完全一致。

图2.19 对Verilog代码进行分析和综合

2.5.2 仿真

1. 点击Quartus软件工具栏的File --> New --> Verilog HDL File,点击OK,新建一个空白Verilog HDL文件,再点击File --> Save As ...保存,命名为mux4x1_tb.v,保存在v文件夹中,如图2.20所示。

图2.20 新建并保存test bench文件

2. 在lab2_tb.v文件中输入如下代码,并保存。

`timescale 1ns/1psmodule mux4x1_tb;reg       [1:0]      in1;reg       [1:0]      in2;reg       [1:0]      in3;reg       [1:0]      in4;reg       [1:0]      sel;wire      [1:0]      out;mux4x1 mux4x1_inst(.in1          (in1),.in2          (in2),.in3          (in3),.in4          (in4),.sel          (sel),.out          (out));initial beginrepeat(8) beginin1 = {$random} % 4;in2 = {$random} % 4;in3 = {$random} % 4;in4 = {$random} % 4;sel = {$random} % 4;# 20;end end
endmodule

代码2.8 lab_tb.v文件代码

图2.21 Quartus软件中的mux4x1_tb.v文件

由于本次输入的的组合太多,不能全覆盖测试。故采用随机数来进行测试。

$random是一个系统函数,调用时,可以返回一个随机值。注意:这个系统函数只能出现在testbench中,在设计中出现是不可综合的。

$random函数调用时返回一个32位的随机数,它是一个带符号的整形数。例如:

reg[23:0] rand;
rand=$random % 60; //产生一个在 -59—59范围的随机数

产生0~59之间的随机数,例如:

reg[23:0] rand;
rand={$random} % 60; //通过{}产生0—59范围的随机数

产生在min, max之间随机数,例如:

reg[23:0] rand;
rand = min+{$random}%(max-min+1);

因为2位信号输入的取值范围是0~3,所以我们代码里面这样写({$random} % 4)。在testbench中,需要按照一定顺序给输入信号赋值。在lab2_tb中,我们可以通过延迟赋值,然后再次延迟赋值,来完成赋值。因为赋值时采用随机数,所以每次编写的语句是相同的。Verilog HDL中提供了repeat语句,用来减少人工输入。

3. 点击Assignments --> Settings,然后选中Simulation栏,Tool name选择ModelSim-Altera,然后选择新建Test Bench文件,如图2.22所示的步骤。

图2.22选择新建Test Bench文件

​4. 按照图2.23所示的步骤选择mux4x1_tb.v文件,点击Add进行添加,然后点击OK。

图2.23 添加Test Bench文件mux4x1_tb.v

  1. 这样就可以在Test Bench看到添加的mux4x1_tb.v文件,点击OK ,如图2.24所示。添加完成后,在Settings窗口点击Apply和OK,然后将其关闭。

图2.24 Test Bench文件添加完成

  1. 在Quartus Prime中选择菜单项Tools --> Run Simulation Tool --> RTL Simulation,即可调用ModelSim工具进行仿真,如图2.25所示。

图2.25 运行Simulation Tool

  1. 运仿真结果如图2.26所示(点击Zoo Full(F)图标显示全部波形)。

图2.26 ModelSim 仿真结果

  1. 从2.26中的波形图可以看出:

    a. 当sel=00时,out为in1的输入值;

    b. 当sel=01时,out为in2的输入值;

    c. 当sel=10时,out为in3的输入值;

    d. 当sel=11时,out为in4的输入值;

    结果与预期一致,说明我们的4位四选一数据选择器功能已实现。

2.5.3 引脚分配、全编译与烧录

关于引脚分配信息可以查看DE1-SoC_v.5.1.3_HWrevF.revG_SystemCD\UserManual\DE1-SoC_User_manual.pdf第 25、26页或者E:\CD_Package\01-DE1-SoC\DE1-SoC_v.5.1.3_HWrevF.revG_SystemCD\Schematic\DE1-SoC.pdf的第3页。 

这里,in1到 in4以及sel0和sel1可以通过拨码开关SW0到SW9来控制,s0到s3信号分别输出到LEDR0和LEDR1。

  1. 点击Quartus软件工具栏的Processing --> Start Compilation或点击

    image-20210603145755433

    按钮编译工程,编译完成后,如图2.27所示。

    图2.27 编译Verilog HDL代码

    此外还可以看到在output_files文件夹中生成了lab2.sof文件,如图2.28所示。

    图2.28 编译生成lab2.sof文件

  2. 使用上一步中编译生成的lab2.sof文件对FPGA进行编程。给DE1-SOC开发板供电开机,点击Quartus软件工具栏的Tools --> Programmer或点击

    image-20210603150014201

    按钮打开Programmer窗口,如图2.29所示。

    图2.29 Programmer窗口

  3. 点击Hardware Setup...打开Hardware Setup窗口,在Currently selected hardware的下拉框中选择"USB-Blaster",点击Close,如图2.30所示。

    图2.30 Hardware Setup窗口

  4. 点击Auto Detect按钮,在弹出的Select Device窗口中,选择5CSEMA5(DE1-SOC开发板上的FPGA器件为Cyclone V 5CSEMA5F31C6),并点击OK,如图2.31所示。

    图2.31 选择5CSEMA5器件

    在弹出的Quartus Prime提示窗口中,点击Yes

    图2.32 提示弹窗

    然后在Programmer窗口会出现SOCVHPS和FPGA两个器件,如图2.33所示。

    图2.33 Programmer窗口出现SOCVHPS和FPGA两个器件

  5. 左键单击选中5CSEBA6器件,然后点击Change File按钮,添加mux4x1.sof文件,添加完成后如图2.34所示。

图2.34 添加lab2.sof文件

  1. 勾选Program/Configure,点击Start按钮,烧录lab2.sof文件,如图2.35所示。

    图2.35 开始烧录

2.5.4 实验现象观察
  1. 在lab2中,使用的SW、LEDR如下图所示。

    图2.36 lab2中SW、LEDR对应关系

  2. 通过切换滑动开关SW9-0到 up或 down 位置,观察LEDR1-0的状态来测试设计的功能。

    a. 当sel=00时,out为in1的输入值;

    b. 当sel=01时,out为in2的输入值;

    c. 当sel=10时,out为in3的输入值;

    d. 当sel=11时,out为in4的输入值;

    结果与预期一致,说明我们的4位四选一数据选择器功能已实现。

2.6 实验小结

本章通过介绍1位二选一数据选择器,1位四选一数据选择器和4位四选一数据选择器的原理与设计,让读者学会如何通过门级结构描述和行为描述去实现特定功能的电路,然后还通过实验的实战演练,让读者学会编写仿真代码对电路进行仿真验证以及如何将设计下载到板卡进行实操验证。

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

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

相关文章

238.除以自身以外数组的乘积

给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度内完…

Mac连接U盘后怎么读取 Mac连接U盘后怎么取消只读模式

在使用Mac电脑时,连接U盘是一项常见的需求。无论是传输文件还是备份数据,正确地读取U盘对于Mac用户至关重要。然而,当连接的U盘格式为NTFS时,在Mac中进行数据编辑会遇到一些困难。下面我们来看看Mac连接U盘后怎么读取,…

进程线程(一.2)

进程与线程(一) 并发编程并发与并行高并发 进程特征什么是进程?线程?进程与程序的区别进程与线程区别进程的五状态进程的种类 查看进程命令ps auxps axjpstreekill 进程的创建fork函数fork总结vfork函数fork与vfork区别 获取进程I…

传输协议TCP-原理部分

传输控制协议TCP(Transmission Control Protocol)一种基于连接的可靠的稳定的无重复的传输协议。 1、TCP头部信息 TCP协议头部信息如下: 一共占用20个字节 16位源端口号:发送进程的主机端口16位目的端口号:接收主机…

LAMP网络服务架构

目录 LAMP 网站服务架构 LAMP的组成部分 LAMP的构建顺序 安装论坛 0.电脑已编译安装Apache,MySQL,PHP 1.创建数据库,并进行授权 2.上传论坛压缩包到 /opt ,并解压 3.上传站点更新包 4.更改论坛目录的属主 5.浏览器访问验证 LAMP 网…

RSA密钥生成、加解密代码

背景介绍 RSA公钥加密算法是1977年由罗纳德李维斯特(Ron Rivest)、阿迪萨莫尔(Adi Shamir)和伦纳德阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA…

强化学习(一) 基本概念和赌博机问题

文章目录 什么是强化学习强化学习的两个基本特征强化学习的其它特征强化学习不同于有监督学习强化学习不同于无监督学习强化学习不同于进化方法强化学习的独特挑战强化学习典例 强化学习的要素强化学习的适用范围强化学习学术主线解决强化学习问题的一般框架赌博机两个影响因素…

SiT : Self-supervised vision Transformer

从NLP Transformer中借鉴而来的视觉 Transformer 在使用大规模监督数据或某种形式的协同监督(例如教师网络)进行预训练时已被证明是有效的。这些经过监督预训练的视觉Transformer在下游任务中通过最小的改动就能取得出色的结果。 随着监督预训练&#x…

告别盲目推广!Xinstall二维码携参技术,让App运营更精准高效

在移动互联网时代,App推广和运营已成为每个开发者必须面对的重要任务。然而,如何精准地定位目标用户,提高转化率和用户留存率,成为了摆在每个开发者面前的难题。今天,我们就来谈谈如何通过Xinstall二维码携参技术&…

AzSubEnum:针对Azure服务的子域名枚举查询工具

关于AzSubEnum AzSubEnum是一款专门为Azure服务量身定制的子域名枚举查询工具,该工具旨在帮助广大研究人员仔细搜索和识别与各种Azure服务相关的子域名信息。 通过结合查询技术和语句,AzSubEnum能够深入分析Azure的域名架构,并系统地探测和收…

Python使用trule库画小猪佩奇

在这篇博客中,我将向大家展示如何使用Python的Turtle模块来绘制一个可爱的小猪佩奇。这个项目不仅可以帮助你熟悉Turtle绘图,还可以让你在编程的过程中享受到绘画的乐趣。 并非百分百原创,有部分参考其他博主,请理性对待&#xff…

小学数学出题器-Word插件-大珩助手

Word大珩助手是一款功能丰富的Office Word插件,旨在提高用户在处理文档时的效率。它具有多种实用的功能,能够帮助用户轻松修改、优化和管理Word文件,从而打造出专业而精美的文档。 【新功能】小学数学出题器 1、实现了难度设定;…

怎么控制员工电脑的文件外发,六个控制文件外发的小窍门你必须了解

控制员工电脑的文件外发是企业信息安全管理中的重要环节,旨在防止敏感数据泄露、保护知识产权和维护商业秘密。 企业可以通过多种技术和管理措施相结合的方式来达到这一目的,确保既有效控制文件外发风险,又不影响正常的业务运作和员工工作效…

文献阅读:GCNG:用于从空间转录组数据推断基因相互作用的图卷积网络

文献介绍 「文献题目」 GCNG: graph convolutional networks for inferring gene interaction from spatial transcriptomics data 「研究团队」 Ziv Bar-Joseph(美国卡内基梅隆大学) 「发表时间」 2020-12-10 「发表期刊」 Genome Biology 「影响因子…

python 贪心算法(Greedy Algo)

贪婪是一种算法范式,它逐步构建解决方案,始终选择提供最明显和直接收益的下一个部分。贪婪算法用于解决优化问题。 如果问题具有以下属性,则可以使用贪心法解决优化问题: 每一步,我们都可以做出当前看来最好的选择&…

3d网渲100比本地渲染快吗?渲染100邀请码1a12

3D网渲是一种基于云计算的技术,它将渲染工作交由云端进行,以网渲平台渲染100为例,比起本地渲染,它有以下一些优势。 1、本地渲染受硬件限制,只能一台电脑渲染一张图,而渲染100有充足的服务器数量&#xf…

QT 音乐播放器【一】 显示音频级别指示器

文章目录 效果图概述代码总结 效果图 概述 QMediaPlayer就不介绍了,就提供了一个用于播放音频和视频的媒体播放器 QAudioProbe 它提供了一个探针,用于监控音频流。当音频流被捕获或播放时,QAudioProbe 可以接收到音频数据。这个类在需要访问…

C/C++动态内存管理(new与delete)

目录 1. 一图搞懂C/C的内存分布 2. 存在动态内存分配的原因 3. C语言中的动态内存管理方式 4. C内存管理方式 4.1 new/delete操作内置类型 4.2 new/delete操作自定义类型 1. 一图搞懂C/C的内存分布 说明: 1. 栈区(stack):在…

计组雨课堂(5)知识点总结——备考期末复习(xju)

在汇编语言源程序中,“微指令语句"不是常见的组成部分,因为微指令通常是在硬件层面进行处理的,而不是在汇编语言层面。因此,不属于汇编语言源程序的是"微指令语句”。在汇编语言中,组成指令语句和伪指令语句…

直方图滤波、粒子滤波、卡尔曼滤波

三者都是基于贝叶斯滤波。 粒子滤波和直方图滤波不要求高斯分布,可解决非线性 卡尔曼滤波要求高斯分布且线性。扩展卡尔曼滤波为了解决非线性问题,利用泰勒展开进行一阶近似。 直方图滤波就是贝叶斯滤波的直观实现。自动驾驶定位算法-直方图滤波(Hist…