面先介绍几个简单的Verilog HDL module。
例[1] 加法器
module add (a, b, cin, count, sum);
input [2:0] a; //加数a
input [2:0] b; //加数b
input cin; //进位输入
output count; //进位输出
output [2:0] sum; //结果
assign {count,sum} = a +b + cin;
endmodule
该例描述一个3位加法器,从例子可看出一个模块是以module 开始,endmodule 结束。
例[2] 比较器
module compare (equal,a,b);
input [1:0] a,b; // declare the input signals ;
output equare ; // declare the output signal;
assign equare = (a == b) ? 1:0 ; / * if a = b , output 1, otherwise 0;*/
endmodule
该例描述一个比较器, 从上可看到,/* .... */ 和 // ... 表示注释部分。注释只是为了方便设计者读懂代码,对编译并不起作用。
注释可以用中文也可以用英文,但是推荐用英文,因为使用中文注释可能引起一些工具软件的错误。Verilog HDL的注释只有/* .... */ 和 // ...两种,其中,/* .... */可以跨行, // ... 不能跨行。
例[3]多路选择器
module multi2(selete,a,b,c);
input a,b; // declare the input signals;
input selete; // declare the input signal;
output c; // declare the output signal;
assign c = (selete == 1) ? a:b ; / * if selete = 1 , c = a, otherwise c = b*/
endmodule
module multi4(selete_4to1,dat_in_0,dat_in_1,dat_in_2,dat_in_3,dat_out);
input dat_in_0,dat_in_1,dat_in_2,dat_in_3; // declare the input signals;
input [1:0] selete_4to1; // declare the input signal;
output dat_out; // declare the output signal;
wire dat_out_0; // declare the Internal signal;
wire dat_out_1; // declare the Internal signal;
multi2 U_multi2_0(selete_4to1[0],dat_in_0,dat_in_1,dat_out_0);
multi2 U_multi2_1(selete_4to1[0],dat_in_2,dat_in_3,dat_out_1);
multi2 U_multi2_3(selete_4to1[1],dat_out_0,dat_out_1,dat_out);
endmodule
该实例首先描述了一个2选1多路选择器,然后通过三次例化实现了一个4选1多路选择器。模块multi2对multi4而言相当于一个已存在的器件,在multi4模块中对该器件进行实例化,实例化名分别为 U_multi2_0、 U_multi2_1、 U_multi2_2。 |