项目总结报告
马致远
硬件介绍
小脚丫FPGA核心板包含:
(1)两个7段数码管;
(2)两个RGB三色LED;
(3)8个单色LED;
(4)4个拨码开关;
(5)4个轻触按键;
(6)一个type C接口。
在本次秒表设计任务中,主要用到的是4个轻触按键、两个7段数码管和type C接口。
项目需求
通过小脚丫FPGA核心板上的2个数码管和轻触按键制作一个秒表,通过按键来控制秒表的状态,并在数码管上显示数值。
使用七段显示器作为输出设备,在小脚丫FPGA核心板上创建一个2位数秒表。
(1)秒表应从0.0秒计数到9.9秒,然后翻转为0.0秒,计数值每0.1秒精确更新一次。
(2)秒表使用四个轻触按键输入:开始、停止、增量和清除(重置)。
(3)开始按键使秒表开始以10Hz时钟速率递增(即每0.1秒计数一次) ;
(4)停止输入使计数器停止递增,但数码管显示当前计数器值,且保持不变;
(5)无论按住增量按钮多长时间,每次按下该按钮时,增量输入都会导致显示值增加0.1秒;
(6)清除输入使得计数器值变为0.0秒。
需求分析
两个数码管用于显示秒表数值,四个轻触按键作为开始、停止、增量、清除的输入,其中:
(1)开始按键按下时,秒表开始计时;
(2)停止按键按下时,秒表停止计时,并显示当前数值;
(3)增量按键按下时,显示值增加0.1秒,长按该按键,仍然只增加0.1秒;
(4)清除按键按下时,秒表的显示值归零。
此外,应该考虑到:
(1)秒表每0.1秒计数一次, 则需分频出10Hz的时钟频率;
(2)秒表计数到9.9秒后翻转,即需将两个数码管重新赋值为0;
(3)按下增量按钮时,需分类讨论:当前计数值的十分位数字不为9时,将十分位数字加1即可;当前计数值的十分位数字等于9时,则应将十分位数字赋值为0,并且将个位数字加1;
(4)在整个计数过程中,显示个位数字的数码管的小数点应保持点亮的状态,显示十分位数字的数码管的小数点应保持不亮的状态。
在WebIDE环境下进行Verilog代码编程、综合、仿真、生成JED代码并下载到小脚丫FPGA核心板中进行验证。
实现的方式
根据以上的需求分析,本次秒表设计的Verilog代码可分为三个部分:顶层模块、显示模块和分频模块。其中,显示模块的作用是控制数码管这个译码器的输出码,使其正确地显示数字0~9(个位数字还应包括一直点亮的小数点);顶层模块中编写程序的主体部分,包括输入输出变量的设置、各变量的初始化、对显示模块和分频模块的实例化,以及4个按键按下时对应的各变量间应当执行的赋值操作等。
应当注意的是,为了保证最终板卡实现的功能满足项目需求,即4个按键按下时执行正确的条件语句和赋值操作,画出该秒表的状态转移图是一个相当有必要的环节。
此外,在这个AI发展得如火如荼的时代,我们可以适当借助ChatGPT的力量。下图为利用ChatGPT给出该项目的FPGA资源利用说明的展示。
功能框图
如前所述,画出该秒表的状态转移图有利于厘清4个按键在秒表的状态转换中发挥的作用,确保最终板卡实现的功能满足项目需求。该秒表的状态转移图如下:
在此状态转移图中,绘出的有三个状态:Zero,Counting和Stopped。start,stop,increase和rst分别表示开始、停止、增量和清除四个按钮的输入。
(1) Counting状态表示秒表正在计时,计数值持续增加;
(2) Stopped状态表示秒表暂停计时,计数值停止增加,但显示当前计数值;
(3) Zero状态表示秒表当前不在计时,且显示值为0.0秒。
接下来,我们可以定义状态之间的转移条件和输出行为:
(1) 从Zero状态到Counting状态的转移条件是按下开始按钮,并输出使计数值递增的控制信号。
(2) 从Counting状态到Stopped状态的转移条件是按下停止按钮,并输出停止计数的控制信号。
(3) 从Stopped状态到Counting状态的转移条件是再次按下开始按钮,并输出使计数值递增的控制信号。
(4) 从Counting状态或Stopped状态到Zero状态的转移条件是按下清除按钮,并输出使计数值清零的控制信号。
(5) 除此以外,秒表处于Counting状态时按下开始按钮、处于Stopped状态时按下停止按钮、处于Zero状态时按下清除按钮或停止按钮,秒表的状态不发生变化。
其实,上述状态转移图中还应包含第四个状态:Increased。不过,这个状态是一个瞬态。Zero,Counting和Stopped三个状态到Increased状态的转移条件均为按下增量按钮,并输出使计数值增加0.1秒的控制信号。值得注意的是:
(1)秒表处于Zero状态时,按下增量按钮,秒表短暂地经历Increased状态后变为Stopped状态;
(2)秒表处于Counting状态时,按下增量按钮,秒表短暂地经历Increased状态后重新返回Counting状态(只不过由于计数值只增加了0.1秒,在实际演示时效果不明显);
(3)秒表处于Stopped状态时,按下增量按钮,秒表短暂地经历Increased状态后重新返回Stopped状态(计数值增加0.1秒,但仍为Stopped状态)。
此外,因为Increased状态是一个瞬态,故无需考虑秒表处于Increased状态时按下增量按钮导致的秒表状态变化的情况。
实现结果展示图
具体功能详见演示视频。
代码展示
考虑到阅读体验问题,代码置于文末附录1。
管脚分配
剩余未截图部分(两个RGB三色LED和8个单色LED)在本次任务中暂时用不到,无需分配管脚。
FPGA资源利用说明
FPGA映射生成的报告中显示的FPGA资源利用情况如下:
- 使用的FPGA系列为MachXO2
- 使用的设备为LCMXO2-4000HC
- 使用的封装为CSBGA132
- 速度等级为5
- BRAM利用率为100%
- DSP利用率为100%
其他比较重要的资源利用信息:
寄存器数量:45个(占比1%),总共4635个
PFU(功耗优化单元)寄存器数量:45个(占比1%),总共4320个
PIO(并行输入/输出)寄存器数量:0个(占比0%),总共315个
SLICE(切片)数量:60个(占比3%),总共2160个
作为Logic/ROM的SLICE数量:60个(占比3%)
作为RAM的SLICE数量:0个(占比0%),总共1620个
作为Carry的SLICE数量:30个(占比1%)
LUT4(查找表)数量:118个(占比3%),总共4320个
作为逻辑LUT的数量:58个
作为分布式RAM的数量:0个
作为Ripple Logic的数量:60个
作为Shift Register的数量:0个
使用的PIO站点数量:23个+4个(JTAG),总共105个
Block RAM数量:0个,总共10个
GSR(全局设置单元)数量:1个,总共1个
EFB(边界扫描器)使用:否
JTAG使用:否
读回使用:否
振荡器使用:否
启动使用:否
POR(电源复位):打开
Bandgap(基准电压):打开
电源控制器数量:0个,总共1个
动态存储器控制器(BCINRD)数量:0个,总共6个
动态存储器控制器(BCLVDSO)数量:0个,总共1个
DCCA数量:0个,总共8个
DCMA数量:0个,总共2个
PLL数量:0个,总共2个
DQSDLL数量:0个,总共2个
CLKDIVC数量:0个,总共4个
ECLKSYNCA数量:0个,总共4个
ECLKBRIDGECS数量:0个,总共2个
总结:
1. LUT4总数量等于逻辑LUT4数量加上分布式RAM和Ripple Logic数量的两倍。
2. 逻辑LUT4的数量不包括分布式RAM和Ripple Logic的计数。
时钟数量:3个
Net clk1h: 7个负载,7个上升沿,0个下降沿(驱动器:u2/clk_p_30)
Net dis_start_N_21: 1个负载,1个上升沿,0个下降沿(驱动器:i2_2_lut)
Net clk_c: 18个负载,18个上升沿,0个下降沿(驱动器:PIO clk)
时钟使能数量:4个
Net clk1h_enable_11: 2个负载,2个LSLICE
Net clk1h_enable_5: 2个负载,2个LSLICE
Net clk1h_enable_10: 2个负载,2个LSLICE
Net clk1h_enable_9: 1个负载,1个LSLICE
LSR(异步复位)数量:5个
Net n473: 2个负载,2个LSLICE
Net n472: 2个负载,2个LSLICE
Net dis_start_N_27: 2个负载,2个LSLICE
Net dis_start_N_21: 1个负载,1个LSLICE
Net u2/n471: 17个负载,17个LSLICE
由三态缓冲器驱动的网络数量:0个
前10个最高扇出的非时钟网络:
Net u2/n471: 17个负载
Net segdata2_0: 14个负载
Net segdata1_0: 13个负载
Net segdata1_1: 13个负载
Net segdata2_1: 13个负载
Net segdata1_2: 12个负载
Net segdata2_2: 12个负载
Net segdata2_3: 12个负载
Net segdata1_3: 11个负载
Net clk1h_enable_5: 5个负载
警告数量:0个
错误数量:0个
总实际时间:0秒
峰值内存使用量:171 MB
详细的FPGA资源利用报告见附录2。
GPT等大模型的使用
下图为运用电子森林的AI助手修改代码的截图。
主要难题及解决方法
七段数码管实际上是一种译码器。在本次任务中,秒表的个位的小数点需要始终保持点亮的状态,而秒表的十分位的小数点需要始终保持不亮的状态,与此前我在数字电路课程中接触到的诸多实验均有所不同,因为那些实验均不需要考虑数码管的小数点的点亮问题。
为此,我查阅了硬禾科技提供的《STEP-MXO2快速入门》文档,在数码管显示例程中了解到小数点不点亮时数字0~9对应的译码器的输出码(如0对应十六进制的3f等),并由此推导出小数点点亮时数字0~9对应的译码器的输出码(如0对应十六进制的bf等)。在随后编写Verilog代码时,数码管的个位和十分位对应的赋值代码也要分开写。于是该问题得到解决。
附录1 源代码展示
如前所述,本次秒表设计的Verilog代码可分为三个部分:顶层模块(top.v)、显示模块(display.v)和分频模块(divide.v)。其中,显示模块的作用是控制数码管这个译码器的输出码,使其正确地显示数字0~9(个位数字还应包括一直点亮的小数点);顶层模块中编写程序的主体部分,包括输入输出变量的设置、各变量的初始化、对显示模块和分频模块的实例化,以及4个按键按下时对应的各变量间应当执行的赋值操作等;分频模块则直接调用WebIDE环境“常用模块”中已有的“整数分频器”即可。
顶层模块(top.v)
module top(clk,seg1,seg2,rst,start,stop,increase);
input clk,rst;
input start,stop,increase;
output [8:0] seg1,seg2;
reg [3:0] segdata1;
reg [3:0] segdata2;
reg dis_start;
reg flag;
initial
begin//初始化
segdata1 = 4'd0;
segdata2 = 4'd0;
dis_start = 1;
flag = 1;
end
//显示模块实例化
display display1(
.seg_data1(segdata1),
.seg_data2(segdata2),
.seg_led1(seg1),
.seg_led2(seg2)
);
wire clk1h;
//分频模块实例化
divide #(.WIDTH(32),.N(1200000))u2(
.clk(clk),
.rst(rst),
.clkout(clk1h)
);
always @(posedge clk1h or negedge rst or negedge start or negedge stop) begin
//清除
if(!rst)
begin
segdata1<=4'd0;
segdata2<=4'd0;
dis_start<=1'd0;
end
//启动
else if(!start)
begin
dis_start<=1'd1;
end
//停止
else if(!stop)
begin
dis_start<=1'd0;
end
//递增
else if(!increase&&dis_start==0)
begin
if(flag)
begin
flag<=1'd0;
if (segdata2 != 4'd9)
begin
segdata2 = segdata2 + 4'd1;
end
else
begin
segdata2<=4'd0;
segdata1 = segdata1 + 4'd1;
end
end
end
//十分位为9,向个位进位
else if(dis_start==1&&segdata2==4'd9)
begin
segdata2<=4'd0;
segdata1 = segdata1 + 4'd1;
end
//计时到9.9后翻转为0.0
else if(dis_start==1)
begin
segdata2 = segdata2 + 4'd1;
if (segdata1 == 4'd9 && segdata2 == 4'd9)
begin
segdata1<=4'd0;
segdata2<=4'd0;
end
end
else if(increase)
begin
flag<=1'd1;
end
end
endmodule
显示模块(display.v)
module display(seg_data1,seg_data2,seg_led1,seg_led2);
input [3:0] seg_data1;
input [3:0] seg_data2;
output [8:0] seg_led1;
output [8:0] seg_led2;
reg [8:0] seg1 [9:0];
reg [8:0] seg2 [9:0];
initial
begin
//个位,带小数点
seg1[0] = 9'hbf;
seg1[1] = 9'h86;
seg1[2] = 9'hdb;
seg1[3] = 9'hcf;
seg1[4] = 9'he6;
seg1[5] = 9'hed;
seg1[6] = 9'hfd;
seg1[7] = 9'h87;
seg1[8] = 9'hff;
seg1[9] = 9'hef;
//十分位,不带小数点
seg2[0] = 9'h3f;//7段显示数字0
seg2[1] = 9'h06;//7段显示数字1
seg2[2] = 9'h5b;//7段显示数字2
seg2[3] = 9'h4f;//7段显示数字3
seg2[4] = 9'h66;//7段显示数字4
seg2[5] = 9'h6d;//7段显示数字5
seg2[6] = 9'h7d;//7段显示数字6
seg2[7] = 9'h07;//7段显示数字7
seg2[8] = 9'h7f;//7段显示数字8
seg2[9] = 9'h6f;//7段显示数字9
end
assign seg_led1 = seg1[seg_data1];
assign seg_led2 = seg2[seg_data2];
endmodule
分频模块(divide.v)
/*-------------------------------------*/
// Module name : divide
// Author : STEP
// Description : 任意整数分频
// Web : www.stepfpga.com
/*-------------------------------------*/
module divide #
(
parameter WIDTH = 24, //计数器的位数,计数的最大值为 2**(WIDTH-1)
parameter N = 12_000_000 //分频系数,确保 N<2**(WIDTH-1)
)
(
input clk,
input rst,
output clkout
);
reg [WIDTH-1:0] cnt_p,cnt_n; //cnt_p为上升沿触发时的计数器,cnt_n为下降沿触发时的计数器
reg clk_p,clk_n; //clk_p为上升沿触发时分频时钟,clk_n为下降沿触发时分频时钟
/**********上升沿触发部分**************************************/
//上升沿触发时计数器的控制
always @(posedge clk or negedge rst) begin
if(!rst)
cnt_p <= 1'b0;
else if(cnt_p == (N-1))
cnt_p <= 1'b0;
else
cnt_p <= cnt_p + 1'b1;
end
//上升沿触发的分频时钟输出
always @(posedge clk or negedge rst)
begin
if(!rst)
clk_p <= 1'b0;
else if(cnt_p < (N>>1))
clk_p <= 1'b0;
else
clk_p <= 1'b1;
end
/*****************下降沿触发部分**************************************/
//下降沿触发时计数器的控制
always @(negedge clk or negedge rst)
begin
if(!rst)
cnt_n <= 1'b0;
else if(cnt_n == (N-1))
cnt_n <= 1'b0;
else
cnt_n <= cnt_n + 1'b1;
end
//下降沿触发的分频时钟输出,和clk_p相差半个clk时钟
always @(negedge clk or negedge rst)
begin
if(!rst)
clk_n <= 1'b0;
else if(cnt_n < (N>>1))
clk_n <= 1'b0;
else
clk_n <= 1'b1; //得到的分频时钟正周期比负周期多一个clk时钟
end
/*************************************************************************/
wire clk1 = clk; //当N=1时,直接输出clk
wire clk2 = clk_p; //当N为偶数也就是N的最低位为0,N[0]=0,输出clk_p
wire clk3 = clk_p & clk_n; //当N为奇数也就是N最低位为1,N[0]=1,输出clk_p&clk_n。
assign clkout = (N==1)? clk1:(N[0]? clk3:clk2);
endmodule
附录2 部分FPGA资源利用报告
run.log--- Lattice Diamond Version 3.7.0.96.1
--- Copyright (C) 1992-2016 Lattice Semiconductor Corporation.
--- All Rights Reserved.
--- Lattice Diamond install path: 3.7_x64
--- Start Time: ?? 2? 22 20:45:07 2024
WARNING - Create a new implementation in an existing sub-directory 'implement'.
synthesis -f "PRJ_9556_implement_lattice.synproj"
synthesis: version Diamond (64-bit) 3.7.0.96.1
Copyright (c) 1991-1994 by NeoCAD Inc. All rights reserved.
Copyright (c) 1995 AT&T Corp. All rights reserved.
Copyright (c) 1995-2001 Lucent Technologies Inc. All rights reserved.
Copyright (c) 2001 Agere Systems All rights reserved.
Copyright (c) 2002-2016 Lattice Semiconductor Corporation, All rights reserved.
Thu Feb 22 20:45:09 2024
Command Line: synthesis -f PRJ_9556_implement_lattice.synproj
INFO - synthesis: Lattice Synthesis Engine Launched.
Synthesis options:
The -a option is MachXO2.
The -s option is 5.
The -t option is CSBGA132.
The -d option is LCMXO2-4000HC.
Using package CSBGA132.
Using performance grade 5.
##########################################################
### Lattice Family : MachXO2
### Device : LCMXO2-4000HC
### Package : CSBGA132
### Speed : 5
##########################################################
Optimization goal = Balanced
The -top option is not used.
Target frequency = 1.000000 MHz.
Maximum fanout = 1000.
Timing path count = 3
BRAM utilization = 100.000000 %
DSP usage = true
DSP utilization = 100.000000 %
fsm_encoding_style = auto
resolve_mixed_drivers = 0
fix_gated_clocks = 1
Mux style = Auto
Use Carry Chain = true
carry_chain_length = 0
Loop Limit = 1950.
Use IO Insertion = TRUE
Use IO Reg = AUTO
Resource Sharing = TRUE
Propagate Constants = TRUE
Remove Duplicate Registers = TRUE
force_gsr = auto
ROM style = auto
RAM style = auto
The -comp option is FALSE.
The -syn option is FALSE.
-p 9556 (searchpath added)
-p data (searchpath added)
-p implement (searchpath added)
-p 9556 (searchpath added)
Verilog design file = display.v
Verilog design file = divide.v
Verilog design file = top.v
NGD file = PRJ_9556_implement.ngd
-sdc option: SDC file input not used.
-lpf option: Output file option is ON.
Hardtimer checking is enabled (default). The -dt option is not used.
The -r option is OFF. [ Remove LOC Properties is OFF. ]
WARNING - synthesis: Setting top as the top-level module. To specify the top-level module explicitly, use the -top option.
Technology check ok...
Design Summary:
Number of registers: 45 out of 4635 (1%)
PFU registers: 45 out of 4320 (1%)
PIO registers: 0 out of 315 (0%)
Number of SLICEs: 60 out of 2160 (3%)
SLICEs as Logic/ROM: 60 out of 2160 (3%)
SLICEs as RAM: 0 out of 1620 (0%)
SLICEs as Carry: 30 out of 2160 (1%)
Number of LUT4s: 118 out of 4320 (3%)
Number used as logic LUTs: 58
Number used as distributed RAM: 0
Number used as ripple logic: 60
Number used as shift registers: 0
Number of PIO sites used: 23 + 4(JTAG) out of 105 (26%)
Number of block RAMs: 0 out of 10 (0%)
Number of GSRs: 1 out of 1 (100%)
EFB used : No
JTAG used : No
Readback used : No
Oscillator used : No
Startup used : No
POR : On
Bandgap : On
Number of Power Controller: 0 out of 1 (0%)
Number of Dynamic Bank Controller (BCINRD): 0 out of 6 (0%)
Number of Dynamic Bank Controller (BCLVDSO): 0 out of 1 (0%)
Number of DCCA: 0 out of 8 (0%)
Number of DCMA: 0 out of 2 (0%)
Number of PLLs: 0 out of 2 (0%)
Number of DQSDLLs: 0 out of 2 (0%)
Number of CLKDIVC: 0 out of 4 (0%)
Number of ECLKSYNCA: 0 out of 4 (0%)
Number of ECLKBRIDGECS: 0 out of 2 (0%)
Notes:-
1. Total number of LUT4s = (Number of logic LUT4s) + 2*(Number of distributed RAMs) + 2*(Number of ripple logic)
2. Number of logic LUT4s does not include count of distributed RAM and ripple logic.
Number of clocks: 3
Net clk1h: 7 loads, 7 rising, 0 falling (Driver: u2/clk_p_30 )
Net dis_start_N_21: 1 loads, 1 rising, 0 falling (Driver: i2_2_lut )
Net clk_c: 18 loads, 18 rising, 0 falling (Driver: PIO clk )
Number of Clock Enables: 4
Net clk1h_enable_11: 2 loads, 2 LSLICEs
Net clk1h_enable_5: 2 loads, 2 LSLICEs
Net clk1h_enable_10: 2 loads, 2 LSLICEs
Net clk1h_enable_9: 1 loads, 1 LSLICEs
Number of LSRs: 5
Net n473: 2 loads, 2 LSLICEs
Net n472: 2 loads, 2 LSLICEs
Net dis_start_N_27: 2 loads, 2 LSLICEs
Net dis_start_N_21: 1 loads, 1 LSLICEs
Net u2/n471: 17 loads, 17 LSLICEs
Number of nets driven by tri-state buffers: 0
Top 10 highest fanout non-clock nets:
Net u2/n471: 17 loads
Net segdata2_0: 14 loads
Net segdata1_0: 13 loads
Net segdata1_1: 13 loads
Net segdata2_1: 13 loads
Net segdata1_2: 12 loads
Net segdata2_2: 12 loads
Net segdata2_3: 12 loads
Net segdata1_3: 11 loads
Net clk1h_enable_5: 5 loads
Number of warnings: 0
Number of errors: 0
Total REAL Time: 0 secs
Peak Memory Usage: 171 MB
Dumping design to file PRJ_9556_implement_map.ncd.
ncd2vdb "PRJ_9556_implement_map.ncd" ".vdbs/PRJ_9556_implement_map.vdb"
Loading device for application ncd2vdb from file 'xo2c4000.nph' in environment: ispfpga.
mpartrce -p "PRJ_9556_implement.p2t" -f "PRJ_9556_implement.p3t" -tf "PRJ_9556_implement.pt" "PRJ_9556_implement_map.ncd" "PRJ_9556_implement.ncd"
---- MParTrce Tool ----
Removing old design directory at request of -rem command line option to this program.
Running par. Please wait . . .
Lattice Place and Route Report for Design "PRJ_9556_implement_map.ncd"
Thu Feb 22 20:45:11 2024
PAR: Place And Route Diamond (64-bit) 3.7.0.96.1.
Command Line: par -w -l 5 -i 6 -t 1 -c 0 -e 0 -exp parUseNBR=1:parCDP=0:parCDR=0:parPathBased=OFF PRJ_9556_implement_map.ncd PRJ_9556_implement.dir/5_1.ncd PRJ_9556_implement.prf
Preference file: PRJ_9556_implement.prf.
Placement level-cost: 5-1.
Routing Iterations: 6
Loading design for application par from file PRJ_9556_implement_map.ncd.
Design name: top
NCD version: 3.3
Vendor: LATTICE
Device: LCMXO2-4000HC
Package: CSBGA132
Performance: 5
Loading device for application par from file 'xo2c4000.nph' in environment: ispfpga.
Package Status: Final Version 1.3.
Performance Hardware Data Status: Final Version 33.4.
License checked out.
Ignore Preference Error(s): True
Device utilization summary:
PIO (prelim) 23+4(JTAG)/280 10% used
23+4(JTAG)/105 26% bonded
SLICE 60/2160 2% used
GSR 1/1 100% used
Number of Signals: 169
Number of Connections: 398
Pin Constraint Summary:
23 out of 23 pins locked (100% locked).
The following 1 signal is selected to use the primary clock routing resources:
clk_c (driver: clk, clk load #: 18)
WARNING - par: Signal "clk_c" is selected to use Primary clock resources. However, its driver comp "clk" is located at "C1", which is not a dedicated pin for connecting to Primary clock resources. General routing has to be used to route this signal, and it might suffer from excessive delay or skew.
The following 2 signals are selected to use the secondary clock routing resources:
u2SLICE_45, clk load #: 0, sr load #: 17, ce load #: 0)
clk1h (driver: u2/SLICE_15, clk load #: 7, sr load #: 0, ce load #: 0)
Signal rst_c is selected as Global Set/Reset.
Starting Placer Phase 0.
Finished Placer Phase 0. REAL time: 0 secs
Starting Placer Phase 1.
.................
Placer score = 33362.
Finished Placer Phase 1. REAL time: 0 secs
Starting Placer Phase 2.
.
Placer score = 33287
Finished Placer Phase 2. REAL time: 0 secs
------------------ Clock Report ------------------
Global Clock Resources:
CLK_PIN : 0 out of 8 (0%)
General PIO: 1 out of 280 (0%)
PLL : 0 out of 2 (0%)
DCM : 0 out of 2 (0%)
DCC : 0 out of 8 (0%)
Quadrants All (TL, TR, BL, BR) - Global Clocks:
PRIMARY "clk_c" from comp "clk" on PIO site "C1 (PL4A)", clk load = 18
SECONDARY "u2SLICE_45" on site "R12C15B", clk load = 0, ce load = 0, sr load = 17
SECONDARY "clk1h" from Q1 on comp "u2/SLICE_15" on site "R12C15A", clk load = 7, ce load = 0, sr load = 0
PRIMARY : 1 out of 8 (12%)
SECONDARY: 2 out of 8 (25%)
Edge Clocks:
No edge clock selected.
--------------- End of Clock Report ---------------