zoukankan      html  css  js  c++  java
  • parameter与localparam的使用

    :parameter可用作在顶层模块中例化底层模块时传递参数的接口,localparam的作用域仅仅限于当前module,不能作为参数传递的接口。

    [plain] view plain copy
     
    1. `timescale 1ns/100ps  
    2.   
    3. module mem (  
    4.   
    5.   clka,  
    6.   wea,  
    7.   addra,  
    8.   dina,  
    9.   
    10.   clkb,  
    11.   addrb,  
    12.   doutb);  
    13.   
    14.   parameter       DATA_WIDTH = 16;  
    15.   parameter       ADDR_WIDTH =  5;  
    16.   localparam      DW = DATA_WIDTH - 1;  
    17.   localparam      AW = ADDR_WIDTH - 1;  
    18.   
    19.   input           clka;  
    20.   input           wea;  
    21.   input   [AW:0]  addra;  
    22.   input   [DW:0]  dina;  
    23.   
    24.   input           clkb;  
    25.   input   [AW:0]  addrb;  
    26.   output  [DW:0]  doutb;  
    27.   
    28.   reg     [DW:0]  m_ram[0:((2**ADDR_WIDTH)-1)];  
    29.   reg     [DW:0]  doutb;  
    30.   
    31.   always @(posedge clka) begin  
    32.     if (wea == 1'b1) begin  
    33.       m_ram[addra] <= dina;  
    34.     end  
    35.   end  
    36.   
    37.   always @(posedge clkb) begin  
    38.     doutb <= m_ram[addrb];  
    39.   end  
    40.   
    41. endmodule  


    在顶层文件中例化mem module时可以这样做:

    [plain] view plain copy
     
    1. mem #(.DATA_WIDTH(DATA_WIDTH), .ADDR_WIDTH(6))  
    2.  i_mem (  
    3.   .clka (adc_clk),  
    4.   .wea (adc_wr),  
    5.   .addra (adc_waddr),  
    6.   .dina (adc_wdata),  
    7.   .clkb (dma_clk),  
    8.   .addrb (dma_raddr),  
    9.   .doutb (dma_rdata_s));  


    也可以将底层模块的parameter参数置于module端口声明之前,例如:

    [plain] view plain copy
     
      1. `timescale 1ns/100ps  
      2. module mem   
      3.           #(parameter DATA_WIDTH = 16  
      4.             parameter ADDR_WIDTH =  5)  
      5.            (    
      6.             input    clka,  
      7.             input    wea,  
      8.             input   [AW:0]  addra,  
      9.             input   [DW:0]  dina,  
      10.             input           clkb,  
      11.             input   [AW:0]  addrb,  
      12.             output  [DW:0]  doutb  
      13.            );   
      14.   
      15.   localparam      DW = DATA_WIDTH - 1;  
      16.   localparam      AW = ADDR_WIDTH - 1;  
      17.   
      18.   reg     [DW:0]  m_ram[0:((2**ADDR_WIDTH)-1)];  
      19.   reg     [DW:0]  doutb;  
      20.   
      21.   always @(posedge clka) begin  
      22.     if (wea == 1'b1) begin  
      23.       m_ram[addra] <= dina;  
      24.     end  
      25.   end  
      26.   
      27.   always @(posedge clkb) begin  
      28.     doutb <= m_ram[addrb];  
      29.   end  
      30.   
      31. endmodule  
  • 相关阅读:
    重拾安卓_01_安卓开发环境搭建(eclipse)
    重拾安卓_01_安卓开发环境搭建(android studio)
    【BZOJ】1038: [ZJOI2008]瞭望塔
    【BZOJ】2178: 圆的面积并
    【UR #4】元旦三侠的游戏(博弈论+记忆化)
    【BZOJ】1027: [JSOI2007]合金(凸包+floyd)
    【POJ】1151 Atlantis(线段树)
    【POJ】1228 Grandpa's Estate(凸包)
    【POJ】1556 The Doors(计算几何基础+spfa)
    【POJ】1113 Wall(凸包)
  • 原文地址:https://www.cnblogs.com/Helloworld666/p/7325856.html
Copyright © 2011-2022 走看看