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

📄 ctc_mctrl.v

📁 上传的是WIMAX系统中
💻 V
📖 第 1 页 / 共 3 页
字号:
       reg sop1;reg sop2;reg sop3;always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b) begin          sop1 <= 1'b0;          sop2 <= 1'b0;          sop3 <= 1'b0;    sop_source <= 1'b0;    end    else if(st_current==RD && (~|fwin_cnt)) begin          sop1 <= 1'b1;          sop2 <= sop1;          sop3 <= sop2;    sop_source <= sop3;    end    else begin          sop1 <= 1'b0;          sop2 <= sop1;          sop3 <= sop2;    sop_source <= sop3;    endend///**************************************************************************///eop_source信号生成///**************************************************************************reg eop1;reg eop2;always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b) begin          eop1 <= 1'b0;          eop2 <= 1'b0;    eop_source <= 1'b0;    end    else if(st_current==RD && (win_cnt==6'd32)) begin          eop1 <= 1'b1;          eop2 <= eop1;    eop_source <= eop2;    end    else begin          eop1 <= 1'b0;          eop2 <= eop1;    eop_source <= eop2;    endend///**************************************************************************///val_source信号生成                                                       ///**************************************************************************       reg val1;reg val2;reg val3;always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b) begin          val1 <= 1'b0;          val2 <= 1'b0;          val3 <= 1'b0;    val_source <= 1'b0;    end    else if(st_current==RD && (win_cnt<6'd32)) begin          val1 <= 1'b1;          val2 <= val1;          val3 <= val2;    val_source <= val3;    end    else begin          val1 <= 1'b0;          val2 <= val1;          val3 <= val2;    val_source <= val3;    endend///**************************************************************************///le_ram用来缓存外部信息,因为是利用活动窗分段译码算法,///而且要同时完成解交织,所以需要两块RAM来完成。///顺序写入,利用交织地址读出,可以完成交织过程;///顺序写入,利用解交织地址读出,就是解交织过程///le_ram中存放外部信息用于分支度量计算///**************************************************************************//interface with le_ramreg           le_wr0;reg           le_wr1;reg   [11:0]  le_wradr0;reg   [11:0]  le_wradr1;reg   [23:0]  le_din0;reg   [23:0]  le_din1;reg           le_rd0;reg           le_rd1;reg   [11:0]  le_rdadr0;reg   [11:0]  le_rdadr1;reg   [5:0]   w0_cnt;       //外部信息写计数器:w0_cntalways @(negedge reset_b or posedge sys_clk) begin    if(!reset_b)        w0_cnt <= 6'b0;    else if(w0_cnt==6'd31)        w0_cnt <= 6'b0;    else if(dec_no[0] & val_sink)        w0_cnt <= w0_cnt + 1'b1;end//输入的le的值在每个滑动窗都是逆序的,需要在写入//存储器时将次序调整过来reg   [11:0]  ADDR0;//FEC块个数计数器always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b)        ADDR0 <= 12'b0;    else if(w0_cnt==6'd31)        ADDR0 <= 12'd32;    else if(st_current==DEC_AD)        ADDR0 <= 12'b0;end//RAM0写always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b) begin        le_wr0    <= 1'b0;        le_wradr0 <= 12'b0;        le_din0   <= 24'b0;    end    else if(dec_no[0] & val_sink) begin        le_wr0  <= 1'b1;        le_din0 <= le;        if(~|w0_cnt)            le_wradr0 <= le_wradr0 + 12'd31 + ADDR0;        else            le_wradr0 <= le_wradr0 - 1'b1;    end    else if(eop_sink | dec_end) begin        le_wr0    <= 1'b0;        le_wradr0 <= 12'b0;        le_din0   <= 24'b0;    end    else begin        le_wr0    <= 1'b0;        le_wradr0 <= le_wradr0;        le_din0   <= le_din0;    endend//RAM0读reg          rd0;always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b) begin           rd0     <= 1'b0;        le_rd0     <= 1'b0;        le_rdadr0  <= 12'd0;    end    //同滑动窗对应起来    else if(~|dec_no) begin           rd0 <= 1'b0;        le_rd0 <= rd0;     le_rdadr0 <= 12'd0;              //mahui for test 070710    end    else if((~dec_no[0]) & (st_current==RD)) begin           rd0    <= 1'b1;        le_rd0    <= rd0;        le_rdadr0 <= llrde_addr;    end    else begin           rd0    <= 1'b0;        le_rd0    <= rd0;        le_rdadr0 <= 12'd0;         //mahui for test 070710    endendreg   [5:0]   w1_cnt;//外部信息写计数器:w1_cntalways @(negedge reset_b or posedge sys_clk) begin    if(!reset_b)        w1_cnt <= 6'b0;    else if(w1_cnt==6'd31)        w1_cnt <= 6'b0;    else if(~dec_no[0] & val_sink)        w1_cnt <= w1_cnt + 1'b1;endreg   [11:0]  ADDR1;//FEC块个数计数器always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b)        ADDR1 <= 12'b0;    else if(w1_cnt==6'd31)        ADDR1 <= 12'd32;    else if(st_current==DEC_AD)        ADDR1 <= 12'b0;end//RAM1写always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b) begin        le_wr1    <= 1'b0;        le_wradr1 <= 12'b0;        le_din1   <= 24'b0;    end    else if((~dec_no[0]) & val_sink) begin        le_wr1  <= 1'b1;        le_din1 <= le;        if(~|w1_cnt)            le_wradr1 <= le_wradr1 + 12'd31 + ADDR1;        else            le_wradr1 <= le_wradr1 - 1'b1;    end    else if(eop_sink | dec_end) begin        le_wr1    <= 1'b0;        le_wradr1 <= 12'b0;        le_din1   <= 24'b0;    end    else begin        le_wr1    <= 1'b0;        le_wradr1 <= le_wradr1;        le_din1   <= le_din1;    endend//RAM1读reg rd1;always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b) begin           rd1    <= 1'b0;        le_rd1    <= 1'b0;        le_rdadr1 <= 12'd0;    end    //同滑动窗对应起来    else if(dec_no[0]&&(st_current == RD)) begin           rd1    <= 1'b1;        le_rd1    <= rd1;        le_rdadr1 <= dat_addr;    end    else begin          rd1     <= 1'b0;        le_rd1    <= rd1;        le_rdadr1 <= 12'd0;                      //mahui for test 070710    endendle_ram  le_ram_u1 (        .clock     ( sys_clk       ),        .data      ( le_din0[23:0] ),        .rdaddress ( le_rdadr0     ),        .rden      ( le_rd0        ),        .wraddress ( le_wradr0     ),        .wren      ( le_wr0        ),        .q         ( le_dout0[23:0])        );le_ram  le_ram_u2 (        .clock     ( sys_clk       ),        .data      ( le_din1[23:0] ),        .rdaddress ( le_rdadr1     ),        .rden      ( le_rd1        ),        .wraddress ( le_wradr1     ),        .wren      ( le_wr1        ),        .q         ( le_dout1[23:0])        );//译码结束信号always @(negedge reset_b or posedge sys_clk) begin    if(!reset_b)        dec_finish <= 1'b0;    else if(dec_end | ((dec_no>=ctrl2resm_miter) & (st_current==DEC_AD)))        dec_finish <= 1'b1;    else if(core_gnt)        dec_finish <= 1'b0;end///包头信息       always @(negedge reset_b or posedge sys_clk) begin           if(!reset_b) begin                       length_1         <= 16'd0;               ctrl2resm_length         <= 16'd0;               ctrl2resm_type           <= 3'd0;               ctrl2resm_frame_end_flag <=3'd0;   //add by mahui 070704               ctrl2resm_inst           <= 2'd0;                            ctrl2resm_code_rate      <= 3'd0;               ctrl2resm_modu_type      <= 2'd0;               ctrl2resm_bnum           <= 16'd0;               ctrl2resm_fnum           <= 8'd0;               ctrl2resm_miter          <= 4'd0;               ctrl2resm_segId          <= 4'd0;   //Segment ID  add by mahui 070704                  end            //else if(st_current == WAIT && wr_over)           else if(st_current == WAIT) begin                       length_1         <= rx2ctrl_length - 16'b1;                           ctrl2resm_length         <= rx2ctrl_length;                 ctrl2resm_type           <= rx2ctrl_type;                ctrl2resm_frame_end_flag <= rx2ctrl_frame_end_flag;  //add by mahui 070704               ctrl2resm_inst           <= rx2ctrl_inst;                                ctrl2resm_code_rate      <= rx2ctrl_code_rate;               ctrl2resm_modu_type      <= rx2ctrl_modu_type;               ctrl2resm_bnum           <= rx2ctrl_bnum;                   ctrl2resm_fnum           <= rx2ctrl_fnum;                   ctrl2resm_miter          <= rx2ctrl_miter;                             ctrl2resm_segId          <= rx2ctrl_segId;   //Segment ID  add by mahui 070704                  end        end                 endmodule  ///ctc_mctrl

⌨️ 快捷键说明

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