字体大小: 小 中 大
作者: 来源: 日期:2006-07-30 点击:2415
一般认为
Verilog
HDL在系统级抽象方面比VHDL略差一些,而在门级开关电路描述方面比VHDL要强的多
写了第一个verilog程序,是一个加法器内容如下
module adder(count,sum,a,b,cin);
input[2:0] a,b;
input cin;
output count;
output [2:0] sum;
assign{count,sum}=a+b+cin;
endmodule
开始编译出现了几次错误,后来发现给实体的命名和程序中实体要一致而且大小写要一样,整个程序是嵌套再module和endmodule当中的
而其中的注释和C/C++类似,用//和来标明
module compare(equal,a,b);
output equal;
input [1:0] a,b;
assign equal=(a==b)?1:0;//和C语言中的相同
endmodule
verilog的基本设计单元是“模块(BLOCK)”。一个模块由两个部分组成,一部分描述端口,一部分描述逻辑功能,即定义输入是如何影响输出的。如下
module block(a,b,c,d);
input a,b;
output c,d;
assign c=a|b;
assign d=a&b;
endmodule
模块中最重要的部分是逻辑功能定义。有三种方法可以再模块中产生逻辑。
1、用“assign”声明语句
如:assign a=b&c;
2、用实例元件,如同调入库元件一样
如:and and_inst(q,a,b);
3、用“always”块
如:always @(posedge clk or posedge clr) //always块生成了一个带有异步清除端的D触发器。
begin
if(clr) q<=0;
else if(en) q<=d;
end
采用assign语句是最常用的方法之一。“always”块可以用于产生各种逻辑,常用于描述时序逻辑。
Verilog HDL中总共有19种数据类型
4
个最基本的数据类型:integer型、parameter型、reg型和wire型。其他的类型有large型、medium型、scalared型、
time型、small型、tri型、trio型、tril型、triand型、trior型、trireg型、vectored型、wand型和wor
型,以后会有介绍。
一、数字
整数
有二、八、十、十六进制
<位宽>’<进制><数字>,这是一种全面的描述方式
缺省的位宽由具体的机器系统决定,至少是32位
缺省的进制为十进制
x表示不定值,z代表高阻值,z还可以用?代替
4'b10x0 //位宽为4的二进制数从低位数起第二位为不定值
4'b101z //位宽为4的二进制数从低位数起第一位为高阻值
12'dz //位宽为12的十进制数,其值为高阻值
12'd? //同上
8'h4x //位宽为8的十六进制数,其低4位值为不定值
要表示负数的话只需在位宽表达式前加一个减号
4、下划线(underscore_)
可以用在数字之间提高数字的可读性如16'b1010_1011_1111_1010
二、参数(parameter)型
即用parameter来定义一个标识符代表一个常量,称为符号常量,类似于const和define
pi一样。
网络数据类型表示结构实体(例如门)之间的物理连接,不能储存值,而且必须收到驱动器的驱动,如果没有驱动则该变量就是高阻的,