电子科技大学ASIC 秒表计时电路实验报告.docx
- 文档编号:8969445
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:21
- 大小:133.26KB
电子科技大学ASIC 秒表计时电路实验报告.docx
《电子科技大学ASIC 秒表计时电路实验报告.docx》由会员分享,可在线阅读,更多相关《电子科技大学ASIC 秒表计时电路实验报告.docx(21页珍藏版)》请在冰点文库上搜索。
电子科技大学ASIC秒表计时电路实验报告
电子科技大学通信学院
秒表计时电路实验报告
班级
学生
学号
实验时间2015年11月27日
一、设计思路概述
设计要求:
秒表计时功能,显示分、秒、0.01秒;具有启动、暂停、停止和清空功能;增加有趣的流水灯;输入信号:
4bit按键,50MHz时钟;输出信号:
6位数码管
.设计分析:
本设计要求秒表计时功能,显示分、秒、0.01秒,而这可以由分频电路实现,将电路的输入时钟进行分频,得到1/60Hz,1Hz,和100Hz信号,就可以达到本设计要求的显示要求了;本设计要求具有启动、暂停、停止和清空功能,而这个可以由状态机实现,通过合理的配置状态转换,就可以达到要求。
流水灯的实现:
单个灯从左到右逐步发光。
相当于是一个移位寄存器,我们可通过不同的时钟来驱动它,实现不同的流水速度。
这里,我们实现了一个1Hz,和一个10Hz的流水灯电路。
二、总体设计框图及详细说明
状态机实现清零、暂停、停止等状态的切换由2比特的key信号控制,计数器500000进制由输入时钟产生周期0.01s的时钟,这是显示时钟信号的最小单位。
计数器10进制可实现10分频,由他产生的输出时钟为输入时钟周期的10倍,并根据他的状态即计数量作为输出显示对应位的时间信号,6进制实现6分频,实现功能类似于计数器10进制,通过如框图中的组合可产生时钟信号的不同位。
显示译码电路显示时钟,输出56位,因为时钟信号具有8位,输出信号连到相应的数码管即可。
三、模块设计框图、相关时序
1.6进制计数器(分频器)设计
//计数器实现6分频,计数到达2和5,输出始终翻转一次,且计数达到5时计数清零
modulecount6(rst,clk,clkout,counter);
inputrst;
inputclk;
outputregclkout;
outputreg[3:
0]counter;
always@(negedgeclkornegedgerst)begin
if(~rst)begin
clkout<=0;
counter<=0;
end
elseif(counter==2)begin
clkout<=~clkout;
counter<=counter+4'b1;
end
elseif(counter==5)begin
clkout<=~clkout;
counter<=0;
end
elsebegin
counter<=counter+4'b1;
end
end
endmodule
仿真结果为:
由图可知实现了6分频。
2、10进制计数器(分频器)设计
//计数器实现10分频,计数到达4和9,输出始终翻转一次,且计数达到9时计数清零
modulecount10(rst,clk,clkout,counter);
inputrst;
inputclk;
outputregclkout;
outputreg[3:
0]counter;
always@(negedgeclkornegedgerst)begin
if(~rst)begin
clkout<=0;
counter<=0;
end
elseif(counter==4)begin
clkout<=~clkout;
counter<=counter+4'b1;
end
elseif(counter==9)begin
clkout<=~clkout;
counter<=0;
end
elsebegin
counter<=counter+4'b1;
end
end
endmodule
仿真结果为:
由图可知实现了10分频。
3、500000进制计数器(分频器)设计:
//实现500000分频,目的是把50Mhz的系统时钟分频成为100Hz的
always@(negedgeclkornegedgerst10ms)begin
if(~rst10ms)
begin
clk10ms<=0;
clk10msreg<=0;
end
elseif(clk10msreg==249999)
begin
clk10ms<=~clk10ms;
clk10msreg<=clk10msreg+1;
end
elseif(clk10msreg==499999)
begin
clk10ms<=~clk10ms;
clk10msreg<=0;
end
else
begin
clk10msreg<=clk10msreg+1;
end
end
4、状态机设计
代码为:
//通过状态机实现复位信号的转换
always@(negedgeclkornegedgeclear)begin
if(~clear)
begin
state<=idlestate;rst<=0;rst10ms<=0;
end
else
begin
case(state)
idlestate:
begin
if(~start)
begin
state<=prestate;
rst<=0;
rst10ms<=0;
end
else
state<=idlestate;
end
prestate:
begin
state<=runstate;
rst<=1;
rst10ms<=1;
end
holdstate:
begin
if(~stop)
begin
state<=idlestate;
rst<=1;
rst10ms<=0;
end
elseif(~start)
begin
state<=runstate;
rst<=1;
rst10ms<=1;
end
else
state<=holdstate;
end
runstate:
begin
if(~stop)
begin
state<=idlestate;
rst<=1;
rst10ms<=0;
end
elseif(~hold)
begin
state<=holdstate;
rst<=1;
rst10ms<=0;
end
else
state<=runstate;
end
default:
state<=state;
endcase
end
end
5、显示译码电路设计
//实现动态显示
always@(negedgeclkornegedgerst)begin
if(~rst)begin
displayreg<=3'b000;
segcode[0]<=7'b1111111;
segcode[1]<=7'b1111111;
segcode[2]<=7'b1000000;
segcode[3]<=7'b1000000;
segcode[4]<=7'b1000000;
segcode[5]<=7'b1000000;
segcode[6]<=7'b1000000;
segcode[7]<=7'b1000000;
end
elsebegin
case(timeout[displayreg])
0:
segcode[displayreg]<=7'b1000000;
1:
segcode[displayreg]<=7'b1111001;
2:
segcode[displayreg]<=7'b0100100;
3:
segcode[displayreg]<=7'b0110000;
4:
segcode[displayreg]<=7'b0011001;
5:
segcode[displayreg]<=7'b0010010;
6:
segcode[displayreg]<=7'b0000010;
7:
segcode[displayreg]<=7'b1011000;
8:
segcode[displayreg]<=7'b0000000;
9:
segcode[displayreg]<=7'b0010000;
default:
segcode[displayreg]<=7'b1111111;
endcase
displayreg<=displayreg+3'b1;
end
end
6、流水灯设计
//流水灯显示
always@(negedgeclk1sornegedgerst)
begin
if(~rst)
ledg<=8'b0;
elseif(ledg==8'b0)
ledg<=8'b10000000;
else
ledg<=(ledg>>1);
end
always@(negedgeclk100msornegedgerst)
begin
if(~rst)
ledr<=18'b0;
elseif(ledr==18'b0)
ledr<=18'b100000000000000000;
else
ledr<=(ledr>>1);
end
四、代码及必要注释
顶层模块:
moduleclock(key,ledr,ledg,hex,clk);
input[3:
0]key;
inputclk;
outputreg[17:
0]ledr;
outputreg[7:
0]ledg;
output[55:
0]hex;
wireclear;
wirestart;
wirestop;
wirehold;
assignclear=key[0];
assignstart=key[1];
assignstop=key[2];
assignhold=key[3];
reg[19:
0]clk10msreg;
regclk10ms;
wireclk100ms;
wireclk1s;
wireclk10s;
wireclk1min;
wireclk10min;
wireclk1h;
reg[1:
0]state;
parameteridlestate=2'b00,prestate=2'b01,holdstate=2'b10,runstate=2'b11;
regrst;//低电平有效,10分频,6分频的复位
regrst10ms;//低电平有效,500000分频的复位
reg[2:
0]displayreg;
wire[3:
0]timeout[7:
0];
reg[6:
0]segcode[7:
0];
assignhex={segcode[7],segcode[6],segcode[5],segcode[4],segcode[3],segcode[2],segcode[1],segcode[0]};
//通过状态机实现复位信号的转换
always@(negedgeclkornegedgeclear)begin
if(~clear)
begin
state<=idlestate;rst<=0;rst10ms<=0;
end
else
begin
case(state)
idlestate:
begin
if(~start)
begin
state<=prestate;
rst<=0;
rst10ms<=0;
end
else
state<=idlestate;
end
prestate:
begin
state<=runstate;
rst<=1;
rst10ms<=1;
end
holdstate:
begin
if(~stop)
begin
state<=idlestate;
rst<=1;
rst10ms<=0;
end
elseif(~start)
begin
state<=runstate;
rst<=1;
rst10ms<=1;
end
else
state<=holdstate;
end
runstate:
begin
if(~stop)
begin
state<=idlestate;
rst<=1;
rst10ms<=0;
end
elseif(~hold)
begin
state<=holdstate;
rst<=1;
rst10ms<=0;
end
else
state<=runstate;
end
default:
state<=state;
endcase
end
end
//实现500000分频,目的是把50Mhz的系统时钟分频成为100Hz的
always@(negedgeclkornegedgerst10ms)begin
if(~rst10ms)
begin
clk10ms<=0;
clk10msreg<=0;
end
elseif(clk10msreg==249999)
begin
clk10ms<=~clk10ms;
clk10msreg<=clk10msreg+1;
end
elseif(clk10msreg==499999)
begin
clk10ms<=~clk10ms;
clk10msreg<=0;
end
else
begin
clk10msreg<=clk10msreg+1;
end
end
//例化了6分频和10分频的计数器
count6min10counter(rst,clk10min,clk1h,timeout[7]);
count10min1counter(rst,clk1min,clk10min,timeout[6]);
count6sec10counter(rst,clk10s,clk1min,timeout[5]);
count10sec1counter(rst,clk1s,clk10s,timeout[4]);
count10ms100counter(rst,clk100ms,clk1s,timeout[3]);
count10ms10counter(rst,clk10ms,clk100ms,timeout[2]);
assigntimeout[1]=4'b1111;
assigntimeout[0]=4'b1111;
//实现动态显示
always@(negedgeclkornegedgerst)begin
if(~rst)begin
displayreg<=3'b000;
segcode[0]<=7'b1111111;
segcode[1]<=7'b1111111;
segcode[2]<=7'b1000000;
segcode[3]<=7'b1000000;
segcode[4]<=7'b1000000;
segcode[5]<=7'b1000000;
segcode[6]<=7'b1000000;
segcode[7]<=7'b1000000;
end
elsebegin
case(timeout[displayreg])
0:
segcode[displayreg]<=7'b1000000;
1:
segcode[displayreg]<=7'b1111001;
2:
segcode[displayreg]<=7'b0100100;
3:
segcode[displayreg]<=7'b0110000;
4:
segcode[displayreg]<=7'b0011001;
5:
segcode[displayreg]<=7'b0010010;
6:
segcode[displayreg]<=7'b0000010;
7:
segcode[displayreg]<=7'b1011000;
8:
segcode[displayreg]<=7'b0000000;
9:
segcode[displayreg]<=7'b0010000;
default:
segcode[displayreg]<=7'b1111111;
endcase
displayreg<=displayreg+3'b1;
end
end
//流水灯显示
always@(negedgeclk1sornegedgerst)
begin
if(~rst)
ledg<=8'b0;
elseif(ledg==8'b0)
ledg<=8'b10000000;
else
ledg<=(ledg>>1);
end
always@(negedgeclk100msornegedgerst)
begin
if(~rst)
ledr<=18'b0;
elseif(ledr==18'b0)
ledr<=18'b100000000000000000;
else
ledr<=(ledr>>1);
end
endmodule
子模块1:
6进制分频
//计数器实现6分频,计数到达2和5,输出始终翻转一次,且计数达到5时计数清零
modulecount6(rst,clk,clkout,counter);
inputrst;
inputclk;
outputregclkout;
outputreg[3:
0]counter;
always@(negedgeclkornegedgerst)begin
if(~rst)begin
clkout<=0;
counter<=0;
end
elseif(counter==2)begin
clkout<=~clkout;
counter<=counter+4'b1;
end
elseif(counter==5)begin
clkout<=~clkout;
counter<=0;
end
elsebegin
counter<=counter+4'b1;
end
end
endmodule
子模块2:
10进制分频
//计数器实现10分频,计数到达4和9,输出始终翻转一次,且计数达到9时计数清零
modulecount10(rst,clk,clkout,counter);
inputrst;
inputclk;
outputregclkout;
outputreg[3:
0]counter;
always@(negedgeclkornegedgerst)begin
if(~rst)begin
clkout<=0;
counter<=0;
end
elseif(counter==4)begin
clkout<=~clkout;
counter<=counter+4'b1;
end
elseif(counter==9)begin
clkout<=~clkout;
counter<=0;
end
elsebegin
counter<=counter+4'b1;
end
end
endmodule
子模块1、2的testbench:
`timescale1ps/1ps
moduleclock_vlg_tst();
regclk;
regrst;
wireclkout;
wire[3:
0]counter;
clocki1(
//portmap-connectionbetweenmasterportsandsignals/registers
.clk(clk),
.clkout(clkout),
.counter(counter),
.rst(rst)
);
initial
begin
rst=0;
clk=1;
#10;
clk=0;
#10;
rst=1;
#500;
$finish;
end
always
begin
#30;
forever
begin
clk=~clk;
#10;
end
end
endmodule
五、总结及心得体会
第二次实验增加了状态机的设计与描述,计时器的核心是分频器的设计与实现,通过6、10进制分频的组合即可实现及时。
在这个过程中还涉及到了流水灯的概念与实现。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子科技大学ASIC 秒表计时电路实验报告 电子科技大学 ASIC 秒表 计时 电路 实验 报告