• verilog RTL 编程实践之五


    How to build and test a module

    1.test have: generate 、stimulus 、check 、respose

    2.only one monitor can be active at any time

    3.$finish VS $finish(2)

        $finish(2) print about cpu / memory information

    4.parameter defparam

       defparam ===> redefine parameters (cross module)

       modulename #(parameter1(parameter_value),….)(port_declaratoin); <==常见

    5.tasks and functions are declared wihin modules

      1. tasks may only be used in procedural blocks.

          A task invocation or task enable as it is called in verilog , is a statememt by itself .

          It may not be used as operands in an expression.

       2.functions are used as operands in expressions

          A function may be used in either a procedural block or

          a continuous assignment,or indeed,any place where an expression may appear

    6.if task statmemts inside can synthesys           ====> task can synthesys

       if task statmemts inside can not synthesys     ====> task can not synthesys

       task may have time or delay control

    7.function not have time or delay control

      if function statmemts inside can synthesys         ====> function can synthesys

       if function statmemts inside can not synthesy     ====> function can not synthesys

    8.system task

      $display / $write /$strobe /$monitor

               $write not add a newline character to the output string

      $readmemb/$readmemh  === store file into memory

       $stop

       $finish / $finish(2)

    9.system function

       $time <===返回64位数

       $stime <===返回32位数

       $random

       …

       conversion function:

       $rtoi  / $itor / $realtobits / $bitstoreal

    10.XMR

    verilog has a mechanism for globally referencing nets, registers,events,

    tasks,and functions called the cross-module reference , or XMR.


    11.Hierarchical Module

      module A;

    reg x; //1 <==A.x

    task B;

    reg x;//2 <==A.B.x

      begin

         …

         begin : C       

             reg x; //3   <===A.B.C.x

             ..

             end

         end

    endtask

           initial

            begin:D

               reg x;//4  <===A.D.x

                 …

              end

    endmodule


    12.verilog-2001 new features

         (1).ANSI-style port lists

              95style:一个signal 需要端口、方向、数据类型可能需要重复三次。

               2K1style:把一个signal的端口、方向、数据类型全部放在一起申明。

         (2).parameter

              module module_name #(parameter_declaration)

                                            (port_declaration);

         (3)constant function

             V2K1: log2

          (4)comma separated sensitivity list

           (5) combinational logic sensitivity list

                推荐:

                      always@(a or b or sel)

                 不推荐:

                        always@(*)

            (6)vector part select <==位宽选择  

             reg [63:0] vector1;

             reg [0:63] vector2;

            

              byte = vector1[31-:8];//vector1[31:24]

              byte = vector1[24+:8];//vector1[31:24]

              byte  =vector2[31-:8];//vector2[24:31]

              byte  =vector2[24+:8];//vector2[24:31]


    13.Multi-Demensional Array

         in verilog-1995

          only 1D arrays of reg / integer and time allowed

         in verilog-2001

           wire [31:0] array_1D[127:0];

           real  array_2D[127:0][127:0];
      14.Array Bit and part select

          in verilog-1995

              reg [31:0] ram [0:255];

              reg [7:0] high_byte;

              reg [31:0] temp;

     

               temp = ram[5];

               high_byte=temp[31:24];

          in verilog-2001

                reg[31:0] ram[0:255];

                reg[7:0] high_byte;

              

                 high_byte = ram[5][31:24];


           15.power operator **

              取2的10次方:1K=2**10

           16.size and typed parameter <==95中,the width of a parameter must be 32bits

            17.explicit in_line parameter pass

               .parameter(parameter_value)

             18.fixed local parameter

                module multiplier(a,b,product);

                    parameter a_width = 8,b_width=8;

                     loaclparam product_width= a_width+b_width;

                     parameter :can be redifined by defparam or in_line parameter redefinition

                    localparam: cannot be refined(外面不可见)

            19.generate <== use loops to generate any number of instances

                    generate

                        genvar i;

                         for(i=xx;i<=xx;i=i+1)

                             begin :indentifier

                               ….

                              end

                       endgenerate

  • 相关阅读:
    活动投票
    人品问题
    网站记录
    浅谈底层常数优化及编译器优化
    透过用户思维谈程序员的进阶之路
    我们为什么要学习?写给我的组员们
    原来你是这样的Websocket--抓包分析
    我看依赖注入
    使用反射+策略模式代替项目中大量的switch case判断
    JavaScript 词法作用域不完全指北
  • 原文地址:https://www.cnblogs.com/chip/p/3970734.html
Copyright © 2020-2023  润新知