FPGA实训报告DAY 1(Verilog HDL)

 实习日志与总结

日期:2024 年 7 月 10 日 星期三 姓名:XXX

一、实习日志

上午

9:00 - 9:30 按时到达工位,参加部门早会,了解了今天的实习任务和目标,即初步学习 FPGA 简介和 Verilog 基础语法知识。

9:30 - 10:30 阅读相关的技术文档和教材,对 FPGA(现场可编程门阵列)的基本概念和工作原理有了初步的认识。了解到 FPGA 是一种可以通过编程来实现特定逻辑功能的集成电路,具有灵活性高、开发周期短等优点,广泛应用于通信、图像处理、工业控制等领域。

10:30 - 12:00 观看了几个关于 FPGA 应用的视频案例,更加直观地感受了 FPGA 在实际项目中的作用和优势。同时,做了详细的笔记,记录了一些关键的知识点和疑问点。

中午

12:00 - 14:00 午餐和休息时间。

下午

14:30 - 15:30 开始学习 Verilog 基础语法知识。首先了解了 Verilog 的模块结构、端口声明、数据类型等基本概念。通过示例代码,理解了如何使用 Verilog 描述简单的逻辑电路,如与门、或门、非门等。

15:30 - 16:30 进行了一些简单的 Verilog 代码编写练习,实现了基本的逻辑运算和组合逻辑电路。在编写过程中,遇到了一些语法错误和逻辑错误,通过仔细检查代码和参考教材,逐步解决了问题。

16:30 - 17:00 与同事交流讨论,分享了自己在学习过程中的心得和体会,同时也向同事请教了一些疑惑的问题,得到了很多有用的建议和指导。

17:00 - 17:30 对今天学习的内容进行总结和整理,回顾了 FPGA 的概念和 Verilog 语法的重点知识,并对自己的学习效果进行了评估。

二、实习总结

        通过今天一天的实习,我对 FPGA 和 Verilog 有了初步的了解和认识。 在学习 FPGA 简介的过程中,我明白了 FPGA 的灵活性和可重构

### 基于 Verilog HDL 的万年历实现 #### 1. 设计概述 万年历的设计通常涉及日期计算、闰年判断以及显示模块等功能。通过硬件描述语言(HDL),可以利用状态机来管理日历逻辑并完成相应的功能[^1]。 #### 2. 关键技术点 以下是基于 Verilog HDL 实现万年历的关键部分: - **闰年检测** 判断某一年是否为闰年的条件如下:如果该年份能被4整除但不能被100整除,或者能够被400整除,则为闰年。这可以通过简单的算术运算实现。 - **月份天数表** 不同的月份数量不同,需定义一个数组存储每个月的标准天数,并在遇到二月时动态调整其值以适应平年或闰年的情况。 - **状态转移机制** 使用有限状态机(FSM)控制整个系统的运行流程,包括初始化设置当前时间、手动调节时间和自动更新下一秒的时间等操作模式切换。 #### 3. 示例代码片段 下面提供了一个简化版的 Verilog 模块用于演示如何构建基本的日历框架: ```verilog module perpetual_calendar ( input wire clk, input wire reset_n, output reg [7:0] day_of_month, output reg [3:0] month, output reg [15:0] year ); // 定义内部信号 reg is_leap_year; integer days_in_months[12]; always @(posedge clk or negedge reset_n) begin if (!reset_n) begin // 初始化默认值 day_of_month <= 8'd1; month <= 4'd1; year <= 16'd2023; for (int i=0;i<12;i++) begin case(i) 1 : days_in_months[i] = 28; // February placeholder default : days_in_months[i] = ((i==3)||(i==5)||(i==8)||(i==10))?30:31; endcase end end else begin // 更新逻辑 if (day_of_month >= days_in_months[month]) begin day_of_month <= 8'd1; if (month == 12) begin month <= 4'd1; year <= year + 1'b1; // Leap Year Calculation is_leap_year = (year % 16'd4 == 0 && !(year % 16'd100 == 0)) || (year % 16'd400 == 0); days_in_months[1] = is_leap_year ? 29 : 28; end else begin month <= month + 1'b1; end end else begin day_of_month <= day_of_month + 1'b1; end end end endmodule ``` 此代码仅作为基础模板展示核心概念,在实际应用中可能还需要加入更多细节处理比如输入校验、边界情况考虑等等[^1]。 #### 4. 学习资源推荐 对于希望深入学习 Verilog 编程及其在 FPGA 上的应用开发者来说,《Digital Design and Computer Architecture》是一本非常优秀的教材;另外还可以参考开源项目网站如 GitHub 寻找类似的完整工程实例加以研究实践。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FutureLight_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值