以下内容,参加校内电赛完成FPGA设计题目的同学可以免作
阶段2
本阶段使用配发的DE0开发板进行
关于多周期电路的说明
所谓多周期(Multi-Cycle) 电路,就是这个电路 带有一个工作使能的输入信号,当工作使能的输入信号为1的CLK周期,电路进行动作。在现代高速处理的FPGA设计中,我们更加倾向于使用工作使能信号来协调多个电路模块进行动作,而不是使用计数器分频信号作为时钟来协调不同的电路部件。
题目2-1:多周期-恒最大值计数-显示电路
设计要求
- 所有电路模块,只能使用DE0 板载的 50MHz的时钟,不准使用其他方式的时钟
- 计数器的输出计数值每秒更新一次,从 0到9,循环计数
- 使用一个DE0的HEX LED 7段译码器显示计数值,显示从0到9的数字,数字每秒更新一次
- 注意,配发的DE0开发板,某个LED的个别发光段可能有故障不能点亮,清选择一个全部段位都能点亮的HEX LED做实验。
设计思路
- 电路应当由3部分构成
- 第一部分,秒脉冲生成器,输出秒脉冲信号,每秒输出1个CLK周期的高电平,用于后级电路的工作使能。
- 第二部分,0-9多周期计数器,每个工作使能有效的CLK周期,进行一次计数动作。
- 第三部分,译码电路,把0-9计数器的计数值,译码成HEX LED 的显示逻辑值, HEX LED的管脚分配参数,请自行搜索 DE0 手册
测试方法
- 使用Signaltap的分段触发方式, 采样时钟50MHz,捕获至少一个计数周期的0-9计数器计数值数据和显示译码数据。
题目2-2 :LED 亮度调节
设计要求
- 使用计数器,从50MHz的时钟, 生成4路 100Hz的方波,4路方波的占空比分别是 1/2 ,1/4, 1/8, 1/16。
- 把四路方波分别送到4个LED发光管,观察亮度的区别
测试方法
- 方法1、使用SignalTap,采样时钟为50MHz,自行思考如何设定触发方式,证明你生成的100Hz方波频率是正确的,然后证明你生成的4路占空比不同的方波的占空比是正确的。
- 方法2、使用50MHz的时钟,利用计数器分频,得到1个低频的时钟,例如1MHz,用这个时钟作为SignalTap的采样时钟。
- 方法3、把4路方波送到DE0开发板的I/O 扩展口上,用杜邦线引出到示波器的探头,用示波器观察波形。
题目2-3 :PWM的创意发挥
设计要求
- 根据同学的先期经验,设计若干自己感兴趣的实验
- 例如 一个计数器从0-9循环计数,不同的数值的亮度不同,0最暗,9最亮
- 先期练习过自控小车题目的同学,如果有条件,可以尝试用PWM控制电机转速,例如按下某个fpga的按键,每按下一次,电机转速增快一档。
阶段1
软件安装
- 请安装Quartus ,软件版本最好为 8.x ~ 9.x ,这些版本自带波形仿真
- 不熟悉安装过程的同学请自行上网搜索教程
计数器仿真实验 1 内容
- 使用Veriog - HDL 语言按照如下要求设计一个计数器电路并进行仿真测试
信号定义
信号名称 |
方向 |
位宽 |
说明 |
CLK
输入
1
输入时钟信号
RST
输入
1
输入复位清零信号,异步高电平有效,
CNT
输出
3
输出计数值信号
计数器特征
该计数器特征为,从0计数到5,然后又变成0,如此往复
0 1 2 … 5 |
0 1 2… 5 |
0 1 2 … 5 |
…… |
计数器仿真实验 2 内容
- 使用Veriog - HDL 语言按照如下要求设计一个计数器电路并进行仿真测试
信号定义
信号名称 |
方向 |
位宽 |
说明 |
CLK
输入
1
输入时钟信号
RST
输入
1
输入复位清零信号,异步高电平有效,
CNT
输出
4
输出计数值信号
计数器特征
设计一个计数器,该计数器在电路上电后会循环的从0值递增计数到最大值M,计数最大值M是一个循环变化的过程,计数器复位之后,第一次计数最大值M是6,然后是7、8、9,然后计数最大值M又变成6,如此往复循环,计数过程如下所示:
0 1 … 6 |
0 1… 7 |
0 1 … 8 |
0 1 … 9 |
0 1 … 6 |
…… |
计数器作业提交要求
- 请注册一个CSDN账号
- 写一篇技术博客用于交作业
- 提交作业,需要有以下内容
- 使用绘图软件(Visio 或其他软件)自行绘制的 电路结构RTL设计图,该图片用于说明你设计电路时的电路构思
- Quartus扫描生成的电路RTL图,该图片用于说明Quartus的电路编译结果
- 电路的波形仿真截图,验证电路逻辑工作的正确性
- HDL代码,请使用博客中提供的代码块功能,例如下面的代码:
module adder(
IN1 ,
IN2 ,
OUT );
input signed [3:0] IN1, IN2;
output signed [4:0] OUT;
reg signed [4:0] OUT;
always@(IN1 or IN2) begin
OUT = IN1 + IN2;
end
endmodule
- 提交作业后,请给本博客发私信通知
- 私信内容格式为:计数器作业提交-姓名-年级专业-作业博客地址链接
- 另外由于教师不会定期上CSDN,同学请QQ上私信通知通知一下老师验收作业