?? beta_cal.v
字號(hào):
///*********************************************************************/// Copyright(c) 2006, ZTE./// All rights reserved.////// Project name : ZXMBW-250(WIMAX)/// File name : beta_cal.v/// Author : yuanliuqing/// Department : WiMAX department/// Email : yuan.liuqing@zte.com.cn////// Module_name : beta_cal/// Called by : max_log_map module///---------------------------------------------------------------------/// Module Hiberarchy:/// |----mod_max4_0/// |----mod_max4_1/// |----mod_max4_2/// |----mod_max4_3/// beta_cal------|----mod_max4_4/// |----mod_max4_5/// |----mod_max4_6/// |----mod_max4_7///---------------------------------------------------------------------////// Release History:///---------------------------------------------------------------------/// Version | Date | Author Description///---------------------------------------------------------------------/// 1.0-0 | 2006-06-15 | 建立文件/// 1.0-1 | 2007-12-21 | 優(yōu)化,fang.yongzhong///---------------------------------------------------------------------/// Main Function:/// 1、CTC譯碼核beta計(jì)算單元///*********************************************************************`timescale 1ns/100psmodule beta_cal #(parameter SOFT_INFO_WIDTH = 6'd6, ///軟信息寬度 PRIOR_INFO_WIDTH = 6'd8, ///先驗(yàn)信息寬度 BRANCH_MATRIC_WIDTH = 6'd9, ///分支度量數(shù)據(jù)寬度 STATE_MATRIC_WIDTH = 6'd12 ) ///狀態(tài)度量數(shù)據(jù)寬度 ( ///system i/f input clk_sys, ///系統(tǒng)時(shí)鐘信號(hào) input rst_b, ///輸入復(fù)位信號(hào) ///input i/f input [SOFT_INFO_WIDTH*2-1:0] ys, ///soft info: system part input [SOFT_INFO_WIDTH*2-1:0] yp, ///soft info: check part input [PRIOR_INFO_WIDTH*3-1:0] la, ///prior info input beta_source_val, input new_beta_cal, input clr_beta, ///clr beta and gamma reg ///output i/f output wire [STATE_MATRIC_WIDTH*8-1:0] beta, ///后向狀態(tài)度量 output wire [BRANCH_MATRIC_WIDTH*16-1:0] gamma, ///分支度量 output wire [SOFT_INFO_WIDTH*2-1:0] ys_beta_out, output wire [PRIOR_INFO_WIDTH*3-1:0] la_beta_out, output wire beta_sink_val );///*********************************************************************///內(nèi)部信號(hào)定義///*********************************************************************reg beta_source_val_d1;reg beta_source_val_d2;reg beta_source_val_d3;reg beta_source_val_d4;reg [STATE_MATRIC_WIDTH-1:0] beta7;reg [STATE_MATRIC_WIDTH-1:0] beta6;reg [STATE_MATRIC_WIDTH-1:0] beta5;reg [STATE_MATRIC_WIDTH-1:0] beta4;reg [STATE_MATRIC_WIDTH-1:0] beta3;reg [STATE_MATRIC_WIDTH-1:0] beta2;reg [STATE_MATRIC_WIDTH-1:0] beta1;reg [STATE_MATRIC_WIDTH-1:0] beta0;///*************************************************************************///input rename///*************************************************************************reg [SOFT_INFO_WIDTH-1:0] ys1,ys0,yp1,yp0;reg [PRIOR_INFO_WIDTH-1:0] la3,la2,la1;always @(posedge clk_sys) begin ys1 <= ys[SOFT_INFO_WIDTH*2-1:SOFT_INFO_WIDTH]; ys0 <= ys[SOFT_INFO_WIDTH-1:0]; yp1 <= yp[SOFT_INFO_WIDTH*2-1:SOFT_INFO_WIDTH]; yp0 <= yp[SOFT_INFO_WIDTH-1:0]; la3 <= la[PRIOR_INFO_WIDTH*3-1:PRIOR_INFO_WIDTH*2]; la2 <= la[PRIOR_INFO_WIDTH*2-1:PRIOR_INFO_WIDTH]; la1 <= la[PRIOR_INFO_WIDTH-1:0];end///*************************************************************************///最高位擴(kuò)展并延時(shí)一節(jié)拍///*************************************************************************reg [BRANCH_MATRIC_WIDTH-1:0] la3_d1,la2_d1,la1_d1;always @( posedge clk_sys or negedge rst_b ) begin if( !rst_b ) begin {la3_d1,la2_d1,la1_d1} <= 27'd0; end else begin la3_d1 <= {la3[PRIOR_INFO_WIDTH-1],la3}; la2_d1 <= {la2[PRIOR_INFO_WIDTH-1],la2}; la1_d1 <= {la1[PRIOR_INFO_WIDTH-1],la1}; endend///*************************************************************************///求取la1,la2,la3的最大并作最高位拓展///*************************************************************************wire [PRIOR_INFO_WIDTH-1:0] la_max_a,la_max_b,la_max_c;reg [BRANCH_MATRIC_WIDTH-1:0] la_max;assign la_max_a = la1 - la2;assign la_max_b = la1 - la3;assign la_max_c = la2 - la3;always @( posedge clk_sys or negedge rst_b ) begin if( !rst_b ) la_max <= 9'd0; else if(la1[7]==1'b1 & la2[7]==1'b1 & la3[7]==1'b1) la_max <= 9'd0; else case ({la_max_a[7], la_max_b[7], la_max_c[7]}) 3'b000,3'b001 : la_max <= {la1[PRIOR_INFO_WIDTH-1],la1}; 3'b100,3'b110 : la_max <= {la2[PRIOR_INFO_WIDTH-1],la2}; default : la_max <= {la3[PRIOR_INFO_WIDTH-1],la3}; endcaseend///*************************************************************************///分支度量計(jì)算6,8,9///*************************************************************************reg [BRANCH_MATRIC_WIDTH-1:0] gamma15_t1,gamma14_t1,gamma13_t1,gamma12_t1, gamma11_t1,gamma10_t1,gamma9_t1, gamma8_t1, gamma7_t1, gamma6_t1, gamma5_t1, gamma4_t1, gamma3_t1, gamma2_t1, gamma1_t1, gamma0_t1;always @( posedge clk_sys or negedge rst_b ) begin if( !rst_b ) begin gamma0_t1 <= 9'd0; gamma1_t1 <= 9'd0; gamma2_t1 <= 9'd0; gamma3_t1 <= 9'd0; gamma4_t1 <= 9'd0; gamma5_t1 <= 9'd0; gamma6_t1 <= 9'd0; gamma7_t1 <= 9'd0; gamma8_t1 <= 9'd0; gamma9_t1 <= 9'd0; gamma10_t1 <= 9'd0; gamma11_t1 <= 9'd0; gamma12_t1 <= 9'd0; gamma13_t1 <= 9'd0; gamma14_t1 <= 9'd0; gamma15_t1 <= 9'd0; end else begin gamma0_t1 <= + {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} + {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} + {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} + {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma1_t1 <= + {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} + {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} + {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} - {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma2_t1 <= + {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} + {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} - {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} + {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma3_t1 <= + {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} + {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} - {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} - {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma4_t1 <= + {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} - {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} + {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} + {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma5_t1 <= + {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} - {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} + {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} - {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma6_t1 <= + {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} - {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} - {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} + {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma7_t1 <= + {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} - {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} - {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} - {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma8_t1 <= - {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} + {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} + {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} + {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma9_t1 <= - {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} + {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} + {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} - {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma10_t1 <= - {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} + {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} - {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} + {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma11_t1 <= - {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} + {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} - {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} - {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma12_t1 <= - {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} - {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} + {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} + {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma13_t1 <= - {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} - {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} + {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} - {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma14_t1 <= - {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} - {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} - {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} + {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; gamma15_t1 <= - {{3{ys0[SOFT_INFO_WIDTH-1]}},ys0} - {{3{ys1[SOFT_INFO_WIDTH-1]}},ys1} - {{3{yp0[SOFT_INFO_WIDTH-1]}},yp0} - {{3{yp1[SOFT_INFO_WIDTH-1]}},yp1}; endendwire [BRANCH_MATRIC_WIDTH-1:0] gamma15_t2,gamma14_t2,gamma13_t2,gamma12_t2, gamma11_t2,gamma10_t2,gamma9_t2, gamma8_t2, gamma7_t2, gamma6_t2, gamma5_t2, gamma4_t2, gamma3_t2, gamma2_t2, gamma1_t2, gamma0_t2;///0-3assign gamma0_t2 = gamma0_t1 - la_max;assign gamma1_t2 = gamma1_t1 - la_max;assign gamma2_t2 = gamma2_t1 - la_max;assign gamma3_t2 = gamma3_t1 - la_max;///4-7assign gamma4_t2 = gamma4_t1 + la1_d1 - la_max;assign gamma5_t2 = gamma5_t1 + la1_d1 - la_max;assign gamma6_t2 = gamma6_t1 + la1_d1 - la_max;assign gamma7_t2 = gamma7_t1 + la1_d1 - la_max;///8-11assign gamma8_t2 = gamma8_t1 + la2_d1 - la_max;assign gamma9_t2 = gamma9_t1 + la2_d1 - la_max;assign gamma10_t2 = gamma10_t1 + la2_d1 - la_max;assign gamma11_t2 = gamma11_t1 + la2_d1 - la_max;///12-15assign gamma12_t2 = gamma12_t1 + la3_d1 - la_max;assign gamma13_t2 = gamma13_t1 + la3_d1 - la_max;assign gamma14_t2 = gamma14_t1 + la3_d1 - la_max;assign gamma15_t2 = gamma15_t1 + la3_d1 - la_max;///gamma regreg [BRANCH_MATRIC_WIDTH-1:0] gamma15,gamma14,gamma13,gamma12, gamma11,gamma10,gamma9, gamma8, gamma7, gamma6, gamma5, gamma4, gamma3, gamma2, gamma1, gamma0;always @ ( posedge clk_sys or negedge rst_b ) begin if( !rst_b ) begin { gamma15, gamma14, gamma13, gamma12, gamma11, gamma10, gamma9, gamma8, gamma7, gamma6, gamma5, gamma4, gamma3, gamma2, gamma1, gamma0 } <= 1'b0; end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -