当前位置: 首页 > news >正文

FPGA(一)verilog语句基础

        Verilog 是一种硬件描述语言(HDL),常用于数字电路的设计、模拟和验证,特别是用于 FPGAASIC 的设计。Verilog 让设计者能够描述和模拟硬件系统的行为和结构,最终将其转化为硬件电路。

一、模块结构

        Verilog 中的设计是基于模块的,一个模块可以代表一个电路单元、一个功能模块或者整个系统。模块的基本结构如下:

/*module_name:模块的名称,自定义。input1, input2:输入端口,表示外部信号进入模块。output:输出端口,表示模块的输出信号。
*/
module module_name (input1, input2, output);// Module code hereendmodule

        Verilog 中的信号通常分为 输入(input)、输出(output)和 双向(inout)。输入是从外部传入模块的信号,输出是从模块传出的信号。 双向可作为输入或输出,通常用于双向信号,如总线。

1. 模块的结构

 举例1:二选一数据选择器的Verilog描述。

module MUX21a(a,b,s,y);input a,b,s;output y;assign y=(s?a:b);
endmodule

 举例2:边沿D触发器的Verilog描述。

module D_flip_flop (input clk,      // 时钟信号input D,        // 数据输入output reg Q    // 数据输出
);always @(posedge clk) begin  // 每当时钟上升沿触发Q <= D;  // 非阻塞赋值end
endmodule

 2. 模块的实例化

        是 Verilog 语言中的一个重要概念,它允许你在一个顶层模块中创建和使用其他子模块。通过模块实例化,你可以将设计中的一个功能(即模块)“复制”并在另一个模块中使用,从而实现模块化设计。

//1. 定义了一个D触发器的模块
module D_flip_flop(input CLK,         // 时钟信号input D,           // 数据输入output reg Q       // 数据输出
);always @(posedge CLK) beginQ <= D;  // 在时钟的上升沿,将 D 的值传递给 Qend
endmodule

module top_module(input clk,          // 时钟信号input d,            // 输入信号 dinput a,            // 输入信号 aoutput reg q        // 输出信号 q
);wire d1;            // OR 门的输出信号wire q1;            // 第一个 D 触发器的输出信号// OR 门逻辑:d1 = a | qassign d1 = a | q;// 第一个 D 触发器实例化DFF dff1 (.CLK(clk),       // 时钟信号.D(d1),          // 输入信号 d1.Q(q1)           // 输出信号 q1);// 第二个 D 触发器实例化DFF dff2 (.CLK(clk),       // 时钟信号.D(q1),          // 输入信号 q1.Q(q)            // 输出信号 q);endmodule

3. 原门

        原门(Primitive Gates) 是在硬件描述语言(如 Verilog)中用来描述基本逻辑功能的基本模块,它们通常对应于实际硬件中的逻辑门(如与门、或门、非门等)。这些门提供了最基础的逻辑运算,并且是构建更复杂逻辑电路的基础。在 Verilog 中,原门是直接使用 andornot 等关键字来描述的,不需要额外声明模块。

(1)与门:输出只有在所有输入都为1时才为1。

and (out, in1, in2);

(2)非门:输出为输入的反向。

not (out, in);

(3)或门:输出当至少有一个输入为1时为1。

or (out, in1, in2);

 (4)异或门:输出当输入不相同时为1。

xor (out, in1, in2);

 (5)同或门:输出当输入相同时为1。

xnor (out, in1, in2);

 (6)与非门:输出为与门输出的反向,即输入全为1时输出为0。

nand (out, in1, in2);

  (6)或非门:输出为或门输出的反向,即至少一个输入为1时输出为0。

nor (out, in1, in2);

二、数据类型  

        Verilog 支持几种基本数据类型:regwire。数据位宽如果不做说明的话,默认是1位。数据类型不做说明的话,默认是wire型的。

       1.  reg:用于存储数据的类型,通常用于描述存储元素。在 Verilog 中,reg 类型信号是用来存储数据的,通常用于描述时序逻辑(例如触发器、寄存器)。reg 可以是 单一值 或 多位数组,并且在 Verilog 中支持对数组进行定义和操作。

reg [7:0] my_array [0:3]; // 定义一个大小为 4 的数组,每个元素是 8 位
//my_array 是一个包含 4 个元素的数组,每个元素有 8 位宽度。你可以通过下标(0 到 3)访问数组中的各个元素。reg [3:0] matrix [0:2][0:2]; // 定义一个 3x3 的二维数组,每个元素是 4 位

        2.  wire:表示连线或信号的类型,常用于描述模块之间的连接。wire 类型是用于连接不同模块之间的信号,表示的是物理连接,它的值通常是由其他信号驱动的,并且不能存储数据。因此,wire 类型不适合用来描述时序逻辑或数组。它的主要用途是将信号从一个地方传递到另一个地方。

        但是wire 数组本身是可以定义的,但其用途通常仅限于表示并行的物理连接,而不是存储数据。但需要注意,不能通过 assignalways 语句来修改 wire 数组的元素,wire 数组只是用来传递信号。

wire [7:0] wire_array [0:3]; // 定义一个 4 元素的 wire 数组,每个元素 8 位宽

●综合示例:

module SimpleExample(input A, output B);wire X; // 定义一个 wire 类型的信号reg Y;  // 定义一个 reg 类型的信号,寄存器数据类型assign X = A; // 将输入 A 赋值给 Xalways @(A)    // 每当 A 改变时,执行以下语句Y = X;       // 将 X 的值赋给 Yassign B = Y;  // 将 Y 的值赋给输出 B
endmodule

三、时序与组合电路

Verilog 中有两种主要的电路模型:组合电路时序电路

        1. 组合电路:其输出仅依赖于当前输入,不考虑历史状态。通常使用 assign 语句(连续赋值语句)来描述,连续赋值语句总是处于激活状态,只要操作数有变化马上进行计算和赋值。

assign C = A & B; // C 是 A 和 B 的与运算

        2. 时序电路:其输出不仅依赖于当前输入,还依赖于过去的状态。通常使用 always 语句和触发器(如 flip-flop)来描述时序逻辑。

always @(posedge clk) // 每当时钟上升沿时Q <= D;             // 将 D 的值赋给 Q(非阻塞赋值)

四、always语句块

1. 特点

        (1)always语句本身不是单一的有意义的一条语句,而是和下面的语句一起构成一个语句块,称之为过程块。

        (2)过程块中的赋值语句称过程赋值语句。该语句块不是总处于激活状态,当满足激活条件时才能被执行,否则被挂起。

        (3)赋值目标必须是reg型。

 2. 激活条件

        其由敏感信号条件表决定,当敏感条件满足时过程块被激活。

        敏感条件有两种,一种是边沿敏感,一种是电平敏感。

always @ (posedge clk) beginQ <= D; // 时钟上升沿触发
end

 (1)边沿敏感

always @(posedge clk)  // 时钟的上升沿触发
always @(negedge clk)  // 时钟的下降沿触发

(2)电平敏感

        电平敏感意味着列表中的某个信号的电平变化(高或低)都会触发过程块的执行。

always @(a or b)  // 当 a 或 b 电平变化时触发
begin// 组合逻辑
end

3. assign 语句的区别

(1)

        使用assign 语句赋值时,赋值目标必须是wire类型。使用always语句赋值时,赋值目标必须是reg类型。

(2)

         always语句块中除了可以使用表达式赋值以外,还可以使用if,case等行为描述语句,还能够描述边沿变化,因此其功能比assign语句更强大(assign语句不能使用if等语句,也不能描述边沿变化) 

always @(posedge clk) beginif (reset) beginq <= 0;end else beginq <= d;end
end

(3)

        always语句块中只有一条语句时,begin和end可以省略。但是有多个语句时,就不可以省略。assign语句中没有begin和end。

4. 阻塞赋值和非阻塞赋值

        阻塞赋值(Blocking Assignment)和非阻塞赋值(Non-blocking Assignment)是两种不同的赋值方式,它们的行为在模拟过程(尤其是时序模拟)中有显著的不同。理解这两种赋值的区别对于正确设计时序逻辑和避免潜在的仿真错误至关重要。

(1)阻塞赋值

        阻塞赋值使用 = 操作符,它会在当前语句执行完毕后,立即将值赋给变量,并暂停继续执行后面的代码。换句话说,当前语句阻塞了后续语句的执行,直到赋值操作完成。

always @(posedge clk) begina = b;     // 阻塞赋值c = a;     // 等待上一个赋值完成后再执行
end

  执行过程:a = b; 会立即执行,并将 b 的值赋给 a。c = a; 会在 a = b; 完成之后才会执行,因此它会取到 a 的新值。

(2)非阻塞赋值

        非阻塞赋值使用 <= 操作符,它在赋值时并不会立即改变变量的值。相反,它会在当前时钟周期的末尾(即在所有语句都执行完后)才将值赋给变量。因此,非阻塞赋值允许在同一个时钟周期内并行更新多个变量,而不会互相阻塞。

always @(posedge clk) begina <= b;     // 非阻塞赋值c <= a;     // 同时执行,c 会在下一个时钟周期看到 a 的旧值
end

        执行过程:a <= b; 并不会立即改变 a 的值,而是将赋值操作推迟到时钟周期结束时。 c <= a; 也会推迟执行,且由于 a <= b; 是非阻塞的,c 会在下一个时钟周期看到 a 的旧值(即赋值前的值)。

★应用

        设计组合电路时常用阻塞赋值;设计时序电路时常用非阻塞赋值。但不是绝对的。 不能在一个always块中混合使用阻塞赋值和非阻塞赋值!!可能会导致一些难以察觉的错误和不一致的行为。

五、常见Verilog结构示例

1. 简单的与门(AND Gate)

module AND_gate (input A, B,    // 输入信号output C      // 输出信号
);assign C = A & B; // 组合逻辑,A 和 B 的与运算
endmodule

2. D触发器(D Flip-Flop)

module D_flip_flop (input clk,      // 时钟信号input D,        // 数据输入output reg Q    // 数据输出
);always @(posedge clk) begin  // 每当时钟上升沿触发Q <= D;  // 非阻塞赋值end
endmodule

3. 计数器(Counter)

module Counter (input wire [3:0] A,       // 输入信号 Ainput wire [3:0] B,       // 输入信号 Binput wire RST,           // 复位信号input wire CLK,           // 时钟信号input wire SEL,           // 多路选择器控制信号output reg [3:0] Q        // 输出信号 Q
);wire [3:0] sum;           // 加法器输出wire [3:0] mux_out;       // 多路选择器输出// 加法器模块:计算 A + Bassign sum = A + B;// 多路选择器:根据 SEL 选择 sum 或寄存器的反馈值 Qassign mux_out = (SEL == 1'b0) ? sum : Q;// D 触发器(寄存器):存储多路选择器的输出always @(posedge CLK or posedge RST) beginif (RST) beginQ <= 4'b0000;    // 复位时输出清零end else beginQ <= mux_out;    // 时钟上升沿更新 Q 的值endendendmodule

六、Verilog常用运算符

        这里大部分运算符和C语言一致,但是部分还是有区别(如缩减运算符、拼接复制运算符),由于那些有区别的运算符我们不常用,这里就不做过多解释,详情可以自己查看其他博客。这里我们主要了解下面数据的表达形式即可。

七、高级特性

1. 任务和函数

        用于封装重复代码,简化设计。

task multiply;input [3:0] A, B;  // 输入 A 和 B,4 位宽output [7:0] result; // 输出 result,8 位宽beginresult = A * B;  // 执行乘法操作end
endtask

  multiply 是一个 task,它有两个输入参数 AB,以及一个输出参数 result。任务内部进行的是 乘法操作,并将结果存储到 result 中。你可以在其他地方调用这个 task 来执行乘法操作。

multiply(A, B, result);  // 调用任务 multiply,将 A 和 B 作为输入,result 用来接收输出

 2. 生成(Generate)

        用于在设计中创建重复结构(例如多个寄存器、加法器等)。是 Verilog 中的一种结构,用来在设计中生成重复的硬件结构或模块。它类似于 for 循环,可以用来实例化多个相同或类似的模块。这对于处理多位数据或多个模块的情况非常有用。

// 定义一个模块 D_flip_flop
module D_flip_flop(input clk,         // 时钟信号input D,           // 数据输入output reg Q       // 数据输出
);always @(posedge clk) beginQ <= D;  // 在时钟的上升沿,将 D 的值传递给 Qend
endmodule// 顶层模块
module top_module(input clk,             // 时钟信号input [7:0] data,      // 8 位宽的数据输入output [7:0] out       // 8 位宽的数据输出
);// 定义循环变量 igenvar i;generate// 循环生成 8 个 D_flip_flop 实例for (i = 0; i < 8; i = i + 1) begin: gen_block// 每个 D_flip_flop 的输入 data[i],输出 out[i]D_flip_flop DFF (.clk(clk),           // 时钟信号连接.D(data[i]),         // 数据输入连接到 data 的第 i 位.Q(out[i])           // 数据输出连接到 out 的第 i 位);endendgenerateendmodule

 八、Verilog三种描述方法

1. 结构化描述(门级描述)

        结构化描述通常使用基本的门原语(如与门、或门、非门等)来构建电路。这种描述方式接近硬件实现,能反映出每一个逻辑门的连接关系。

module mux4to1(output out,        // 输出input i0, i1, i2, i3,  // 输入信号input s1, s0          // 选择线
);wire s1n, s0n;        // 选择线的反向信号wire y0, y1, y2, y3;  // 中间的与门输出// 反向选择线not (s1n, s1);  // s1n = ~s1not (s0n, s0);  // s0n = ~s0// 根据选择线选择输入信号and (y0, i0, s1n, s0n);  // y0 = i0 & ~s1 & ~s0and (y1, i1, s1n, s0);   // y1 = i1 & ~s1 & s0and (y2, i2, s1, s0n);   // y2 = i2 & s1 & ~s0and (y3, i3, s1, s0);    // y3 = i3 & s1 & s0// 最终输出为所有中间信号的或运算or (out, y0, y1, y2, y3);  // out = y0 | y1 | y2 | y3endmodule

2. 数据流级描述

        数据流级描述是通过 assign 语句来描述电路的信号流动和计算逻辑,适合用来描述组合逻辑电路。

module mux4to1(out, i0, i1, i2, i3, s1, s0);output out;input i0, i1, i2, i3;  // 输入信号input s1, s0;           // 选择线// 使用条件赋值表达式来实现多路选择器assign out = (~s1 & ~s0 & i0) | (~s1 & s0 & i1) | (s1 & ~s0 & i2) | (s1 & s0 & i3);endmodule

3. 行为级描述

        行为级描述通过 always 块来描述电路的行为,通常结合 ifcase 语句,用来定义电路在不同输入条件下的响应。这种方式更接近软件编程,抽象度较高,适合用于描述时序电路。

module mux4to1(out, i0, i1, i2, i3, s1, s0);output reg out;          // 输出为reg类型,因为在always块中赋值input i0, i1, i2, i3;   // 输入信号input s1, s0;            // 选择线always @(s1 or s0 or i0 or i1 or i2 or i3) begincase ({s1, s0})       // 根据选择线组合选择对应输入2'b00: out = i0;  // 当s1=0, s0=0时,选择i02'b01: out = i1;  // 当s1=0, s0=1时,选择i12'b10: out = i2;  // 当s1=1, s0=0时,选择i22'b11: out = i3;  // 当s1=1, s0=1时,选择i3default: out = 1'bx; // 如果没有匹配,输出不确定值(x)endcaseendendmodule

相关文章:

FPGA(一)verilog语句基础

Verilog 是一种硬件描述语言&#xff08;HDL&#xff09;&#xff0c;常用于数字电路的设计、模拟和验证&#xff0c;特别是用于 FPGA 和 ASIC 的设计。Verilog 让设计者能够描述和模拟硬件系统的行为和结构&#xff0c;最终将其转化为硬件电路。 一、模块结构 Verilog 中的设计…...

istio配置重复的svc报错

现象&#xff1a; 两个vs中配置了同一个svc地址&#xff0c;导致其中的一个vs路由配置不生效&#xff0c;看到istiod服务的报错duplicate domain from service 解决&#xff1a; istiod服务报错日志 2024-11-13T14:54:50.39418167508:00 "pilot_vservice_dup_doma…...

springboot473基于web的物流管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统物流管理系统信息管理难度大&#xff0c;容错率低&#x…...

面试题整理7----Nginx的access.log被删除在不影响应用的情况下恢复日志的写入

面试题整理7----Nginx的access.log被删除在不影响应用的情况下恢复日志的写入 1. 问题2. 问题复现2. 释放空间2.1 确定nginx的pid2.2 确定文件描述符号2.3 清空文件 3. 恢复access.log的写入4. 后续改善 1. 问题 这是一个非常常见的故障处理. 应用负责人发现服务器磁盘满了,经…...

ip_forward函数

ip_forward 函数是 Linux 内核中用于处理 IP 数据包转发的重要函数。它负责将数据包从一个网络接口转发到另一个网络接口。以下是这个函数的一些关键点和工作流程的概述: 1. **数据包接收**:当一个数据包到达网络设备(如以太网卡)时,内核会首先接收到这个数据包。 2. **路…...

华院计算参与项目再次被《新闻联播》报道

12月17日&#xff0c;央视《新闻联播》播出我国推进乡村振兴取得积极进展。其中&#xff0c;华院计算参与的江西省防止返贫监测帮扶大数据系统被报道&#xff0c;该系统实现了由原来的“人找人”向“数据找人”的转变&#xff0c;有效提升监测帮扶及时性和有效性&#xff0c;守…...

postman关联接口用于登录(验证码会变情况)

目录 一、介绍 二、操作步骤 (一)Fiddler抓取到登录信息 (二)postman发送请求 新建请求一&#xff1a;登录值请求 (三)易变值赋值固定住 新建请求二&#xff1a;易变值验证码(uuid)请求 切换到请求一里面进行赋值绑定 一、介绍 接口有两种形式&#xff0c;一种是单…...

《探秘 Qt Creator Manual 4.11.1》

《探秘 Qt Creator Manual 4.11.1》 一、Qt Creator 4.11.1 概述二、功能特性全解析&#xff08;一&#xff09;跨平台能力展示&#xff08;二&#xff09;代码编辑优势&#xff08;三&#xff09;版本控制集成&#xff08;四&#xff09;特定 Qt 功能呈现&#xff08;五&#…...

linux(ubuntu )卡死怎么强制重启

&#xff08;公司的 ubuntu 跑个用例经常卡死&#xff09; 如果其他快捷键都没有反应&#xff0c;且不想按电源键进行硬重启&#xff0c;可以尝试以下方法&#xff1a; 1. 使用 Magic SysRq 键 Magic SysRq 键可以在系统完全卡死的情况下&#xff0c;执行一些强制操作来重启…...

优化程序中的数据:从数组到代数

前言 我们往往都希望优化我们的程序&#xff0c;使之达到一个更好的效果&#xff0c;程序优化的一个重点就是速度&#xff0c;加快速度的一个好办法就是使用并行技术&#xff0c;但是&#xff0c;并行时我们要考虑必须串行执行的任务&#xff0c;也就是有依赖关系的任务&#…...

图像配准有哪些技术?

目录 图像配准技术 1.基于特征的图像配准 2.基于强度的图像配准 3.基于模型的图像配准 4.基于学习的图像配准 5.混合方法 图像配准的应用 图像配准技术入门 常见问题解答 图像配准是计算机视觉和医学成像中的一项关键技术&#xff0c;用于将多幅图像对齐到一个共同的坐…...

第五节:GLM-4v-9b模型model加载源码解读(模型相关参数方法解读)

文章目录 前言一、GLM-4v-9b模型model加载源码解读1、GLM-4v-9b模型model加载主函数源码2、GLM-4v-9b模型model加载源码源码解读3、GLM-4v-9b自定义模型类源码解读 二、基于GLM-4v-9b模型获取模型输入参数等内容源码解读(from_pretrained-->huggingface)1、from_pretrained函…...

Unity3D仿星露谷物语开发7之事件创建动画

1、目标 掌握事件通知的Publisher - Subscriber设计模式&#xff0c;并通过事件通知触发动画。 2、发布者/订阅者模式 首先&#xff0c;定义事件Event 然后&#xff0c;Publisher触发事件 最后&#xff0c;Subscriber订阅事件并进行处理 &#xff08;1&#xff09;创建动作…...

学校知网中的加锁论文下载不了怎么办

最近有同学求助在学校下载知网论文&#xff0c;有加锁标识的论文下载不了。这是因为各高校订购的都不是数据库全库&#xff0c;加锁的论文是超出订购范围的资源所以下载不了。下面就来讲下解决办法&#xff1a; 首先选一个涵盖数据库多&#xff0c;各个数据库资源权限高的文献…...

算法 双指针技巧

文章目录 双指针[leetcode167 两数之和](https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/description/)分析题解 [leetcode88 合并两个有序数组](https://leetcode.cn/problems/merge-sorted-array/description/)分析题解 [leetcode142 环形链表](https://lee…...

Spring Boot注解总结大全【案例详解,一眼秒懂】

SpringBootApplication 功能&#xff1a;这是Spring Boot应用的核心注解&#xff0c;它是一个组合注解&#xff0c;实际上相当于同时使用了Configuration、EnableAutoConfiguration和ComponentScan。它标记在主应用类上&#xff0c;用于开启Spring Boot的自动配置功能&#xff…...

手动修改nginx-rtmp模块,让nginx-rtmp-module支持LLHLS

文章目录 1. 背景2. 开发环境搭建2.1 ffmpeg在ubuntu上安装2.2 nginx-rtmp-module在ubuntu上安装2.3 安装vscode环境2. 修改nginx-rtmp-module2.1 主要更新内容2.2 新增配置项2.3 代码更新3. LLHLS验证方法3.1 配置验证3.2 功能验证4. 注意事项5. 已知问题6. 后续计划1. 背景 …...

在Visual Studio 2022中配置C++计算机视觉库Opencv

本文主要介绍下载OpenCV库以及在Visual Studio 2022中配置、编译C计算机视觉库OpenCv的方法 1.Opencv库安装 ​ 首先&#xff0c;我们需要安装OpenCV库&#xff0c;作为一个开源库&#xff0c;我们可以直接在其官网下载Releases - OpenCV&#xff0c;如果官网下载过慢&#x…...

Unity全局雾效

1、全局雾效是什么 全局雾效&#xff08;Global Fog&#xff09;是一种视觉效果&#xff0c;用于在3D场景中模拟大气中的雾气对远处物体的遮挡 它通过在场景中加入雾的效果&#xff0c;使得距离摄像机较远的物体看起来逐渐被雾气覆盖&#xff0c;从而创造出一种朦胧、模糊的视…...

2024 高频 Java 面试合集整理 (1000 道附答案解析)

2024 年马上就快要过去了&#xff0c;总结了上半年各类 Java 面试题&#xff0c;初中级和中高级都有&#xff0c;包括 Java 基础&#xff0c;JVM 知识面试题库&#xff0c;开源框架面试题库&#xff0c;操作系统面试题库&#xff0c;多线程面试题库&#xff0c;Tcp 面试题库&am…...

Java CPU飙升 排查

一、概述 CPU 是整个电脑的核心计算资源&#xff0c;CPU的最小执行单元是 线程&#xff1b; 在现代操作系统中&#xff0c;进程和线程是两种主要的调度单位&#xff1b; 进程是程序中正在运行的一个应用程序&#xff0c;而线程是系统分配处理器时间资源的基本单位。一个进程至少…...

vue中的css深度选择器v-deep 配合!important

当 <style> 标签有 scoped 属性时&#xff0c;它的 CSS 只作用于当前组件中的元素&#xff0c;父组件的样式将不会渗透到子组件。 如果你希望 scoped 样式中的一个选择器能够作用得“更深”&#xff0c;例如影响子组件&#xff0c;你可以使用深度选择器。 ::v-deep { } 举…...

设计模式--工厂方法模式【创建型模式】

设计模式的分类 我们都知道有 23 种设计模式&#xff0c;这 23 种设计模式可分为如下三类&#xff1a; 创建型模式&#xff08;5 种&#xff09;&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式&#xff08;7 种&#xff09;&#xff1…...

K8S Ingress 服务配置步骤说明

部署Pod服务 分别使用kubectl run和kubectl apply 部署nginx和tomcat服务 # 快速启动一个nginx服务 kubectl run my-nginx --imagenginx --port80# 使用yaml创建tomcat服务 kubectl apply -f my-tomcat.yamlmy-tomcat.yaml apiVersion: apps/v1 kind: Deployment metadata:n…...

32. 线程、进程与协程

一、什么是多任务 如果一个操作系统上同时运行了多个程序&#xff0c;那么称这个操作系统就是 多任务的操作系统&#xff0c;例如&#xff1a;Windows、Mac、Android、IOS、Harmony 等。如果是一个程序&#xff0c;它可以同时执行多个事情&#xff0c;那么就称为 多任务的程序。…...

华为实训课笔记 2024 1223-1224

华为实训 12/2312/24 12/23 [Huawei]stp enable --开启STP display stp brief --查询STP MSTID Port Role STP State Protection 实例ID 端口 端口角色 端口状态 是否开启保护[Huawei]display stp vlan xxxx --查询制定vlan的生成树计算结…...

麒麟信安参编的《能源企业数字化转型能力评价 技术可控》团体标准发布

近日&#xff0c;中国能源研究会发布公告&#xff0c;《能源企业数字化转型能力评价 技术可控》团体标准发布。该标准由麒麟信安与国网湖北省电力有限公司武汉供电公司、国网智能电网研究院有限公司、中能国研&#xff08;北京&#xff09;电力科学研究院等单位联合编制。 《能…...

绿色环保木塑复合材料自动化生产线设计书

《绿色环保木塑复合材料自动化生产线设计书》 一、项目概述 随着全球对环境保护和可持续发展的日益重视,绿色环保材料的研发与生产成为了热门领域。木塑复合材料作为一种新型的绿色环保材料,它将木材纤维与塑料通过特定工艺复合而成,兼具木材与塑料的双重特性,具有防水、…...

渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)

本文是高级前端加解密与验签实战的第6篇文章&#xff0c;本系列文章实验靶场为Yakit里自带的Vulinbox靶场&#xff0c;本文讲述的是绕过RSA加密来爆破登录。 分析 这里的代码跟上文的类似&#xff0c;但是加密的公钥是通过请求服务端获取的 http://127.0.0.1:8787/crypto/js/…...

数据应用与数据平台如何测试?与普通测试有什么不同?

首先我们一起了解一下数据应用测试的对象是什么。第一个是数据报表这一块&#xff0c;数据报表包含了我们常见的业务分析报表、经常能看到的一些数据大屏之类。 第二块是数据平台&#xff0c;数据应用平台主要有一些智能营销平台&#xff0c;比如说画像分析平台&#xff0c;自助…...

基于Qlearning强化学习的机器人路线规划matlab仿真

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 训练过程 测试结果 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论…...

零基础微信小程序开发——小程序的宿主环境(保姆级教程+超详细)

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…...

用Moninfo.exe轻松获取显示器EDID

我们天天在用显示器&#xff0c;但显示器的一些关键参数却总是记不住。有时为了配置电脑&#xff0c;有时为了发挥显示器的极限性能&#xff0c;有时为了定制驱动&#xff0c;等等&#xff0c;都需要获取显示器的EDID数据。有些工具虽然可以读出EDID&#xff0c;但难以解读那一…...

【开源库 | xlsxio】C/C++读写.xlsx文件,xlsxio 在 Linux(Ubuntu18.04)的编译、交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-20 …...

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)

if语句处理多个分支时需要用if-else if结构&#xff0c;分支越多&#xff0c;嵌套的if语句层就越多&#xff0c;程序不但庞大、复杂&#xff0c;理解起来也比较困难。在C编程中&#xff0c;针对有些问题除了使用if-else if结构之外&#xff0c;还有switch语句也可以实现&#x…...

SQL Server数据库多主模式解决方案

SQL Server 本身并不直接支持多主模式(Multi-Master Replication),即多个数据库实例可以同时进行写操作,并且这些更改会自动同步到其他实例。不过,SQL Server 提供了多种高可用性和复制解决方案,可以实现类似多主模式的功能。以下是几种常见的方法: 1. Always On 可用性…...

如何训练Stable Diffusion 模型

训练Stable Diffusion模型是一个复杂且资源密集的过程&#xff0c;通常需要大量的计算资源&#xff08;如GPU或TPU&#xff09;和时间。Stable Diffusion是一种基于扩散模型的生成式AI&#xff0c;能够根据文本提示生成高质量的图像。它的训练过程涉及多个步骤&#xff0c;包括…...

网络编程(王铭东老师)笔记

网络编程的目的 1.将多个设备通过网络进行连接在一起&#xff0c;可以将数据共享。 基础知识-01-ip地址 1.引入 为了能够确定网络数据收发双方是哪台电脑&#xff0c;需要用ip来标记电脑。 2.什么是地址 地址就是用来标记地点的 3.ip地址的作用 作用&#xff1a;在逻辑上标…...

项目亮点案例

其实对我来说是日常操作&#xff0c;但是如果在面试的时候面试者能把日常的事情总结好发出来&#xff0c;其实足矣。 想让别人认同项目&#xff0c;选取的示例需要包含以下要素&#xff1a; 亮点项目四要素&#xff1a;明确的目标&#xff0c;问题点&#xff0c;解决方法和结果…...

ShardingSphere-Proxy 连接实战:从 Golang 原生 SQL 到 GORM 的应用

在这篇文章《ShardingSphereProxy:快速入门》中&#xff0c;我们介绍了如何通过 Navicat 连接 ShardingSphere-Proxy。 实际上&#xff0c;ShardingSphere-Proxy 兼容标准的 SQL 和原生数据库协议&#xff0c;因此你可以使用任何 MySQL 客户端与其进行连接&#xff0c;包括 Go…...

uniapp验证码

一、 页面结构 假设你有一个发送短信按钮&#xff0c;点击按钮时会触发发送短信并启动倒计时。 <template><view><button click"sendSms" :disabled"isSending">{{ buttonText }}</button></view> </template>二、脚…...

C/C++基础知识复习(43)

1) 什么是运算符重载&#xff1f;如何在 C 中进行运算符重载&#xff1f; 运算符重载是指在 C 中为现有的运算符定义新的行为&#xff0c;使得它们能够用于用户定义的数据类型&#xff08;如类或结构体&#xff09;。通过运算符重载&#xff0c;可以让自定义类型像内置数据类型…...

GIT安装过程

文章目录 ‌下载安装包‌安装过程‌验证安装‌Git的基本使用‌ ‌Git的安装可以通过以下步骤完成‌ ‌下载安装包‌ 首先&#xff0c;访问Git官网(https://git-scm.com/)或Git for Windows(https://gitforwindows.org/)下载对应系统的安装包。 对于Windows系统&#xff0c;通常…...

评估大语言模型在药物基因组学问答任务中的表现:PGxQA

​这篇文献主要介绍了一个名为PGxQA的资源&#xff0c;用于评估大语言模型&#xff08;LLM&#xff09;在药物基因组学问答任务中的表现。 研究背景 药物基因组学&#xff08;Pharmacogenomics, PGx&#xff09;是精准医学中最有前景的领域之一&#xff0c;通过基因指导的治疗…...

[HNCTF 2022 Week1]你想学密码吗?

下载附件用记事本打开 把这些代码放在pytho中 # encode utf-8 # python3 # pycryptodemo 3.12.0import Crypto.PublicKey as pk from hashlib import md5 from functools import reducea sum([len(str(i)) for i in pk.__dict__]) funcs list(pk.__dict__.keys()) b reduc…...

MongoDB教程001:基本常用命令(数据库操作和集合操作)

1.1 案例需求 存放文章评论的数据存放到MongoDB中&#xff0c;数据结构参考如下&#xff1a; 数据库&#xff1a;【articledb】 专栏文章评论comment字段名称字段含义字段类型备注_id&#xff08;MongoDB自动生成&#xff09;IDObjectId或StringMongo的主键的字段articleId文…...

Springboot logback 日志打印配置文件,每个日志文件100M,之后滚动到下一个日志文件,日志保留30天(包含traceid)

全部配置 logback.xml <?xml version"1.0" encoding"UTF-8"?> <configuration debug"false"><property name"LOG_HOME" value"log"/><property name"LOG_NAME" value"admin"/&g…...

flink sink kafka

接上文&#xff1a;一文说清flink从编码到部署上线 之前写了kafka source&#xff0c;现在补充kafka sink。完善kafka相关操作。 环境说明&#xff1a;MySQL&#xff1a;5.7&#xff1b;flink&#xff1a;1.14.0&#xff1b;hadoop&#xff1a;3.0.0&#xff1b;操作系统&#…...

vue万达地产物业缴费分析系统

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设万达地产物业缴费分析…...

数据库 MYSQL的概念

数据库的概念 数据库是按照数据结 构来组织、存储和管理数据的系统&#xff0c;它允许用户高效地存储、检索、更新和管理数据 database&#xff1a;用来组织&#xff0c;存储&#xff0c;管理数据的仓库 数据库的管理系统&#xff1a;DBMS&#xff0c;实现对数据的有效储值&am…...