2024寒假练-基于Lattice MXO2的小脚丫FPGA核心板设计秒表
该项目使用了基于Lattice MXO2的小脚丫FPGA核心板和WebIDE环境,实现了具有启动、停止、递增和清除功能的秒表的设计,它的主要功能为:从0.0秒计数到9.9秒,然后翻转,计数值每0.1秒精确更新一次;每次按下增量按钮时,计数值增加0.1秒。
标签
FPGA
硬禾学堂
2024寒假在家一起练
秒表设计
马致远
更新2024-04-01
北京理工大学
125

项目总结报告

马致远

硬件介绍

image.png

小脚丫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资源利用说明的展示。


image.png

功能框图

如前所述,画出该秒表的状态转移图有利于厘清4个按键在秒表的状态转换中发挥的作用,确保最终板卡实现的功能满足项目需求。该秒表的状态转移图如下:

image.png

在此状态转移图中,绘出的有三个状态: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状态时按下增量按钮导致的秒表状态变化的情况。


实现结果展示图

bc5e011926b38fc17442f7ac3853a16.jpg

具体功能详见演示视频。


代码展示

考虑到阅读体验问题,代码置于文末附录1。


管脚分配

image.png

image.png

剩余未截图部分(两个RGB三色LED8个单色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助手修改代码的截图。

image.png

主要难题及解决方法

七段数码管实际上是一种译码器。在本次任务中,秒表的个位的小数点需要始终保持点亮的状态,而秒表的十分位的小数点需要始终保持不亮的状态,与此前我在数字电路课程中接触到的诸多实验均有所不同,因为那些实验均不需要考虑数码管的小数点的点亮问题。

为此,我查阅了硬禾科技提供的《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 ---------------
附件下载
代码附件.zip
包含可直接下载到板卡上运行的jed文件,三个模块的V文件及对应的仿真文件
团队介绍
北京理工大学21级电子信息实验班
团队成员
马致远
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号