1、Verilog HDL数字设计实训教程数字设计实训教程西安电子科技大学出版社西安电子科技大学出版社第第1章章 Verilog HDL数字设计实训基础数字设计实训基础第第2章章 接口类实训项目接口类实训项目第第3章章 数字系统应用类实训项目数字系统应用类实训项目第第4章章 NiosII处理器实训项目处理器实训项目第1章 Verilog HDL数字设计实训基础 1.1实训平台实训平台 1.2 基于基于QuartusII的数字设计流程的数字设计流程 1.3分频器设计分频器设计 1.4 同步有限状态机设计同步有限状态机设计 1.5 小结小结 1.1 实训平台实训平台图图1-1 1-1 开发板结构图(顶
2、层和底层)开发板结构图(顶层和底层)1.1 实训平台实训平台实训平台提供了以下外设资源:实训平台提供了以下外设资源:(1)4个按键;个按键;(2)4位位LED;(3)2个数码管;个数码管;(4)1个液晶接口个液晶接口LCD1602;(5)1个个UART接口;接口;(6)8M SDRAM;(7)4M FLASH。1.1 实训平台实训平台图图1-2 1-2 按键电路连接图和管脚对应图按键电路连接图和管脚对应图4 4个按键个按键:1.1 实训平台实训平台图图1-3 LED1-3 LED电路连接图和管脚对应图电路连接图和管脚对应图4 4个个LEDLED灯灯:1.1 实训平台实训平台图图1-4 1-4
3、数码管电路连接图和管脚对应图数码管电路连接图和管脚对应图2 2个数码管个数码管:1.1 实训平台实训平台图图1-5 1-5 液晶电路连接图和管脚对应图液晶电路连接图和管脚对应图 1 1块液晶块液晶:1.1 实训平台实训平台图图1-6 UART1-6 UART电路连接图和管脚对应图电路连接图和管脚对应图 1 1个个UART:UART:1.1 实训平台实训平台图图1-7 1-7 时钟源电路连接图和管脚对应图时钟源电路连接图和管脚对应图 时钟源时钟源:1.1 实训平台实训平台图图1-8 1-8 复位电路连接图和管脚对应图复位电路连接图和管脚对应图 复位电路复位电路:1.2 基于基于QuartusII
4、的数字设计流的数字设计流程程图图1-9 Quartus II1-9 Quartus II设计流程设计流程编写一个简单的编写一个简单的Verilog HDL语言程序语言程序【例【例1-1】实现一个】实现一个led灯的闪烁,闪烁周期为灯的闪烁,闪烁周期为1s module led_blink(clk,led);input clk;output led;wire clk_1Hz;divf_led_blink U1(clk,clk_1Hz);ctrl_led_blink U2(clk_1Hz,led);endmodule/分频电路分频电路,由由50MHz产生产生1Hz的频率的频率module divf
5、_led_blink(input clk,output reg clk_1Hz);integer p;always(posedge clk)if(p=25000000-1)begin p=0;clk_1Hz=clk_1Hz;endelse p=p+1;endmodule/控制控制led闪烁闪烁module ctrl_led_blink(input clk_1Hz,output reg led);always(posedge clk_1Hz)led=led;endmodule例例1-1说明说明(1)模块)模块led_blink通过调用两个模块来实现本设计,通过调用两个模块来实现本设计,如图如图1
6、-10所示。模块所示。模块divf_led_blink实现分频,将实现分频,将50MHz的频率分频得到的频率分频得到1Hz的频率;模块的频率;模块ctrl_led_blink实现实现led灯的闪烁控制。灯的闪烁控制。图图1-10 1-10 例例1-11-1的顶层实现框图的顶层实现框图(2)divf_led_blink实现分频,使用加法计数器对实现分频,使用加法计数器对时钟信号进行分频。时钟信号进行分频。QuartusIIQuartusII设计流程设计流程 1 1创建工程准备工作创建工程准备工作 图图1-11 1-11 选择编辑文件及其语言类型选择编辑文件及其语言类型QuartusIIQuart
7、usII设计流程设计流程 1 1创建工程准备工作创建工程准备工作 图图1-1-12 12 键入源程序并存盘键入源程序并存盘QuartusIIQuartusII设计流程设计流程2.2.创建工程创建工程 图图1-13 选择创建新工程选择创建新工程QuartusIIQuartusII设计流程设计流程2.2.创建工程创建工程 图图1-14 1-14 工程位置、工程名称、顶层模块名工程位置、工程名称、顶层模块名QuartusIIQuartusII设计流程设计流程2.2.创建工程创建工程 图图1-15 1-15 将所有相关的文件都加入进此工程将所有相关的文件都加入进此工程 QuartusIIQuartus
8、II设计流程设计流程2.2.创建工程创建工程图图1-16 1-16 选择目标选择目标FPGAFPGA器件器件QuartusIIQuartusII设计流程设计流程2.2.创建工程创建工程图图1-17 1-17 选择第三方工具选择第三方工具QuartusIIQuartusII设计流程设计流程2.2.创建工程创建工程图图1-18 1-18 使用使用modelsimmodelsim作为仿真工作的设置作为仿真工作的设置 QuartusIIQuartusII设计流程设计流程2.2.创建工程创建工程图图1-19 1-19 工程层次界面和设计文件界面工程层次界面和设计文件界面QuartusIIQuartusI
9、I设计流程设计流程3 3编译设置编译设置 图图1-20 1-20 设置对话框设置对话框QuartusIIQuartusII设计流程设计流程3 3编译设置编译设置 图图1-21 Device1-21 Device设置对话框设置对话框QuartusIIQuartusII设计流程设计流程3 3编译设置编译设置 图图1-22 1-22 选择配置器件的工作方式选择配置器件的工作方式 QuartusIIQuartusII设计流程设计流程3 3编译设置编译设置 图图1-23 1-23 选择配置器件和编程方式选择配置器件和编程方式 QuartusIIQuartusII设计流程设计流程3 3编译设置编译设置 图
10、图1-24 1-24 未用管脚设置未用管脚设置QuartusIIQuartusII设计流程设计流程3 3编译设置编译设置 图图1-25 1-25 编译进度编译进度QuartusIIQuartusII设计流程设计流程3 3编译设置编译设置 图图1-26 1-26 全程编译后出现报错信息全程编译后出现报错信息QuartusIIQuartusII设计流程设计流程3 3编译设置编译设置 图图1-27 1-27 全程编译成功后的汇总信息全程编译成功后的汇总信息4 4仿真验证仿真验证图图1-28 1-28 选择选择Vector waveform fileVector waveform file界面界面Qu
11、artusII设计流程设计流程4 4仿真验证仿真验证 图图1-29 1-29 仿真测试向量波形文件仿真测试向量波形文件QuartusII设计流程设计流程4 4仿真验证仿真验证 图图1-30 1-30 仿真波形信号设置仿真波形信号设置QuartusII设计流程设计流程4 4仿真验证仿真验证 图图1-31 1-31 加入了待观察信号加入了待观察信号的的波形图波形图QuartusII设计流程设计流程4 4仿真验证仿真验证 QuartusII设计流程设计流程图图1-32 1-32 设置设置仿真时间最小间隔仿真时间最小间隔4 4仿真验证仿真验证 QuartusII设计流程设计流程图图1-33 1-33
12、设置设置仿真时间长度仿真时间长度4 4仿真验证仿真验证 QuartusII设计流程设计流程图图1-34 1-34 设置好的激励波形图设置好的激励波形图4 4仿真验证仿真验证 QuartusII设计流程设计流程图图1-35 1-35 功能仿真设置界面功能仿真设置界面4 4仿真验证仿真验证 QuartusII设计流程设计流程图图1-36 1-36 功能仿真波形输出功能仿真波形输出 4 4仿真验证仿真验证 QuartusII设计流程设计流程图图1-37 1-37 时序仿真设置界面时序仿真设置界面5 5引脚锁定引脚锁定和硬件验证和硬件验证 QuartusII设计流程设计流程图图1-38 1-38 引脚
13、锁定对话框图引脚锁定对话框图5 5引脚锁定和硬件验证引脚锁定和硬件验证QuartusII设计流程设计流程图图1-31-39 9 设置设置USBUSB硬件端口硬件端口5 5引脚锁定和硬件验证引脚锁定和硬件验证 QuartusII设计流程设计流程图图1-40 1-40 下载界面下载界面5 5引脚锁定和硬件验证引脚锁定和硬件验证 QuartusII设计流程设计流程图图1-41 1-41 选择下载文件选择下载文件5 5引脚锁定和硬件验证引脚锁定和硬件验证 QuartusII设计流程设计流程图图1-42 led1-42 led灯闪烁的效果灯闪烁的效果1.3 分频器设计分频器设计分频器电路是非常有用的一种
14、电路,分频器电路是非常有用的一种电路,分频的方法很多,最常见的是利用加分频的方法很多,最常见的是利用加法计数器对时钟信号进行分频。法计数器对时钟信号进行分频。1.3 分频器设计分频器设计【例【例1-2】参数型参数型2n分频,占空比为分频,占空比为50%module divf_2powN(rst,clk,en,clk_N);input rst,clk,en;output clk_N;parameter N=2;regN-1:0 count;always(posedge clk)beginif(rst)count=0;else if(en)count=count+1;endassign clk_N
15、=countN-1;endmodule 1.3 分频器设计分频器设计【例【例1-3】参数型奇数分频,要求占空比为参数型奇数分频,要求占空比为50%moduledivf_oddn(clk,clk_N);input clk;output clk_N;parameter N=3;integer p,q;reg clk_p,clk_q;always(posedge clk)/N分频设计例分频设计例,体会其算法体会其算法(占空比占空比50%)begin if(p=N-1)begin p=0;clk_p=clk_p;end else p=p+1;endalways(negedge clk)begin if
16、(q=N-1)q=0;else q=q+1;if(p=(N-1)/2)clk_q=clk_q;endassign clk_N=clk_pclk_q;endmodule 图图1-43 1-43 任意奇数分频仿真波形任意奇数分频仿真波形1.3 分频器设计分频器设计【例【例1-4】参数型偶数分频,要求占空比为参数型偶数分频,要求占空比为50%module divf_even(clk,clk_N);input clk;output reg clk_N;parameter N=6;integer p;always(posedge clk)begin if(p=N/2-1)begin p=0;clk_N=
17、clk_N;endelse p=p+1;endendmodule图图1-44 1-44 任意偶数分频仿真波形任意偶数分频仿真波形1.3 分频器设计分频器设计【例【例1-5】可设置参数的任意整数分频器:占空比可变。可设置参数的任意整数分频器:占空比可变。module divf_parameter(rst,clk,en,clkout);input rst,clk,en;output clkout;integer temp;/最大值为最大值为2的的32次方次方parameter N=7,M=3;/N为分频系数为分频系数,M/N为占空比为占空比always(posedge clk)beginif(rs
18、t)temp=0;else if(en)if(temp=N-1)temp=0;else temp=temp+1;endassign clkout=(tempM)?1:0;endmodule图图1-45 1-45 占空比可变的任意整数分频仿真波形占空比可变的任意整数分频仿真波形 1.3 分频器设计分频器设计【例【例1-6】5.2小数分频,要求占空比小数分频,要求占空比50%module divf_decimal(clk,clk_26,clk_d);input clk;output reg clk_26;output reg clk_d;reg3:0 cnt1;reg1:0 cnt2,cnt3;a
19、lways(posedge clk)beginif(cnt14)/4times begin if(cnt21)begin cnt2=cnt2+1;clk_26=0;end else begin cnt2=0;clk_26=1;cnt1=cnt1+1;end end else /6times beginif(cnt22)begin cnt2=cnt2+1;clk_26=0;endelse begin cnt2=0;clk_26=1;cnt1=cnt1+1;endif(cnt1=10)cnt1=0;end endalways(posedge clk_26)clk_d=clk_d;endmodule
20、图图1-46 1-46 小数分频仿真波形小数分频仿真波形 1 1状态机的基本概念状态机的基本概念状态机的基本描述方式状态机的基本描述方式1.4 同步有限状态机设计同步有限状态机设计(1)状态转移图)状态转移图状态转移图是状态机描述的最自然的方式。状态转移图经常在设计规划阶段状态转移图是状态机描述的最自然的方式。状态转移图经常在设计规划阶段定义逻辑功能时使用,也可以在分析代码中的状态机时使用,通过图形化的方定义逻辑功能时使用,也可以在分析代码中的状态机时使用,通过图形化的方式非常有助于理解设计意图。式非常有助于理解设计意图。(2)状态转移列表)状态转移列表状态转移列表是用列表的方式描述状态机,是
21、数字逻辑电路常用的描述方法状态转移列表是用列表的方式描述状态机,是数字逻辑电路常用的描述方法之一,经常被用于对状态进行化简,对于可编程逻辑设计,由于可用逻辑资源之一,经常被用于对状态进行化简,对于可编程逻辑设计,由于可用逻辑资源比较丰富,而且状态编码要考虑设计的稳定性,安全性等因素,所以并不经常比较丰富,而且状态编码要考虑设计的稳定性,安全性等因素,所以并不经常使用状态转移列表优化状态。使用状态转移列表优化状态。(3)HDL 语言描述状态机语言描述状态机使用使用HDL 语言描述状态机是本章讨论的重点,使用语言描述状态机是本章讨论的重点,使用HDL 语言描述状态机既有语言描述状态机既有章可循,又
22、有一定的灵活性。通过一些规范的描述方法,可以使章可循,又有一定的灵活性。通过一些规范的描述方法,可以使HDL 语言描述语言描述的状态机更安全、稳定、高效、易于维护。在的状态机更安全、稳定、高效、易于维护。在Verilog HDL中可以用许多种方法中可以用许多种方法来描述有限状态机,最常用的方法是用来描述有限状态机,最常用的方法是用always块和块和case语句语句 1 1状态机的基本概念状态机的基本概念状态机的基本要素状态机的基本要素 1.4 同步有限状态机设计同步有限状态机设计(续续)(1)状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。比如:在设计空调控制电路时,可以以
23、环境温度的不同作为状态。(2)输出:输出指在某一个状态时特定发生的事件。如设计空调控制电路中,如果环境温度高于设定温度环境限值,则控制电机正转进行降温处理,如于环境温度低于设定温度环境限值,则控制电机反转进行升温处理。(3)输入:指状态机中进入每个状态的条件,有的状态机没有输入条件,其中的状态转移较为简单,有的状态机有输入条件,当某个输入条件存在时才能转移到相应的状态。1 1状态机的基本概念状态机的基本概念状态机的分类状态机的分类1.4 同步有限状态机设计同步有限状态机设计(续续)1 1状态机的基本概念状态机的基本概念同步状态机和异步状态机同步状态机和异步状态机 1.4 同步有限状态机设计同步
24、有限状态机设计(续续)【例1-7】使用异步状态机设计一个七进制减法计数器 图图1-48 1-48 七进制减法计数器七进制减法计数器1 1状态机的基本概念状态机的基本概念同步状态机和异步状态机同步状态机和异步状态机 1.4 同步有限状态机设计同步有限状态机设计(续续)【例1-7】使用异步状态机设计一个七进制减法计数器 图图1-49 1-49 七进制减法计数器框图七进制减法计数器框图图图1-50 1-50 例例1-71-7的仿真结果的仿真结果1 1状态机的基本概念状态机的基本概念同步状态机和异步状态机同步状态机和异步状态机 1.4 同步有限状态机设计同步有限状态机设计(续续)【例【例1-8】使用同
25、步有限状态机设计一个七进制减法计数器】使用同步有限状态机设计一个七进制减法计数器module cnt7_fsm(clk,Q);input clk;output2:0 Q;reg2:0 state;always(posedge clk)begin:FSM parameter s0=3d0,s1=3d1,s2=3d2,s3=3d3,s4=3d4,s5=3d5,s6=3d6,s7=3d7;case(state)s0:state=s1;s1:state=s2;s2:state=s3;s3:state=s4;s4:state=s5;s5:state=s6;s6:state=s7;s7:state=s0;
26、default:state=s0;endcase endassign Q=state;endmodule1 1状态机的基本概念状态机的基本概念单进程、双进程和多进程状态机单进程、双进程和多进程状态机 1.4 同步有限状态机设计同步有限状态机设计(续续)【例【例1-9】状态机设计】状态机设计状态和输出使用单独进程状态和输出使用单独进程module fsm_1(clk,A,Y);input clk,A;output reg Y;reg2:0 current_state,next_state;parameter s0=3b001,s1=3b010,s2=3b100;always(posedge cl
27、k)/状态寄存器状态寄存器current_state=next_state;always (current_state,A)/产生下一个状态状态的组合逻辑产生下一个状态状态的组合逻辑 case(current_state)s0:if(A)next_state=s1;else next_state=s0;s1:if(A)next_state=s2;else next_state=s0;s2:if(A)next_state=s2;else next_state=s0;default:next_state=s0;endcasealways (posedge clk)/产生输出的时序逻辑产生输出的时序
28、逻辑 case(current_state)s0:Y=0;s1:Y=0;s2:if(A)Y=0;else Y=1;default:Y=0;endcaseendmodule 2 2状态机的编码方法状态机的编码方法 1.4 同步有限状态机设计同步有限状态机设计(续续)1.4 同步有限状态机设计同步有限状态机设计(续续)【例【例1-10】状态机设计】状态机设计独热码表示状态独热码表示状态 module fsm_2(clk,A,Y);input clk,A;output reg Y;reg2:0 state;parameter s0=3b001,s1=3b010,s2=3b100;always (po
29、sedge clk)case(state)s0:begin if(A)state=s1;else state=s0;Y=0;end s1:begin if(A)state=s2;else state=s0;Y=0;end s2:begin if(A)beginstate=s2;Y=0;end else beginstate=s0;Y=1;end end default:state=s0;endcaseendmodule 2 2状态机的编码方法状态机的编码方法 1.4 同步有限状态机设计同步有限状态机设计(续续)【例【例1-11】状态机设计】状态机设计状态编码包含输出信息状态编码包含输出信息mo
30、dule fsm_3(clk,A,Y);input clk,A;output Y;reg3:0 state;parameter s0=4b0001,s1=4b0010,s2=4b0100,s3=4b1100;assign Y=state3;always (posedge clk)case(state)s0:if(A)state=s1;else state=s0;s1:if(A)state=s2;else state=s0;s2:if(A)state=s2;else state=s3;s3:if(A)state=s1;else state=s0;default:state=s0;endcasee
31、ndmodule 2 2状态机的编码方法状态机的编码方法 表1-2 非法状态 2 2状态机的编码方法状态机的编码方法 非法状态的处理非法状态的处理非法状态的处理的方法有两种:非法状态的处理的方法有两种:(1)在语句中对每一个非法状态都作出明确的状态转换指示,如在原来的)在语句中对每一个非法状态都作出明确的状态转换指示,如在原来的case语句中增加诸如以语句中增加诸如以下语句:下语句:case(state)N1:state=s0;N2:state=s0;(2)如例)如例1-10和例和例1-11中那样,利用中那样,利用default语句对未提到的状态作统一处理。语句对未提到的状态作统一处理。cas
32、e(state)s0:if(A)state=s1;else state=s0;default:state=s0;endcase由于剩余状态的次态不一定都指向状态由于剩余状态的次态不一定都指向状态s0,所以可以使用方法一来分别处理每一个剩余状态的转,所以可以使用方法一来分别处理每一个剩余状态的转向。向。1.4 同步有限状态机设计同步有限状态机设计(续续)1.5 小结小结在本章,我们讨论了以下知识点:在本章,我们讨论了以下知识点:介绍了本书所用的实训平台,并重点介绍了按键、介绍了本书所用的实训平台,并重点介绍了按键、LED灯、灯、数码管、数码管、LCD、UART等实训接口的电路连接图和与等实训接口
33、的电路连接图和与FPGA管脚的对应图。管脚的对应图。介绍了基于介绍了基于QuartusII的数字设计流程,包括的数字设计流程,包括设计输入编辑、设计输入编辑、分析与综合、适配以及编程下载几个步骤分析与综合、适配以及编程下载几个步骤。分频器是十分有用的电路,本章通过实例介绍了分频器是十分有用的电路,本章通过实例介绍了2的的N次幂次幂分频、偶数分频、奇数分频、小数分频等,并在程序说明中分频、偶数分频、奇数分频、小数分频等,并在程序说明中说明了分频的原理说明了分频的原理1.5 小结小结(续续)有限状态机及其设计技术是实用数字系统设计中的重要组成有限状态机及其设计技术是实用数字系统设计中的重要组成部分
34、,是实现高效率高可靠性逻辑控制的重要途径部分,是实现高效率高可靠性逻辑控制的重要途径。状态机的。状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法,本质就是对具有逻辑顺序或时序规律事件的一种描述方法,“逻辑顺序逻辑顺序”和和“时序规律时序规律”,就是状态机所要描述的核心和,就是状态机所要描述的核心和强项,换言之,所有具有逻辑顺序和时序规律的数字系统都适强项,换言之,所有具有逻辑顺序和时序规律的数字系统都适合用状态机描述。合用状态机描述。状态机可以采用多种形式实现,包括单进程、双进程、多进状态机可以采用多种形式实现,包括单进程、双进程、多进程。多进程状态机将次态译码、状态寄存器、输出译码
35、等模块程。多进程状态机将次态译码、状态寄存器、输出译码等模块分别放到不同的分别放到不同的always 程序块中实现,这样做的好处不仅仅程序块中实现,这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综合器优化代码,是便于阅读、理解、维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。利于用户添加合适的时序约束条件,利于布局布线器实现设计。1.5 小结小结(续续)编码方法有很多,包括顺序编码、独热编码、直接输出编码方法有很多,包括顺序编码、独热编码、直接输出型编码等,每种方法各有其优缺点。在实际设计时,须综合型编码等,每种方法各有其优缺点。在实际设计
36、时,须综合考虑电路复杂度与电路性能之间的折衷。在触发器资源丰富考虑电路复杂度与电路性能之间的折衷。在触发器资源丰富的的FPGA设计中,采用独热编码既可以使电路性能得到保证设计中,采用独热编码既可以使电路性能得到保证又可充分利用其触发器数量多的优势。采取直接输出型编码又可充分利用其触发器数量多的优势。采取直接输出型编码可以简化电路结构,提高状态机的运行速度。可以简化电路结构,提高状态机的运行速度。第2章 接口类实训项目 2.1 LED流水灯流水灯 2.2 数码管显示控制数码管显示控制 2.3 按键处理按键处理 2.4 液晶显示控制液晶显示控制 2.5 UART通信设计通信设计 2.6 小结小结
37、2.1 LED流水灯流水灯 1.设计要求设计要求 共共4个个LED灯,连成一排。要求实现几种灯的组灯,连成一排。要求实现几种灯的组合显示。具体要求如下:合显示。具体要求如下:(1)模式)模式1:先奇数灯即第:先奇数灯即第1/3灯亮灯亮0.25s,然后,然后偶数灯即第偶数灯即第2/4灯亮灯亮0.25s;依次类推。;依次类推。(2)模式)模式2:按照:按照1、2、3、4的顺序依次点亮的顺序依次点亮所有灯,间隔所有灯,间隔0.25s;然后再按;然后再按1、2、3、4的的顺序依次熄灭所有灯,间隔顺序依次熄灭所有灯,间隔0.25s。(3)模式)模式3:4个个LED灯同时亮,然后同时灭,灯同时亮,然后同时
38、灭,间隔间隔0.25s。(4)以上模式可以选择。)以上模式可以选择。2.1 LED流水灯流水灯 2.设计说明设计说明 本节使用状态机来设计流水灯,并且将本节使用状态机来设计流水灯,并且将设计要求中提到的设计要求中提到的3种模式放在一个状态机种模式放在一个状态机中。模式中。模式1中有中有2种状态,模式种状态,模式2中有中有8种状态,种状态,模式模式3中有中有2种状态,所以种状态,所以3种模式共有种模式共有12种种状态。状态。设计题目中要求设计题目中要求led每每0.25s要变换一种显要变换一种显示状态,系统时钟源频率为示状态,系统时钟源频率为50MHz,所以首,所以首先进行要进行先进行要进行50
39、MHz/4Hz=12.5M次分频,得次分频,得到到4Hz的频率,然后用此频率控制状态机的的频率,然后用此频率控制状态机的状态转换。状态转换。2.1 LED流水灯流水灯 3.设计模块设计模块 图图2-2 流水灯流水灯模块模块端口框端口框图图 clkclk_4Hzclkled3.0paomadeng:U2paomadeng:U2clkclkled3.0led3.0divf_ led:U1divf_ led:U12.1 LED流水灯流水灯 3.设计模块设计模块 2个模个模块的功能:块的功能:模块模块U1用于实现分频,输入用于实现分频,输入clk为为50MHz,输出输出clk_4Hz为为4Hz;模块模
40、块U2用于实现流水灯的控制,输出用于实现流水灯的控制,输出led3:0用于控制用于控制4个个led灯。灯。2.1 LED流水灯流水灯 4.代码说明代码说明 模块模块paomadeng_top调用了调用了2个模块,模块个模块,模块divf_led用于分频,对用于分频,对50MHz进行进行12500000次分频得到次分频得到4Hz的频率,实现方法参见第一章。的频率,实现方法参见第一章。模块模块paomadeng用于实现用于实现led闪烁控制。闪烁控制。在模块在模块paomadeng中,使用含中,使用含12种状态的状态机来实现设计要求中种状态的状态机来实现设计要求中提到的三种模式的提到的三种模式的1
41、2种状态。种状态。模块模块paomadeng中使用了三进程状态机,使用了中使用了三进程状态机,使用了3个个always块,第块,第一个一个always块是状态寄存器,第块是状态寄存器,第2个个always块是产生下一个状态的组合块是产生下一个状态的组合逻辑,第逻辑,第3个个always块是产生输出的时序逻辑。块是产生输出的时序逻辑。状态编码使用独热编码:本程序以及本书后续所附程序中均含有大状态编码使用独热编码:本程序以及本书后续所附程序中均含有大量的注释,这些注释对读者理解设计思想和方法非常有帮助,希望读量的注释,这些注释对读者理解设计思想和方法非常有帮助,希望读者在阅读程序时关注,后续章节对
42、此不再说明。者在阅读程序时关注,后续章节对此不再说明。2.1 LED流水灯流水灯 5.仿真分析仿真分析 图图2-3 流水灯仿真波形图流水灯仿真波形图 2.1 LED流水灯流水灯 6.硬件验证硬件验证 图图2-4 引脚锁定引脚锁定2.1 LED流水灯流水灯 7.扩展部分扩展部分 请读者思考请读者思考并实现以下扩展功能:并实现以下扩展功能:(1)将每种灯的显示状态之间的延时修改为)将每种灯的显示状态之间的延时修改为1s,然后观察灯的运行情况。然后观察灯的运行情况。(2)请读者思考其他请读者思考其他LED显示方式,并实现之显示方式,并实现之。例如:例如:先循环左移,再循环右移(任一时刻只有先循环左移
43、,再循环右移(任一时刻只有一个一个LED灯亮),然后从两头至中间(任一时刻只灯亮),然后从两头至中间(任一时刻只有两个有两个LED亮),之后不断重复以上行为。亮),之后不断重复以上行为。2.2 数码管显示控制数码管显示控制 1.设计要求设计要求 共共2个数码管,连个数码管,连在一起在一起,要求可以任意显示其,要求可以任意显示其中一个或中一个或同时显示同时显示2个数码管。具体要求如下:个数码管。具体要求如下:(1)依次选通)依次选通2个数码管,并让每个数码管显示相个数码管,并让每个数码管显示相应的值,比如:让应的值,比如:让第第1个数码管个数码管显示显示1,第,第2个数码个数码管显示管显示2,循
44、环显示,间隔,循环显示,间隔1s。(2)要求)要求2个数码管同时显示个数码管同时显示12 2.2 数码管显示控制数码管显示控制 2.设计说明设计说明 图图2-5共阴数码管及其电路共阴数码管及其电路2.2 数码管显示控制数码管显示控制 2.设计说明设计说明 图图2-6 2位数码扫描显示电路位数码扫描显示电路2.2 数码管显示控制数码管显示控制 3.设计模块设计模块 图图2-7 数码管数码管模块模块端口框端口框图图 2.2 数码管显示控制数码管显示控制 3.设计模块设计模块 3个模个模块的功能:块的功能:U1模块为分频器,得到模块为分频器,得到1Hz和和1kHz的频率,当两个的频率,当两个数码管交
45、替显示时,使用数码管交替显示时,使用1Hz的频率,若两个数码管的频率,若两个数码管同时显示某个稳定的数值,则使用同时显示某个稳定的数值,则使用1kHz的频率;的频率;U2模块产生位控码和段控数据,位控码用于扫描模块产生位控码和段控数据,位控码用于扫描数码管,段控数据用于数码管,段控数据用于U3模块;模块;U3模块根据段控数据得到段控码,对于模块根据段控数据得到段控码,对于0F任意数任意数值,均可以通过该模块驱动数码管显示相应数值。值,均可以通过该模块驱动数码管显示相应数值。2.2 数码管显示控制数码管显示控制 4.代码说明代码说明(1)模块)模块shumaguan_top调用了调用了3个模块,
46、模块个模块,模块divf_shumaguan用于分频,模用于分频,模块块GenBS用于产生位控码和段控数据,用于产生位控码和段控数据,Decode_8S根据段控数据得到段控码,并根据段控数据得到段控码,并控制数码管将该数据显示出来。控制数码管将该数据显示出来。(2)模块模块GenBS使用状态机来设计数码管的显示,该状态机使用了使用状态机来设计数码管的显示,该状态机使用了2个状态,个状态,每个状态对应着驱动一只数码管,即产生相应的位控码和段控数据。这一方法每个状态对应着驱动一只数码管,即产生相应的位控码和段控数据。这一方法可以很容易地拓展到多只数码管。如果我们想使用可以很容易地拓展到多只数码管。
47、如果我们想使用8只数码管,此时可以使用只数码管,此时可以使用含含8个状态的状态机来控制数码管的显示。个状态的状态机来控制数码管的显示。(3)顶层模块顶层模块shumaguan_top中,调用了中,调用了GenBS U2(clk_1kHz,SM_in,SM_B);语句,此时,使用语句,此时,使用1kHz的频率来扫描两个数码管,两个数码同时且稳定的显示的频率来扫描两个数码管,两个数码同时且稳定的显示12;若将此句替换成;若将此句替换成GenBS U2(clk_1Hz,SM_in,SM_B);则则使用使用1Hz的频率来扫描两的频率来扫描两个数码管,个数码管,在两个在两个数码管中交替显示数码管中交替显
48、示1和和2,交替周期为,交替周期为1s,并且循环不止。可,并且循环不止。可以看出,输入到这个模块的频率不同,数码管则会有不同的显示效果。以看出,输入到这个模块的频率不同,数码管则会有不同的显示效果。(4)本例使用的动态扫描法,扫描的频率为)本例使用的动态扫描法,扫描的频率为1kHz时,就可以利用视觉暂留时,就可以利用视觉暂留效应让多只数码管共同显示某一较大的数值。大家也可以根据视觉暂留效应的效应让多只数码管共同显示某一较大的数值。大家也可以根据视觉暂留效应的相关理论,通过实验来确定动态扫描法的最低扫描频率。相关理论,通过实验来确定动态扫描法的最低扫描频率。2.2 数码管显示控制数码管显示控制
49、5.仿真分析仿真分析 图图2-8 数码管数码管GenBS模块仿真波形图模块仿真波形图 2.2 数码管显示控制数码管显示控制 6.硬件验证硬件验证 图图2-9 引脚锁定引脚锁定2.2 数码管显示控制数码管显示控制 7.扩展部分扩展部分 请读者思考请读者思考并实现以下扩展功能:并实现以下扩展功能:(1)本设计使用本设计使用1kHz的频率,依次点亮的频率,依次点亮2个数码管,得到的是个数码管,得到的是2个数码管同个数码管同时显示的效果;如果使用时显示的效果;如果使用100Hz的频率,依次点亮的频率,依次点亮2个数码管,会不会得到同个数码管,会不会得到同时显示的效果?请读者通过试验观察,要得到稳定的同
50、时显示的效果,最低时显示的效果?请读者通过试验观察,要得到稳定的同时显示的效果,最低扫描扫描2个数码管的频率应该是多少?个数码管的频率应该是多少?(2)2个数码管同时显示,个数码管同时显示,8个段依次显示,即个段依次显示,即a、b、c、d、e、f、g、dp依依次显示,每个段持续显示时间为次显示,每个段持续显示时间为0.25s时间。时间。(3)8个段和个段和2个数码管依次显示,个数码管依次显示,a、b、c、d、e、f、g、dp依次显示在依次显示在2个个数码管上,显示持续时间数码管上,显示持续时间0.25s。(4)将)将0F这这16个十六制数依次显示在数码管中,每个时刻只有一个数码管个十六制数依次