No.2 Verilog 模块和描述风格

2-1 模块

  Verilog语言基本的描述单元----模块,模块是用来描述某个设计的功能或结构,以及它与其它外部模块进行通信的端口。

 1 module module_name(port_list);
 2     Declarations:                //声明
 3         reg, wire, parameter,
 4         input, output, inout,
 5         function, task,...
 6     Statements:                //语句
 7         Initial statement
 8         Always statement
 9         Module instantiation
10         Gate instantiation
11         UPD instantiation
12         Continuous assignment
13         Generate statement
14 endmodule

2-2 描述风格

2-2-1 延时

  Verilog 的所有延时都是按时间单位来定义的,时间单位声明应该在模块声明之前。

‘timescale 1ns/100ps //延时时间单位1ns,时间精度100ps

2-2-2 描述风格

1、数据流描述----使用连续性赋值语句 assign

assign [delay] DEST = SRC;

*当右边的表达式的操作数无论何时发生变化,右边的表达式都会重新计算,并在指定延时后赋给左边的线网变量。

 1 ‘timescale 1ns/100ps
 2 module decoder_24(A, B, EN, Q);
 3     input A, B, EN;
 4     output [0:3] Q;
 5     wire Abar, Bbar;
 6     assign #1 Abar = ~A;
 7     assign #1 Bbar = ~B;
 8     assign #2 Q[0] = ~(Abar & Bbar & EN);
 9     assign #2 Q[1] = ~(Abar & B & EN);
10     assign #2 Q[2] = ~(A & Bbar & EN);
11     assign #2 Q[3] = ~(A & B & EN);
12 endmodule

2、行为描述----initial、always

(1)initiial: 只执行一次;

(2)always:总是在循环执行。

所有的initial和always语句都在0时刻并行执行。

 1 ‘timescale 1ns/100ps
 2 
 3 module adder1(a, b, cin, sum, cout);//一位全加器
 4     input a, b, cin;
 5     output sum, cout;
 6     
 7     always @(a or b or cin) begin
 8         sum <= (a^b)^cin;
 9         cout <= ((a&cin)|(b&cin)|(a&b));
10     end
11 endmodule
12 
13 
14 module test(lr ,rn); //initial示例
15     output reg lr, rn;
16     initial 
17         begin
18             lr = 0;
19             rn = 1;
20             lr = #5 1;
21             rn = #8 0;
22         end
23 endmodule

3、结构描述----基于逻辑门电路的设计风格

 1 //一位全加器
 2 
 3 module adder1(a, b, cin, sum, cout);
 4     input a, b, cin;
 5     output sum, cout;
 6     wire s1, t1, t2, t3;
 7     xor
 8         ux1(s1, a, b),
 9         ux2(sum, s1, cin);
10     and
11         tm1(t1, a, b),
12         tm2(t2, a, cin),
13         tm3(t3, b, cin);
14     or 
15         uo(cout, t1, t2, t3);
16 endmodule
17 
18 //四位全加器
19 
20 module Adder4(fa, fb, fcin, fsum, fcout);
21     parameter size = 3;
22     input [size : 0] fa, fb;
23     input fcin;
24     output [size : 0] fsum;
25     output fcout;
26     wire [size - 1 : 0] ftemp;
27     
28     adder1 //按对应端口名连接
29         ufa1(.a(fa[0]), .b(fb[0]), .cin(fcin),      .sum(fsum[0]), .cout(ftemp[0])),
30         //ufb1(fa[0], fb[0], fcin, fsum[0], ftemp[0]), //按端口顺序连接,下同
31         ufa2(.a(fa[1]), .b(fb[1]), .cin(ftemp[0]), .sum(fsum[1]), .cout(ftemp[1])),
32         ufa3(.a(fa[2]), .b(fb[2]), .cin(ftemp[1]), .sum(fsum[2]), .cout(ftemp[2])),
33         ufa4(.a(fa[3]), .b(fb[3]), .cin(ftemp[2]), .sum(fsum[3]), .cout(fcout));
34 endmodule

4、混合设计风格

在模块中,可混合使用前面三种设计风格,这样可以帮助我们更高效地进行设计开发,但要注意不同类型语句的语法使用规范。

原文地址:https://www.cnblogs.com/vilicute/p/11579881.html