赞
踩
虚拟机:VMware-workstation-full-14.0.0.24051
环 境:ubuntu 18.04.1
数据类型用来表示数字电路中的数据存储和传送单元,Verilog HDL中共有19种数据类型,其中有4中基本数据类型,分别为:
-> integer型
-> parameter型
-> reg型
-> wire型
其它数据类型: large型、medium型、 scalared型、 small型、time型、tri型、tri0型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型等
在程序运行过程中,其值不能被改变的量,称为常量。数字(包括整数,x和z值,负数);parameter常量(或称符号常量)
表达方式 | 说明 | 例子 |
---|---|---|
<位宽>'<进制><数字> | 完整的表达式 | 8‘b11000101或8’hc5 |
<进制><数字> | 缺省位宽,则有系统决定,至少32bit | hc5 |
<数字> | 缺省进制,表示十进制,位宽默认为32bit | 197 |
注:这里的位宽表示的是二进制数的位宽
[例3]
casez (select)
4’b???1: out = a;
4’b??1?: out = b;
4’b?1??: out = c;
4’b1???: out = d;
endcase
用parameter来定义一个标识符,代表一个常量——称为符号常量;
每个赋值语句的右边必须为常数表达式,即只能包含数字或先前定义过的符号常量;
在模块或实例引用时,可通过参数传递改变在被引用模块或实例中已定义的参数;
localparam 符号常量
parameter与localparam的区别
-> parameter可用作在顶层模块中例化底层模块时传递参数的接口;
-> localparam的作用域仅仅限于当前module,不能作为参数传递的接口 。
【推荐】 模块例化参数传递-方法一:利用特殊符号==“#”==
【例4】
module mod ( out, ina, inb);
…
parameter cycle = 8, real_constant = 2.039;
…
endmodule
module test;
…
mod # (5, 3.20) mk(out,ina,inb); // 对模块mod的实例引用
…
endmodule
【例5】
module mod ( out, ina, inb);
…
parameter cycle = 8, real_constant = 2.039,
file = “/user1/jmdong/design/mem_file.dat”;
…
endmodule
module test;
…
mod mk(out,ina,inb); // 对模块mod的实例引用
defparam mk.cycle = 6, mk.file = “../my_mem.dat”; // 参数的传递
…
endmodule
defparam一般情况下是不可综合的。所以在编写RTL代码时不要使用defparam语句,在模块的实例引用时,可用“#”号后跟参数的语法来重新定义参数。
在程序运行过程中,其值可以改变的量。其数据类型有19种,常用的有3种:网络型(nets type)、寄存器型(register type )、数组(memory type)。
reg型向量(总线):reg[n-1:0] 数据名1,数据名2, ……,数据名m;或 reg[n:1] 数据名1,数据名2, ……,数据名m;都表示有m个reg型向量
[ 例6 ] reg[4:1] regc, regd; //regc,regd 为4位宽的reg型向量
[ 例7 ] reg型生成触发器
module rw2( clk, d, out1, out2 );
input clk, d;
output out1, out2 ;
reg out1 ;
wire out2 ;
assign out2 = d & ~out1 ;
always @(posedge clk)begin//上升沿触发
out1 <= d ;
end
endmodule
[ 例8 ] reg型生成组合逻辑
module rw1( a, b, out1, out2 );
input a, b;
output out1, out2;
reg out1;
wire out2;
assign out2 = a;//连续赋值语句
always @(b) begin//电平触发,不是时钟触发
out1 <= ~b;//过程赋值语句
end
endmodule
格式:reg[n-1:0] 存储器名[m-1:0];或 reg[n-1:0] 存储器名[m:1];表示每个存储单元位宽为n位,共有m个存储单元
[ 例9 ]
reg [n-1:0] rega;//表示一个n位寄存器
[ 例10 ]
reg mema [n-1:0];//表示n个1位寄存器组成的存储器
作者:xlinxdu
版权:本文版权归作者所有
转载:欢迎点赞、评论和转载,但未经作者同意,必须保留此段声明,必须在文章中给出原文连接。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。