newStep.v

This commit is contained in:
2025-11-27 04:28:54 +03:00
parent a84b8fcfde
commit 6e38a6c1af
85 changed files with 25646 additions and 6801 deletions

55
RTL/PLL/femtopll.v Normal file
View File

@@ -0,0 +1,55 @@
/*
* The PLL, that generates the internal clock (high freq) from the
* external one (lower freq).
* Trying to make something that is portable between different boards
* For now, ICEStick, ULX3S, ECP5 evaluation boards, FOMU supported.
* WIP: IceFeather
*/
`ifdef BENCH_OR_LINT
`define PASSTHROUGH_PLL
`endif
/*
`ifdef TANGNANO9K
`define PASSTHROUGH_PLL
`endif
*/
/**********************************************************************/
`ifdef PASSTHROUGH_PLL
module femtoPLL #(
parameter freq = 60
) (
input pclk,
output clk
);
assign clk = pclk;
endmodule
`else
`ifdef ICE_STICK
`include "pll_icestick.v"
`elsif ICE_BREAKER
`include "pll_icebreaker.v"
`elsif ICE_FEATHER
`include "pll_icefeather.v"
`elsif ICE_SUGAR
`include "pll_icesugar.v"
`elsif ULX3S
`include "pll_ulx3s.v"
`elsif ECP5_EVN
`include "pll_ecp5_evn.v"
`elsif FOMU
`include "pll_fomu.v"
`elsif ARTY
`include "pll_arty.v"
`elsif CMODA7
`include "pll_cmod_a7.v"
`elsif TANGNANO9K
`include "pll_tangnano9k.v"
`elsif PRIMER20K
`include "pll_tangprimer20k.v"
`endif
`endif

35
RTL/PLL/frequencies.txt Normal file
View File

@@ -0,0 +1,35 @@
16
20
24
25
30
35
40
45
48
50
55
60
65
66
70
75
80
85
90
95
100
105
110
115
120
125
130
135
140
150
160
170
180
190
200

166
RTL/PLL/gen_pll.sh Executable file
View File

@@ -0,0 +1,166 @@
#!/bin/sh
# Automatically generates a PLL parameterized by output freq
# (instead of cryptic parameters)
if [ "$#" -ne 2 ]; then
echo "Usage: $0 FPGA_KIND INPUTFREQ" >&2
exit 1
fi
FPGA_KIND=$1
INPUTFREQ=$2
echo "/* "
echo " * Do not edit this file, it was generated by gen_pll.sh"
echo " * "
echo " * FPGA kind : $1"
echo " * Input frequency: $2 MHz"
echo " */"
case $FPGA_KIND in
"ICE40")
cat << EOF
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
SB_PLL40_CORE pll (
.REFERENCECLK(pclk),
.PLLOUTCORE(clk),
.RESETB(1'b1),
.BYPASS(1'b0)
);
defparam pll.FEEDBACK_PATH="SIMPLE";
defparam pll.PLLOUT_SELECT="GENCLK";
generate
case(freq)
EOF
for OUTPUTFREQ in `cat frequencies.txt`
do
echo " $OUTPUTFREQ: begin"
icepll -i $INPUTFREQ -o $OUTPUTFREQ \
| egrep "DIVR|DIVF|DIVQ|FILTER_RANGE" \
| sed -e 's|[:()]||g' \
| awk '{printf(" defparam pll.%s = %s;\n",$1,$3);}'
echo " end"
done
cat <<EOF
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule
EOF
;;
"ECP5")
cat << EOF
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
(* ICP_CURRENT="12" *) (* LPF_RESISTOR="8" *) (* MFG_ENABLE_FILTEROPAMP="1" *) (* MFG_GMCREF_SEL="2" *)
EHXPLLL pll_i (
.RST(1'b0),
.STDBY(1'b0),
.CLKI(pclk),
.CLKOP(clk),
.CLKFB(clk),
.CLKINTFB(),
.PHASESEL0(1'b0),
.PHASESEL1(1'b0),
.PHASEDIR(1'b1),
.PHASESTEP(1'b1),
.PHASELOADREG(1'b1),
.PLLWAKESYNC(1'b0),
.ENCLKOP(1'b0)
);
defparam pll_i.PLLRST_ENA = "DISABLED";
defparam pll_i.INTFB_WAKE = "DISABLED";
defparam pll_i.STDBY_ENABLE = "DISABLED";
defparam pll_i.DPHASE_SOURCE = "DISABLED";
defparam pll_i.OUTDIVIDER_MUXA = "DIVA";
defparam pll_i.OUTDIVIDER_MUXB = "DIVB";
defparam pll_i.OUTDIVIDER_MUXC = "DIVC";
defparam pll_i.OUTDIVIDER_MUXD = "DIVD";
defparam pll_i.CLKOP_ENABLE = "ENABLED";
defparam pll_i.CLKOP_FPHASE = 0;
defparam pll_i.FEEDBK_PATH = "CLKOP";
generate
case(freq)
EOF
for OUTPUTFREQ in `cat frequencies.txt`
do
echo " $OUTPUTFREQ: begin"
ecppll -i $INPUTFREQ -o $OUTPUTFREQ -f tmp.v > tmp.txt
cat tmp.v \
| egrep "CLKI_DIV|CLKOP_DIV|CLKOP_CPHASE|CLKFB_DIV" \
| sed -e 's|[),.]| |g' -e 's|(|=|g' \
| awk '{printf(" defparam pll_i.%s;\n",$1);}'
rm -f tmp.v tmp.txt
echo " end"
done
cat <<EOF
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule
EOF
;;
"GOWIN")
cat << EOF
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
rPLL pll_i(
.CLKOUTP(),
.CLKOUTD(),
.CLKOUTD3(),
.RESET(1'b0),
.RESET_P(1'b0),
.CLKFB(1'b0),
.FBDSEL(6'b0),
.IDSEL(6'b0),
.ODSEL(6'b0),
.PSDA(4'b0),
.DUTYDA(4'b0),
.FDLY(4'b0),
.CLKIN(pclk),
.CLKOUT(clk)
);
defparam pll_i.FCLKIN="$INPUTFREQ";
generate
case(freq)
EOF
for OUTPUTFREQ in `cat frequencies.txt`
do
echo " $OUTPUTFREQ: begin"
gowin_pll -i $INPUTFREQ -o $OUTPUTFREQ -f tmp.v > tmp.txt
cat tmp.v \
| egrep "IDIV_SEL|FBDIV_SEL|ODIV_SEL" \
| sed -e 's|[),.]| |g' -e 's|(|=|g' \
| awk '{printf(" defparam pll_i.%s;\n",$1);}'
rm -f tmp.v tmp.txt
echo " end"
done
cat <<EOF
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule
EOF
;;
*)
echo FPGA_KIND needs to be one of ICE40,ECP5,GOWIN
exit 1
;;
esac

21
RTL/PLL/gen_plls.sh Executable file
View File

@@ -0,0 +1,21 @@
echo Generating PLL for FOMU
./gen_pll.sh ICE40 48 > pll_fomu.v
echo Generating PLL for IceFeather
./gen_pll.sh ICE40 12 > pll_icefeather.v
echo Generating PLL for IceStick
./gen_pll.sh ICE40 12 > pll_icestick.v
echo Generating PLL for IceSugar
./gen_pll.sh ICE40 12 > pll_icesugar.v
echo Generating PLL for ULX3S
./gen_pll.sh ECP5 25 > pll_ulx3s.v
echo Generating PLL for ECP5 evaluation board
./gen_pll.sh ECP5 12 > pll_ecp5_evn.v
echo Generating PLL for tangnano9k
./gen_pll.sh GOWIN 27 > pll_tangnano9k.v

39
RTL/PLL/pll_arty.v Normal file
View File

@@ -0,0 +1,39 @@
module femtoPLL #(
parameter freq = 50
) (
input wire pclk,
output wire clk
);
wire clk_feedback;
wire clk_internal;
// .CLKFBOUT_MULT(8)
// .CLKOUT0_DIVIDE(8*100/freq)
PLLE2_ADV #(
.BANDWIDTH("OPTIMIZED"), // OPTIMIZED, HIGH, LOW
.CLKFBOUT_MULT(freq/5), // Multiply value for all CLKOUT (2-64)
.CLKFBOUT_PHASE("0.0"), // Phase offset in degrees of CLKFB, (-360-360)
.CLKIN1_PERIOD("10.0"), // Input clock period in ns to ps resolution
.CLKOUT0_DIVIDE(20),
.CLKOUT0_DUTY_CYCLE("0.5"),
.CLKOUT0_PHASE("0.0"),
.DIVCLK_DIVIDE(1), // Master division value , (1-56)
.REF_JITTER1("0.0"), // Reference input jitter in UI (0.000-0.999)
.STARTUP_WAIT("FALSE") // Delayu DONE until PLL Locks, ("TRUE"/"FALSE")
) genclock(
.CLKOUT0(clk_internal),
.CLKFBOUT(clk_feedback), // 1-bit output, feedback clock
.CLKIN1(pclk),
.PWRDWN(1'b0),
.RST(1'b0),
.CLKFBIN(clk_feedback) // 1-bit input, feedback clock
);
BUFG bufg(
.I(clk_internal),
.O(clk)
);
endmodule

39
RTL/PLL/pll_cmod_a7.v Normal file
View File

@@ -0,0 +1,39 @@
module femtoPLL #(
parameter freq = 50
) (
input wire pclk,
output wire clk
);
wire clk_feedback;
wire clk_internal;
// .CLKFBOUT_MULT(8)
// .CLKOUT0_DIVIDE(8*100/freq)
PLLE2_ADV #(
.BANDWIDTH("OPTIMIZED"), // OPTIMIZED, HIGH, LOW
.CLKFBOUT_MULT(freq/5), // Multiply value for all CLKOUT (2-64)
.CLKFBOUT_PHASE("0.0"), // Phase offset in degrees of CLKFB, (-360-360)
.CLKIN1_PERIOD("10.0"), // Input clock period in ns to ps resolution
.CLKOUT0_DIVIDE(20),
.CLKOUT0_DUTY_CYCLE("0.5"),
.CLKOUT0_PHASE("0.0"),
.DIVCLK_DIVIDE(1), // Master division value , (1-56)
.REF_JITTER1("0.0"), // Reference input jitter in UI (0.000-0.999)
.STARTUP_WAIT("FALSE") // Delayu DONE until PLL Locks, ("TRUE"/"FALSE")
) genclock(
.CLKOUT0(clk_internal),
.CLKFBOUT(clk_feedback), // 1-bit output, feedback clock
.CLKIN1(pclk),
.PWRDWN(1'b0),
.RST(1'b0),
.CLKFBIN(clk_feedback) // 1-bit input, feedback clock
);
BUFG bufg(
.I(clk_internal),
.O(clk)
);
endmodule

256
RTL/PLL/pll_ecp5_evn.v Normal file
View File

@@ -0,0 +1,256 @@
/*
* Do not edit this file, it was generated by gen_pll.sh
*
* FPGA kind : ECP5
* Input frequency: 12 MHz
*/
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
(* ICP_CURRENT="12" *) (* LPF_RESISTOR="8" *) (* MFG_ENABLE_FILTEROPAMP="1" *) (* MFG_GMCREF_SEL="2" *)
EHXPLLL pll_i (
.RST(1'b0),
.STDBY(1'b0),
.CLKI(pclk),
.CLKOP(clk),
.CLKFB(clk),
.CLKINTFB(),
.PHASESEL0(1'b0),
.PHASESEL1(1'b0),
.PHASEDIR(1'b1),
.PHASESTEP(1'b1),
.PHASELOADREG(1'b1),
.PLLWAKESYNC(1'b0),
.ENCLKOP(1'b0)
);
defparam pll_i.PLLRST_ENA = "DISABLED";
defparam pll_i.INTFB_WAKE = "DISABLED";
defparam pll_i.STDBY_ENABLE = "DISABLED";
defparam pll_i.DPHASE_SOURCE = "DISABLED";
defparam pll_i.OUTDIVIDER_MUXA = "DIVA";
defparam pll_i.OUTDIVIDER_MUXB = "DIVB";
defparam pll_i.OUTDIVIDER_MUXC = "DIVC";
defparam pll_i.OUTDIVIDER_MUXD = "DIVD";
defparam pll_i.CLKOP_ENABLE = "ENABLED";
defparam pll_i.CLKOP_FPHASE = 0;
defparam pll_i.FEEDBK_PATH = "CLKOP";
generate
case(freq)
16: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=37;
defparam pll_i.CLKOP_CPHASE=18;
defparam pll_i.CLKFB_DIV=4;
end
20: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=30;
defparam pll_i.CLKOP_CPHASE=15;
defparam pll_i.CLKFB_DIV=5;
end
24: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=25;
defparam pll_i.CLKOP_CPHASE=12;
defparam pll_i.CLKFB_DIV=2;
end
25: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=25;
defparam pll_i.CLKOP_CPHASE=12;
defparam pll_i.CLKFB_DIV=2;
end
30: begin
defparam pll_i.CLKI_DIV=2;
defparam pll_i.CLKOP_DIV=20;
defparam pll_i.CLKOP_CPHASE=9;
defparam pll_i.CLKFB_DIV=5;
end
35: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=17;
defparam pll_i.CLKOP_CPHASE=8;
defparam pll_i.CLKFB_DIV=3;
end
40: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=15;
defparam pll_i.CLKOP_CPHASE=7;
defparam pll_i.CLKFB_DIV=10;
end
45: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=14;
defparam pll_i.CLKOP_CPHASE=6;
defparam pll_i.CLKFB_DIV=11;
end
48: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=12;
defparam pll_i.CLKOP_CPHASE=5;
defparam pll_i.CLKFB_DIV=4;
end
50: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=12;
defparam pll_i.CLKOP_CPHASE=5;
defparam pll_i.CLKFB_DIV=4;
end
55: begin
defparam pll_i.CLKI_DIV=2;
defparam pll_i.CLKOP_DIV=11;
defparam pll_i.CLKOP_CPHASE=5;
defparam pll_i.CLKFB_DIV=9;
end
60: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=10;
defparam pll_i.CLKOP_CPHASE=4;
defparam pll_i.CLKFB_DIV=5;
end
65: begin
defparam pll_i.CLKI_DIV=2;
defparam pll_i.CLKOP_DIV=9;
defparam pll_i.CLKOP_CPHASE=4;
defparam pll_i.CLKFB_DIV=11;
end
66: begin
defparam pll_i.CLKI_DIV=2;
defparam pll_i.CLKOP_DIV=9;
defparam pll_i.CLKOP_CPHASE=4;
defparam pll_i.CLKFB_DIV=11;
end
70: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=9;
defparam pll_i.CLKOP_CPHASE=4;
defparam pll_i.CLKFB_DIV=17;
end
75: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=8;
defparam pll_i.CLKOP_CPHASE=3;
defparam pll_i.CLKFB_DIV=19;
end
80: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=7;
defparam pll_i.CLKOP_CPHASE=3;
defparam pll_i.CLKFB_DIV=20;
end
85: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=7;
defparam pll_i.CLKOP_CPHASE=3;
defparam pll_i.CLKFB_DIV=7;
end
90: begin
defparam pll_i.CLKI_DIV=2;
defparam pll_i.CLKOP_DIV=7;
defparam pll_i.CLKOP_CPHASE=3;
defparam pll_i.CLKFB_DIV=15;
end
95: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=6;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=8;
end
100: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=6;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=25;
end
105: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=6;
defparam pll_i.CLKOP_CPHASE=3;
defparam pll_i.CLKFB_DIV=26;
end
110: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=28;
end
115: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=29;
end
120: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=10;
end
125: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=31;
end
130: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=32;
end
135: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=34;
end
140: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=35;
end
150: begin
defparam pll_i.CLKI_DIV=2;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=25;
end
160: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=40;
end
170: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=14;
end
180: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=3;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=15;
end
190: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=3;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=16;
end
200: begin
defparam pll_i.CLKI_DIV=3;
defparam pll_i.CLKOP_DIV=3;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=50;
end
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule

238
RTL/PLL/pll_fomu.v Normal file
View File

@@ -0,0 +1,238 @@
/*
* Do not edit this file, it was generated by gen_pll.sh
*
* FPGA kind : ICE40
* Input frequency: 48 MHz
*/
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
SB_PLL40_CORE pll (
.REFERENCECLK(pclk),
.PLLOUTCORE(clk),
.RESETB(1'b1),
.BYPASS(1'b0)
);
defparam pll.FEEDBACK_PATH="SIMPLE";
defparam pll.PLLOUT_SELECT="GENCLK";
generate
case(freq)
16: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0111111;
defparam pll.DIVQ = 3'b110;
defparam pll.FILTER_RANGE = 3'b001;
end
20: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0100111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
24: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0001111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b100;
end
25: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
30: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0010011;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b100;
end
35: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0100010;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
40: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0100111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
45: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0001110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b100;
end
48: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0001111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b100;
end
50: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
55: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0110110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
60: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0010011;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b100;
end
65: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b1000000;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
66: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0010101;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b100;
end
70: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0100010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
75: begin
defparam pll.DIVR = 4'b0001;
defparam pll.DIVF = 7'b0011000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b010;
end
80: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0100111;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
85: begin
defparam pll.DIVR = 4'b0011;
defparam pll.DIVF = 7'b0111000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
90: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0001110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b100;
end
95: begin
defparam pll.DIVR = 4'b0011;
defparam pll.DIVF = 7'b0111110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
100: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
105: begin
defparam pll.DIVR = 4'b0001;
defparam pll.DIVF = 7'b0100010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b010;
end
110: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0110110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
115: begin
defparam pll.DIVR = 4'b0011;
defparam pll.DIVF = 7'b1001100;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
120: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0010011;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b100;
end
125: begin
defparam pll.DIVR = 4'b0011;
defparam pll.DIVF = 7'b1010010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
130: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b1000000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
135: begin
defparam pll.DIVR = 4'b0011;
defparam pll.DIVF = 7'b0101100;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
140: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0100010;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
150: begin
defparam pll.DIVR = 4'b0001;
defparam pll.DIVF = 7'b0011000;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b010;
end
160: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0100111;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
170: begin
defparam pll.DIVR = 4'b0011;
defparam pll.DIVF = 7'b0111000;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
180: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0001110;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b100;
end
190: begin
defparam pll.DIVR = 4'b0011;
defparam pll.DIVF = 7'b0111110;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
200: begin
defparam pll.DIVR = 4'b0010;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule

202
RTL/PLL/pll_icebreaker.v Normal file
View File

@@ -0,0 +1,202 @@
/*
* Do not edit this file, it was generated by gen_pll.sh
*
* FPGA kind : ICE40
* Input frequency: 12 MHz
*/
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
SB_PLL40_PAD pll (
.PACKAGEPIN(pclk),
.PLLOUTCORE(clk),
.RESETB(1'b1),
.BYPASS(1'b0)
);
defparam pll.FEEDBACK_PATH="SIMPLE";
defparam pll.PLLOUT_SELECT="GENCLK";
generate
case(freq)
16: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010100;
defparam pll.DIVQ = 3'b110;
defparam pll.FILTER_RANGE = 3'b001;
end
20: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
24: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
25: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
30: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
35: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
40: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
45: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
48: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
50: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
55: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001000;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
60: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
65: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
66: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
70: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
75: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
80: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
85: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
90: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
95: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
100: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
105: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000101;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
110: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
115: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001100;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
120: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
125: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
130: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
135: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101100;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
140: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule

238
RTL/PLL/pll_icefeather.v Normal file
View File

@@ -0,0 +1,238 @@
/*
* Do not edit this file, it was generated by gen_pll.sh
*
* FPGA kind : ICE40
* Input frequency: 12 MHz
*/
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
SB_PLL40_CORE pll (
.REFERENCECLK(pclk),
.PLLOUTCORE(clk),
.RESETB(1'b1),
.BYPASS(1'b0)
);
defparam pll.FEEDBACK_PATH="SIMPLE";
defparam pll.PLLOUT_SELECT="GENCLK";
generate
case(freq)
16: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010100;
defparam pll.DIVQ = 3'b110;
defparam pll.FILTER_RANGE = 3'b001;
end
20: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
24: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
25: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
30: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
35: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
40: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
45: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
48: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
50: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
55: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001000;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
60: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
65: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
66: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
70: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
75: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
80: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
85: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
90: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
95: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
100: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
105: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000101;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
110: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
115: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001100;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
120: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
125: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
130: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
135: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101100;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
140: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
150: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
160: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
170: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111000;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
180: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
190: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111110;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
200: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule

238
RTL/PLL/pll_icestick.v Normal file
View File

@@ -0,0 +1,238 @@
/*
* Do not edit this file, it was generated by gen_pll.sh
*
* FPGA kind : ICE40
* Input frequency: 12 MHz
*/
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
SB_PLL40_CORE pll (
.REFERENCECLK(pclk),
.PLLOUTCORE(clk),
.RESETB(1'b1),
.BYPASS(1'b0)
);
defparam pll.FEEDBACK_PATH="SIMPLE";
defparam pll.PLLOUT_SELECT="GENCLK";
generate
case(freq)
16: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010100;
defparam pll.DIVQ = 3'b110;
defparam pll.FILTER_RANGE = 3'b001;
end
20: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
24: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
25: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
30: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
35: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
40: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
45: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
48: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
50: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
55: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001000;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
60: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
65: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
66: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
70: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
75: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
80: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
85: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
90: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
95: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
100: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
105: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000101;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
110: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
115: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001100;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
120: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
125: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
130: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
135: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101100;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
140: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
150: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
160: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
170: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111000;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
180: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
190: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111110;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
200: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule

238
RTL/PLL/pll_icesugar.v Normal file
View File

@@ -0,0 +1,238 @@
/*
* Do not edit this file, it was generated by gen_pll.sh
*
* FPGA kind : ICE40
* Input frequency: 12 MHz
*/
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
SB_PLL40_CORE pll (
.REFERENCECLK(pclk),
.PLLOUTCORE(clk),
.RESETB(1'b1),
.BYPASS(1'b0)
);
defparam pll.FEEDBACK_PATH="SIMPLE";
defparam pll.PLLOUT_SELECT="GENCLK";
generate
case(freq)
16: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010100;
defparam pll.DIVQ = 3'b110;
defparam pll.FILTER_RANGE = 3'b001;
end
20: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
24: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
25: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
30: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b101;
defparam pll.FILTER_RANGE = 3'b001;
end
35: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
40: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
45: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
48: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
50: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
55: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001000;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
60: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
65: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010110;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
66: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010111;
defparam pll.DIVQ = 3'b100;
defparam pll.FILTER_RANGE = 3'b001;
end
70: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
75: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
80: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
85: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
90: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
95: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
100: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
105: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000101;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
110: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001000;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
115: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001100;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
120: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1001111;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
125: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010010;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
130: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1010110;
defparam pll.DIVQ = 3'b011;
defparam pll.FILTER_RANGE = 3'b001;
end
135: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101100;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
140: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0101110;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
150: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110001;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
160: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0110100;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
170: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111000;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
180: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111011;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
190: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b0111110;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
200: begin
defparam pll.DIVR = 4'b0000;
defparam pll.DIVF = 7'b1000010;
defparam pll.DIVQ = 3'b010;
defparam pll.FILTER_RANGE = 3'b001;
end
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule

211
RTL/PLL/pll_tangnano9k.v Normal file
View File

@@ -0,0 +1,211 @@
/*
* Do not edit this file, it was generated by gen_pll.sh
*
* FPGA kind : GOWIN
* Input frequency: 27 MHz
*/
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
rPLL pll_i(
.CLKOUTP(),
.CLKOUTD(),
.CLKOUTD3(),
.RESET(1'b0),
.RESET_P(1'b0),
.CLKFB(1'b0),
.FBDSEL(6'b0),
.IDSEL(6'b0),
.ODSEL(6'b0),
.PSDA(4'b0),
.DUTYDA(4'b0),
.FDLY(4'b0),
.CLKIN(pclk),
.CLKOUT(clk)
);
defparam pll_i.FCLKIN="27";
generate
case(freq)
16: begin
defparam pll_i.IDIV_SEL=4;
defparam pll_i.FBDIV_SEL=2;
defparam pll_i.ODIV_SEL=32;
end
20: begin
defparam pll_i.IDIV_SEL=3;
defparam pll_i.FBDIV_SEL=2;
defparam pll_i.ODIV_SEL=32;
end
24: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=7;
defparam pll_i.ODIV_SEL=32;
end
25: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=7;
defparam pll_i.ODIV_SEL=32;
end
30: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=9;
defparam pll_i.ODIV_SEL=16;
end
35: begin
defparam pll_i.IDIV_SEL=6;
defparam pll_i.FBDIV_SEL=8;
defparam pll_i.ODIV_SEL=16;
end
40: begin
defparam pll_i.IDIV_SEL=1;
defparam pll_i.FBDIV_SEL=2;
defparam pll_i.ODIV_SEL=16;
end
45: begin
defparam pll_i.IDIV_SEL=2;
defparam pll_i.FBDIV_SEL=4;
defparam pll_i.ODIV_SEL=16;
end
48: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=15;
defparam pll_i.ODIV_SEL=16;
end
50: begin
defparam pll_i.IDIV_SEL=6;
defparam pll_i.FBDIV_SEL=12;
defparam pll_i.ODIV_SEL=8;
end
55: begin
defparam pll_i.IDIV_SEL=0;
defparam pll_i.FBDIV_SEL=1;
defparam pll_i.ODIV_SEL=8;
end
60: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=19;
defparam pll_i.ODIV_SEL=8;
end
65: begin
defparam pll_i.IDIV_SEL=4;
defparam pll_i.FBDIV_SEL=11;
defparam pll_i.ODIV_SEL=8;
end
66: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=21;
defparam pll_i.ODIV_SEL=8;
end
70: begin
defparam pll_i.IDIV_SEL=4;
defparam pll_i.FBDIV_SEL=12;
defparam pll_i.ODIV_SEL=8;
end
75: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=24;
defparam pll_i.ODIV_SEL=8;
end
80: begin
defparam pll_i.IDIV_SEL=0;
defparam pll_i.FBDIV_SEL=2;
defparam pll_i.ODIV_SEL=8;
end
85: begin
defparam pll_i.IDIV_SEL=6;
defparam pll_i.FBDIV_SEL=21;
defparam pll_i.ODIV_SEL=8;
end
90: begin
defparam pll_i.IDIV_SEL=2;
defparam pll_i.FBDIV_SEL=9;
defparam pll_i.ODIV_SEL=8;
end
95: begin
defparam pll_i.IDIV_SEL=1;
defparam pll_i.FBDIV_SEL=6;
defparam pll_i.ODIV_SEL=8;
end
100: begin
defparam pll_i.IDIV_SEL=6;
defparam pll_i.FBDIV_SEL=25;
defparam pll_i.ODIV_SEL=4;
end
105: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=34;
defparam pll_i.ODIV_SEL=4;
end
110: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=36;
defparam pll_i.ODIV_SEL=4;
end
115: begin
defparam pll_i.IDIV_SEL=3;
defparam pll_i.FBDIV_SEL=16;
defparam pll_i.ODIV_SEL=4;
end
120: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=39;
defparam pll_i.ODIV_SEL=4;
end
125: begin
defparam pll_i.IDIV_SEL=7;
defparam pll_i.FBDIV_SEL=36;
defparam pll_i.ODIV_SEL=4;
end
130: begin
defparam pll_i.IDIV_SEL=4;
defparam pll_i.FBDIV_SEL=23;
defparam pll_i.ODIV_SEL=4;
end
135: begin
defparam pll_i.IDIV_SEL=0;
defparam pll_i.FBDIV_SEL=4;
defparam pll_i.ODIV_SEL=4;
end
140: begin
defparam pll_i.IDIV_SEL=4;
defparam pll_i.FBDIV_SEL=25;
defparam pll_i.ODIV_SEL=4;
end
150: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=49;
defparam pll_i.ODIV_SEL=4;
end
160: begin
defparam pll_i.IDIV_SEL=8;
defparam pll_i.FBDIV_SEL=52;
defparam pll_i.ODIV_SEL=4;
end
170: begin
defparam pll_i.IDIV_SEL=6;
defparam pll_i.FBDIV_SEL=43;
defparam pll_i.ODIV_SEL=4;
end
180: begin
defparam pll_i.IDIV_SEL=2;
defparam pll_i.FBDIV_SEL=19;
defparam pll_i.ODIV_SEL=4;
end
190: begin
defparam pll_i.IDIV_SEL=0;
defparam pll_i.FBDIV_SEL=6;
defparam pll_i.ODIV_SEL=4;
end
200: begin
defparam pll_i.IDIV_SEL=4;
defparam pll_i.FBDIV_SEL=36;
defparam pll_i.ODIV_SEL=4;
end
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule

View File

@@ -0,0 +1,33 @@
module femtoPLL #(
parameter freq = 54 // Default to 54 MHz
) (
input wire pclk,
output wire clk
);
// Tang Primer 20K (GW2A-18) PLL Configuration
// Input: 27 MHz
// Output: 54 MHz
rPLL #(
.FCLKIN("27"),
.DEVICE("GW2A-18"),
.IDIV_SEL(0), // Input Divider = 1
.FBDIV_SEL(15), // Feedback Divider = 16 (VCO = 27*1*16 = 432 MHz)
.ODIV_SEL(8) // Output Divider = 8 (Out = 432/8 = 54 MHz)
) pll_i (
.CLKOUTP(),
.CLKOUTD(),
.CLKOUTD3(),
.RESET(1'b0),
.RESET_P(1'b0),
.CLKFB(1'b0),
.FBDSEL(6'b0),
.IDSEL(6'b0),
.ODSEL(6'b0),
.PSDA(4'b0),
.DUTYDA(4'b0),
.FDLY(4'b0),
.CLKIN(pclk),
.CLKOUT(clk)
);
endmodule

256
RTL/PLL/pll_ulx3s.v Normal file
View File

@@ -0,0 +1,256 @@
/*
* Do not edit this file, it was generated by gen_pll.sh
*
* FPGA kind : ECP5
* Input frequency: 25 MHz
*/
module femtoPLL #(
parameter freq = 40
) (
input wire pclk,
output wire clk
);
(* ICP_CURRENT="12" *) (* LPF_RESISTOR="8" *) (* MFG_ENABLE_FILTEROPAMP="1" *) (* MFG_GMCREF_SEL="2" *)
EHXPLLL pll_i (
.RST(1'b0),
.STDBY(1'b0),
.CLKI(pclk),
.CLKOP(clk),
.CLKFB(clk),
.CLKINTFB(),
.PHASESEL0(1'b0),
.PHASESEL1(1'b0),
.PHASEDIR(1'b1),
.PHASESTEP(1'b1),
.PHASELOADREG(1'b1),
.PLLWAKESYNC(1'b0),
.ENCLKOP(1'b0)
);
defparam pll_i.PLLRST_ENA = "DISABLED";
defparam pll_i.INTFB_WAKE = "DISABLED";
defparam pll_i.STDBY_ENABLE = "DISABLED";
defparam pll_i.DPHASE_SOURCE = "DISABLED";
defparam pll_i.OUTDIVIDER_MUXA = "DIVA";
defparam pll_i.OUTDIVIDER_MUXB = "DIVB";
defparam pll_i.OUTDIVIDER_MUXC = "DIVC";
defparam pll_i.OUTDIVIDER_MUXD = "DIVD";
defparam pll_i.CLKOP_ENABLE = "ENABLED";
defparam pll_i.CLKOP_FPHASE = 0;
defparam pll_i.FEEDBK_PATH = "CLKOP";
generate
case(freq)
16: begin
defparam pll_i.CLKI_DIV=8;
defparam pll_i.CLKOP_DIV=38;
defparam pll_i.CLKOP_CPHASE=18;
defparam pll_i.CLKFB_DIV=5;
end
20: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=30;
defparam pll_i.CLKOP_CPHASE=15;
defparam pll_i.CLKFB_DIV=4;
end
24: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=24;
defparam pll_i.CLKOP_CPHASE=11;
defparam pll_i.CLKFB_DIV=1;
end
25: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=24;
defparam pll_i.CLKOP_CPHASE=11;
defparam pll_i.CLKFB_DIV=1;
end
30: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=20;
defparam pll_i.CLKOP_CPHASE=9;
defparam pll_i.CLKFB_DIV=6;
end
35: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=17;
defparam pll_i.CLKOP_CPHASE=8;
defparam pll_i.CLKFB_DIV=7;
end
40: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=15;
defparam pll_i.CLKOP_CPHASE=7;
defparam pll_i.CLKFB_DIV=8;
end
45: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=13;
defparam pll_i.CLKOP_CPHASE=6;
defparam pll_i.CLKFB_DIV=9;
end
48: begin
defparam pll_i.CLKI_DIV=8;
defparam pll_i.CLKOP_DIV=13;
defparam pll_i.CLKOP_CPHASE=6;
defparam pll_i.CLKFB_DIV=15;
end
50: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=12;
defparam pll_i.CLKOP_CPHASE=5;
defparam pll_i.CLKFB_DIV=2;
end
55: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=11;
defparam pll_i.CLKOP_CPHASE=5;
defparam pll_i.CLKFB_DIV=11;
end
60: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=10;
defparam pll_i.CLKOP_CPHASE=4;
defparam pll_i.CLKFB_DIV=12;
end
65: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=9;
defparam pll_i.CLKOP_CPHASE=4;
defparam pll_i.CLKFB_DIV=13;
end
66: begin
defparam pll_i.CLKI_DIV=8;
defparam pll_i.CLKOP_DIV=9;
defparam pll_i.CLKOP_CPHASE=4;
defparam pll_i.CLKFB_DIV=21;
end
70: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=9;
defparam pll_i.CLKOP_CPHASE=4;
defparam pll_i.CLKFB_DIV=14;
end
75: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=8;
defparam pll_i.CLKOP_CPHASE=4;
defparam pll_i.CLKFB_DIV=3;
end
80: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=7;
defparam pll_i.CLKOP_CPHASE=3;
defparam pll_i.CLKFB_DIV=16;
end
85: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=7;
defparam pll_i.CLKOP_CPHASE=3;
defparam pll_i.CLKFB_DIV=17;
end
90: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=7;
defparam pll_i.CLKOP_CPHASE=3;
defparam pll_i.CLKFB_DIV=18;
end
95: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=6;
defparam pll_i.CLKOP_CPHASE=3;
defparam pll_i.CLKFB_DIV=19;
end
100: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=6;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=4;
end
105: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=6;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=21;
end
110: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=22;
end
115: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=23;
end
120: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=24;
end
125: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=5;
end
130: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=5;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=26;
end
135: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=27;
end
140: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=28;
end
150: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=6;
end
160: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=2;
defparam pll_i.CLKFB_DIV=32;
end
170: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=4;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=34;
end
180: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=3;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=36;
end
190: begin
defparam pll_i.CLKI_DIV=5;
defparam pll_i.CLKOP_DIV=3;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=38;
end
200: begin
defparam pll_i.CLKI_DIV=1;
defparam pll_i.CLKOP_DIV=3;
defparam pll_i.CLKOP_CPHASE=1;
defparam pll_i.CLKFB_DIV=8;
end
default: UNKNOWN_FREQUENCY unknown_frequency();
endcase
endgenerate
endmodule