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

📄 calibip_compute_block.v

📁 这是一个在Fusion系列的AFS600的FPGA
💻 V
字号:
/***********************************************************************************
-- Copyright 2007 Actel Corporation. All rights reserved.
--
-- ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
-- ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
-- IN ADVANCE IN WRITING.
--
-- Revision: 3.2
-- SVN Revision Information:
-- SVN $Revision: $                                   
-- SVN $Date: $
-- 
-- Resolved SARs
-- SAR Date Who Description
--
********************************************************************************************************/
`timescale 1ns/1ps
module
COMPUTE_BLOCK
#
(
parameter
G_WIDTH_GAIN
=
11
,
parameter
G_WIDTH_OFFSET
=
8
,
parameter
G_ADC_BITS_8_10_12
=
0
,
parameter
G_OPTIMIZATION
=
0
,
parameter
G_SATURATE
=
1
)
(
input
wire
S_CLK_IN,
input
wire
S_RST_N_IN,
input
wire
S_BUSY_IN,
input
wire
S_DATAVALID_IN,
input
wire
[
11
:
0
]
SV_ADC_RESULT_IN,
input
wire
[
G_WIDTH_GAIN
-
1
:
0
]
SV_GAIN_IN,
input
wire
[
G_WIDTH_OFFSET
-
1
:
0
]
SV_OFF_SET_IN,
output
S_BUSY_CALIB_OUT,
output
S_DATAVALID_CALIB_OUT,
output
reg
[
11
:
0
]
SV_ADC_RESULT_CALIB_OUT
)
/* synthesis syn_maxfan=1000 */
;
localparam
CCALIBIO11
=
12
;
localparam
CCALIBlO11
=
CCALIBIO11
+
G_WIDTH_GAIN
;
localparam
CCALIBOI11
=
CCALIBlO11
-
1
;
localparam
CCALIBII11
=
CCALIBlO11
;
localparam
CCALIBlI11
=
CCALIBlO11
-
3
;
localparam
CCALIBOl11
=
CCALIBlO11
-
1
;
reg
[
3
:
0
]
CCALIBIl11
;
reg
[
(
CCALIBlO11
)
:
0
]
CCALIBll11
;
reg
[
(
CCALIBlO11
)
:
0
]
CCALIBO011
;
reg
[
(
CCALIBlO11
)
:
0
]
CCALIBI011
;
reg
[
1
:
0
]
CCALIBl011
;
reg
CCALIBO111
;
reg
CCALIBI111
;
reg
CCALIBl111
;
wire
[
(
CCALIBlO11
)
:
0
]
CCALIBOOOOI
;
wire
[
CCALIBIO11
-
1
:
0
]
CCALIBIOOOI
;
wire
[
CCALIBIO11
-
1
:
0
]
CCALIBlOOOI
;
wire
CCALIBOIOOI
;
assign
S_BUSY_CALIB_OUT
=
{
CCALIBI111
||
S_BUSY_IN
}
;
assign
S_DATAVALID_CALIB_OUT
=
(
~
S_BUSY_CALIB_OUT
&&
S_DATAVALID_IN
)
;
always
@
(
posedge
S_CLK_IN
,
negedge
S_RST_N_IN
)
begin
if
(
S_RST_N_IN
==
1
'b
0
)
SV_ADC_RESULT_CALIB_OUT
<=
{
CCALIBIO11
{
1
'b
0
}
}
;
else
if
(
CCALIBO111
==
1
'b
1
)
SV_ADC_RESULT_CALIB_OUT
<=
CCALIBIOOOI
;
end
always
@
(
posedge
S_CLK_IN
,
negedge
S_RST_N_IN
)
begin
if
(
S_RST_N_IN
==
1
'b
0
)
CCALIBl111
<=
1
'b
0
;
else
CCALIBl111
<=
S_BUSY_IN
;
end
parameter
[
1
:
0
]
CCALIBIIOOI
=
0
,
CCALIBlIOOI
=
1
,
CCALIBOlOOI
=
2
;
generate
if
(
G_ADC_BITS_8_10_12
==
2
'b
00
)
begin
always
@
(
posedge
S_CLK_IN
,
negedge
S_RST_N_IN
)
begin
if
(
S_RST_N_IN
==
1
'b
0
)
begin
CCALIBll11
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBO011
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBI011
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBIl11
<=
4
'b
0
;
CCALIBI111
<=
1
'b
0
;
CCALIBO111
<=
1
'b
0
;
CCALIBl011
<=
CCALIBIIOOI
;
end
else
begin
case
(
CCALIBl011
)
CCALIBIIOOI
:
begin
if
(
S_BUSY_IN
==
1
'b
1
)
CCALIBI111
<=
1
'b
1
;
if
(
SV_OFF_SET_IN
[
7
]
==
1
'b
0
)
CCALIBO011
<=
{
{
4
{
1
'b
0
}
}
,
SV_OFF_SET_IN
,
{
2
{
1
'b
0
}
}
,
{
10
{
1
'b
0
}
}
}
;
else
CCALIBO011
<=
{
{
4
{
1
'b
1
}
}
,
SV_OFF_SET_IN
,
{
2
{
1
'b
0
}
}
,
{
10
{
1
'b
0
}
}
}
;
CCALIBI011
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBIl11
<=
4
'b
0
;
CCALIBll11
[
(
CCALIBlO11
)
:
CCALIBIO11
]
<=
{
{
G_WIDTH_GAIN
+
1
}
{
1
'b
0
}
}
;
CCALIBll11
[
(
CCALIBIO11
-
1
)
:
0
]
<=
SV_ADC_RESULT_IN
[
(
CCALIBIO11
-
1
)
:
0
]
;
if
(
(
CCALIBl111
==
1
'b
1
)
&&
(
S_BUSY_IN
==
1
'b
0
)
)
CCALIBl011
<=
CCALIBlIOOI
;
else
begin
CCALIBl011
<=
CCALIBIIOOI
;
end
end
CCALIBlIOOI
:
begin
if
(
CCALIBIl11
<
{
G_WIDTH_GAIN
}
)
begin
CCALIBll11
<=
{
CCALIBll11
<<
1
}
;
CCALIBI011
<=
(
SV_GAIN_IN
[
CCALIBIl11
]
)
?
CCALIBll11
:
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBIl11
<=
CCALIBIl11
+
1
;
CCALIBO011
<=
CCALIBOOOOI
;
CCALIBl011
<=
CCALIBlIOOI
;
end
else
begin
CCALIBO011
<=
CCALIBOOOOI
;
CCALIBO111
<=
1
'b
1
;
CCALIBl011
<=
CCALIBOlOOI
;
end
end
CCALIBOlOOI
:
begin
CCALIBI111
<=
1
'b
0
;
CCALIBO111
<=
1
'b
0
;
if
(
S_BUSY_IN
==
1
'b
0
)
CCALIBl011
<=
CCALIBOlOOI
;
else
CCALIBl011
<=
CCALIBIIOOI
;
end
endcase
end
end
if
(
G_SATURATE
)
begin
assign
CCALIBOIOOI
=
(
SV_ADC_RESULT_IN
[
11
:
0
]
==
12
'h
FFF
)
?
1
'b
1
:
1
'b
0
;
assign
CCALIBlOOOI
=
{
(
CCALIBO011
[
CCALIBOI11
]
)
||
CCALIBOIOOI
}
?
12
'h
FFF
:
{
CCALIBO011
[
(
CCALIBlO11
)
-
2
:
(
G_WIDTH_GAIN
-
1
)
]
}
;
end
else
begin
assign
CCALIBlOOOI
=
(
CCALIBO011
[
CCALIBOI11
]
)
?
12
'h
FFF
:
{
CCALIBO011
[
(
CCALIBlO11
)
-
2
:
(
G_WIDTH_GAIN
-
1
)
]
}
;
end
assign
CCALIBIOOOI
=
(
CCALIBO011
[
CCALIBII11
]
)
?
12
'h
000
:
CCALIBlOOOI
;
if
(
G_OPTIMIZATION
)
begin
CCALIBO
CCALIBIlOOI
(
.CCALIBI
(
CCALIBO011
)
,
.CCALIBl
(
CCALIBI011
)
,
.CCALIBOI
(
CCALIBOOOOI
)
)
;
end
else
begin
CCALIBllOOI
CCALIBO0OOI
(
.CCALIBI
(
CCALIBO011
)
,
.CCALIBl
(
CCALIBI011
)
,
.CCALIBOI
(
CCALIBOOOOI
)
)
;
end
end
else
if
(
G_ADC_BITS_8_10_12
==
2
'b
01
)
begin
always
@
(
posedge
S_CLK_IN
,
negedge
S_RST_N_IN
)
begin
if
(
S_RST_N_IN
==
1
'b
0
)
begin
CCALIBll11
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBO011
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBI011
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBIl11
<=
4
'b
0
;
CCALIBI111
<=
1
'b
0
;
CCALIBO111
<=
1
'b
0
;
CCALIBl011
<=
CCALIBIIOOI
;
end
else
begin
case
(
CCALIBl011
)
CCALIBIIOOI
:
begin
if
(
S_BUSY_IN
==
1
'b
1
)
CCALIBI111
<=
1
'b
1
;
if
(
SV_OFF_SET_IN
[
7
]
==
1
'b
0
)
CCALIBO011
<=
{
{
6
{
1
'b
0
}
}
,
SV_OFF_SET_IN
,
{
10
{
1
'b
0
}
}
}
;
else
CCALIBO011
<=
{
{
6
{
1
'b
1
}
}
,
SV_OFF_SET_IN
,
{
10
{
1
'b
0
}
}
}
;
CCALIBI011
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBIl11
<=
4
'b
0
;
CCALIBll11
[
(
CCALIBlO11
)
:
CCALIBIO11
]
<=
{
{
G_WIDTH_GAIN
+
1
}
{
1
'b
0
}
}
;
CCALIBll11
[
(
CCALIBIO11
-
1
)
:
(
CCALIBIO11
-
2
)
]
<=
{
2
{
1
'b
0
}
}
;
CCALIBll11
[
(
CCALIBIO11
-
3
)
:
0
]
<=
{
SV_ADC_RESULT_IN
[
(
CCALIBIO11
-
1
)
:
2
]
}
;
if
(
(
CCALIBl111
==
1
'b
1
)
&&
(
S_BUSY_IN
==
1
'b
0
)
)
CCALIBl011
<=
CCALIBlIOOI
;
else
begin
CCALIBl011
<=
CCALIBIIOOI
;
end
end
CCALIBlIOOI
:
begin
if
(
CCALIBIl11
<
{
G_WIDTH_GAIN
}
)
begin
CCALIBll11
<=
{
CCALIBll11
<<
1
}
;
CCALIBI011
<=
(
SV_GAIN_IN
[
CCALIBIl11
]
)
?
CCALIBll11
:
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBO011
<=
CCALIBOOOOI
;
CCALIBIl11
<=
CCALIBIl11
+
1
;
CCALIBl011
<=
CCALIBlIOOI
;
end
else
begin
CCALIBO011
<=
CCALIBOOOOI
;
CCALIBO111
<=
1
'b
1
;
CCALIBl011
<=
CCALIBOlOOI
;
end
end
CCALIBOlOOI
:
begin
CCALIBI111
<=
1
'b
0
;
CCALIBO111
<=
1
'b
0
;
if
(
S_BUSY_IN
==
1
'b
0
)
CCALIBl011
<=
CCALIBOlOOI
;
else
CCALIBl011
<=
CCALIBIIOOI
;
end
endcase
end
end
if
(
G_SATURATE
)
begin
assign
CCALIBOIOOI
=
(
SV_ADC_RESULT_IN
[
11
:
2
]
==
10
'h
3FF
)
?
1
'b
1
:
1
'b
0
;
assign
CCALIBlOOOI
=
{
(
CCALIBO011
[
CCALIBlI11
]
)
||
CCALIBOIOOI
}
?
12
'h
FFF
:
{
{
CCALIBO011
[
(
G_WIDTH_GAIN
+
8
)
:
(
G_WIDTH_GAIN
-
1
)
]
}
,
{
2
{
1
'b
0
}
}
}
;
end
else
begin
assign
CCALIBlOOOI
=
(
CCALIBO011
[
CCALIBlI11
]
)
?
12
'h
FFF
:
{
{
CCALIBO011
[
(
G_WIDTH_GAIN
+
8
)
:
(
G_WIDTH_GAIN
-
1
)
]
}
,
{
2
{
1
'b
0
}
}
}
;
end
assign
CCALIBIOOOI
=
(
CCALIBO011
[
CCALIBOl11
]
)
?
12
'h
000
:
CCALIBlOOOI
;
if
(
G_OPTIMIZATION
)
begin
CCALIBO
CCALIBIlOOI
(
.CCALIBI
(
CCALIBO011
)
,
.CCALIBl
(
CCALIBI011
)
,
.CCALIBOI
(
CCALIBOOOOI
)
)
;
end
else
begin
CCALIBllOOI
CCALIBO0OOI
(
.CCALIBI
(
CCALIBO011
)
,
.CCALIBl
(
CCALIBI011
)
,
.CCALIBOI
(
CCALIBOOOOI
)
)
;
end
end
else
if
(
G_ADC_BITS_8_10_12
==
2
'b
10
)
begin
always
@
(
posedge
S_CLK_IN
,
negedge
S_RST_N_IN
)
begin
if
(
S_RST_N_IN
==
1
'b
0
)
begin
CCALIBll11
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBO011
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBI011
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBIl11
<=
4
'b
0
;
CCALIBI111
<=
1
'b
0
;
CCALIBO111
<=
1
'b
0
;
CCALIBl011
<=
CCALIBIIOOI
;
end
else
begin
case
(
CCALIBl011
)
CCALIBIIOOI
:
begin
if
(
S_BUSY_IN
==
1
'b
1
)
CCALIBI111
<=
1
'b
1
;
if
(
SV_OFF_SET_IN
[
7
]
==
1
'b
0
)
CCALIBO011
<=
{
{
6
{
1
'b
0
}
}
,
SV_OFF_SET_IN
,
{
10
{
1
'b
0
}
}
}
;
else
CCALIBO011
<=
{
{
6
{
1
'b
1
}
}
,
SV_OFF_SET_IN
,
{
10
{
1
'b
0
}
}
}
;
CCALIBI011
<=
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBIl11
<=
4
'b
0
;
CCALIBll11
[
(
CCALIBlO11
)
:
CCALIBIO11
]
<=
{
{
G_WIDTH_GAIN
+
1
}
{
1
'b
0
}
}
;
CCALIBll11
[
(
CCALIBIO11
-
1
)
:
(
CCALIBIO11
-
2
)
]
<=
{
2
{
1
'b
0
}
}
;
CCALIBll11
[
(
CCALIBIO11
-
3
)
:
0
]
<=
{
{
SV_ADC_RESULT_IN
[
(
CCALIBIO11
-
1
)
:
4
]
}
,
{
2
{
1
'b
0
}
}
}
;
if
(
(
CCALIBl111
==
1
'b
1
)
&&
(
S_BUSY_IN
==
1
'b
0
)
)
CCALIBl011
<=
CCALIBlIOOI
;
else
begin
CCALIBl011
<=
CCALIBIIOOI
;
end
end
CCALIBlIOOI
:
begin
if
(
CCALIBIl11
<
{
G_WIDTH_GAIN
}
)
begin
CCALIBll11
<=
{
CCALIBll11
<<
1
}
;
CCALIBI011
<=
(
SV_GAIN_IN
[
CCALIBIl11
]
)
?
CCALIBll11
:
{
(
CCALIBlO11
+
1
)
{
1
'b
0
}
}
;
CCALIBO011
<=
CCALIBOOOOI
;
CCALIBIl11
<=
CCALIBIl11
+
1
;
CCALIBl011
<=
CCALIBlIOOI
;
end
else
begin
CCALIBO011
<=
CCALIBOOOOI
;
CCALIBO111
<=
1
'b
1
;
CCALIBl011
<=
CCALIBOlOOI
;
end
end
CCALIBOlOOI
:
begin
CCALIBI111
<=
1
'b
0
;
CCALIBO111
<=
1
'b
0
;
if
(
S_BUSY_IN
==
1
'b
0
)
CCALIBl011
<=
CCALIBOlOOI
;
else
CCALIBl011
<=
CCALIBIIOOI
;
end
endcase
end
end
if
(
G_SATURATE
)
begin
assign
CCALIBOIOOI
=
(
SV_ADC_RESULT_IN
[
11
:
4
]
==
8
'h
FF
)
?
1
'b
1
:
1
'b
0
;
assign
CCALIBlOOOI
=
{
(
CCALIBO011
[
CCALIBlI11
]
)
||
CCALIBOIOOI
}
?
12
'h
FFF
:
{
{
CCALIBO011
[
(
G_WIDTH_GAIN
+
8
)
:
(
G_WIDTH_GAIN
+
1
)
]
}
,
{
4
{
1
'b
0
}
}
}
;
end
else
begin
assign
CCALIBlOOOI
=
(
CCALIBO011
[
CCALIBlI11
]
)
?
12
'h
FFF
:
{
{
CCALIBO011
[
(
G_WIDTH_GAIN
+
8
)
:
(
G_WIDTH_GAIN
+
1
)
]
}
,
{
4
{
1
'b
0
}
}
}
;
end
assign
CCALIBIOOOI
=
(
CCALIBO011
[
CCALIBOl11
]
)
?
12
'h
000
:
CCALIBlOOOI
;
if
(
G_OPTIMIZATION
)
begin
CCALIBO
CCALIBIlOOI
(
.CCALIBI
(
CCALIBO011
)
,
.CCALIBl
(
CCALIBI011
)
,
.CCALIBOI
(
CCALIBOOOOI
)
)
;
end
else
begin
CCALIBllOOI
CCALIBO0OOI
(
.CCALIBI
(
CCALIBO011
)
,
.CCALIBl
(
CCALIBI011
)
,
.CCALIBOI
(
CCALIBOOOOI
)
)
;
end
end
endgenerate
endmodule

⌨️ 快捷键说明

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