OpenCores
URL https://opencores.org/ocsvn/bluespec-h264/bluespec-h264/trunk

Subversion Repositories bluespec-h264

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 10 to Rev 11
    Reverse comparison

Rev 10 → Rev 11

/trunk/src/mkDeblockFilter.bsv
226,9 → 226,22
method upd = topVector.upd;
endmodule
 
interface IbSVector;
method ActionValue#(Bit#(3)) sub(Bit#(4) addr);
method Action upd(Bit#(4) addr, Bit#(3) data);
endinterface
(*synthesize*)
module mkbSVector(IbSVector);
RFile1#(Bit#(4),Bit#(3)) bsVector <- mkRFile1Full();
method sub = bsVector.sub;
method upd = bsVector.upd;
endmodule
 
 
 
 
 
(* synthesize *)
module mkDeblockFilter( IDeblockFilter );
 
307,9 → 320,9
ITopVector topVector <- mkTopVector();
Reg#(Bit#(16)) topVectorValidBits <- mkReg(0);
 
IbSVector bSfileHor <- mkbSVector();
IbSVector bSfileVer <- mkbSVector();
 
RegFile#(Bit#(4),Tuple2#(Bit#(3),Bit#(3))) bSfile <- mkRegFileFull();
 
Reg#(Bit#(6)) cleanup_state <- mkReg(0);
 
Vector#(4, FIFO#(Bit#(32))) rowToColumnStore <- replicateM(mkFIFO);
487,31 → 500,32
Bit#(2) blockHor = {tpl_1(rowToColumnStoreBlock.first())[2],tpl_1(rowToColumnStoreBlock.first())[0]};
Bool storeBottomRightBlock = tpl_2(rowToColumnStoreBlock.first()) == 1;
 
rowToColumnState <= rowToColumnState + 1;
Bit#(32) data_out = 0;
Bit#(PicWidthSz) adjustedMbHor = ((currMbHor==0) ? (picWidth-1) : truncate(currMbHor-1));
case(rowToColumnState)
2'b00: data_out = {(rowToColumnStore[3].first())[7:0], (rowToColumnStore[2].first())[7:0],
(rowToColumnStore[1].first())[7:0], (rowToColumnStore[0].first())[7:0]};
2'b01: data_out = {(rowToColumnStore[3].first())[15:8], (rowToColumnStore[2].first())[15:8],
(rowToColumnStore[1].first())[15:8], (rowToColumnStore[0].first())[15:8]};
 
2'b10: data_out = {(rowToColumnStore[3].first())[23:16], (rowToColumnStore[2].first())[23:16],
(rowToColumnStore[1].first())[23:16], (rowToColumnStore[0].first())[23:16]};
 
2'b11: begin
data_out = {(rowToColumnStore[3].first())[31:24], (rowToColumnStore[2].first())[31:24],
(rowToColumnStore[1].first())[31:24], (rowToColumnStore[0].first())[31:24]};
mapM_(deque, rowToColumnStore); // Deq the vector elements
rowToColumnStoreBlock.deq();
end
endcase
 
if(storeBottomRightBlock) // The right bottom block is not complete until the top filtering has occured
// It has to be rotated to the column major ordering used in the top vector
// memory
begin
rowToColumnState <= rowToColumnState + 1;
Bit#(32) data_out = 0;
Bit#(PicWidthSz) adjustedMbHor = ((currMbHor==0) ? (picWidth-1) : truncate(currMbHor-1));
case(rowToColumnState)
2'b00: data_out = {(rowToColumnStore[3].first())[7:0], (rowToColumnStore[2].first())[7:0],
(rowToColumnStore[1].first())[7:0], (rowToColumnStore[0].first())[7:0]};
2'b01: data_out = {(rowToColumnStore[3].first())[15:8], (rowToColumnStore[2].first())[15:8],
(rowToColumnStore[1].first())[15:8], (rowToColumnStore[0].first())[15:8]};
 
2'b10: data_out = {(rowToColumnStore[3].first())[23:16], (rowToColumnStore[2].first())[23:16],
(rowToColumnStore[1].first())[23:16], (rowToColumnStore[0].first())[23:16]};
 
2'b11: begin
data_out = {(rowToColumnStore[3].first())[31:24], (rowToColumnStore[2].first())[31:24],
(rowToColumnStore[1].first())[31:24], (rowToColumnStore[0].first())[31:24]};
mapM_(deque, rowToColumnStore); // Deq the vector elements
rowToColumnStoreBlock.deq();
end
endcase
$display( "TRACE Deblocking Filter: rowToColumnRotate rotating block (%0d, %0d) rowtoColumnState: %d bottomRightBlock: %d, data: %h", blockHor, blockVer, rowToColumnState, storeBottomRightBlock, data_out);
// The block hor calculation may be questionable... between U and V.
if(chromaFlag == 0)
525,38 → 539,10
end
else // pass data along to vertical filter
begin
rowToColumnState <= rowToColumnState + 1;
Bit#(32) data_out = 0;
case(rowToColumnState)
2'b00: data_out = {(rowToColumnStore[3].first())[7:0],
(rowToColumnStore[2].first())[7:0],
(rowToColumnStore[1].first())[7:0],
(rowToColumnStore[0].first())[7:0]};
2'b01: data_out = {(rowToColumnStore[3].first())[15:8],
(rowToColumnStore[2].first())[15:8],
(rowToColumnStore[1].first())[15:8],
(rowToColumnStore[0].first())[15:8]};
2'b10: data_out = {(rowToColumnStore[3].first())[23:16],
(rowToColumnStore[2].first())[23:16],
(rowToColumnStore[1].first())[23:16],
(rowToColumnStore[0].first())[23:16]};
2'b11: begin
data_out = {(rowToColumnStore[3].first())[31:24],
(rowToColumnStore[2].first())[31:24],
(rowToColumnStore[1].first())[31:24],
(rowToColumnStore[0].first())[31:24]};
mapM_(deque, rowToColumnStore); // Deq the vector elements
rowToColumnStoreBlock.deq();
end
endcase
verticalFilterBlock.enq(tuple2(tpl_1(rowToColumnStoreBlock.first()),
data_out));
begin
verticalFilterBlock.enq(tuple2(tpl_1(rowToColumnStoreBlock.first()),data_out));
 
$display( "TRACE Deblocking Filter: rowToColumnRotate rotating block (%0d, %0d) rowtoColumnState: %d bottomRightBlock: %d, data: %h", blockHor, blockVer, rowToColumnState, storeBottomRightBlock, data_out);
$display( "TRACE Deblocking Filter: rowToColumnRotate rotating block (%0d, %0d) rowtoColumnState: %d bottomRightBlock: %d, data: %h", blockHor, blockVer, rowToColumnState, storeBottomRightBlock, data_out);
end
endrule
 
715,8 → 701,9
case (infifo.first()) matches
tagged PBbS .xdata :
begin
infifo.deq();
bSfile.upd(blockNum,tuple2(xdata.bShor,xdata.bSver));
infifo.deq();
bSfileHor.upd(blockNum, xdata.bShor);
bSfileVer.upd(blockNum, xdata.bSver);
$display( "TRACE Deblocking Filter: horizontal bsFIFO data: %d, subblock(%0d, %0d) row: %0d, ",infifo.first(), blockHor, blockVer, pixelNum);
end
tagged PBoutput .xdata :
754,8 → 741,8
Vector#(3,Bit#(5)) tc0MbLeft = arrayToVector(tc0_table[indexA]);
if(filter_test({pixelq[15:0],pixelp[31:16]},alphaMbLeft,betaMbLeft))
begin
let bsData = bSfile.sub((chromaFlag==0?blockNum:{blockNum[1:0],pixelVer[1],1'b0}));
result = filter_input({pixelq,pixelp},chromaFlag==1,tpl_1(bsData),alphaMbLeft,betaMbLeft,tc0MbLeft);
Bit#(3) bsData <- bSfileHor.sub((chromaFlag==0?blockNum:{blockNum[1:0],pixelVer[1],1'b0}));
result = filter_input({pixelq,pixelp},chromaFlag==1,bsData,alphaMbLeft,betaMbLeft,tc0MbLeft);
end
end
else if(!leftEdge && filterInternalEdgesFlag)
762,8 → 749,8
begin
if(filter_test({pixelq[15:0],pixelp[31:16]},alphaInternal,betaInternal))
begin
let bSData = bSfile.sub((chromaFlag==0?blockNum:{blockNum[1:0],pixelVer[1],1'b0}));
result = filter_input({pixelq,pixelp},chromaFlag==1,tpl_1(bSData),alphaInternal,betaInternal,tc0Internal);
Bit#(3) bSData <- bSfileHor.sub((chromaFlag==0?blockNum:{blockNum[1:0],pixelVer[1],1'b0}));
result = filter_input({pixelq,pixelp},chromaFlag==1,bSData,alphaInternal,betaInternal,tc0Internal);
end
end
Bit#(PicWidthSz) currMbHorT = truncate(currMbHor);
943,9 → 930,8
$display( "TRACE Deblocking Filter: vertical Filter test: P1P0Q0Q1: %h",{workV[15:8],workV[7:0],tempV[31:24],tempV[23:16]});
if((filter_test({workV[15:8],workV[7:0],tempV[31:24],tempV[23:16]},alpha,beta)) && (!topEdge || filterTopMbEdgeFlag))
begin
//let bsData = bSfile.sub(blockNumCols & {1'b1,~chromaFlag,2'b11});
let bsData = bSfile.sub((chromaFlag==0?blockNumCols:{blockVer[0],blockHor[0],1'b0,columnNumber[1]}));
resultV = filter_input(resultV,chromaFlag==1,tpl_2(bsData),alpha,beta,tc0);
Bit#(3) bsData <- bSfileVer.sub((chromaFlag==0?blockNumCols:{blockVer[0],blockHor[0],1'b0,columnNumber[1]}));
resultV = filter_input(resultV,chromaFlag==1,bsData,alpha,beta,tc0);
end
//Write out the result data 31:0 are the done q values
if(topEdge)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.