数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)

注: 资料都是基于网上一些博客分享和自己学习整理而成的

Verilog

1. 数据类型

Verilog一共有19种数据类型
基础四种数据类型:reg型,wire型,integer型,parameter型

  1. reg型
      reg类型是寄存器数据类型的关键字。寄存器是数据存储单元的抽象,通过赋值语句可以改变寄存器存储的值,其作用相当于改变触发器存储器的值。reg类型常用在always模块中指定信号,代表触发器。在always块内被赋值的每一个信号都必须定义为reg型,即赋值操作符的右端变量必须是reg型。通常在设计中要由always模块通过使用行为描述语句来表达逻辑关系。
    reg 型信号的定义格式如下:
    reg [n-1:0] 数据名 1,数据名2,……数据名N; 共定义了N个寄存器变量,每个寄存器的位宽为n。
  2. wire型
      wire类型是可以看成是单向的物理连线,通过wire连接输入输出的情况。Verilog程序模块中输入、输出信号类型默认为wire型。wire型信号可以用做方程式的输入,也可以用做“assign”语句或者实例元件的输出。
    wire 型信号的定义格式如下:
    wire [n-1:0] 数据名 1,数据名2,……数据名N; 共定义了N条线,每条线的位宽为n。
  3. integer型
      integer也是一种寄存器数据类型,integer 类型的变量为有符号数,而 reg 类型的变量则为无符号数,除非特别声明为有符号数。 integer 的位宽为宿主机的字的位数,但最小为32位,用integer的变量都可以用
    reg 定义。
  4. parameter型
      parameter 定义常量,即用parameter来定义一个标志符表示一个常数。采用该类型可以提高程序的可读性和可维护性。
    parameter 型信号的定义格式如下:
    parameter 参数名 1 = 数据;

其他数据类型: large 型、medium 型、small 型、scalared 型、time 型、tri 型、trio 型、tril 型、triand 型、trior 型、trireg 型、vectored 型、wand 型和 wor 型。

2. 常用关键字

关键字含义
module模块开始定义
input输入端口定义
output输出端口定义
inout双向端口定义
parameter信号的参数定义
wirewire信号定义
regreg信号定义
always产生reg信号语句的关键字
assign产生wire信号语句的关键字
begin语句的起始标志
end语句的结束标志
posedge/negedge时序电路的标志
caseCase语句起始标记
defaultCase语句的默认分支标志
endcaseCase语句结束标记
ifif/else语句标记
elseif/else语句标记
forfor语句标记
endmodule模块结束定义

3. 运算符

类型运算符
算术运算符+,-,×,/,%
赋值运算符=,<=
关系运算符>,<,<=,>=
逻辑运算符&&,||,!
条件运算符(?:)三目运算符
位运算符|,^,&,^~
移位运算符>>,<<
拼接运算符{ }
在这里插入图片描述

特别的 缩减运算:是对单个操作数进行或与非递推运算,最后的运算结果是一位的二进制数。 位运算则是对操作数的相应位进行与或非运算,操作数是几位数则运算结果也是几位数。

缩减运算的具体运算过程是这样的:

  1. 第一步先将操作数的第一位与第二位进行或与非运算,
  2. 第二步将运算结果与第三位进行或与非运算,
  3. 依次类推,直至最后一位。

4. if-else

设计要点

  1. 条件语句必须在过程块中使用。所谓过程块语句是指由initial、always引导的执行语句
    集合
    。除了这两个语句块引导的begin end块中可以编写条件语句外,模块中的其他地
    方都不能编写。
  2. if 语句中的表达式一般为逻辑表达式或者关系表达式。系统对表达式的值进行判断;
    若为0,z,X;按照假处理;若为1按照真处理,执行指定的语句;
  3. if(a)等价于 if(a == 1);
  4. if语句可以·嵌套·使用
  5. end总是与离它最近的一份else配对。

注:如果if语句使用不当,没有else, 可能会综合出来意想不到的锁存器。在always 块里面,如果在给定的条件下变量没有被赋值,这个变量将会保持原来的值,也就是说会生成一个锁存器。

5. case

case 语句检查给定的表达式是否与列表中的其他表达式之一相匹配,并据此进行分支。 它通常用于实现一个多路复用器。 如果要检查的条件很多,if-else结构可能不合适,因为它会综合成一个优先编码器而不是多路复用器。

特别的: casez与casex语句是case语句的两种变体, 在写testbench时用到。综合工具并不会认识x,z这个状态,所以综合出来的电路是一样case类型的。

  1. 在case语句中,敏感表达式中与各项值之间的比较是一种全等比较,每一位都相同才认为匹配。
  2. 在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。
  3. 在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。

Verilog case 语句以 case 关键字开始,以 endcase 关键字结束。在括弧内的表达式将被精确地评估一次,并按其编写顺序与备选方案列表进行比较,与给定表达式匹配的备选方案的语句将被执行。一块多条语句必须分组,并在 begin 和 end 范围内。

// Here 'expression' should match one of the items (item 1,2,3 or 4) 
case (<expression>) 
case_item1 :  <single statement> 
case_item2, 
case_item3 :  <single statement> 
case_item4 :  begin 
<multiple statements> 
end 
default   
endcase 
: <statement> 

如果所有的 case 项都不符合给定的表达式,则执行缺省项内的语句,缺省语句是可选的,在case 语句中只能有一条缺省语句。case语句可以嵌套。 如果没有符合表达式的项目,也没有给出缺省语句,执行将不做任何事情就退出case块。 同 if else,case 应当加上default,以避免锁存器出现,如果case的情况是完备的,可以不加。

6. for 循环 && generate 语句

在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别。 for 循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源。 简单的说就是:for 语句循环几次,就是将相同的电路复制几次,因此循环次数越多,占用面积越大,综合就越慢。配合 generate可以用for语句进行相同模块的多次例化

Verilog 中的 generate 语句常用于编写可配置的、可综合的RTL的设计结构。它可用于创建
模块的多个实例化,或者有条件的实例化代码块。

module top(input [8*4-1 : 0] din0, input [8*4-1 : 0] din1,output logic [8*4-1 : 0] dout0,output logic [8*4-1 : 0] dout1
);genvar i; //genvar 循环变量名,只能用在generate(多例化语句)中//例化出来的模块名编译器自动用begin后面的名字来区分,比如上面这个例子编译后模块名叫inst[0]、inst[1]......generate for(i=0; i<4; i++) begin:instsub u_sub_0 (//output.dout(dout0[i*8 +: 8]),//input.din(din0[i*8 +: 8]));sub u_sub_1 (//output.dout(dout1[i*8 +: 8]),//input.din(din1[i*8 +: 8]));endendgenerate
endmodule

7. function 函数 && tesk 任务

这两个东西经常放在一起判别

function

function <返回值的类型或范围> <函数名>
<端口说明语句>
<变量类型说明>
begin
<语句>

end
endfunction

// 示例
function [7:0] getbyte ; //默认 getbyte为同名返回寄存器input [15:0] address ; //这个也可以放在声明处begin <说明语句>                     //从地址字节提取低字节的程序 getbyte = result_expression ;  //把结果赋给函数的返回字节 end 
endfunction 

说明
① <返回值的类型或范围>这一项为可选项,如果缺失,则返回值为一位寄存器类型数据
② 从函数的返回值:函数的定义蕴含声明了与函数同名、位宽一致的内部寄存器。例子中,
getbyte被赋予的值就是调用函数的返回值。
③ 函数的调用:函数的调用是通过将函数作为表达式中的操作数来实现的。其调用格式:
<函数名> (<表达式> ,…, <表达式>); 其中函数名作为确认符。下面的例子中,两次调用getbyte,把两次调用的结果进行位拼接运算,以生成一个字。
word = control ? {getbyte(msbyte),getbyte(lsbyte)} : 8’d0 ;
④ 函数使用的规则
1 函数定义不能包含有任何的时间控制语句,即任何用#、@、wait来标识的语句。
2 函数不能调用“task”。
3 定义函数时至少要有一个输入参数。
4 在函数的定义中必须有一条赋值语句给函数中与函数名同名、位宽相同的内部寄存器赋值。
5 verilog中的function只能用于组合逻辑;

tesk

任务就是一段封装在“task-endtask”之间的程序。任务是通过调用来执行的,而且只有在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会执行的。 调用某个任务时可能需要它处理某些数据并返回操作结果,所以任务应当有接收数据的输入端和返回数据的输出端。另外,任务可以彼此调用,而且任务内还可以调用函数。

任务定义的形式如下

task task_id;  // task 标志着一个 任务定义结构的开始;task_id 是任务名;[declaration]  //可选项 declaration 是端口声明语句和变量声明语句,任务接收输入值和返回输出值就是通过此处声明的端口进行的;procedural_statement  //procedural_statement 是一段用来完成这个任务操作的过程语句,如果过程语句多于一条,应将其放在语句块内; 
endtask //endtask 为任务定义结构体结束标志。下面给出一个任务定义的实例。 
task task_demo;  //任务定义结构开头,命名为 task_demo               input  [7:0] x,y;   //输入端口说明     output [7:0] tmp;   //输出端口说明        if(x>y)  //给出任务定义的描述语句               tmp = x;  else  tmp = y; 
endtask 

注:任务中不能出现 initial 语句和 always 语句语句,但任务调用语句可以在 initial 语句 和 always 语句中使用
其语法形式如下:task_id[(端口 1, 端口 2, …, 端口 N)]; 其中 task_id 是要调用的任务名,端口 1、端口 2,…是参数列表。
参数列表给出传入任 务的数据(进入任务的输入端)和接收返回结果的变量(从任务的输出端接收返回结果)。**任务调用语句中,参数列表的顺序必须与任务定义中的端口声明顺序相同。**任务调用语句是过程性语句,所以任务调用中接收返回数据的变量必须是寄存器类型。

例:通过 Verilog HDL 的任务调用实现一个 4 比特全加器。 
module EXAMPLE (A, B, CIN, S, COUT);  input [3:0] A, B;  input CIN;  output [3:0] S;  output COUT;  reg [3:0] S;  reg COUT;  reg [1:0] S0, S1, S2, S3;  task ADD;  input A, B, CIN;  output [1:0] C; reg [1:0] C;  reg S, COUT;  begin S = A ^ B ^ CIN;  COUT = (A&B) | (A&CIN) | (B&CIN);  C = {COUT, S};  end  endtaskalways @(A or B or CIN) begin  ADD (A[0], B[0], CIN, S0);  ADD (A[1], B[1], S0[1], S1);  ADD (A[2], B[2], S1[1], S2);  ADD (A[3], B[3], S2[1], S3);  S = {S3[0], S2[0], S1[0], S0[0]};  COUT = S3[1];  end  
endmodule

8. 过程块 initial && always

过程块是行为模型的基础,过程块有两种: initial 块,只能执行一次;always 块,循环执行

initial 块

initial块常用于测试文件和虚拟模块的编写,用来产生仿真测试信号和设置信号记录等仿真环境。用initial语句来生成激励波形作为电路的测试仿真信号。一个模块中可以有多个initial块,它们都是并行运行的。

always 块

边沿触发的always 块常常描述时序逻辑,如果符合可综合风格要求可用综合工具自动转换为表示时序逻辑的寄存器组和门级逻辑,而电平触发的always 块常常用来描述组合逻辑和带锁存器的组合逻辑,如果符合可综合风格要求可转换为表示组合逻辑的门级逻辑或带锁存器的组合逻辑。一个模块中可以有多个always块,它们都是并行运行的。

9. Verilog中的可综合和不可综合语句

Verilog是描述硬件电路的,一个语言描述的程序映射成实际硬件电路中的结构时时可实现即为可综合语句。

task和function都是可综合的,不过综合出来的都是组合逻辑电路。要想可综合,task和function内部必须是组合逻辑。 循环语句(repeat、while、for)也可以用于可综合电路设计,当采用循环语句进行计算和赋值操作时,可以综合得到逻辑电路。

Verilog中可综合语句: input、output、parameter、reg、wire、always、assign、begin…end、case、posedge、negedge、or、and、default、if、function、generate、integer、`define,while、repeat 、for (while、repeat循环可综合时,要具有明确的循环表达式和循环条件,for可综合时也要有具体的循环范围)

不可综合语句: initial、fork… join、wait、time、real、display、forever。

要保证Verilog HDL 赋值语句的可综合性,应注意以下要点:

(1)不使用initial。
(2)不使用#10。 以#开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。 如:a=#10 b; 这里的#10是用于仿真时的延时,在综合的时候综合工具会忽略它。也就是说,在综合的时候上式等同于a=b;
(3)不使用循环次数不确定的循环语句,如forever、while等。
(4)不使用用户自定义原语(UDP元件)。
(5)尽量使用同步方式设计电路。
(6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。
(7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。
(8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。
(9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。
(10)不能在一个以上的always 过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。
(11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。
(12)避免混合使用上升沿和下降沿触发的触发器。
(13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。
(14)避免在case语句的分支项中使用x值或z值。

10. 阻塞/非阻塞

阻塞赋值

阻塞赋值使用的赋值运算符为“=”。阻塞赋值的过程是立刻执行的,即阻塞赋值运算符右侧表达式求值完后立刻会更新至运算符左侧,并且这个执行的过程不受其他语句执行的影响,其后的语句只有当前的赋值操作执行完成后才能顺序执行。

非阻塞赋值

非阻塞赋值使用的赋值运算符为“<=”。非阻塞赋值执行过程为:在当前仿真时间槽(timeslot)开始分析计算获得右侧表达式的值,在当前时间槽执行结束时更新左侧表达式的值,在右侧表达式分析计算和左侧表达式被更新之间,任何其他事件都可以执行,同时也有可能修改已经计算完成的右侧表达式的值,即非阻塞赋值的过程不影响其他语句的执行。

11. Verilog 模块编程的8个原则:

  1. 时序电路建模时,用非阻塞赋值。
  2. 锁存器电路建模时,用非阻塞赋值。
  3. 用always块建立组合逻辑模型时,用阻塞赋值。
  4. 在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值。
  5. 在同一个always块中不要既用非阻塞赋值又用阻塞赋值。
  6. 不要在一个以上的always块中为同一个变量赋值。
  7. 用$strobe 系统任务来显示用非阻塞赋值的变量值。
  8. 在赋值时不要使用#0延时。

12. 时间尺度 timescale

timescale 是 Verilog HDL 中的一种时间尺度预编译指令,它用来定义模块的仿真时的时间
单位和时间精度。格式如下:
` timescale<时间单位>/<时间精度>
注:

  1. 用于说明仿真时间单位和时间精度的数字只能是1、10、100,不能为其它的数字。
    而且,时间精度不能比时间单位还要大,最多两则一样大。`timescale 100ns/100ns
  2. 在编译过程中,timescale 指令影响这一编译器指令后面所有模块中的时延值,直至遇到另一个timescale 指令resetall 指令。 在verilog 中是没有默认timescale的,一个没有指定timescale的verilog模块就有可能错误的继承了前面编译模块的无效timescale参数。

13. 存储器设计

Verilog 中提供了两维数组来帮助我们建立内存的行为模型。具体来说,就是可以将内存定义为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问。这样的数组的定义方式如
数组(内存)定义
reg [wordsize : 0] array_name [0 : arraysize];
例如:
reg [7:0] my_memory[0:255];
其中 [7:0] 是内存的宽度(位宽),而 [0:255] 则是 内存的深度(也就是有多少存储单元),其中宽度为8位,深度为256。地址0对应着数组中的0存储单元。
写操作: 如果要存储一个值到某个单元中去,可以这样做: my_memory[address] = data_in;
读操作: 而如果要从某个单元读出值,可以这么做: data_out = my_memory[address];

14. 三态门设计

三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑 1)或低电平(逻辑 0),又可以保持特有的高阻抗状态,高阻态相当于隔断状态(电阻很大,相当于开路)。

//下面是三态门的 Verilog 代码实现: 
module Tri( 
input din, 
input en, 
output reg dout ); 
always @(din or en) if (en) dout <= din; else dout <= 1'bz; 
// 数据流描述  assign dout = en ? din : 1'bz; 
endmodule

15. 原语

原语,即primitive。不同的厂商,原语不同;同一家的FPGA,不同型号的芯片,可以也不一样;原语类似最底层的描述方法。 使用原语的好处,可以直接例化使用,不用定制IP;即可通过复制原语的语句,然后例化IP,就可使用。

常见原语:

  1. IBUF 和 IBUFDS(IO)
    IBUF 是输入缓存,一般vivado会自动给输入信号加上,IBUFDS是IBUF的差分形式,支持低压差分信号(如LVCMOS、LVDS等 )。 在 IBUFDS中,一个电平接口用两个独特的电平接口(I和IB)表示。一个可以认为是主信号,另一个可以认为是从信号。主信号和从信号是同一个逻辑信号,但是相位相反。
  2. IDDR(Input/Output FuncTIons)
    设计用来接收DDR数据,避免额外的时序复杂性。
  3. IBUFG 和 IBUFGDS(IO)
    IBUFG 即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错。 IBUFGDS是IBUFG的差分形式支持低压差分信号(如LVCMOS、LVDS等 )

System Verilog (还不熟悉暂时写这些)

1. 数据类型

四值变量:(0、1、x、z)四种状态
四值逻辑类型:integer、reg、logic、reg、net-type(如wire、tri);
SV 并不太常用变量类型是wire(assign语句中),还有reg(initial和always语句中)。

logic 用的比较多, 可以被连续赋值语句驱动,可用在assign、initial、always语句中。在SystemVerilog 中,可以在过去verilog 中用 reg 型或是wire型的地方用logic 型来代替。

二值变量:(0、1) 两种状态
二值逻辑类型:byte、shortint、int、longint、bit。

四值变量与二值变量的特性:
四值变量的默认初始值为x,二值变量的默认初始值为0,在initial中可以直接使用~clk变成1,但是如果是logic,必须设置初值为0、或者1。将四值变量赋值给二值变量,x和z状态会转变为0;

符号数分类
有符号类型:byte、shortint、int、longint、integer。
无符号类型:bit、logic、reg、net-type(如wire、tri)。

对于转换方式,可以分为隐式转换和显式转换。显式转换又可以分为静态转换和动态转换
静态转换:unsigned’(signed);注意单引号。
动态转换:$cast(tgt,src)

2. 类class

在SystemVerilog 中,class 也是一种类型(type),你可以把类定义在program、module、package 中,或者在这些块之外的任何地方定义。类可以在程序或者模块中使用。 类可以被声明成一个参数(方向可以是input、output、inout或者ref),此时被拷贝的是这个对象的句柄,而不是这个对象的内容。

3. 结构体

Verilog 中没有结构体,用户常常以相同的字符开始或结尾来命名信号名,以此表示一组相
关的信号。 SystemVerilog 中增加了类似 C 语言中的结构体类型,可以方便的表示一组相关的信号。结构体表示如下:

struct { int a,b;        opcode_t  opcode;logic[23:0]  address; bit error;  
} Instruction_Word; 

4. 构造函数

new() 的作用有三点:
1.例化(创建)对象,也就是申请新的内存块来保存对象的变量
2.初始化变量(二值→0;四值→x)
3.返回句柄
class 只有经过了new()函数才真正开辟了内存,否则只是一个空的、没有实际存在。

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

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

相关文章

新手学习Python第十一天,准备今天全部学完系列

——早上07&#xff1a;30到达实验室&#xff0c;开始学习&#xff0c;中秋小长假已过&#xff0c;心已收—— 一、__new__与__init__创建对象的过程 class Person(object):def __new__(cls,*args,**kwargs): *表示位置参数&#xff0c;**表示关键字参数print(__new__被调用…

快来尝尝,超赞的食家巷一窝丝

一窝丝&#xff0c;这个名字听起来就充满了诗意和神秘。当你第一次见到它时&#xff0c;定会被它那精致的外形所吸引。纤细如丝&#xff0c;盘绕在一起&#xff0c;宛如一个精美的艺术品。那丝丝缕缕&#xff0c;散发着淡淡的麦香味&#xff0c;仿佛在诉说着古老的故事。 制作食…

Imagen论文简要解析

Imagen论文简要解析 文章 Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding 具有深度语言理解能力的逼真文本到图像扩散模型 https://arxiv.org/pdf/2205.11487 摘要 文章介绍了一种名为Imagen的文本到图像扩散模型&#xff0c;该模型在理…

9.12日常记录

1.extern关键字 1&#xff09;诞生动机:在一个C语言项目中&#xff0c;需要再多个文件中使用同一全局变量或是函数&#xff0c;那么就需要在这些文件中再声明一遍 2&#xff09;用于声明在其他地方定义的一个变量或是函数&#xff0c;在当前位置只是声明&#xff0c;告诉编译器…

【鸿蒙 HarmonyOS NEXT】popup弹窗

一、背景 给组件绑定popup弹窗&#xff0c;并设置弹窗内容&#xff0c;交互逻辑和显示状态。 常见场景&#xff1a;点击按钮弹出popup弹窗&#xff0c;并对弹窗的内容进行交互逻辑处理&#xff0c;如&#xff1a;弹窗内点击跳转到其他页面 二、给组件绑定Popup弹窗 PopupOp…

【Python报错已解决】 TypeError: Descriptors cannot not be created directly

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Android RecycleView 深度解析与面试题梳理

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 引言 在 Android 开发中&#xff0c;列表和网格布局是非常常见的界面元素&#xff0c;它们用于展示大量数据集合。RecyclerView 是 Android 提…

深度学习|损失函数:网络参数优化基准

文章目录 引言均方误差计算示例矩阵形式代码实现 交叉熵误差计算示例代码实现 绝对误差计算示例代码实现 Hinge Loss计算示例代码实现 Kullback-Leibler Divergence计算示例代码实现 结语 引言 在上文「深度学习&#xff5c;模型训练&#xff1a;手写 SimpleNet」中&#xff0…

Nodejs+vue+Express游戏分享网站的设计与实现 7a2s2

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式&#xff0c;开发软件有很多种可以用&#xff0c;本次开发用到的软件是vscode&#xff0c;用到的数据库是…

Flink垃圾图片分类优胜奖比赛攻略_贪吃的小香猪-148队

关联比赛: Apache Flink极客挑战赛——垃圾图片分类 一. 赛题背景分析及理解 本次竞赛要求结合大数据计算引擎Flink和深度学习的计算平台Intel Analytics Zoo应用在图片识别场景&#xff0c;进行垃圾图片的分类。 目标&#xff1a;对提供的100类大约6000张垃圾图片进行模型训…

五星级可视化页面(30):本系列最后一期,压轴出场。

不知不觉分享了30期高品质的五星级可视化大屏界面&#xff0c;该系列文章也该收尾了&#xff0c;本期为大家分享最后一批界面&#xff0c;我们下一个系列专辑见。

A股上市公司企业创新能力、质量、效率-原始数据+dofile+结果(2006-2023年)

上市公司的创新能力体现在其不断研发新技术、新产品和服务的能力上&#xff0c;这是企业保持竞争优势的关键&#xff1b;质量则是指公司所提供的产品或服务达到高标准的程度&#xff0c;高质量是赢得客户信任和市场份额的基础&#xff1b;效率则涵盖了生产运营中的资源利用程度…

智能车镜头组入门(一)车模的选择

这篇文章&#xff0c;我会简单的介绍下车模的、轮胎和负压的选择 今年的镜头组是自制车模&#xff0c;这比较考验学校之前参赛的经验。我们选择了某飞的mini车模。提供智能车方案的无非就两家&#xff0c;某飞和某邱&#xff0c;我们学校之前都用的是某飞的&#xff0c;在某飞…

鸿蒙Harmony应用开发,数据驾驶舱 项目结构搭建

对于一个项目而言&#xff0c;在拿到我们的开发任务后&#xff0c;我们最重要的就是技术的选型。选型定下来了之后我们便开始脚手架的搭建&#xff0c;然后开始撸代码&#xff0c;开搞. 首先我们需要对一些常见依赖库的引入 我们需要再oh-package.json5的dependencies节点下面…

leetcode:最高乘法得分

用auto可以过 class Solution { public:long long maxScore(vector<int>& a, vector<int>& b) {int n b.size();vector<vector<long long>> memo(4,vector<long long>(b.size(), LLONG_MIN));auto dfs [&](auto&& dfs, i…

Qt安卓开发连接手机调试(红米K60为例)

1.前置条件 本人默认您已经完成Qt安卓环境的配置&#xff0c;若还没配置请参考链接文章&#xff1a;【Qt】最详细教程&#xff0c;如何从零配置Qt Android安卓环境_qt_七夕先生-开放原子开发者工作坊。准备一台目前主流在用的手机&#xff0c;其实自己用的就行(只要你不是某些…

LeetCode-137. 只出现一次的数字 II【位运算 数组】

LeetCode-137. 只出现一次的数字 II【位运算 数组】 题目描述&#xff1a;解题思路一&#xff1a;解题思路二&#xff1a;符号位一起判断。背诵版解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每…

CentOS7.9环境上NFS搭建及使用

Linux环境NFS搭建及使用 1. 服务器规划2. NFS服务器配置2.1 主机名设置2.2 nfs安装2.2.1 repo文件替换2.2.2 NFS服务安装 2.3 nfs配置2.4 服务查看2.5 资源发布2.6 配置nfs服务开机自启2.7 端口开放 3.应用服务器配置3.1 主机名设置3.2 nfs安装3.2.1 repo文件替换3.2.2 NFS服务…

XML映射器-高级查询结果映射

01-高级查询结果映射 emp表 dept表 02-多表关联查询映射 多对一映射 项目中Emp类的数据 项目中dept类的数据 想要多表查询需要建个公共类里面写入两个表中的属性,如下面方法 type里要写用到的类型,由于继承Emp所有Emp里面的属性直接写,column是写数据库的别字,property是写字…

WSL中使用AMBER GPU串行版

前提是已经安装过wsl 1 在 WSL 2 中启用 NVIDIA CUDA 参考在 WSL 2 上启用 NVIDIA CUDA | Microsoft Learn 注意&#xff1a;勿在 WSL 中安装任何 Linux 显示驱动程序。Windows 显示驱动程序将同时安装本机 Windows 和 WSL 支持的常规驱动程序组件。 2 在WSL2中配置Cuda 不安…