zoukankan      html  css  js  c++  java
  • [文档].艾米电子 寄存器,Verilog

    对读者的假设

    已经掌握:

    内容

    1 寄存器

    寄存器是一组D触发器的集合,由同一时钟和复位信号控制。和D-FF一样,寄存器有可选择的异步复位信号和同步使能信号。代码也和D-FF一样,但是需要申明数组数据类型的输入和输出信号。

    代码1 8位带异步复位的寄存器

    module reg_asyn_rst
    (
      // global clock and asyn reset
      input clk,
      input rst_n,
      // I/O interface
      input [7:0] d,
      output reg [7:0] q
    );
    
    // body
    always@(posedge clk, negedge rst_n)
      if(!rst_n)
        q <= 0;
      else
        q <= d;
     
     
    endmodule
    

    2 寄存器文件

    寄存器文件是一组寄存器集合,有一个输入端口和一个或几个输出端口。写地址信号,w_addr,指定在哪里存数据;读地址信号,r_addr,指定在哪里收回数据。寄存器文件一般用于快速的、临时的数据存储。代码2所示为一个参数化的寄存器文件,其数据线宽度为B,地址线宽度为W。定义了两个参数:W指定地址线的宽度,暗示此文件中有 2^W 个字;B指定每一个字里面有多少位。

    代码2 参数化的寄存器文件

    module reg_file
    #(
      parameter B = 8, // width of the data bus
      parameter W = 2  // width of the address bus
    )
    (
      // global clock
      input clk,
      // register file interface
      input wr_en,
      input [W-1:0] w_addr,
      input [W-1:0] r_addr,
      input [B-1:0] w_data,
      output [B-1:0] r_data
    );
    
    // signal declaration 
    reg [B-1:0] array_reg [2**W-1:0];
    
    // body
    // write operation 
    always@(posedge clk)
      if(wr_en)
        array_reg[w_addr] <= w_data;
    
    // read operation
    assign r_data = array_reg[r_addr];
     
    endmodule

    第18行,我们注意到一个新的数据类型,二维的数组数据类型。此处的**,表示乘方。

    reg [B-1:0] array_reg [2**W-1:0];

    首先,它表示array_reg这个变量有[2**W-1:0]个元素,每个元素的数据类型为reg [B-1:0]。其次,该变量需要一个索引来访问数组中的元素,如reg_array[w_addr]。

    3 FPGA芯片的存储模块

    在Cyclone II FPGA中,每个LE都包括一个带异步复位和同步使能的D-FF,但是同时也带有一个4输入的LUT。如果单纯使用LE来做大量的存储工作的话,将会浪费很多LE。此时可以考虑使用内置的RAM块,比方说Cycloen II里面的M4K,或者更高级的芯片内的M9K。今后会讨论相关的问题。

    参考

    1 Pong P. Chu.FPGA Prototyping By Verilog Examples: Xilinx Spartan-3 Version.Wiley

    另见

    [与艾米一起学FPGA/SOPC].[逻辑实验文档连载计划]

     安德鲁® / CC BY 2.5     FPGA Run!
  • 相关阅读:
    grep使用多个查询条件--或
    Qt Quick App的两种启动模式
    ICP编程软件配置(烧写KEIL编译后的bin文件)
    C/C++语言中const的用法
    QT小插件类之QRoundProgressBar
    QT实现单个EXE文件
    QT小技巧学习记录
    无线路由器的五种工作模式
    Qt5.4静态编译方法
    Altium Designer极坐标布局方法
  • 原文地址:https://www.cnblogs.com/yuphone/p/1900968.html
Copyright © 2011-2022 走看看