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数据类型 的相关文章

  • 64 位 ALU 输出在 TestBench 波上显示高阻抗

    我必须制作一个 64 位 ALU 它接受 A 和 B 64 位输入 进位输入输入并输出 64 位结果以及 1 位进位输出 还有一个 5 位功能选择 FS 其中 FS 0 控制 B 是否反转 使用 2to1 多路复用器 F 1 对 A 执行相
  • 计算数组中的个数

    我试图在 Verilog 中计算 4 位二进制数中 1 的数量 但我的输出是意外的 我尝试了几种方法 这是我认为应该有效的方法 但事实并非如此 module ones one in input 3 0 in output 1 0 one a
  • 模加法器输出显示没有变化

    输出波形显示无变化sum dif burrow and out 即使增加延迟时间后 输出仍然没有变化 这应该像 mod 加法器一样工作 如加 10 和 2 并且 mod 3 给出输出零 CODE module Mod adder a b p
  • EDAplayground 中不显示时钟波形

    当尝试在 EDA Playground 中显示时钟波形时 出现错误 执行中断或达到最大运行时间 如何显示波形 EDA Playground 上的代码 module test reg clk initial begin dumpfile du
  • 如何在RTL中使用时钟门控?

    我正在对一些时钟进行门控latch以及我设计中的逻辑 我在综合和布局布线方面没有太多经验 在 RTL 中实现时钟门控的正确方法是什么 示例1 always comb begin gated clk clk latch update en e
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • 如何在 Verilog 中综合 While 循环?

    我尝试设计一个 Booth 乘法器 它在所有编译器中运行良好 包括 Modelsim Verilogger Extreme Aldec Active Hdl 和 Xilinx Isim 我知道模拟和综合是两个不同的过程 而且只有少数Veri
  • 对象 <名称> 未声明

    这是我的代码 据我所知 LEDs被定义为 module sevenseg LEDs in output reg 6 0 LEDs input 3 0 in always in begin case in 0 LEDs 7 b1000000
  • 向左旋转 verilog 大小写

    我的任务是用verilog编写一个16位ALU 当我做需要旋转操作数和进行2的补码加法和减法的部分时 我发现了困难 我知道如何用纸和铅笔解决这个问题 但我无法弄清楚如何在 Verilog 中做到这一点 例如 A表示为a15 a14 a13
  • 在 Verilog 中判断总线是否包含单个 x 的最佳方法是什么?

    我有一个监控总线的测试台 总线内的一些信号 位 可以是 1 bx 由于多种原因 我需要知道总线内是否有任何信号是 1 bx 如果总线包含任何 x 测试 不用于综合 仅用于模拟目的 的最佳方法是什么 我曾希望我可以使用减少或然后使用 但这似乎
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • VIM 高亮匹配开始/结束

    我正在尝试找到一个插件 它将突出显示与 Verilog 匹配的开始 结束语句 VIM 可以使用花括号 方括号 但不能使用它的开始 结束 我希望 VIM 突出显示正确的开始到正确的结束 在我看来 最好的选择是使用 matchit 该脚本是 v
  • 如何在 Verilog 中推断 Block RAM

    我在一个项目中遇到了一个非常具体的问题 这个问题已经困扰我好几天了 我有以下 RAM 模块的 Verilog 代码 module RAM param clk addr read write clear data in data out pa
  • reg 声明中的位顺序

    如果我需要使用 4 个 8 位数字 我会声明以下 reg reg 7 0 numbers 3 0 我对第一个和第二个声明 7 0 和 3 0 之间的区别感到很困惑 他们应该按什么顺序来 第一个是保留数字的大小 而第二个是保留数字的数量 还是
  • 如何在 icarus verilog 中包含文件?

    我知道基本的 include filename v 命令 但是 我试图包含另一个文件夹中的模块 现在 该模块还包括同一文件夹中存在的其他模块 但是 当我尝试在最顶层运行该模块时 出现错误 C Users Dell Desktop MIPS
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更
  • Verilog 数组语法

    我是 Verilog 新手 并且遇到了很多麻烦 例如 我想要一个包含八个单元的数组 每个单元都是 8 位宽 以下不起作用 reg 7 0 transitionTable 0 7 assign transitionTable 0 10 仅仅做
  • 模块不是任务或 void 函数

    我正在尝试在 Verilog 中创建一个用于进位选择加法器的模块 除了以下部分导致编译错误之外 一切正常 module csa a b s cout input 15 0 a b output 15 0 s output cout wire
  • 如何迭代创建参数化大小的总线来连接同样迭代创建的模块?

    我正在尝试使用组合逻辑方法在 verilog 中创建乘法器模块 以便不涉及时钟 我希望模块有一个通用的定义 即我希望乘法器分别接收大小为 M 和 N 位的两个因子 并返回大小为 M N 位的乘积 基本思想是计算部分积的和 每个部分积根据其级

随机推荐

  • 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