FPGA软件Quartues II使用教程 下载本文

电子设计自动化实验指导

cnt3=0;

else cnt3=cnt3+1'b1; end

/******************************** *数码管动态扫描

********************************/ always@(cnt3,timed) begin case(cnt3) end

/******************************** *7段译码

********************************/ always@(data) begin case(data) 0:seg7=7'b0111111; 1:seg7=7'b0000110; 2:seg7=7'b1011011; 3:seg7=7'b1001111; 4:seg7=7'b1100110; 5:seg7=7'b1101101; 6:seg7=7'b1111101; 7:seg7=7'b0000111; 8:seg7=7'b1111111; 9:seg7=7'b1101111; default:seg7=7'b0000000; endcase end endmodule

0:begin data<=timed[3:0];scan<=4'b0001;end 1:begin data<=timed[7:4];scan<=4'b0010;end 2:begin data<=timed[11:8];scan<=4'b0100;end 3:begin data<=timed[15:12];scan<=4'b1000;end default:begin data=timed[3:0];scan=4'b0000;end

endcase

编译成功后,进行引脚锁定并下载,观察实验现象。

表4.1 引脚锁定对应表

clk 183 scan[0] scan[1] scan[2] scan[3] 170 172 173 174 39

电子设计自动化实验指导

续上表

seg7 [0] seg7 [1] seg7 [2] seg7 [3] seg7 [4] seg7 [5] seg7 [6] 175

176 177 179 180 186 187 五、 实验要求说明

本代码为最基本的简易时钟。做完此基础部分按以下要求修改代码,并重新下载。 1. 要求给出初值59分45秒,观察15秒后是否变为00,00. 提示,可增加一个复位信

号,当复位时,初值设为59分45秒,当然也可以不用复位信号,直接给一个初始值。

2. 加入小时,同时显示时分秒。

3. 加入调分调时信号,可以实现调分及调时。

注:加入小时,参考下面的数码管的引脚。此时在外部信号中要再加入一个7段码的输出信号,如segh7,同样是7位。

SEG7——SEG10的共阴公共端G经反向器分别与CPLD的对应管脚 190,P191,P192,P193相连,由其控制实现各位分时选通,动态扫描。SEG7——SEG10(a,b,c,d,e,f,g,p)的各段与CPLD引脚的对应关系为:P195、P196、P197、P198、P199、P200、P202、P203。

六、 报告要求

1. 给出数字时钟设计的原理。

2. 要求给出具体时钟记时的代码和引脚锁定对应的表格。 3. 写出实验现象,并对现象进行必要的分析

40

电子设计自动化实验指导

实验五 简易十字路口交通灯

一、

实验目的

1. 学习并掌握状态机的硬件语言描述方法。 2. 掌握综合性verilog代码设计方法。

二、 实验仪器设备

1. PC机一台

2. QUARTUSⅡ CPLD软件开发系统一套。

三、 实验原理

位于十字路口的交通灯,在A方向和B方向各有红、黄、绿三盏灯,每10秒变换一次。变换顺序如下表:

状态图如下:

四、

实验参考代码

本代码为状态机的核心代码

module jtd(clk,rst,out); input clk,rst; output[5:0]out;

parameter s0=0,s1=1,s2=2,s3=3;

41

电子设计自动化实验指导

reg[5:0]c_state,next_state,out;

always@(posedge clk, posedge rst)begin if(rst)c_state<=s0;

else //将第三段代码加入到此处,注意上面的敏感信号clk要相应地改为clk1hz; c_state<=next_state; end

always@(c_state)begin case(c_state)

s0:begin next_state<=s1;out<=6'b010100;end s1:begin next_state<=s2;out<=6'b001100;end s2:begin next_state<=s3;out<=6'b100010;end s3:begin next_state<=s0;out<=6'b100001;end endcase end endmodule

本代码为分频代码

always @ (posedge CLK_40M) begin

if(cnt1==19999999) begin cnt1<=0; clk1hz<=~clk1hz; end else

cnt1<=cnt1+1; end

本代码为10秒倒计时代码

always @ (posedge clk1hz) begin if(cnt2==0) begin cnt2<=10; else

cnt2<=cnt2-1; end

提示:

可将第三段10秒倒计时部分加入到第一段状态机的核心代码中,即加入到状态机的时序过程中。

编译成功后,进行引脚锁定并下载,观察实验现象。

42