📄 ctc_rx_fsm.v
字号:
///*********************************************************************/// Copyright(c) 2006, ZTE./// All rights reserved.////// Project name : ZXMBW-250(WIMAX)/// File name : ctc_rx_fsm.v/// Author : wangjinshan yuanliuqing/// Department : 2nd IC department/// Email : wang.jinshan1@zte.com.cn////// Module_name : ctc_rx_fsm/// Called by : ctc_decoder module///---------------------------------------------------------------------/// Module Hiberarchy:/// ctc_rx_fsm-----|----ctc_rx_arb///---------------------------------------------------------------------////// Release History:///---------------------------------------------------------------------/// Version | Date | Author Description///---------------------------------------------------------------------/// 1.0-0 | 2006-06-09 | 建立文件///---------------------------------------------------------------------/// 1.1-0 | 2006-10-09 | 更改为3个译码核///---------------------------------------------------------------------/// Main Function:/// 1、CTC译码核输入状态机///*********************************************************************`timescale 1ns/100psmodule ctc_rx_fsm ( ///pre_ctc_fifo rd i/f input empty, ///FIFO空指示信号 input [12:0] usedw, input eop_rd, ///包结束信号 input [31:0] dat_rd, ///FIFO读数据 output reg rd, ///FIFO读信号 ///interface signals with ctc_decoder_core1 ///input input core1_req, ///read request signal ///output output wire core1_gnt, ///read grant signal output reg wr1_over, ///写dpram1结束信号 output reg [15:0] rx2ctrl1_length, ///长度 output reg [2:0] rx2ctrl1_type, ///类型号 output reg [1:0] rx2ctrl1_inst, ///instance output reg [2:0] rx2ctrl1_code_rate, ///码率 00:1/2 01:2/3 10:3/4 output reg [1:0] rx2ctrl1_modu_type, /// 00为QPSK,01为16QAM,10为64QAM output reg [15:0] rx2ctrl1_bnum, ///突发号 output reg [7:0] rx2ctrl1_fnum, ///FEC号 output reg [3:0] rx2ctrl1_miter, ///最大迭代次数 output reg [3:0] rx2ctrl1_segId, ///segment号 output reg [2:0] rx2ctrl1_frame_end_flag, ///add by mahui 070704 ///interface signals with ctc_decoder_core2 ///input input core2_req, ///read request signal ///output output wire core2_gnt, ///read grant signal output reg wr2_over, ///写dpram2结束信号 output reg [15:0] rx2ctrl2_length, ///长度 output reg [2:0] rx2ctrl2_type, ///类型号 output reg [1:0] rx2ctrl2_inst, ///instance output reg [2:0] rx2ctrl2_code_rate, ///码率 00:1/2 01:2/3 10:3/4 output reg [1:0] rx2ctrl2_modu_type, /// 00为QPSK,01为16QAM,10为64QAM output reg [15:0] rx2ctrl2_bnum, ///突发号 output reg [7:0] rx2ctrl2_fnum, ///FEC号 output reg [3:0] rx2ctrl2_miter, ///最大迭代次数 output reg [3:0] rx2ctrl2_segId, ///segment号 output reg [2:0] rx2ctrl2_frame_end_flag, ///add by mahui 070704 ///interface signals with ctc_decoder_core3 ///input input core3_req, ///read request signal ///output output wire core3_gnt, ///read grant signal output reg wr3_over, ///写dpram3结束信号 output reg [15:0] rx2ctrl3_length, ///长度 output reg [2:0] rx2ctrl3_type, ///类型号 output reg [1:0] rx2ctrl3_inst, ///instance output reg [2:0] rx2ctrl3_code_rate, ///码率 00:1/2 01:2/3 10:3/4 output reg [1:0] rx2ctrl3_modu_type, /// 00为QPSK,01为16QAM,10为64QAM output reg [15:0] rx2ctrl3_bnum, ///突发号 output reg [7:0] rx2ctrl3_fnum, ///FEC号 output reg [3:0] rx2ctrl3_miter, ///最大迭代次数 output reg [3:0] rx2ctrl3_segId, ///segment号 output reg [2:0] rx2ctrl3_frame_end_flag, ///add by mahui 070704 ///interface signals with ctc_dpram_11 ///output output reg [23:0] dpram11_wrdat, output reg dpram11_wr, output reg [10:0] dpram11_wradr, ///interface signals with ctc_dpram_12 ///output output reg [47:0] dpram12_wrdat, output reg dpram12_wr, output reg [10:0] dpram12_wradr, ///interface signals with ctc_dpram_21 ///output output reg [23:0] dpram21_wrdat, output reg dpram21_wr, output reg [10:0] dpram21_wradr, ///interface signals with ctc_dpram_22 ///output output reg [47:0] dpram22_wrdat, output reg dpram22_wr, output reg [10:0] dpram22_wradr, ///interface signals with ctc_dpram_31 ///output output reg [23:0] dpram31_wrdat, output reg dpram31_wr, output reg [10:0] dpram31_wradr, ///interface signals with ctc_dpram_32 ///output output reg [47:0] dpram32_wrdat, output reg dpram32_wr, output reg [10:0] dpram32_wradr, ///interface with ctc_fifo1 ///input input [8:0] ctc_fifo1_usedw, ///interface with ctc_fifo2 ///input input [8:0] ctc_fifo2_usedw, ///interface with ctc_fifo3 ///input input [8:0] ctc_fifo3_usedw, ///system signals input sys_clk, ///系统时钟信号 input reset_b, ///输入复位信号 output reg [15:0] rx_counter1_nc, output reg [15:0] rx_counter2_nc, output reg [15:0] rx_counter3_nc ///************bebug code: yuanliuqing 20061120 );///*********************************************************************///local parameter define:(本地参数:)///*********************************************************************parameter IDLE = 13'b0_0000_0000_0001;///!empty transitparameter HEAD = 13'b0_0000_0000_0010;///read head word0,1 cycleparameter WT1 = 13'b0_0000_0000_0100;///get head word0,1 cycleparameter WT2 = 13'b0_0000_0000_1000;///WAIT2 until (usedw >= (p_len>>2))parameter LEN = 13'b0_0000_0001_0000;///read head word1,1 cycleparameter WAIT1 = 13'b0_0000_0010_0000;///get head word1,1 cycleparameter WAIT2 = 13'b0_0000_0100_0000;///wait until core1_gnt or core2_gntparameter READ1 = 13'b0_0000_1000_0000;///pre W_SRG1,1 cycleparameter W_SRG1 = 13'b0_0001_0000_0000;///W_SRG1parameter READ2 = 13'b0_0010_0000_0000;///pre W_SRG2,1 cycleparameter WR_SRG2 = 13'b0_0100_0000_0000;///W_SRG2parameter READ3 = 13'b0_1000_0000_0000;///pre W_SRG3,1 cycleparameter WR_SRG3 = 13'b1_0000_0000_0000;///W_SRG3///*********************************************************************///内部信号定义///*********************************************************************wire [15:0] rx2ctrl1_length_next; ///长度reg [2:0] rx2ctrl1_type_next; ///类型号reg [2:0] rx2ctrl1_frame_end_flag_next; ///帧结束标志 //add by mahui 070704reg [1:0] rx2ctrl1_inst_next; ///instancereg [2:0] rx2ctrl1_code_rate_next; ///码率 00:1/2 01:2/3 10:3/4reg [1:0] rx2ctrl1_modu_type_next; /// 00为QPSK,01为16QAM,10为64QAMreg [15:0] rx2ctrl1_bnum_next; ///突发号reg [7:0] rx2ctrl1_fnum_next; ///FEC号reg [3:0] rx2ctrl1_miter_next; ///最大迭代次数reg [3:0] rx2ctrl1_segId_next; ///segment号wire [15:0] rx2ctrl2_length_next; ///长度reg [2:0] rx2ctrl2_type_next; ///类型号reg [2:0] rx2ctrl2_frame_end_flag_next; ///帧结束标志 //add by mahui 070704reg [1:0] rx2ctrl2_inst_next; ///instancereg [2:0] rx2ctrl2_code_rate_next; ///码率 00:1/2 01:2/3 10:3/4reg [1:0] rx2ctrl2_modu_type_next; /// 00为QPSK,01为16QAM,10为64QAMreg [15:0] rx2ctrl2_bnum_next; ///突发号reg [7:0] rx2ctrl2_fnum_next; ///FEC号reg [3:0] rx2ctrl2_miter_next; ///最大迭代次数reg [3:0] rx2ctrl2_segId_next; ///segment号wire [15:0] rx2ctrl3_length_next; ///长度reg [2:0] rx2ctrl3_type_next; ///类型号reg [2:0] rx2ctrl3_frame_end_flag_next; ///帧结束标志 //add by mahui 070704reg [1:0] rx2ctrl3_inst_next; ///instancereg [2:0] rx2ctrl3_code_rate_next; ///码率 00:1/2 01:2/3 10:3/4reg [1:0] rx2ctrl3_modu_type_next; /// 00为QPSK,01为16QAM,10为64QAMreg [15:0] rx2ctrl3_bnum_next; ///突发号reg [7:0] rx2ctrl3_fnum_next; ///FEC号reg [3:0] rx2ctrl3_miter_next; ///最大迭代次数reg [3:0] rx2ctrl3_segId_next; ///segment号reg [12:0] st_current;reg [12:0] st_next;reg [15:0] r11_cnt;reg [15:0] r22_cnt;reg [15:0] r33_cnt;reg [15:0] r11_cnt_next;reg [15:0] r22_cnt_next;reg [15:0] r33_cnt_next;reg [1:0] r1_cnt;reg [1:0] r2_cnt;reg [1:0] r3_cnt;reg [1:0] r1_cnt_next;reg [1:0] r2_cnt_next;reg [1:0] r3_cnt_next;reg [15:0] p_len; ///长度,unit: soft-info,8wire [15:0] p_len_next; ///长度,unit: lattice, 2-b///*********************************************************************///主程序代码:///*********************************************************************always @(posedge sys_clk or negedge reset_b) begin if(!reset_b) rx_counter1_nc <= 1'b0; else begin if(st_current==READ1) rx_counter1_nc <= rx_counter1_nc + 1'b1; else rx_counter1_nc <= rx_counter1_nc; endendalways @(posedge sys_clk or negedge reset_b) begin if(!reset_b) rx_counter2_nc <= 1'b0; else begin if(st_current==READ2) rx_counter2_nc <= rx_counter2_nc + 1'b1; else rx_counter2_nc <= rx_counter2_nc; endendalways @(posedge sys_clk or negedge reset_b) begin if(!reset_b) rx_counter3_nc <= 1'b0; else begin if(st_current==READ3) rx_counter3_nc <= rx_counter3_nc + 1'b1; else rx_counter3_nc <= rx_counter3_nc; endend// Current State Logic (sequential)// state_intializationalways @(posedge sys_clk or negedge reset_b) begin if(~reset_b) st_current <= IDLE; else st_current <= st_next;end // state machinealways @(*) begin st_next = st_current; case(st_current) IDLE: if(!empty) st_next = HEAD; else st_next = IDLE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -