2017春电赛辅导FPGA基本任务

以下内容,参加校内电赛完成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   , // input 1 
  IN2   , // input 2
  OUT   );// output 
input  signed [3:0] IN1, IN2;
output signed [4:0] OUT;
reg    signed [4:0] OUT;
always@(IN1 or IN2) begin // 生成组合逻辑的always 块
  OUT = IN1 + IN2;
end
endmodule 
  • 提交作业后,请给本博客发私信通知
  • 私信内容格式为:计数器作业提交-姓名-年级专业-作业博客地址链接
  • 另外由于教师不会定期上CSDN,同学请QQ上私信通知通知一下老师验收作业

猜你喜欢

转载自blog.csdn.net/duwt_lab/article/details/70207490