• 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、混合设计风格

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

  • 相关阅读:
    牛客 动物园 (KMP)
    网络流模板与经典模型
    Codeforces Round #698 (Div. 2)
    CF1485X Codeforces Round #701
    CF1479B Painting the Array(贪心+DP)
    「AGC021E」Ball Eat Chameleons
    「AGC034E」 Complete Compress
    「AGC034D」 Manhattan Max Matching
    「ARC103D」 Distance Sums
    「AGC035C」 Skolem XOR Tree
  • 原文地址:https://www.cnblogs.com/vilicute/p/11579881.html
Copyright © 2020-2023  润新知