?? ldpc.v
字號(hào):
2module LDPC (clk,reset, data_in, data_in_en, velocity, /*輸入信號(hào)碼率選擇*/ data_out, data_out_en, indication /*輸出信號(hào),第一個(gè)127要?jiǎng)h除前5成7488,指示第一個(gè)127*/ );input clk,reset;input data_in,data_in_en;input[1:0] velocity; //碼率選擇信號(hào)output[126:0] data_out; output data_out_en;output indication;parameter row_4 = 6'd24-1'b1; // parameter column_4 = 6'd35-1'b1; //0.4碼率parameter row_6 = 6'd36-1'b1; // parameter column_6 = 6'd23-1'b1; //0.6碼率parameter row_8 = 6'd48-1'b1; // parameter column_8 = 6'd11-1'b1; //0.8碼率parameter order = 7'd127-1'b1;parameter state0 = 1'b0; parameter state1 = 1'b1;reg[5:0] row_num; // reg[5:0] column_num;//reset時(shí),選擇合適的行,列數(shù)reg[5:0] count_row; // reg[4:0] count_col; // 行列計(jì)數(shù)器reg[6:0] count_127;reg coder_first;always @ (posedge clk) // 計(jì)數(shù)器運(yùn)轉(zhuǎn) begin if (!reset) begin count_127 <= 7'd0; coder_first <= 1'b0; case (velocity) 2'b01 : //0.4碼率 begin count_row <= 6'd23; // 減法計(jì)數(shù)器 row_num <= row_4; //column_num <= column_4; end 2'b10 : //0.6碼率 begin count_row <= 6'd35; row_num <= row_6; //column_num <= column_6; end 2'b11 : //0.8碼率 begin count_row <= 6'd47; row_num <= row_8; //column_num <= column_8; end default : // 默認(rèn)0.4碼率 begin count_row <= 6'd23; row_num <= row_4; //column_num <= column_4; end endcase end else begin if(data_in_en) begin case (velocity) 2'b01 : //0.4碼率 begin if((count_row==6'd23)&&(count_127==0)) begin coder_first<= 1'b1; end else begin coder_first<= 1'b0; end end 2'b10 : //0.6碼率 begin if((count_row==6'd35)&&(count_127==0)) begin coder_first<= 1'b1; end else begin coder_first<= 1'b0; end end 2'b11 : //0.8碼率 begin if((count_row==6'd47)&&(count_127==0)) begin coder_first<= 1'b1; end else begin coder_first<= 1'b0; end end default : // 默認(rèn)0.4碼率 begin if((count_row==6'd23)&&(count_127==0)) begin coder_first<= 1'b1; end else begin coder_first<= 1'b0; end end endcase if(count_127 == order) begin count_127 <= 7'd0; if(count_row == 6'd0) begin count_row <= row_num; end else begin count_row <= count_row - 1'b1; end end else begin count_127 <= count_127 + 1'b1; end end end endreg bit_in, bit_in_en;reg[34:0] media_en;reg[34:0] media_en0;reg state;reg[9:0] address_04;reg[9:0] address_06;reg[9:0] address_08;always @(posedge clk) // 控制個(gè)運(yùn)算模塊初始化等 begin if (!reset) begin //coder_first <= 1'b0; bit_in <= 1'b0; bit_in_en <= 1'b0; media_en <= 35'b00000_0000000000_0000000000_0000000001; // 初始化時(shí)就寫(xiě)入第一個(gè)media address_04 <= 10'd0; address_06 <= 10'd0; address_08 <= 10'd0; state <= state0; end else begin case (velocity) 2'b01 : // 0.4 碼率 begin bit_in <= data_in; bit_in_en <= data_in_en; // 輸入數(shù)據(jù) if(data_in_en) begin case (state) state0 : //前35個(gè)符號(hào),需要按順序?qū)edia寫(xiě)初始信息 begin if(media_en == 35'b10000_0000000000_0000000000_0000000000) begin state <= state1; media_en <= 35'd0; if(count_row == 0) //最后一行最后一個(gè)矩信息,復(fù)位rom地址 begin address_04 <= 10'd0; end else begin address_04 <= address_04+1'b1; end end else begin address_04 <= address_04+1'b1; // 狀態(tài)地址累加 media_en <= media_en << 1; //按順序更改35個(gè)運(yùn)算模塊的media_en,寫(xiě)入初始信息 end end state1 : // 后面輸入數(shù)據(jù),循環(huán)運(yùn)算即可,不需寫(xiě)矩陣初始信息 begin if(count_127 == order) begin media_en <= 35'b00000_0000000000_0000000000_0000000001; //與第127個(gè)數(shù)據(jù)輸入同時(shí),寫(xiě)入初始信息 state <= state0; end end endcase end end 2'b10 : // 0.6碼率 begin bit_in <= data_in; bit_in_en <= data_in_en; // 輸入數(shù)據(jù) if(data_in_en) begin case (state) state0 : //前23個(gè)符號(hào),需要按順序?qū)edia寫(xiě)初始信息 begin if(media_en == 35'b00000_0000000100_0000000000_0000000000) begin state <= state1; media_en <= 35'd0; if(count_row == 0) //最后一行最后一個(gè)矩信息,復(fù)位rom地址 begin address_06 <= 10'd0; end else begin address_06 <= address_06+1'b1; end end else begin address_06 <= address_06+1'b1; // 狀態(tài)地址累加 media_en <= media_en << 1; //按順序更改35個(gè)運(yùn)算模塊的media_en,寫(xiě)入初始信息 end end state1 : // 后面輸入數(shù)據(jù),循環(huán)運(yùn)算即可,不需寫(xiě)矩陣初始信息 if(count_127 == order) begin media_en <= 35'b00000_0000000000_0000000000_0000000001; //與第127個(gè)數(shù)據(jù)輸入同時(shí),寫(xiě)入初始信息 state <= state0; end end endcase end end 2'b11 : begin bit_in <= data_in; bit_in_en <= data_in_en; // 輸入數(shù)據(jù) if(data_in_en) begin case (state) state0 : //前35個(gè)符號(hào),需要按順序?qū)edia寫(xiě)初始信息 begin if(media_en == 35'b00000_000000000_0000000001_0000000000) begin state <= state1; media_en <= 35'd0; if(count_row == 0) //最后一行最后一個(gè)矩信息,復(fù)位rom地址 begin address_08 <= 10'd0; end else begin address_08 <= address_08+1'b1; end end else begin address_08 <= address_08+1'b1; // 狀態(tài)地址累加 media_en <= media_en << 1; //按順序更改35個(gè)運(yùn)算模塊的media_en,寫(xiě)入初始信息 end end state1 : // 后面輸入數(shù)據(jù),循環(huán)運(yùn)算即可,不需寫(xiě)矩陣初始信息 begin if(count_127 == order) begin media_en <= 35'b00000_0000000000_0000000000_0000000001; //與第127個(gè)數(shù)據(jù)輸入同時(shí),寫(xiě)入初始信息 state <= state0; end end endcase end end default : begin bit_in <= data_in; bit_in_en <= data_in_en; // 輸入數(shù)據(jù) if(data_in_en) begin case (state) state0 : //前35個(gè)符號(hào),需要按順序?qū)edia寫(xiě)初始信息 begin if(media_en == 35'b10000_0000000000_0000000000_0000000000) begin state <= state1; media_en <= 35'd0; if(count_row == 0) //最后一行最后一個(gè)矩信息,復(fù)位rom地址 begin address_04 <= 9'd0; end else begin address_04 <= address_04+1'b1; end end else begin address_04 <= address_04+1'b1; // 狀態(tài)地址累加 media_en <= media_en << 1; //按順序更改35個(gè)運(yùn)算模塊的media_en,寫(xiě)入初始信息 end end state1 : // 后面輸入數(shù)據(jù),循環(huán)運(yùn)算即可,不需寫(xiě)矩陣初始信息 begin if(count_127 == order) begin media_en <= 35'b00000_0000000000_0000000000_0000000001; //與第127個(gè)數(shù)據(jù)輸入同時(shí),寫(xiě)入初始信息 state <= state0; end end endcase end end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -