Verilog HDL数字设计教程(贺敬凯)第7章

更新时间:2023-07-18 16:11:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第7章 Verilog HDL可综合设计举例7.1 跑马灯控制器的设计 7.2 8位数码扫描显示电路的设计 7.3 数控分频器的设计 7.4 乐曲硬件演奏电路的设计 7.5 数字跑表和数字钟的设计 7.6 用Verilog HDL状态机实现A/D采样控制电路 7.7 交通控制器的设计 7.8 空调控制器的设计 7.9 饮料自动售卖机的设计 7.10 小结 习题7

第7章 Verilog HDL可综合设计举例

7.1 跑马灯控制器的设计1. 设计要求 共8个LED灯,连成一排。要求实现几种灯的组合显示。具 体要求如下: (1) 模式1:先奇数灯,即第1、3、5、7灯亮0.25 s,然后偶

数灯,即第2、4、6、8灯亮0.25 s,依次循环。(2) 模式2:按照1、2、3、4、5、6、7、8的顺序依次点亮 所有灯,间隔时间为0.25 s;然后再按1/2/3/4/5/6/7/8的顺序依次 熄灭所有灯,间隔时间为0.25 s。

第7章 Verilog HDL可综合设计举例(3) 模式3:按照1/8、2/7、3/6、4/5的顺序依次点亮所有灯,

间隔时间为0.25 s,每次同时点亮两个灯;然后再按照1/8、2/7、3/6、4/5的顺序依次熄灭所有灯,间隔时间为0.25 s,每次同时 熄灭两个灯。 (4) 以上模式可以选择。

第7章 Verilog HDL可综合设计举例2. 设计说明

LED灯与FPGA的连接如图7-1所示,设计要求很容易实现,在此不再说明。

第7章 Verilog HDL可综合设计举例

图7-1 8个LED灯与FPGA的连接图

第7章 Verilog HDL可综合设计举例使用两个键进行模式选择,两个键有00、01、10、11四种

组合,使用其中的三种组合,分别对应设计要求的三种情况。

第7章 Verilog HDL可综合设计举例3. 设计模块(包含模块划分)

该设计比较简单,仅用一个模块即可,输入端口为rst、clk、sel[1..0],输出端口为led[7..0],其中sel用于模式选择,led用于 控制8个LED灯,如图7-2所示。

第7章 Verilog HDL可综合设计举例

图7-2 跑马灯模块端口框图

第7章 Verilog HDL可综合设计举例4. 代码分析 【例7-1】 设计源码。 module paomadeng(rst,clk,sel,led); input rst,clk; input[1:0] sel; output[7:0] led; reg[7:0] led;

reg[7:0] led_r,led_r1;reg cnt1,dir; reg[2:0] cnt2;

reg[1:0] cnt3;

第7章 Verilog HDL可综合设计举例always @(posedge clk) begin if(rst) begin cnt1<=0; cnt2<=0; cnt3<=0; dir<=0; end else case(sel) 2'b00: begin led_r=8'b01010101; if(cnt1==0) led<=led_r; else led<=led_r<<1; cnt1<=cnt1+1; end

第7章 Verilog HDL可综合设计举例2'b01: begin if(!dir) begin if(cnt2==0) begin

led_r=8'b00000001;led<=led_r; endelse begin led<=(led<<1)+led_r; end

if(cnt2==7) begindir<=~dir; end cnt2<=cnt2+1; end

第7章 Verilog HDL可综合设计举例else begin if(cnt2==0) begin led_r=8'b11111110;led<=led_r; end else begin led<=led<<1; end if(cnt2==7) begin dir<=~dir; end cnt2<=cnt2+1; end end

第7章 Verilog HDL可综合设计举例2'b11: begin

if(!dir) beginif(cnt3==0) begin led_r

=8'b00000001;led_r1=8'b10000000;end else begin led_r=(led_r<<1)| led_r; led_r1=(led_r1>>1)| led_r1; end led<=led_r | led_r1; if(cnt3==3) begin dir<=~dir; end cnt3<=cnt3+1; end else

第7章 Verilog HDL可综合设计举例begin if(cnt3==0) begin led_r=8'b11111110;led_r1=8'b01111111;end else begin

led_r=led_r<<1;led_r1=led_r1>>1; endled<=led_r & led_r1; if(cnt3==3) begin dir<=~dir; end cnt3<=cnt3+1;

第7章 Verilog HDL可综合设计举例end end default: ; endcase

endendmodule

第7章 Verilog HDL可综合设计举例程序说明:

(1) case语句用于选择三种模式。当case表达式中的sel为2'b00时选择模式1,为2'b01时选择模式2,为2'b11时选择模式3。

(2) cnt1、cnt2、cnt3分别为三种模式下的计数器,用于控制流水灯的转换节奏。

(3) dir用于方向控制,与cnt1、cnt2、cnt3的具体数值相关。

第7章 Verilog HDL可综合设计举例5. 仿真分析

仿真波形如图7-3所示。该仿真波形仅列出了sel为2'b11时跑马灯的运行情况。从图中可以看出,灯的运行与模式3一致,说 明程序代码实现了模式3。读者也可以通过修改sel的值对模式1 和模式2进行验证。

第7章 Verilog HDL可综合设计举例

图7-3 跑马灯仿真波形

第7章 Verilog HDL可综合设计举例6. 引脚锁定下载硬件验证

选择GW48-PK2系统中的实验电路5,引脚锁定情况如图7-4所示。

将设计下载到实验开发系统中,观察实际运行情况。clk接FPGA的93引脚,频率选择4 Hz,然后通过按键选择跑马灯的运

行模式,观察跑马灯的实际运行情况。

第7章 Verilog HDL可综合设计举例

图7-4 引脚锁定情况

第7章 Verilog HDL可综合设计举例7. 扩展部分

请读者思考其他LED显示方式,并实现之。例如:先循环左移,再循环右移(任一时刻只有一个LED灯 亮),然后从两头至中间依次点亮(任一时刻只有两个LED灯亮), 之后不断重复以上显示方式。

本文来源:https://www.bwwdw.com/article/okp1.html

Top