基于FPGAVerilog的数字式秒表设计Word下载.docx

上传人:b****6 文档编号:17087475 上传时间:2022-11-28 格式:DOCX 页数:12 大小:127.62KB
下载 相关 举报
基于FPGAVerilog的数字式秒表设计Word下载.docx_第1页
第1页 / 共12页
基于FPGAVerilog的数字式秒表设计Word下载.docx_第2页
第2页 / 共12页
基于FPGAVerilog的数字式秒表设计Word下载.docx_第3页
第3页 / 共12页
基于FPGAVerilog的数字式秒表设计Word下载.docx_第4页
第4页 / 共12页
基于FPGAVerilog的数字式秒表设计Word下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于FPGAVerilog的数字式秒表设计Word下载.docx

《基于FPGAVerilog的数字式秒表设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于FPGAVerilog的数字式秒表设计Word下载.docx(12页珍藏版)》请在冰豆网上搜索。

基于FPGAVerilog的数字式秒表设计Word下载.docx

二、

系统原理框图

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:

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使计数器开始计数,计数器正常工作时,数码管的输出即为数据选择器的输出经过显示译码器得到的结果,显示范围为031100.00—031199.99。

(2)按S1一下,计数器暂停计数,因此数据选择器输出,显示译码器输出,数码管显示信号皆保持不变。

(3)按S2一下,计数器清零且暂停计数,数码管显示(031100.00)。

六、实验总结与心得体会

开始进行设计时,对整个设计的原理和用Verilog语言编写程序不是非常熟悉,因此采用直接调用集成模块画原理图的方法进行设计,结果发现像74160和74151这种模块都具有许多不必要的控制端口,因此连线不仅繁多而且还极容易出错。

特别是8选1数据选择器74151,由于显示译码器需要4位信号输入,所需要的4个数据选择器也就需要更多的连线。

随着设计的进行,发现采用自顶而下的方式,用Verilog语言编写每一个模块,在原理图中直接调用生成的图形文件,不仅没有了很多的控制端口和由此带来的连线,而且像数据选择器这种输入与输出之间逻辑很清晰的模块不仅可以直接编写成为一个大模块,而且这样程序编写起来也很简单。

尽管十进制计数器也可以编写成一个大模块,但由于存在进位问题,程序编写起来不算容易,逻辑性也不是很强,因此还是选择采用四个单独的计数器。

第一次在试验箱上测试存在进位问题,即由低位的8到9时直接跳到高位的9然后再到高位的0。

分析认为是由于十进制计数器存在着进位问题,其程序片段如下:

——————————

可以看出,对于OUT进位输出,0到8时是低电平,9为高电平,即8到9时有上升沿,9回到0时是下降沿,而计数器的Clk是上升沿触发。

除了修改程序的方法,还可以采用直接在OUT后接非门将上升沿与下降沿互换。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1