显示页面 讨论 修订记录 反向链接 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====硬件平台==== ------ [[STEP-MXO2第一代]] ====设计要求==== ------ - 初步了解数字设计的基本思想和开发流程 - 熟悉Diamond软件和仿真软件的使用方法及流程 - 控制LED闪烁,闪烁周期为1秒 ====工作原理==== 按照设计要求,控制LED闪烁的周期为1秒,则LED灯需要点亮0.5s,然后熄灭0.5s,然后点亮0.5s,然后熄灭0.5s,循环执行。 通过上面的分析,我们发现LED的控制信号就是一个周期为1s,占空比为50%的信号,我们可以定义一个寄存器和一个计数器,计数器负责计数满0.5s时寄存器翻转,实现对LED的闪烁控制。 小脚丫开发板晶振为25MHz,0.5s对应晶振12500000个周期的时间,所以计数器对晶振信号计数,当计12500000个数时,控制寄存器翻转。 ====硬件连接==== LED也叫发光二极管,可以把电能转化成光能,因为是二极管的一种,由一个PN接组成,具有单向导电性。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过二极管的电流,LED的亮度与电流有关,一般LED能够承受的最大电流为20mA(具体需要看使用的LED的参数),本设计使用的限流电阻为1K。下图为LED的硬件电路: {{ :led电路连接.jpg |LED电路连接}} <WRAP centeralign>**LED电路连接** </WRAP> 本设计中我们只控制LD1(LED)进行闪烁,由上图可知当控制信号LED1端为高电平时D1熄灭,当控制信号LED1端为低电平时LD1点亮。 数码管模块、小脚丫与FPGA的引脚连接关系如下: ^ LED模块 |LED1 | ^ FPGA管脚 |A3 | ====代码设计==== ===设计文件=== {{ :blink.jpg |Blink}} 我们首先定义一个参数:parameter CNT_NUM = 12500000 ,我们将参数定义放在模块的端口声明中,这样在模块被其他模块调用时可以通过端口重新定义参数的值。 计数器cnt位宽为24, 2^24 = 16777216, 大于我们设定的计数终值CNT_NUM = 12500000。cnt计数范围为0~(CNT_NUM-1),共计12500000个数,0.5s。 然后使用计数器计数触发寄存器信号不断翻转,如下: {{:计数及翻转.jpg|计数器计数触发寄存器翻转}} ===测试文件=== 测试文件,也称testbench文件,是一种验证的手段,testbench文件在软件环境中模拟实际环境,产生被测模块输入端口需要的激励信号,对被测模块的输出信号分析,达到评估被测模块的目的。 对于测试文件,我们需要提供被测模块(Blink)需要的时钟(sys_clk)及复位(sys_rst_n),如下: {{:产生激励信号.jpg|产生激励信号}} 然后调用被测模块(Blink),注意模块调用时参数的重定义及端口的传递。如下 {{:模块调用参数及端口传递.jpg|模块调用参数及端口传递}} 引脚分配如下: ^ 管脚名称 | clk_in | rst_n_in | led_out | ^ FPGA管脚 | C1 | B1 | A3 | ====仿真结果==== {{:仿真结果.jpg|仿真结果}} ====资源报告==== ^ 资源 | 数量 | 比例 | 说明 | ^ LUTs | 36 | 3% | | ^ 寄存器 | 25 | 2% | | ^ 存储器 | 0 | 0% | | ^ IO管脚 | 3 | | | ^ 时钟频率 | 25MHz | | | ====知识点==== * LED闪烁原理 * 时钟分频 ====参考文档==== * {{:machxo2familydatasheet.pdf|Lattice MachXO2数据手册}} ====相关文档==== ^ **文件名称** | **功能** | ^ **[[Blink]]** | **LED闪烁** | ^ **[[Blink_test]]** | **测试文件** |