基于FPGAVerilog的数字式秒表设计Word下载.docx
- 文档编号:7064240
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:13
- 大小:128.06KB
基于FPGAVerilog的数字式秒表设计Word下载.docx
《基于FPGAVerilog的数字式秒表设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于FPGAVerilog的数字式秒表设计Word下载.docx(13页珍藏版)》请在冰点文库上搜索。
二、
系统原理框图
1000Hz
100Hz
50MHz
三、电路实现
四、功能模块
1、分频器(以10分频器为例)
(1)VerilogHDL语言程序
modulefp10(
Clk,
Out
);
inputClk;
outputOut;
regOut;
reg[3:
0]Cout;
regClk_En;
initial
Out<
=0;
always@(posedgeClk)
begin
Cout<
=(Cout==4'
d10)4'
d0:
(Cout+4'
d1);
Clk_En<
=(Cout>
=4'
d5)1'
d1:
1'
d0;
=Clk_En;
end
Endmodule
(2)模块化电路
(3)波形仿真
由波形仿真图可以看出,10分频器将1000Hz的脉冲分频成100Hz的脉冲。
2、计数器(以模10计数器为例)
modulecounter10(
Clk,
EN,RET,
CQ,OUT
inputEN,RET;
output[3:
0]CQ;
outputOUT;
regOUT;
/*---------------------------------------------------*/
wireRst_n;
assign
Rst_n=RET;
reg[3:
0]Led;
always@(posedgeClkornegedgeRst_n)
if(~Rst_n)
OUT=0;
Led=4'
else
Clk_En=Clk;
if(Clk_En&
EN)
if(Led<
=4'
d8)
Led=Led+3'
d1;
Led=4'
if(Led>
d9)
OUT=1'
CQ=Led;
endmodule
(2)模块化电路
(3)波形仿真
由波形图可以看出,100Hz的脉冲源,模10计数器D3-D0输出0000-1001,每10个脉冲进位位OUT输出一个单脉冲。
3、数据选择器
(1)VerilogHDL语言程序
modulenumchoose(sel,num4,num5,num6,num7,k);
input[2:
0]sel;
input[3:
0]num4;
0]num5;
0]num6;
0]num7;
outputreg[3:
0]k;
always
begin
case(sel)
3'
b000:
k<
b001:
d3;
b010:
b011:
b100:
=num4;
b101:
=num5;
b110:
=num6;
b111:
=num7;
endcase
end
endmodule
由波形图可以看出,在1000Hz的扫描信号及100Hz的计时信号下,数据选择器输出前四位输出学号后四位0311(0000,0011,0001,0001),后四位输出范围0000—9999(0000,0000,0000,0000—1001,1001,1001,1001)。
4、显示译码器(带小数点)
modulexianshiyimaqi(
k,
Sev_Seg_Led_Data_n,
del);
input[3:
output[7:
0]Sev_Seg_Led_Data_n;
input[2:
0]del;
reg[7:
reg[3:
0]D,C,A,B;
always@(k)
begin
if(del==3'
b101)
case(k)
4'
b0000:
Led<
=8'
b0111_1111;
b0001:
b0000_1101;
b0010:
b1011_0111;
4'
b0011:
b1001_1111;
b0100:
b1100_1101;
b0101:
b1101_1011;
b0110:
b1111_1011;
b0111:
b0000_1111;
b1000:
b1111_1111;
b1001:
b1101_1111;
default:
b0000_000;
endcase
else
case(k)
b0111_1110;
b0000_1100;
b1011_0110;
b1001_1110;
b1100_1100;
b1101_1010;
b1111_1010;
b0000_1110;
b1111_1110;
b1101_1110;
endcase
end
assign
Sev_Seg_Led_Data_n=Led;
(3)小数点问题
由于是只在第六个数码管(S5)上加小数点,且一直存在,故编写显示译码器程序时,在其输出8位段码时,再加一个位控选择器,即当位码为101(S5)时,段码最后一位(D0)总为1。
5、计数控制器
modulecontrol(
S1,S2,
P,CR
);
inputS1,S2;
outputP,CR;
wireS1,S2;
regP;
regCR;
initial
P=0;
always@(negedgeS1ornegedgeS2)
if(~S2)
CR=0;
else
CR=1;
P=~P;
Endmodule
由波形可以看出,初始时刻S1,S2皆为高电平,CR(清零)和P(使能)皆为低电平,计数器不工作;
按S1,CR和P变为高,计数器开始计数;
再按S1,P变为低,计数器使能端为低,暂停计数;
按S2,CR和P都变为低,计数器清零且暂停计数。
五、仿真与测试结果
(1)按S1使计数器开始计数,计数器正常工作时,数码管的输出即为数据选择器的输出经过显示译码器得到的结果,显示范围为—。
(2)按S1一下,计数器暂停计数,因此数据选择器输出,显示译码器输出,数码管显示信号皆保持不变。
(3)按S2一下,计数器清零且暂停计数,数码管显示()。
6、实验总结与心得体会
开始进行设计时,对整个设计的原理和用Verilog语言编写程序不是非常熟悉,因此采用直接调用集成模块画原理图的方法进行设计,结果发现像74160和74151这种模块都具有许多不必要的控制端口,因此连线不仅繁多而且还极容易出错。
特别是8选1数据选择器74151,由于显示译码器需要4位信号输入,所需要的4个数据选择器也就需要更多的连线。
随着设计的进行,发现采用自顶而下的方式,用Verilog语言编写每一个模块,在原理图中直接调用生成的图形文件,不仅没有了很多的控制端口和由此带来的连线,而且像数据选择器这种输入与输出之间逻辑很清晰的模块不仅可以直接编写成为一个大模块,而且这样程序编写起来也很简单。
尽管十进制计数器也可以编写成一个大模块,但由于存在进位问题,程序编写起来不算容易,逻辑性也不是很强,因此还是选择采用四个单独的计数器。
第一次在试验箱上测试存在进位问题,即由低位的8到9时直接跳到高位的9然后再到高位的0。
分析认为是由于十进制计数器存在着进位问题,其程序片段如下:
——————————
可以看出,对于OUT进位输出,0到8时是低电平,9为高电平,即8到9时有上升沿,9回到0时是下降沿,而计数器的Clk是上升沿触发。
除了修改程序的方法,还可以采用直接在OUT后接非门将上升沿与下降沿互换。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGAVerilog 数字式 秒表 设计