电子设计自动化实验指导
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