专用集成电路设计大作业多功能时钟设计Word格式.docx
- 文档编号:18939047
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:31
- 大小:2.09MB
专用集成电路设计大作业多功能时钟设计Word格式.docx
《专用集成电路设计大作业多功能时钟设计Word格式.docx》由会员分享,可在线阅读,更多相关《专用集成电路设计大作业多功能时钟设计Word格式.docx(31页珍藏版)》请在冰豆网上搜索。
4]流水灯式依次点亮以模仿电台播音
(频率为1HZ)
59分59秒时led灯led[3]点亮频率为10HZ
特色部分stopwatch
可储存记忆10组59分59秒99内时间数据的秒表。
可显示记录的数据个数和对应顺序
精确到1/100秒
设有swo(秒表模式开启键)————K3
swp(暂停键)————————L3
scrl(数据控制键)——————B4
Ncr(清零复位键)——————A7
counter(记录数据键)————M4
-(数据加键)————————C11
+(数据减键)————————G12
Switch(显示切换键)---------------P11
3代码分析top_clock
总共分为顶层和底层
●顶层top.v
计时部分:
调用底层模块10位计数器6位计数器3位计器
4*6=24位寄存器cnt[23:
0]
Cnt[3:
0]second0cnt[7:
4]second1
Cnt[11:
8]minute0cnt[15:
12]minute1
Cnt[19:
16]hour0cnt[23:
20]hour1
校时部分:
设计为信号选择器ad=1时为计时模式,信号为校时信号
ad=0时为正常计时模式
数据显示部分:
设有切换switch端
数码管扫描自动扫描1KHZ
4*8=32位寄存器
Temp[31:
0]
分为校时模式显示ad=1set=0swo=0------------cnt
闹钟设置模式显示ad=0set=1swo=0------------cnt1
秒表计时模式显示ad=0set=0swo=1------------cnt2
正常走时模式显示其余----------------------------------cnt
●底层部分
计数器counter10.vcounter6.vcounter3.v
//counter10.v(0~9)
modulecounter10(en,ncr,clk,q);
inputen,ncr,clk;
output[3:
0]q;
reg[3:
always@(posedgeclk)
begin
if(ncr)q<
=4'
d0;
//ncr=0时,异步清零
elseif(~en)q<
=q;
//EN=0,暂停计数
elseif(q==4'
b1001)q<
b0000;
elseq<
=q+1;
//计数器加1
end
endmodule
闹钟设定模块bell.vcnt1代码见附录
仿电台报时radio.v代码见附录
秒表stopwatch.vcnt2代码见附录
4实验内容及步骤
(1)创建工程命名为top_clock
(2)选择BASYS2型号并完成创建
(3)新建verilogmodule文件命名为top
(3)添加完整代码
完整代码见附录
(4)检查语法直至通过
双击Synthesize—XST
(5)创建时钟信号约束即CLK
(6)创建管脚约束双击
管脚设置为
管脚分布
a[0]-a[3]---------K14F12J12M13数码管扫描信号
adj[0]—adj[3]--G12C11M4A7校时及闹钟设定及秒表按钮
led[0]-----led[7]--M5M11P7P6N5N4P4G1led灯
segs[0]---segs[6]-L14H12N14N11P12L13M12数码管
rcrlF3仿电台播报开关
scrl--B4秒表显示切换开关
bcrlN3闹铃开关
setE2闹钟设定按钮
adG3校时按钮
switchP11显示切换按钮
swoK3秒表开关
swpL3秒表暂停开关
CLKB8时钟信号50MHz
(7)逻辑综合
(8)下载到BASYS2板上
打开bit文件下载到板子上
在板子上试验
1。
正常走时模式
Switch=1时显示分分:
秒秒
Switch=0时显示时时:
分分
2。
手动校时模式ad=1set=0swo=0
3,闹钟设定和开关模式
(brcl)N3->
闹铃(led灯)开关闹铃响时M11M5亮灯以10MHZ闪烁
闹铃设定ad=0set=1swo=0
设置方法和校时方法共用键(A7M4C11G12)
方法相同
4,秒表模式ad=0set=0swo=1
(swp)暂停键低电平有效
A7清零键(包括数据清零)
M4记录数据键每按一次记录一个时间数据(59分59秒99以内)
可记录10组数据并可显示当前数据的序号
Switch=0时[][][][]
^^^^
显示C数据序号分分
Switch=1时[][][][]
秒秒0.1秒0.01秒
(5)实验结果的测试和仿真
仿真波形如下:
Counter10
Counter6
Counter3
Bell
Radio
实验结果及说明:
(1)正常走时模式
分分;
(2)手动校时模式ad=1set=0swo=0
使ad=1,每按一下[][][][]switch=1,每按一下循环加一(分分秒秒)
A7M4C11G12
[][][][]A7M4C11G12
switch=0,每按一下循环加一(时时分分)
例如设定为20:
12:
08
(3)闹钟设定和开关模式
(4)秒表模式ad=0set=0swo=1
C11(—)数据减键序号循环减一最小为1
G12(+)数据加键序号循环加一最大为9
序号即为数据记录的顺序
(5)其他按法皆为正常走时模式
6实验总结与感想
通过多功能时钟的设计过程,我深刻的感觉到复杂电路设计的思路和方法特别重要,好的方法不仅省时省力,也可使程序运行更稳定快速高效。
此次的多功能时钟分为好几个大的模块,
怎样能恰当好处的连接这些模块是需要经验的,通过这次试验我也初步积累到了一些经验:
端口尽量不要太多,能调用模块尽量调用,可省时省力,模块与模块之间尽量独立,但又要设置好端口之间的连接,中间变量不宜过多,但适当的中间变量省下不好麻烦。
例如我就设置啦显示的中间变量temp【31:
0】
通过不同的模式转换将不同的值赋给temp变量,这样显示的代码就可重复使用。
与此同时,在设计中也还有值得改进的地方,就是按钮使用过多,操作方法显得有些复杂,可以进一步优化改进。
遇到的最主要的问题:
秒表设计模块中的1/100秒在数码管上无法正常快速显示(由于led灯的余辉效应造成)
记录数据时的准确度也就下降,人们正常按键时间或大于0.01秒所以秒表的十分位为准确位百分位不准确
7参考文献
【1】《Veriloghdl与数字asic设计基础》8.4和8.5(罗杰主编)
(8)附录(源代码)
moduletop(set,ad,swo,swp,switch,bcrl,rcrl,scrl,,clk,adj,segs,a,led
);
inputad,set,swo,bcrl,rcrl,scrl,swp,switch,clk;
//定义输入端口
input[3:
0]adj;
output[6:
0]segs;
//数码管
0]a;
//扫描输出
output[7:
0]led;
//led灯
reg[6:
//shumaguan
reg[31:
0]temp;
wire[23:
0]cnt;
//走时模式和校时模式临时变量
0]cnt1;
//闹钟模式临时变量
wire[31:
0]cnt2;
//秒表模式临时变量
//使能信号
initialbegin
a=4'
b1110;
end//chushihua
wireeno,enp1,enp2,enp3,enp4,enp5;
in50MHz_out1Hzu0(clk,cp1);
//输出频率1HZ
in50MHz_out1kHzu7(clk,cp2);
//输出频率1kHZ扫描信号
in50MHz_out10Hzu8(clk,cp3);
//输出频率10HZ
in50MHz_out100Hzu12(clk,cp4);
//100Hz
counter10u1(en0,0,cp,cnt[3:
0]);
//second个位计数
counter6u2(enp1,0,cp,cnt[7:
4]);
//second十位计数
counter10u3(enp2,0,cp,cnt[11:
8]);
//minutes个位计数
counter6u4(enp3,0,cp,cnt[15:
12]);
//minutes十位计数
counter10u5(enp4,0,cp,cnt[19:
16]);
//hours个位计数
counter3u6(enp5,0,cp,cnt[23:
20]);
//hours十位计数
bellu9(switch,set,bcrl,adj,cp3,cnt,cnt1,led[1:
//闹钟模块
radiou10(rcrl,cnt[15:
0],cp1,cp3,led[7:
3]);
//仿真报时模块
stopwatchu11(swo,scrl,swp,adj,cp4,cp3,cnt2);
//秒表模块
assigncp=ad?
cp3:
cp1,
en0=(~ad)|(switch&
adj[0]),
enp1=~ad?
(cnt[3:
0]==4'
h9):
(adj[1]&
switch),//产生second十位计数使能信号
enp2=~ad?
(cnt[7:
4]==4'
d5)&
d9):
(adj[0]&
switch==0),//产生minutes个位计数使能信号
enp3=~ad?
(enp2&
(cnt[11:
8]==4'
d9)):
switch==0),//产生
minutes十位计数使能信号
enp4=~ad?
(enp3&
(cnt[15:
12]==4'
d5)):
(adj[2]&
switch==0),//产生hours个位计数使能信号
enp5=~ad?
(enp4&
cnt[19:
16]==4'
(adj[3]&
switch==0),//产生hours十位计数使能信号
led[2]=0;
always@(adorsetorswo)//显示模式选择
if((~ad)&
set&
(~swo))begintemp[15:
0]<
=cnt1[15:
0];
temp[31:
16]<
=cnt1[23:
8];
end
elseif((~ad)&
(~set)&
swo)temp<
=cnt2;
elsebegintemp[15:
=cnt;
=cnt[23:
always@(posedgecp2)//扫描信号循环变化
if(a==4'
b1110)a<
b1101;
//J12
elseif(a==4'
b1101)a<
b1011;
//M13
b1011)a<
b0111;
//k14
elsea<
//F12
always@(posedgecp2)//数码管显示译码
if(switch==1'
b0)
b1110)
begin
case(temp[19:
16])
4'
d0:
segs<
=7'
b1000000;
4'
d1:
b1111001;
d2:
b0100100;
d3:
b0110000;
d4:
b0011001;
d5:
b0010010;
d6:
b0000010;
d7:
b1111000;
d8:
b0000000;
d9:
b0010000;
defaultsegs<
b1111111;
endcase
end
b1101)
case(temp[23:
20])
4'
end
b1011)
case(temp[27:
24])//hours个位
h0:
h1:
h2:
h3:
h4:
h5:
h6:
h7:
h8:
h9:
ha:
b0001000;
else
case(temp[31:
28])//hours十位
hb:
b0000011;
hc:
b1000110;
elseif(switch==1)
beginif(a==4'
b1110)
case(temp[3:
0])
endcase
b1101)
case(temp[7:
4])
endcase
case(temp[11:
8])
case(temp[15:
12])
endcase
end
//counter10.v(0~9)
//ncr=0时,同步清零
//counter6.v(0~5)
modulecounter6(en,ncr,clk,q);
=4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专用 集成电路设计 作业 多功能 时钟 设计