Signal,constant & variable declarations
1.整数型(32-bit integer)
integer <name>;
2.实数型(64-bit floating point,real)
real <name>;
3.时间型(64-bit floating point,time)
time <name>;
4.参数
1)Local parameter
//Integer型:
localparam integer <name> = <value>;
//Real型:
localparam real <name> = <value>;
//Realtime型:
localparam realtime <name> = <value>;
//Signed&ranged型:
localparam signed [upper:lower] <name> = <value>;
//Signed&unranged型:
localparam signed <name> = <value>;
//Time型:
localparam time <name> = <value>;
//Un-typed& ranged型:
localparam [upper:lower] <name> = <value>;
//Un-typed& unranged型:
localparam <name> = <value>;
2)Parameter
//Integer型:
parameter integer <name> = <value>;
//Real型:
parameter real <name> = <value>;
//Realtime型:
parameter realtime <name> = <value>;
//Signed&ranged型:
parameter signed [upper:lower] <name> = <value>;
//Signed&unranged型:
parameter signed <name> = <value>;
//Time型:
parameter time <name> = <value>;
//Un-typed& ranged型:
parameter [upper:lower] <name> = <value>;
//Un-typed& unranged型:
parameter <name> = <value>;
3)例子说明
参数是 Verilog 在代码中定义常量的一种方法。参数对于定义总线宽度、内存深度、状态机、时钟周期以及整个设计和测试平台中使用的其他有用常量非常有用。参数设计可使代码更具参数化,从而提高代码的可维护性和简洁性。参数主要有两种类型:parameter和local parameter。local parameter的作用与parameter相同,但其内容不能通过外部传递或修改。defparam 允许从测试平台或设计的不同层级重新分配参数值。parameter允许在例化的模块实例声明中重新指定参数值。local parameter和parameter的位宽大小均可按指定的位数设置,并且/或者可带符号值、integer、real、time(64 位精度)或realtime(双精度浮点)值。
// Example declaring a parameter and local parameter
// Define pi as a local real parameter since I do not want to ever change this
localparam real pi = 3.14;
// Define BUS_WIDTH as a parameter with a default value of 8
parameter BUS_WIDTH = 8;
// Use this parameter to define the width of a declared register
reg [BUS_WIDTH-1:0] my_reg;
// Use a defparam from testbench to change BUS_WIDTH to 16 for the instantiated
// design instance UUT
defparam UUT.BUS_WIDTH = 16;
// Alternatively to the defparam, I could have done this using the named parameter //value assignment when I instantiate UUT
my_design #(
.BUS_WIDTH(16)
) UUT (
.A(A),
.B(B),
.C(C)
);
5.Reg
1)二维Reg数组声明
//二维1k × 18:
reg [17:0] <name> [1023:0];
//二维2k × 9:
reg [8:0] <name> [2047:0];
//二维8k × 2:
reg [1:0] <name> [8191:0];
//二维16 × 1:
reg <name> [15:0];
//二维16 k × 1:
reg <name> [16383:0];
//二维512 × 36:
reg [35:0] <name> [511:0];
2)Reg声明&初始化
//有符号8bit:
reg signed [7:0] <name> = 8'sh00;
//有符号64bit:
reg signed [63:0] <name> = 64'sh0000000000000000;
//无符号8bit:
reg [7:0] <name> = 8'h00;
//无符号64bit:
reg [63:0] <name> = 64'h0000000000000000;
3)Reg声明
//有符号8bit:
reg signed [7:0] <name>;
//有符号64bit:
reg signed [63:0] <name>;
//无符号8bit:
reg [7:0] <name>;
//无符号64bit:
reg [63:0] <name>;
6.Wire
1)wire声明
//有符号8bit:
wire signed [7:0] <name>;
//有符号64bit:
wire signed [63:0] <name>;
//无符号8bit:
wire [7:0] <name>;
//无符号64bit:
wire [63:0] <name>;
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起学习、一起进步吧~