@@ -129,11 +129,19 @@ class QuicklogicPlatform(TemplatedPlatform):
129
129
python3 -m quicklogic_fasm.bitstream_to_openocd
130
130
{{name}}.bit
131
131
{{name}}.openocd
132
+ --osc-freq {{platform.osc_freq}}
133
+ --fpga-clk-divider {{platform.osc_div}}
132
134
""" ,
133
135
]
134
136
135
137
# Common logic
136
138
139
+ @property
140
+ def default_clk_constraint (self ):
141
+ if self .default_clk == "sys_clk0" :
142
+ return Clock (self .osc_freq / self .osc_div )
143
+ return super ().default_clk_constraint
144
+
137
145
def add_clock_constraint (self , clock , frequency ):
138
146
super ().add_clock_constraint (clock , frequency )
139
147
clock .attrs ["keep" ] = "TRUE"
@@ -142,6 +150,20 @@ def create_missing_domain(self, name):
142
150
if name == "sync" and self .default_clk is not None :
143
151
m = Module ()
144
152
if self .default_clk == "sys_clk0" :
153
+ if not hasattr (self , "osc_div" ):
154
+ raise ValueError ("OSC divider (osc_div) must be an integer between 2 "
155
+ "and 512" )
156
+ if not isinstance (self .osc_div , int ) or self .osc_div < 2 or self .osc_div > 512 :
157
+ raise ValueError ("OSC divider (osc_div) must be an integer between 2 "
158
+ "and 512, not {!r}"
159
+ .format (self .osc_div ))
160
+ if not hasattr (self , "osc_freq" ):
161
+ raise ValueError ("OSC frequency (osc_freq) must be an integer between 2100000 "
162
+ "and 80000000" )
163
+ if not isinstance (self .osc_freq , int ) or self .osc_freq < 2100000 or self .osc_freq > 80000000 :
164
+ raise ValueError ("OSC frequency (osc_freq) must be an integer between 2100000 "
165
+ "and 80000000, not {!r}"
166
+ .format (self .osc_freq ))
145
167
clk_i = Signal ()
146
168
sys_clk0 = Signal ()
147
169
m .submodules += Instance ("qlal4s3b_cell_macro" ,
0 commit comments