Verilog数据类型

2023-11-15

作者:anekin

原作网址:http://blog.sina.com.cn/s/blog_615047920100ih0k.html

Verilog HDL有下列四种基本的值:
1)0:逻辑0或“假”状态;
2)1:逻辑1或“真”状态;
3)x(X):未知状态,对大小写不敏感;
4)z(Z):高阻状态,对大小写不敏感。
注意这四种值的解释都内置于语言中。如一个为z的值总是意味着高阻抗,一个为0的值通常是指逻辑0。
在门的输入或一个表达式中的为“z”的值通常解释成“x”。此外,x值和z值都是不分大小写的,也就是说,值0x1z与值0X1Z相同。Verilog HDL中的常量是由以上这四类基本值组成的。

3.5.1网络和变量

在Verilog HDL中,根据赋值和对值的保持方式不同,可将数据类型主要分为两大类:网络(net)型和变量(Variable)型。这两类数据也代表了不同的硬件结构。

3.5.1.1 net(网络)型

net表示器件之间的物理连接,需要门和模块的驱动。网络数据类型是指输出始终根据输入的变化而更新其值的变量,它一般指的是硬件电路中的各种物理连接。 例如:网络型变量L的值由与门的驱动信号a和b所决定,即L=a&b。a、b的值发生变化,L的值会立即跟着变化。
没有声明的net的默认类型为1位(标量)wire类型。Verilog HDL禁止对已经声明过的网络、变量或参数再次声明。下面给出net声明的语法格式:
<net_type> [range] [delay] <net_name>[,net_name];
其中:
net_type:表示网络型数据数据的类型。
range:用来指定数据为标量或矢量。若该项默认,表示数据类型为1位的标量;反之,由该项指定数据的矢量形式。
delay:指定仿真延迟时间。
net_name:net名称,一次可定义多个net,用逗号分开。

【例3.15】网络的声明
wand w; // 一个标量wand类型net
tri [15: 0] bus; // 16位三态总线
wire [0: 31] w1, w2; // 两个32位wire,MSB为bit0
net类型包括多种不同的种类,表3.2给出了这些常用的不同类型的功能及其可综合性。



如果没有显示声明,那么在以下情况中,一个默认net型数据类型就被指定。
 在一个端口表达式的声明中,如果没有对端口的数据类型进行显式说明,那么默认的端口数据类型就为wire型,且默认的wire型矢量的位宽与矢量型端口声明的位宽相同。

 在基本元件例化。模块例化的端口列表中,如果先前没有对端口的数据类型进行显式说明,那么默认的端口数据类型为网络型标量。

 如果一个标识符出现在连续赋值语句的左侧,而该标识符先前未曾被声明,那么该标识符的数据类型就被隐式声明为网络型标量。
网络数据类型包含多种不同种类的网络子类型:wire型,tri型,wor型,trior型,wand型,triand型,trireg型,tri1型,tri0型,supply0型,supply1型。
简单的网络类型说明语法为:
net_kind[msb:lsb]net1,net2, . . . , netN;
其中:net_kind是上述网络类型的一种。msb和lsb是用于定义网络范围的常量表达式;范围定义是可选的;如果没有定义范围,默认的网络类型为1位。

网络型数据的默认初始化值为Z。带有驱动的网络型数据应当为它们的驱动输出指定默认值。trireg网络型数据时一个例外。它的默认初始值为x,而且在声明语句中应当为其指定电荷量强度。

在一个网络型数据类型声明中,可以指定两类强度:电荷量强度(charge strength)和驱动强度(drive strength)。电荷量强度只有trireg网络类型的声明中,才可以使用该强度;驱动强度只有在一个网络型数据的声明语句中对数据对象进行了连续赋 值,才可以使用该强度。门级元件的声明只能制定驱动强度。下面简要说明以下这两种强度的含义及其功能:

1)电荷量强度(charge strength)
一个trireg网络型数据用于模拟电荷存储。电荷量强度可由下面的关键字来制定电容量
的相对大小:small、medium、large。默认的电荷强度为medium。
一个trireg网络型数据能够模拟一个电荷存储节点,该节点的电荷量将随时间而逐渐衰减。对于一个trireg网络型数据在仿真时,其电荷衰减时间应当制定为延迟时间。

2)驱动强度(drive strength)
在一个网络型数据的声明语句中如果对数据对象进行了连续赋值,就可以为生命的数据对象指定驱动强度。

1.wire和tri网络类型
用于连接单元的连线是最常见的网络类型。连线与三态线(tri)网语法和语义一致;三态线可以用于描述多个驱动源驱动同一根线的网络类型;并且没有其他特殊的意义。如果多个驱动源驱动一个连线(或三态网络),网络的有效值由表3.3确定。

 

 
常用的网络类型由关键词wire定义。wire型变量的定义格式如下:
wire [n-1:0] <name1>,<name2>,…<namen>;
其中name1,…,namen表示wire型名字。

【例3.16】wire型变量的说明
wire L; //将上述电路的输出信号L声明为网络型变量
wire [7:0] data bus; //声明一个8bit宽的网络型总线变量

2.wor和trior网络类型
wor和trior用于连线型逻辑结构建模。当有多个驱动源驱动wor和trior型数据时,将产生线或结构。如果驱动源中任一个为1,那么网络型数据的 值也为1。线或和三态线或(trior)在语法和功能上是一致的。如果多个驱动源驱动这类网,网的有效值由表3.4决定。

 
3.wand和triand网络类型
线与(wand)网指如果某个驱动源为0,那么网络的值为0。当有多个驱动源驱动wand和triand型数据时,将产生线与结构。线与和三态线与(triand)网在语法和功能上是一致的。如果这类网络存在多个驱动源,网络的有效值由表3.5决定。


4.Trireg网络类型

此网络存储数值(类似于寄存器),并且用于电容节点的建模。当三态寄存器(trireg)的所有驱动源都处于高阻态,也就是说,值为z时,三态寄存器网络 保存作用在网络上的最后一个值。此外,三态寄存器网络的默认初始值为x。一个trireg网络型数据可以处于驱动和电容性两种状态之一:

1)驱动状态:当至少被一个驱动源驱动时,trireg网型数据有一个值(1、0、x)。判
决值被导入trireg型数据,也就是trireg型网络的驱动值。
2)电容性状态:如果所有驱动源都处于高阻状态(z),trireg网络型数据则保持它最
后的驱动值。高阻值不会从驱动源导入trireg网络型数据。
根据trireg网型数据声明语句中的指定,trireg网型数据处于电容性状态时其电荷量强度
可以是small、medium或large。同样,trireg网型数据处于驱动状态时,根据驱动源的强度,其驱动强度可以是supply、strong、pull或weak。

5.tri0和tri1网络类型
这类网络类型可用于线逻辑的建模,即网络有多于一个驱动源。tri0(tri1)网络的特征是,若无驱动源驱动,它的值为0(tri1的值为1)。网络值 的驱动强度都为pull。tri0相当于这样一个wire型网络:有一个强度为pull的0值连续驱动该wire。同样,tri1相当于这样一个wire 型网络:有一个强度为pull的1值连续驱动该wire。表3.6给出在多个驱动源情况下tri0或tri1网的有效值。

 

 
6.supply0和supply1网络类型
supply0用于对“地”建模,即低电平0;supply1网用于对电源建模,即高电平1。

【例3.17】supply0和supply1网络类型描述
supply0 Gnd,ClkGnd;
supply1 [2:0] Vcc;

7.未说明的网络
在Verilog HDL中,有可能不必声明某种网络类型。在这样的情况下,网络类型为1位网络。可以使用`default_nettype编译器指令改变这一隐式网络说明方式。使用方法如下:
`default_nettypenet_kind
例如,带有下列编译器指令:
`default_nettype wand
任何未被说明的网默认为1位线与网。

3.5.1.2变量数据类型

变量时数据存储元件的抽象。从一次赋值到下一次赋值之前,变量应当保持一个值不变。程序中的赋值语句将触发存储在数据元件中的值改变。对于 reg,time和integer这些变量型数据类型,它们的初始值应当是未知(x)。对于real和realtime变量型数据类型,默认的初始值是 0.0。如果使用变量声明赋值语句,那么变量将采用这个声明赋值语句所赋的值作为初值,这与initial结构中对变量的赋值等效。注意,在变量数据类型 中,只有reg和integer变量型数据类型是可综合的,其它是不可综合的。

1.整型变量声明
整型变量常用于对循环控制变量的说明,在算术运算中被视为二进制补码形式的有符号数。整型数据与32位的寄存器型数据在实际意义上相同,只是寄存器型数据被当做无符号数来处理。

【例3.18】整数变量的声明
integer i,j;
integer[31:0] D;
需要注意的是虽然interger有位宽度的声明,但是integer型变量不能作为位向量访问。D[6]和D[16:0]的声明都是非法的。在综合时,integer型变量的初始值是x。

2.实数型变量声明
实数型数据在机器码表示法中是浮点型数值,可用于对延迟时间的计算。实数型变量是不可综合的。

3.时间型变量声明
时间型变量与整型变量类似,只是它是64位的无符号数。时间型变量主要用于对仿真时间的存储与计算处理,常与系统函数$time一起使用。

4.寄存器型变量声明
寄存器型变量对应的是具有状态保持作用的硬件电路,如触发器。锁存器等。寄存器型变量与网络络数据的区别主要在于:寄存器型变量保持最后一次的赋值,而 wire型数据需要有连续的驱动。寄存器型变量只能在initial或always内部被赋值。寄存器型变量声明的格式如下:

<reg_type> [range] <reg_name>[, reg_name];
其中:
reg_type为寄存器类型;range为矢量范围,[MSB:LSB]格式,只对reg类型有效; reg_name为reg型变量的名字,一次可定义多个reg型变量,使用逗号分开。

【例3.19】寄存器型变量的声明及使用
module mult(clk, rst, A_IN, B_OUT);
input clk,rst,A_IN;
output B_OUT;
reg arb_onebit = 1'b0;
always @(posedge clk or posedge rst)
begin
if (rst)
arb_onebit <= 1'b1;
else
arb_onebit <= A_IN;
end
end
B_OUT <= arb_onebit;
endmodule

3.5.2 参数

Verilog HDL中的参数(parameter)既不属于变量类型也不属于网络类型范畴。参数不是变量,而是常量。用参数声明一个可变常量,常用于定义延时及宽度等参数。参数定义的格式:
parameter par_name1=expression1,…….,par_namen=expression;
其中:
par_name1,....par_namen为参数的名字;expression1,....,expression为表达式。

【例3.20】参数的声明及使用
parameter BUS_WIDTH=8;
reg [BUS_WIDTH-1:0] my_reg;
可一次定义多个参数,用逗号隔开。参数的定义是局部的,只在当前模块中有效。参数定义可使用以前定义的整数和实数参数。
参数值也可以在编译时被改变。改变参数值可以使用参数定义语句或通过在模块初始化语句中定义参数值。

【例3.21】参数的声明及使用
module lpm_reg (out, in, en, reset, clk);
parameter SIZE=1;
input in, en, reset, clk;
output out;
wire [SIZE-1:0] in;
reg [SIZE-1:0] out;
always @(posedge clk or negedge reset)
begin
if (!reset) out<=1’b0;
else
if(en) out<=in;
else out <= out;
end
endmodule

3.5.3向量

在一个net或reg型声明中,如果没有指定范围,就被看做是1比特位宽,也就是通常所说的标量。通过指定范围来声明多位的net或reg型数据,则成为矢量。

1.向量说明
向量范围由常量表达式来说明(也就是通常所说的数组)。msb_constant_expression_r(最高位常量表达式)代表范围的左侧 值,lsb_constant_expression_r(最低位常量表达式)代表范围的右侧值。右侧表达式的值可以大于、等于、小于左侧表达式的值。

net和reg型向量遵循以2为模(2n)的乘幂算术运算法则,此处的n值是向量的位宽。net和reg型向量如果没有被声明为有符号量或者链接到一个已声明为有符号的数据端口,那么该向量被隐含当做无符号的量。
向量可以将已声明过类型的元素组合成多维的数据对象。向量声明时,应当在声明的数据标识符后面指定元素的地址范围。每一个维度代表一个地址范围。数组可以 是一维向量(一个地址范围)也可以是多维向量(多重地址范围)。向量的索引表达式应当是常量表达式,该常量表达式的值应当是整数。一个数组元素可以通过一 条单独的赋值语句被赋值,但是整个向量或向量的一部分也不能为一个表达式赋值。要给一个向量元素赋值,需要为该向量元素指定索引。向量索引可以是一个表达 式,这就为向量元素的选择提供了一种机制,即依靠对该向量索引表达式中其他的网络数据或变量值的运算结果来定位向量元素。

【例3.22】多维向量的声明实例1
wire [7:0] array2 [0:255][0:15]
该声明表示一个256ⅹ16的wire型数据,其中的每个数据是8位的宽度。只能在结构化描述的Verilog HDL中分配。

【例3.23】多维向量的声明实例2
reg [63:0] regarray2 [255:0][7:0]
该声明表示一个256x8的reg型数据,其中的每个数据是64位宽度。只能在行为化描述的Verilog HDL中分配。

【例3.24】多维向量的声明实例3
wire [7:0] array3 [0:15][0:255][0:15]
该声明表示一个三维的向量,表示16个256x16的wire型数据,每个数据8位宽度。只能在结构化描述的Verilog HDL中分配。

2.向量网络型数据的可访问性
vectored和scalared是矢量网络型或矢量寄存器型数据声明中的可选择关键字。如果这些关键字被使用,那么矢量的某些操作就会受约束。如果使 用关键字vectored,那么矢量的位选择或部分位选择以及强度指定就被禁止,而PLI就会认为数据对象未被展开。如果使用关键字scalared,那 么矢量的位或部分位选择就被允许,PLI认为数据对象将被展开。下例是使用关键字vectored和scalared的例子。

【例3.25】关键字vectored和scalared
tri scalared[63:0] bus64; //一个将被展开的数据总线
tri vectored[31:0] data; //一个未被展开的数据总线

3.存储器
如果一个向量的元素类型为reg型,那么这样的一维向量也称为存储器。存储器只用于ROM(只读存储器)、RAM(随机存取存储器)和寄存器组建模。向量 中的每一个寄存器也叫做元素或字,并且是通过单一的索引来寻址的。一个n位的寄存器可以通过一条单独的赋值语句被赋值,但是整个存储器不能通过这样的一条 语句被赋值。为了对存储器的某个字赋值,需要为该字指定数组索引。该索引可以是一个表达式,该表达式中含有其他的变量或网络数据,通过对该表达式的运算, 得到一个结果值,从而定位存储器的字。

【例3.26】存储器型的声明
reg[7:0] mymemory[1023:0];
上述声明定义了一个1024个存储单元的存储器变量mymemory,每个存储单元的字长为8位。在表达式中可以用下面的语句来使用存储器。
mymemory[7]=75; //存储器mymemory的第7个字被赋值75


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Verilog数据类型 的相关文章

  • 是否有理由在 VHDL 和 Verilog 中初始化(而不是重置)信号?

    我从未初始化过信号 这样 任何缺少重置或分配的信号都将是未知的或已初始化 在一些参考代码中它们有初始化 这违背了我的愿望 此外 由于初始化不可综合 因此可能会出现模拟 综合不匹配的情况 在这种情况下有什么理由初始化信号吗 编辑 2011 年
  • 在verilog中使用for循环生成

    我试图理解为什么我们在verilog 中使用generate 和for 循环 一起使用生成和 for 循环 reg 3 0 temp genvar i generate for i 0 i lt 3 i i 1 begin always p
  • Quartus Prime 中的“多个常量驱动程序”Verilog 错误

    我正在致力于用 Verilog 设计一个有限状态机来表示堆栈 该模块如下 module state machine s Enable Clock Resetn c OF Err UF Err input 2 0 s input Enable
  • 如何在 Verilog 中定义带参数的模块?

    我想定义一个add有一个参数的模块 但我对新实例的声明进展不顺利 我想定义这个模块的一个实例 module add parameter wd 1 input wire wd 1 0 a b output wire wd 1 0 o assi
  • 如何使用 Verilog 宏模拟 $display?

    我想创建一个具有多个参数的宏 就像 display 一样 我的代码看起来像这样 但它不起作用 define format macro A write s sformatf A 这就是我调用 format macro 的方式 format m
  • 简单赋值时不输出期望值

    当我将一些值分配给具有四位的变量时 当我简单地输出该值时 我会得到意想不到的结果 我以前从未见过这个 想知道我是否在语法上做错了什么 module main reg 3 0 x initial begin monitor b x x 001
  • Vivado 比特流消息:违反规​​则 (LUTLP-1) 组合循环

    我在串流时遇到问题 该项目旨在创建一个占空比为 1 2 的时钟 综合和实现过程中没有任何问题 我尝试了几种方法来解决它 但他们的表现并不好 module clock div clk clk out input clk output reg
  • x 和 z 值在 Verilog 中到底代表什么?

    Verilog 标准定义了四种类型的位值 0 1 x 和 z 其中 0 表示低 1 表示高 x 表示未知 z 表示未驱动网络 有几个问题 x 是否意味着我们不知道该值是 0 还是 1 0 或 1 或 z 或者该值是未知的并且可以是 0 1
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 如何生成异步复位verilog总是阻塞凿子

    Chisel 始终生成敏感度列表中仅包含时钟的块 always posedge clk begin end 是否可以将模块配置为使用异步重置并生成这样的始终块 always posedge clk or posedge reset begi
  • 如何在verilog中逐行读取文本文件?

    我有一个 SREC 文件 它是一个简单的文本文件 我想在 verilog 中逐行读取它 我怎样才能做到这一点 以下读取文件 每个时钟周期 1 行 预期的数据格式是每行一个十进制数 integer data file file handler
  • 如何获取值数组作为 plusargs?

    如何获取值数组作为参数 我需要从命令行获取一组未定义大小的命令 如何将这些参数放入数组或队列中 Eg CMDS READ WRITE READ N WRITE 它应该被带到一个数组中 value plusargs不支持数组 但支持字符串 看
  • 在 Verilog 中判断总线是否包含单个 x 的最佳方法是什么?

    我有一个监控总线的测试台 总线内的一些信号 位 可以是 1 bx 由于多种原因 我需要知道总线内是否有任何信号是 1 bx 如果总线包含任何 x 测试 不用于综合 仅用于模拟目的 的最佳方法是什么 我曾希望我可以使用减少或然后使用 但这似乎
  • 标识符必须用端口模式声明:busy。 (Verilog)

    我有如下所示的 Verilog 代码 当我编译它时 我收到以下错误消息 并且代码的第一行突出显示 Error 标识符必须用端口模式声明 busy Code module main clk rst start busy ready cnt s
  • 在测试台中显示信号名称/文字

    是否可以在 Verilog 中引用 显示信号的名称 文字 对于在 Verilog 测试台中创建通用信号检查功能来说 这将是一个有用的功能 我知道使用 display 时 m 将打印信号的范围 是否有显示信号名称的等效项 在 Verilog
  • VIM 高亮匹配开始/结束

    我正在尝试找到一个插件 它将突出显示与 Verilog 匹配的开始 结束语句 VIM 可以使用花括号 方括号 但不能使用它的开始 结束 我希望 VIM 突出显示正确的开始到正确的结束 在我看来 最好的选择是使用 matchit 该脚本是 v
  • 我怎样才能让我的verilog移位器更通用?

    这里我有一个移位器 但现在它最多只能工作 3 位 我一直在寻找 但不知道如何让它工作最多 8 位 module shifter a b out input 7 0 a b output 7 0 out wire 7 0 out1 out2
  • Verilog 按位或 ("|") 单子

    我见过 Verilog 代码 其中使用了按位或运算符 目的是什么 例如 address 15 14 0 or address 15 14 io din ramrd 不能省略 吗在这些情况下 在这种情况下 它充当归约运算符 例如 4 b100
  • 如何在 icarus verilog 中包含文件?

    我知道基本的 include filename v 命令 但是 我试图包含另一个文件夹中的模块 现在 该模块还包括同一文件夹中存在的其他模块 但是 当我尝试在最顶层运行该模块时 出现错误 C Users Dell Desktop MIPS
  • Verilog 中如何使用函数?

    在我的 FPGA Verilog 课程中 我的教授只是回顾了函数 他说在函数中 你可以按程序编写代码 然后 当您想要调用该函数时 您可以在always块中调用它 即 程序性地 也可以使用分配语句来调用它 对我来说 如何使用过程代码编写函数

随机推荐

  • VMware15.5安装win7旗舰版系统

    1 启动vmware 文件 新建虚拟机 2 选择自定义安装 下一步 3 兼容性默认不做修改 下一步 4 安装来源选择稍后安装操作系统 5 选择windows7 64 6 安装位置选择非系统盘位置 放在C盘会拖累系统运行速度 7 8 取决于物
  • PostgreSQL_row_number() over()

    语法 row number over partition by col1 order by col2 desc row number 为返回的记录定义各行编号 pritition by 分组 order by 排序 实例 实例数据来源 利用
  • vue实现文件下载

    原理 a href url 复制代码 实际使用场景 上面的原理中适合开放的资源下载 http请求中无需验证时使用 在实际使用过程中 a标签中的url中直接设置header比较麻烦且不安全 而且从开发规范上api一般上要封装一下 header
  • 华为OD机试 - 最多颜色的车辆(Java)

    题目描述 在一个狭小的路口 每秒只能通过一辆车 假设车辆的颜色只有 3 种 找出 N 秒内经过的最多颜色的车辆数量 三种颜色编号为0 1 2 输入描述 第一行输入的是通过的车辆颜色信息 0 1 1 2 代表4 秒钟通过的车辆颜色分别是 0
  • LeetCode 2545. 根据第 K 场考试的分数排序

    班里有 m 位学生 共计划组织 n 场考试 给你一个下标从 0 开始 大小为 m x n 的整数矩阵 score 其中每一行对应一位学生 而 score i j 表示第 i 位学生在第 j 场考试取得的分数 矩阵 score 包含的整数 互
  • git忽略指定文件夹

    git忽略指定文件夹 如下结构 总共有三个文件夹 假设要忽略第一层的B文件夹 在目录下新建一个 gitignore文件 并填写下面内容 B 假设要忽略第一层的A文件夹 在文件中填写A 的话 会把B文件夹下的A文件夹也忽略了 这个时候可以加上
  • 要称王,先做行业破坏者

    author skate time 2010 06 18 高端阅读78期 原标题为 世界 油王 的职场启示 我的人生 狠 字当头 有极强的故事性 白手起家 狂赚几亿美元 后遭朋友暗算 被踢出一手创办并成功发展40年的公司 同期不得不应对麻烦
  • Linux nrm 运行失败,解决:npm中 下载速度慢 和(无法将“nrm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次)...

    1 解决下载速度 因为我们npm下载默认是 连接国外的服务器 所以网速不是特别好的时候 可能下不了包 安装nrm 使用 npm i nrm g 我们的一般工具包都是下载到全局 安装完毕之后 可以运行 命令 nrm ls ls 表示 list
  • Django-Model层ORM之查询操作(六)

    目录 一 Django查询相关API all 查询所有记录 返回一个集合对象 filter 属性 根据条件查询 返回一个集合对象 first 和 last 查询第一个和最后一个记录 返回单个对象 get id 2 根据id查询 返回一个对象
  • Ubuntu 15.04 下编译Caffe2

    深度学习大神贾扬清在四月底发布了最新框架Caffe2 最近在Ubuntu15 04下编译了它的源代码 遇到一些坑 记录下来以供参考 基本安装次序如官网所述 https caffe2 ai docs getting started html
  • k8s Trouble Shooting 故障排除

    本文要讲的是k8s的故障排除 比较浅 最近刚入门 主要涵盖的内容是查看k8s对象的当前运行时信息 对于服务 容器的问题是如何诊断的 对于某些复杂的问题例如pod调度问题是如何排查的 1 查看系统的Event事件 在对象资源 pod serv
  • 一起写一个 Web 服务器

    http my oschina net leejun2005 blog 486771 一起写一个 Web 服务器 2 2015 06 06 实践项目 9 评论 Web服务器 分享到 8 本文由 伯乐在线 高世界 翻译 艾凌风 校稿 未经许可
  • java实现评论功能_Java实现评论回复功能的完整步骤

    前言 使用递归循环开发评论回复功能 适用于大部分的简单单体应用 评论功能或许是大多数的单体应用之中会用到的功能 我们会在自己所开发的项目之中进行集成该功能 大多数时候我们会将评论功能划分成以下几种 单一型 嵌套型 两层型 一 分类方式 1
  • SAP B/P 初步研究(二)

    从开发人员角度来看 B P客户创建可以试用两种方法 第一种是使用BAPI FUNCTION 第二种是使用BAPI CALL METHOD 个人更倾向于使用METHOD 因为METHOD方法只需要填充一个嵌套结构就可以实现B P所有业务视图的
  • 【STM32】制作一个bootloader

    工作环境 STM32CubeMX Keil 相关环境准备这里就不介绍了 bootloader是什么 bootloader就是单片机启动时候运行的一段小程序 这段程序负责单片机固件的更新 也就是单片机选择性的自己给自己下载程序 可以更新 可以
  • Linux C 系统编程 2-1 进程管理 进程环境

    该系列文章总纲链接 专题分纲目录 LinuxC 系统编程 本章节思维导图如下所示 思维导图会持续迭代 第一层 第二层 1 进程的启动和退出 1 1 流程 程序启动 gt 程序加载 地址分配 gt 程序退出 1 程序启动 对于二进制文件 如果
  • 浅谈State状态模式

    一 前言 状态模式在某些场合中使用是非常方便的 什么叫做状态 如果大家学过 编译原理 就会明白DFA M和NFA M 在确定有限状态机和非确定有限状态机中 状态就是最小的单元 当满足某种条件的时候 状态就会发生改变 我们可以把时间中的一个时
  • OSPF的路由器角色

    IR internal router 区域内路由器 普通区域 BR backbone router 骨干区域路由器 位于骨干区域 至少一个接口在骨干区域 ABR area border rouder 区域边界路由器 作用是连接骨干区域和普通
  • Aixcode代码自动补全插件的安装和使用

    最近在技术公众号上看到大佬们说到一款代码自动补全的智能插件aixcode 官方是这样宣传的 智能代码提示 她用强大的深度学习引擎 能给出更加精确的代码提示 代码风格检查 她有代码风格智能检查能力 帮助开发者改善代码质量 编程模式学习 她能自
  • Verilog数据类型

    作者 anekin 原作网址 http blog sina com cn s blog 615047920100ih0k html Verilog HDL有下列四种基本的值 1 0 逻辑0或 假 状态 2 1 逻辑1或 真 状态 3 x X