⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alpha_buf.v

📁 上传的是WIMAX系统中
💻 V
字号:
///*********************************************************************
/// Copyright(c) 2006, ZTE.
/// All rights reserved.
///
/// Project name : ZXMBW-250(WIMAX)
/// File name    : alpha_buf.v
/// Author       : yuanliuqing
/// Department   : WiMAX department
/// Email        : yuan.liuqing@zte.com.cn
///
/// Module_name  : alpha_buf
/// Called by    : max_log_map  module
///---------------------------------------------------------------------
/// Module Hiberarchy:
/// alpha_buf-----|----alpha_ram
///---------------------------------------------------------------------
///
/// Release History:
///---------------------------------------------------------------------
/// Version     |    Date     |       Author Description
///---------------------------------------------------------------------
/// 1.0-0       | 2006-06-17  | 建立文件
/// 1.0-1       | 2007-12-21  | 修改格式,fang.yongzhong
///---------------------------------------------------------------------
// Main Function:
/// 1、CTC译码核alpha计算数据缓存
///*********************************************************************

`timescale 1ns/100ps

module alpha_buf
    #(parameter WIN_SIZE            = 6'd32,        ///sliding window size, unit: lattice
                STATE_MATRIC_WIDTH  = 6'd12,        ///状态度量数据宽度
                ALPHA_RAM_ADR_WIDTH = 6'd7          ///alpha_buf地址宽度
                 )
    (
    ///system i/f
    input              clk_sys,                     ///系统时钟信号
    input              rst_b,                       ///输入复位信号
    ///input i/f
    input       [STATE_MATRIC_WIDTH*8-1:0]    alpha,
    input                                     alpha_source_val,     ///输入使能信号
    input                                     clr_alpha_buf,        ///清空buf信号
    ///output i/f
    output wire [STATE_MATRIC_WIDTH*8-1:0]    alpha_buf_out,
    input                                     rd_alpha_buf
    );

///*********************************************************************
///内部信号定义
///*********************************************************************
reg     [ALPHA_RAM_ADR_WIDTH-1:0]   forward_adr;    ///incremental adr for wr/rd circular_buffer_cell
reg     [ALPHA_RAM_ADR_WIDTH-1:0]   backward_adr;   ///decreasing adr for rd circular_buffer_cell

///*************************************************************************
///Notes:
///alpha_buf has a ping-pong structure, ping-ram and pong-ram distinguish themselves
///by different address space in a dpram.
///Input data has a incremental wr address, namely from 0 to WIN_SIZE-1 in ping/pong ram.
///Output data has a decreasing rd address, namely from WIN_SIZE-1 to 0 in ping/pong ram.
///*************************************************************************

///generate forward_adr according to WIN_SIZE parameter
always @ ( posedge clk_sys or negedge rst_b ) begin
    if( !rst_b )
        forward_adr <= 1'b0;
    else if( clr_alpha_buf )
        forward_adr <= 1'b0;
    else if( alpha_source_val )
        begin
        if( forward_adr==(WIN_SIZE-1'b1) )
            forward_adr <= 7'd64;
        else if( forward_adr==(7'd64+WIN_SIZE-1'b1) )
            forward_adr <= 1'b0;
        else
            forward_adr <= forward_adr + 1'b1;
        end
    else
        forward_adr <= forward_adr;
end

///generate backward_adr according to WIN_SIZE parameter
always @ ( posedge clk_sys or negedge rst_b ) begin
    if( !rst_b )
        backward_adr <= WIN_SIZE-1'b1;
    else if( clr_alpha_buf )
        backward_adr <= WIN_SIZE-1'b1;
    else if( rd_alpha_buf )
        begin
        if( backward_adr==1'b0 )
            backward_adr <= 7'd64+WIN_SIZE-1'b1;
        else if( backward_adr==7'd64  )
            backward_adr <= WIN_SIZE-1'b1;
        else
            backward_adr <= backward_adr - 1'b1;
        end

    else
        backward_adr <= backward_adr;
end

///instantiate alpha_ram
///dpram parameters: 96-b x 128, no output register, singal clock, wr_port_width=rd_port_width
alpha_ram alpha_ram
(
    .clock     (clk_sys         ),
    .data      (alpha           ),
    .rdaddress (backward_adr    ),
    .rden      (rd_alpha_buf    ),
    .wraddress (forward_adr     ),
    .wren      (alpha_source_val),
    .q         (alpha_buf_out   )
);

endmodule ///alpha_buf

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -