📄 csm1.v
字号:
sd_wa <= 0;
sd_ra <= 0;
pcr_rda <= 0;
sd_rd_en <= 0;
rdpcr_en <= 0;
BlkIndex <= 0;
BlkData <= 0;
BlkValid <= 0;
BlkStb <= 0;
TSEG <= 0;
ReadSEG <= 0;
LPEND <= 1;
pcr_fnum <= 0;
TFRAME <= 0;
RCNT <= 0;
TCNT <= 0;
WR_EN <= 0;
RD_EN <= 0;
PreSegIndex <= 0;
endframe <= 0;
ContWR <= 0;
RdEnd <= 0;
endferr <= 0;
// pcrtestbit <= 0;
pcrerr <= 0;
end
WRS0 : begin
sd_rd_en <= 0;
rdpcr_en <= 0;
BlkStb <= 0;
SPCR0 <= 0;
SPCR1 <= 0;
SPCR2 <= 0;
SetFNUM <= 0;
SRAM_WR <= 1'b1;
SRAM_RD <= 1'b1;
SRAM_FRESH <= 1'b1;
if(TCNT==6'd2 && Send_0Frame)
Send_0Frame <= 0;
if(PLAYEND) begin
LPEND <= 0;
end
else begin // PLAYEND==0
if(RxFSYNC) begin
if(FValid) begin
RCNT <= 0;
if(FirstFr) begin
if(Search_0SEG) begin
if(RSEG==0) begin
sd_wa <= 0;
BlkIndex <= 0;
BlkValid <= 1;
BlkData <= 0;
WR_EN <= 1;
ContWR <= 1;
Search_0SEG <= 0;
end
end else begin //Search_0SEG==0
if(SegWrEn) begin
// WaitWA <= 1;
sd_wa <= SegWrAddr;
BlkIndex <= SegWrIndex;
BlkValid <= 1;
BlkData <= RSEG;
WR_EN <= 1;
ContWR <= 1;
end else begin //Search_0SEG
WR_EN <= 0;
ContWR <= 0;
end
end
end else begin
if(ContWR)
WR_EN <= 1;
else
WR_EN <= 0;
if(WR_EN || ContWR) begin
if(RCNT!=0)
sd_wa <= sd_wa + FRAME_CNT-RCNT;
else
sd_wa <= sd_wa + 1;
end
end
end
else begin // !FValid
WR_EN <= 0;
end
end
else begin //FSYNC==0
if(WR_EN && RCNT<FRAME_CNT) begin
sd_wa <= sd_wa + 1;
RCNT <= RCNT + 1;
end
else if(WR_EN) begin
WR_EN <= 0;
end
end
end
end
WRS1 : begin
if(RxFSYNC && FirstFr && WR_EN)
BlkStb <= 1;
else
BlkStb <= 0;
if(WR_EN)
SRAM_WR <= 1'b0;
else
SRAM_WR <= 1'b1;
end
WRS2 : begin
BlkStb <= 0;
SRAM_WR <= SRAM_WR;
end
WRS3 : begin
SRAM_WR <= 1'b1;
end
RDS0 : begin
if(Send_0Frame) begin
RD_EN <= 1;
if(BLK0VALID && BLK1VALID && !StartEn )
SendIR <= 1;
else
SendIR <= 0;
if(BLK0VALID && BLK1VALID && StartEn)
sd_rd_en <= 1;
else
sd_rd_en <= 0;
end
else begin // Send_0Frame==0
if(RD_EN) begin
if(TFRAME==1 && TCNT==FRAME_CNT) begin
TCNT <= 0;
if(SegTxEn)begin
TSEG <= TSEG+1;
sd_ra <= SegTxAddr;
sd_rd_en <= 1;
BlkIndex <= PreSegIndex;
BlkValid <= 0;
BlkData <= 0;
BlkStb <= 1;
PreSegIndex <= SegTxIndex;
RD_EN <= 1;
end
else begin // SegTxEn==0
Wait_SegTxEn <= 1;
RD_EN <= 0;
if((TSEG+7'd1)>=MAX_SEG)
LPEND <= 0;
end
end
else begin // TFRAME!=1 || TCNT!=6'd47
sd_rd_en <= 1;
if(TCNT==FRAME_CNT)
TCNT <= 0;
end
end
end
if(!RD_EN && Wait_SegTxEn && SegTxEn) begin
RD_EN <= 1;
Wait_SegTxEn <= 0;
end
end
RDS1 : begin
if(TCNT == 0)
TxFSYNC <= 1'b1;
else
TxFSYNC <= 1'b0;
SRAM_RD <= 1'b0;
end
RDS3 : begin
SRAM_RD <= 1'b1;
end
RDS4 : begin
if(SD_BURST_LEN[0]) begin
if(TCNT == 0) begin
if(TSEG != {pcrbuf[20:16],SRAM_DI[15:14]})
TFRAME <= 1;
else
TFRAME <= SRAM_DI[13];
/**************************************************/
/* TFRAME <= SRAM_DI[13]; */
/**************************************************/
end
sd_rd_en <= 0;
TCNT <= TCNT + 1;
sd_ra <= sd_ra + 1;
end
end
REFRESH1 : begin
SRAM_FRESH <= 1'b1;
end
REFRESH2 : begin
SRAM_FRESH <= 1'b0;
end
REFRESH3 : begin
SRAM_FRESH <= 1'b0;
end
REFRESH4 : begin
SRAM_FRESH <= 1'b1;
end
PCRS0 : begin
if(pcr_st==3'b000) begin
pcr_fnum <= 0;
pcr_rda <= pcr_rda;
if((Send_0Frame && BLK0VALID && BLK1VALID) || SetPCREn) begin
pcr_st <= 3'b001;
end
end
else if(pcr_st==3'b100) begin
SPCR1 <= 1;
pcr_fnum <= pcr_fnum + 1;
end
else if(pcr_st==3'b111) begin
if(endframe) begin
if(SegRdEn) begin
pcr_rda <= SegRdAddr;
pcr_st <= 3'b001;
end
else begin
if(ReadSEG==MAX_SEG)
RdEnd <= 1;
else
RdEnd <= 0;
pcr_st <= 3'b111;
end
end
else begin
pcr_st <= 3'b001;
end
end
else begin
rdpcr_en <= 1;
end
end
PCRS1 : begin
if(pcr_st == 3'b011)
SPCR0 <= 1;
SRAM_RD <= 0;
end
PCRS2 : begin
SPCR0 <= 0;
SPCR1 <= 0;
SPCR2 <= 0;
SetFNUM <= 0;
end
PCRS3 : begin
SRAM_RD <= 1;
end
PCRS4 : begin
rdpcr_en <= 0;
case (pcr_st)
3'b001 : begin
// pcrtestbit <= pcrbuf[7];
if(pcrbuf[20:14]!=ReadSEG) begin
// if(ReadSEG==TSEG) begin
ReadSEG <= ReadSEG + 1;
pcr_st <= 3'b111;
pcr_rda <= pcr_rda + FRAME_CNT;
pcr_fnum <= pcr_fnum+1;
// end
// else begin
// ReadSEG <= ReadSEG;
// pcr_st <= 3'b001;
// pcr_rda <= pcr_rda;
// pcr_fnum <= pcr_fnum;
// end
endframe <= 1;
endferr <= 1;
end
else begin
endferr <= 0;
if(pcrbuf[13]==1) begin
// if(ReadSEG==TSEG)
ReadSEG <= ReadSEG + 1;
// else
// ReadSEG <= ReadSEG;
endframe <= 1;
end
else
endframe <= 0;
// if((pcrbuf[13]==1) && (ReadSEG!=TSEG)) begin
// pcr_st <= 3'b001;
// pcr_rda <= pcr_rda;
// pcr_fnum <= pcr_fnum;
// end
// else
if(pcrbuf[5]==1'b1) begin
pcr_st <= 3'b010;
pcr_rda <= pcr_rda + 1;
end
else begin
pcr_st <= 3'b111;
pcr_rda <= pcr_rda + FRAME_CNT;
pcr_fnum <= pcr_fnum + 1;
end
end
/*------------------------------------------------------
if(pcrbuf[13]==1) begin
if(ReadSEG==TSEG)
ReadSEG <= ReadSEG + 1;
else
ReadSEG <= ReadSEG;
endframe <= 1;
end
else
endframe <= 0;
if((pcrbuf[13]==1) && (ReadSEG!=TSEG)) begin
pcr_st <= 3'b001;
pcr_rda <= pcr_rda;
pcr_fnum <= pcr_fnum;
end
else if(pcrbuf[5]==1'b1) begin
pcr_st <= 3'b010;
pcr_rda <= pcr_rda + 1;
end
else begin
pcr_st <= 3'b111;
pcr_rda <= pcr_rda + FRAME_CNT;
pcr_fnum <= pcr_fnum + 1;
end
----------------------------------------------------*/
end
3'b010 : begin
// pcrtestbit <= pcrtestbit ^ pcrbuf[15] ^ pcrbuf[14] ^ pcrbuf[13] ^ pcrbuf[12] ^
// pcrbuf[11] ^ pcrbuf[10] ^ pcrbuf[9] ^ pcrbuf[8] ^ pcrbuf[7] ^
// pcrbuf[6] ^ pcrbuf[5] ^ pcrbuf[4] ^ pcrbuf[3] ^ pcrbuf[2] ^
// pcrbuf[1] ^ pcrbuf[0];
pcrerr <= pcrbuf[15] | pcrbuf[14] | pcrbuf[13] | pcrbuf[12];
if(pcrbuf[20]==1'b1) begin
pcr_st <= 3'b011;
SetData <= pcrbuf[15:0];
pcr_rda <= pcr_rda + 1;
end
else begin
pcr_st <= 3'b111;
pcr_rda <= pcr_rda + FRAME_CNT-1;
pcr_fnum <= pcr_fnum + 1;
end
end
3'b011 : begin
// pcrtestbit <= pcrtestbit ^ pcrbuf[31] ^ pcrbuf[30] ^ pcrbuf[29] ^ pcrbuf[28] ^
// pcrbuf[27] ^ pcrbuf[26] ^ pcrbuf[25] ^ pcrbuf[24];
SetData <= pcrbuf[31:16];
pcr_st <= 3'b100;
end
default : begin
pcr_st <= pcr_st;
end
endcase
end
PCRS5 : begin
SPCR1 <= 0;
SetData <= pcrbuf[15:0];
end
PCRS6 : begin
SPCR2 <= 1;
end
PCRS7 : begin
SPCR2 <= 0;
SetData <= pcr_fnum;
end
PCRS8 : begin
if(/*!pcrtestbit &&*/ !pcrerr) begin
SetFNUM <= 1;
pcr_fnum <= pcr_fnum;
pcr_st <= 0;
end else begin
SetFNUM <= 0;
pcr_st <= 3'b111;
pcr_fnum <= pcr_fnum + 1;
end
if(endframe) begin
if(SegRdEn)
pcr_rda <= SegRdAddr;
end
else
pcr_rda <= pcr_rda+FRAME_CNT-2;
end
WAIT_DEN : begin
SendIR <= 0;
sd_rd_en <= 0;
rdpcr_en <= 0;
BlkStb <= 0;
SPCR0 <= 0;
SPCR1 <= 0;
SPCR2 <= 0;
SetFNUM <= 0;
SRAM_WR <= 1'b1;
SRAM_RD <= 1'b1;
SRAM_FRESH <= 1'b1;
if(TCNT==6'd2 && Send_0Frame)
Send_0Frame <= 0;
// if(WaitWA && SegWAEn) begin
// sd_wa <= SegWrAddr + 1;
// WaitWA <= 0;
// end
end
SENDPEND0 : begin
SendIR <= 1;
LPEND <= 0;
end
SENDPEND1 : begin
SendIR <= 0;
LPEND <= 0;
end
SENDPEND2 : begin
LPEND <= 1;
end
endcase
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -