📄 dct.v
字号:
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d2_17<=16'b0;
else if(ena==0)
d2_17<=16'b0;
else
case(x2_17[15:14])
2'b00:d2_17<=x2_17[15:0];
2'b01:d2_17<=16'h7fff;
2'b10:d2_17<=16'h8000;
2'b11:d2_17<=x2_17[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d2_18<=16'b0;
else if(ena==0)
d2_18<=16'b0;
else
case(x2_18[15:14])
2'b00:d2_18<=x2_18[15:0];
2'b01:d2_18<=16'h7fff;
2'b10:d2_18<=16'h8000;
2'b11:d2_18<=x2_18[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d2_19<=16'b0;
else if(ena==0)
d2_19<=16'b0;
else
case(x2_19[15:14])
2'b00:d2_19<=x2_19[15:0];
2'b01:d2_19<=16'h7fff;
2'b10:d2_19<=16'h8000;
2'b11:d2_19<=x2_19[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d2_20<=16'b0;
else if(ena==0)
d2_20<=16'b0;
else
case(x2_20[15:14])
2'b00:d2_20<=x2_20[15:0];
2'b01:d2_20<=16'h7fff;
2'b10:d2_20<=16'h8000;
2'b11:d2_20<=x2_20[15:0];
endcase
end
//第三级流水线
assign x3_1 = d2_1 + d2_2; //M0*cos(pi/16) + M1*cos(7pi/16)
assign x3_2 = d2_3 - d2_4; //M0*cos(7pi/16) - M1*cos(pi/16)
assign x3_3 = d2_5 + d2_6; //M2*cos(3pi/16) + M3*cos(5pi/16)
assign x3_4 = d2_7 - d2_8; //M2*cos(5pi/16) - M3*cos(3pi/16)
assign x3_5 = d2_9 + d2_10; //M0*cos(5pi/16) + M1*cos(3pi/16)
assign x3_6 = d2_11 - d2_12; //M0*cos(3pi/16) - M1*cos(5pi/16)
assign x3_7 = d2_13 + d2_14; //M2*cos(7pi/16) + M3*cos(pi/16)
assign x3_8 = d2_15 - d2_16; //M2*cos(pi/16) - M3*cos(7pi/16)
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_1<=16'b0;
else if(ena==0)
d3_1<=16'b0;
else
case(x3_1[15:14])
2'b00:d3_1<=x3_1[15:0];
2'b01:d3_1<=16'h7fff;
2'b10:d3_1<=16'h8000;
2'b11:d3_1<=x3_1[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_2<=16'b0;
else if(ena==0)
d3_2<=16'b0;
else
case(x3_2[15:14])
2'b00:d3_2<=x3_2[15:0];
2'b01:d3_2<=16'h7fff;
2'b10:d3_2<=16'h8000;
2'b11:d3_2<=x3_2[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_3<=16'b0;
else if(ena==0)
d3_3<=16'b0;
else
case(x3_3[15:14])
2'b00:d3_3<=x3_3[15:0];
2'b01:d3_3<=16'h7fff;
2'b10:d3_3<=16'h8000;
2'b11:d3_3<=x3_3[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_4<=16'b0;
else if(ena==0)
d3_4<=16'b0;
else
case(x3_4[15:14])
2'b00:d3_4<=x3_4[15:0];
2'b01:d3_4<=16'h7fff;
2'b10:d3_4<=16'h8000;
2'b11:d3_4<=x3_4[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_5<=16'b0;
else if(ena==0)
d3_5<=16'b0;
else
case(x3_5[15:14])
2'b00:d3_5<=x3_5[15:0];
2'b01:d3_5<=16'h7fff;
2'b10:d3_5<=16'h8000;
2'b11:d3_5<=x3_5[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_6<=16'b0;
else if(ena==0)
d3_6<=16'b0;
else
case(x3_6[15:14])
2'b00:d3_6<=x3_6[15:0];
2'b01:d3_6<=16'h7fff;
2'b10:d3_6<=16'h8000;
2'b11:d3_6<=x3_6[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_7<=16'b0;
else if(ena==0)
d3_7<=16'b0;
else
case(x3_7[15:14])
2'b00:d3_7<=x3_7[15:0];
2'b01:d3_7<=16'h7fff;
2'b10:d3_7<=16'h8000;
2'b11:d3_7<=x3_7[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_8<=16'b0;
else if(ena==0)
d3_8<=16'b0;
else
case(x3_8[15:14])
2'b00:d3_8<=x3_8[15:0];
2'b01:d3_8<=16'h7fff;
2'b10:d3_8<=16'h8000;
2'b11:d3_8<=x3_8[15:0];
endcase
end
mul16x16 d17(
.dataa(d2_18),
.datab(cos_2),
.result(x3_9));//(P0-P1)*cos(2pi/16)
always @(negedge rst or posedge clk)
begin
if(rst==0)
d3_9<=16'b0;
else if(ena==0)
d3_9<=16'b0;
else
d3_9<=x3_9[26:11];
end
mul16x16 d18(
.dataa(d2_20),
.datab(cos_6),
.result(x3_10));//(P2-P3)*cos(6pi/16)
always @(negedge rst or posedge clk)
begin
if(rst==0)
d3_10<=16'b0;
else if(ena==0)
d3_10<=16'b0;
else
d3_10<=x3_10[26:11];
end
mul16x16 d19(
.dataa(d2_18),
.datab(cos_6),
.result(x3_11));//(P0-P1)*cos(6pi/16)
always @(negedge rst or posedge clk)
begin
if(rst==0)
d3_11<=16'b0;
else if(ena==0)
d3_11<=16'b0;
else
d3_11<=x3_11[26:11];
end
mul16x16 d20(
.dataa(d2_20),
.datab(cos_2),
.result(x3_12));//(P2-P3)*cos(2pi/16)
always @(negedge rst or posedge clk)
begin
if(rst==0)
d3_12<=16'b0;
else if(ena==0)
d3_12<=16'b0;
else
d3_12<=x3_12[26:11];
end
assign x3_13 = d2_17 + d2_19; //(P0+P1)+(P2+P3)
assign x3_14 = d2_17 - d2_19; //(P0+P1)-(P2+P3)
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_13<=16'b0;
else if(ena==0)
d3_13<=16'b0;
else
case(x3_13[15:14])
2'b00:d3_13<=x3_13[15:0];
2'b01:d3_13<=16'h7fff;
2'b10:d3_13<=16'h8000;
2'b11:d3_13<=x3_13[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d3_14<=16'b0;
else if(ena==0)
d3_14<=16'b0;
else
case(x3_14[15:14])
2'b00:d3_14<=x3_14[15:0];
2'b01:d3_14<=16'h7fff;
2'b10:d3_14<=16'h8000;
2'b11:d3_14<=x3_14[15:0];
endcase
end
//第四级流水线
assign x4_1 = d3_1 + d3_3; //M0*cos(pi/16) + M1*cos(7pi/16) + M2*cos(3pi/16) + M3*cos(5pi/16)
assign x4_2 = d3_2 - d3_4; //M0*cos(7pi/16) - M1*cos(pi/16) - M2*cos(5pi/16) - M3*cos(3pi/16)
assign x4_3 = d3_5 - d3_8; //M0*cos(5pi/16) + M1*cos(3pi/16) - M2*cos(7pi/16) + M3*cos(pi/16)
assign x4_4 = d3_6 - d3_7; //M0*cos(3pi/16) - M1*cos(5pi/16) - M2*cos(pi/16) - M3*cos(7pi/16)
assign x4_5 = d3_9 + d3_10; //(P0-P1)*cos(2pi/16) + (P2-P3)*cos(6pi/16)
assign x4_6 = d3_11 - d3_12; //(P0-P1)*cos(6pi/16) - (P2-P3)*cos(2pi/16)
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d4_1<=16'b0;
else if(ena==0)
d4_1<=16'b0;
else
case(x4_1[15:14])
2'b00:d4_1<=x4_1[15:0];
2'b01:d4_1<=16'h7fff;
2'b10:d4_1<=16'h8000;
2'b11:d4_1<=x4_1[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d4_2<=16'b0;
else if(ena==0)
d4_2<=16'b0;
else
case(x4_2[15:14])
2'b00:d4_2<=x4_2[15:0];
2'b01:d4_2<=16'h7fff;
2'b10:d4_2<=16'h8000;
2'b11:d4_2<=x4_2[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d4_3<=16'b0;
else if(ena==0)
d4_3<=16'b0;
else
case(x4_3[15:14])
2'b00:d4_3<=x4_3[15:0];
2'b01:d4_3<=16'h7fff;
2'b10:d4_3<=16'h8000;
2'b11:d4_3<=x4_3[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d4_4<=16'b0;
else if(ena==0)
d4_4<=16'b0;
else
case(x4_4[15:14])
2'b00:d4_4<=x4_4[15:0];
2'b01:d4_4<=16'h7fff;
2'b10:d4_4<=16'h8000;
2'b11:d4_4<=x4_4[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d4_5<=16'b0;
else if(ena==0)
d4_5<=16'b0;
else
case(x4_5[15:14])
2'b00:d4_5<=x4_5[15:0];
2'b01:d4_5<=16'h7fff;
2'b10:d4_5<=16'h8000;
2'b11:d4_5<=x4_5[15:0];
endcase
end
always @(negedge rst or posedge clk) //防溢出处理
begin
if(rst==0)
d4_6<=16'b0;
else if(ena==0)
d4_6<=16'b0;
else
case(x4_6[15:14])
2'b00:d4_6<=x4_6[15:0];
2'b01:d4_6<=16'h7fff;
2'b10:d4_6<=16'h8000;
2'b11:d4_6<=x4_6[15:0];
endcase
end
mul16x16 d21(
.dataa(d3_13),
.datab(cos_4),
.result(x4_7));//[(P0+P1)+(P2+P3)]*cos(4pi/16)
always @(negedge rst or posedge clk)
begin
if(rst==0)
d4_7<=16'b0;
else if(ena==0)
d4_7<=16'b0;
else
d4_7<=x4_7[26:11];
end
mul16x16 d22(
.dataa(d3_14),
.datab(cos_4),
.result(x4_8));//[(P0+P1)-(P2+P3)]*cos(4pi/16)
always @(negedge rst or posedge clk)
begin
if(rst==0)
d4_8<=16'b0;
else if(ena==0)
d4_8<=16'b0;
else
d4_8<=x4_8[26:11];
end
assign do_1 = {d4_7[15],d4_7[15:1]};
assign do_2 = {d4_1[15],d4_1[15:1]};
assign do_3 = {d4_5[15],d4_5[15:1]};
assign do_4 = {d4_4[15],d4_4[15:1]};
assign do_5 = {d4_8[15],d4_8[15:1]};
assign do_6 = {d4_3[15],d4_3[15:1]};
assign do_7 = {d4_6[15],d4_6[15:1]};
assign do_8 = {d4_2[15],d4_2[15:1]};
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -