**数电课程设计报告——基于FPGA的数字式秒表**
**一、设计任务与要求**
本设计项目是构建一个基于FPGA(Field-Programmable Gate Array,现场可编程门阵列)的数字式秒表,其核心目标是实现高精度、高分辨率的计时功能。秒表的设计要求如下:
1. **性能指标**:秒表应具有0.01秒的分辨率,最大计时范围为99.99秒。
2. **启/停和复位功能**:通过S1启/停开关控制计时的开始和结束,按下为0,弹起为1。S2复位开关用于清除计时,任何时候按下都可以立即停止计时并清零。
3. **计时基准**:以100Hz的计时脉冲作为精确的计时基准,通过分频器将1000Hz的时钟信号转换为所需基准,分频系数为10。
4. **数码管显示**:采用动态扫描方式,用7段数码管显示时间,8个数码管轮流点亮,以1000Hz的频率进行扫描。左四位显示学号后四位,右四位显示计时时间。
**二、系统原理框图**
系统主要包括以下几个部分:
- **50MHz输入时钟信号**:提供系统的主时钟。
- **1000Hz分频器**:将50MHz时钟分频为1000Hz的扫描频率。
- **100Hz分频器**:进一步将1000Hz信号分频为100Hz的计时基准。
- **显示译码器**:处理数字逻辑,将计时值转换为7段数码管可识别的信号。
- **数据选择器和38译码器**:用于控制数码管的选通。
- **模8计数器**:配合位控和段控,控制数码管的亮灭顺序。
- **控制器**:接收S1和S2的输入,控制计时过程。
**三、电路实现**
在实际电路设计中,采用Verilog HDL(硬件描述语言)编写代码来实现各功能模块。例如,10分频器的Verilog代码示例:
```verilog
module fp10(Clk,Out);
input Clk;
output Out;
reg Out;
reg [3:0] Cout;
reg Clk_En;
initial Out<=0;
always @(posedge Clk) begin
Cout <= (Cout == 4'd10) ? 4'd0 : (Cout + 4'd1);
Clk_En <= (Cout >= 4'd5) ? 1'd1 : 1'd0;
Out<=Clk_En;
end
endmodule
```
这个模块实现了将输入时钟频率分频10的功能,Clk_En 输出在每5个时钟周期的第6个周期变为高电平,用于驱动数码管的动态扫描。
**四、功能模块**
1. **分频器**:分频器是系统的关键部分,用于产生不同频率的信号。如上述10分频器示例,根据需求可以设计不同分频系数的分频器。
2. **计数器**:模10计数器和模8计数器分别用于计时和数码管的选择,确保正确计时和数码管的显示更新。
3. **显示控制**:这部分包括数码管的动态扫描控制和数据编码,以确保时间和学号的正确显示。
4. **按键接口**:处理S1和S2的输入,实现启/停和复位功能。
**五、提高要求**
在基础设计之上,可以增加小数点显示,使得计时数码管能够显示00.00到99.99,增强用户体验,提高计时的直观性。
这个基于FPGA的数字式秒表设计涵盖了数字电子技术中的计数器、分频器、显示译码器等关键知识点,通过FPGA的可编程特性实现了高度集成的计时系统,不仅满足了基本的计时需求,还具有良好的扩展性和灵活性。