数字循环电路_第1页
数字循环电路_第2页
数字循环电路_第3页
数字循环电路_第4页
数字循环电路_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验名称:Charactersscrollingcircuit

一、实验任务:

对于这一部分,您将设计一个电路,在五个显示器上以报时纸

带的方式滚动字符“12345”。每次您向电路施加手动时钟脉冲

时,数字应该从右向左移动。当字符“12345”从显示的左侧滚

动之后,它又从右侧开始。对于这一部分,您将设计一个电路,

在五个显示器上以报时纸带的方式滚动字符“12345”。每次您

向电路施加手动时钟脉冲时,数字应该从右向左移动。当字符

112345"从显示的左侧滚动之后,它又从右侧开始。

ClockcycleDisplayedpattern

11

212

3123

41234

512345

623451

734512

845123

951234

1012345

•••andsoon

Table1.Scrollingthecharacters12345inticker-tapefashion

通过使用5个以类似队列的方式连接的7位寄存器来设计电路,这样

第一个寄存器的输出为第二个寄存器的输入提供信息,第二个寄存器

为第三个寄存器提供信息,以此类推。寄存器之间的这种类型的连接

通常称为管道)每个寄存器的输出应该直接驱动一个显示器。

你要设计一个有限状态机,以两种方式控制管道:

1.对于系统复位后的前五个时钟脉冲,FSM将正确的字符(12345)

插入到管道中的第一个寄存器中。

2.步骤1完成后,FSM将管道配置为一个循环,该循环将最后一个

寄存器连接回第一个寄存器,以便数字继续无限滚动。以一般FSM的

方式编写VerilogHDL代码的报时纸带电路。I编译你的Verilog代码,

使用时序模拟测试电路。下载到DE2板上测试电路。使用DE2上的

KEYO来计时FSM和管道寄存器,并使用SWO作为同步active-low

复位输入。

第二部分:对于本部分,您将修改第一部分的电路,使其不再需要手

动应用时钟脉冲。你的电路应该滚动“12345”这个词,这样数字就

会以大约一秒的间隔从右向左移动。滚动应该无限期地持续下去;当

“12345”从显示的左侧滚动出去后,它应该从右侧重新开始。使用

50MHz时钟信号对FSM进行时钟操作。编译你的VerilogHDL代码

并模拟它。将其下载到DE2板上并测试电路。(仿真时可以将50Mclock

频率降低,例如20Hz,或者缩短数字的移动时间间隔)

第三部分:扩展第2部分中的设计,以便在按键KEY2和KEY1的控

制下,可以改变字母从右向左移动的速率。如果按下KEY1,字母的

移动速度应该是原来的两倍。如果按下KEY2,则速率必须降低2倍。

请注意,KEY2和KEY1开关是断开的,当按下时将恰好产生一个低脉

冲。然而,没有办法知道开关可以保持多长时间,这意味着脉冲持续

时间可以任意长。设计该电路的一个好方法是在Verilog代力马中包含

第二个FSM,它可以正确地响应按下的键。当按下一个键时,这个

FSM的输出可以适当地改变,并且FSM可以等待每次按键结束后再

继续。第二个FSM产生的输出可以作为在电路中创建可变时间间隔

方案的一部分,注意,KEY2和KEY1是电路的异步输入,因此在使用

这些信号作为有限状态机的输入之前,请确保将它们与时钟信号同步。

电路应按如下方式工作。当电路复位时,滚动大约每隔一秒发生一次。

反复按下KEY1会使滚动速度翻倍,达到每秒最多4个字母。反复按

下KEY2会导致滚动速度减慢到每四秒至少一个字母。时间模拟你的

设计。在DE2板上实现你的电路,并证明它能正常工作。

2、设计思路:

编译你的Verilog代码,使用时序模拟测试电路。下载到DF2板上测

试电路。你的电路应该滚动“12345”这个词,这样数字就会以大约

一秒的间隔从右向左移动。滚动应该无限期地持续下去;当“12345”

从显示的左侧滚动出去后,它应该从右侧重新开始。使用50MHz时

钟信号对FSM进行时钟操作。编译你的VerilogHDL代码并模拟它。

将其下载到DE2板上并测试电路。(仿真时可以将50Mclock频率降

低,例如20Hz,或者缩短数字的移动时间间隔),扩展第2部分中的

设计,以便在按键KEY2和KEY1的控制下,可以改变字母从右向左

移动的速率。如果按下KEY1,字母的移动速度应该是原来的两倍。

如果按下KEY2,则速率必须降低2倍。

3、Verilog代码:

modulescrolling_circuit(

inputCLK_50M,//50MHz输入

inputSpeed_RST,//速度复位

inputState_RST,//状态复位

inputkeyl,//加速按键

inputkey2,//减速按键

outputreg[60NUMlt//第一个数码管

outputreg[6:0]NUM2,//第二个数码管

outputreg[6:0;NUM3,//第三个数码管

outputreg[6:0;NUM4,//第四个数码管

outputreg[6:0;NUM5//第五个数码管

);

//定义运行速度

regSpeed;

//可调速的计数器

regTim_CLK;

regrst;

//定义计数器相关变量

integeri=0;

integercount=50000000;

//定义按键状态

regkeyl_state=0;

regkey2_state=0;

//检测按键状态

always@(posedgeCLK50M)begin

//复位的检测

if(!rst)begin

count<=50000000;

end

elsebegin

//按键一的状态检测

if(!keyl)begin

if(keyl_state==0)begin

keyl_state<=1;

end

end

elseif(keyl)begin

if(keyl_state==1)begin

count<=count/2;//加速

keyl_state<=0;

end

end

//按键二的状态检测

if(!key2)begin

if(key2_state==0)begin

key2_state<=1;

end

end

if(key2)begin

if(key2_state==1)begin

count<=count*2;//减速

key2state<=0;

end

end

//速度限幅处理。25s-4s)

if(count<12500000)begin

count<=12500000;

end

elseif(count>200000000)begin

count<=200000000;

end

end

end

//计数器分频处理

always@(posedgeCLK_50M)begin

i<=i+1;

if(i>=count)begin

i<=0;

Tim_CLK<=1;

end

elsebegin

Tim_CLK<=0;

end

end

//定义状态变量

reg[2:0]state;

reg[6:0]temp;

//状态机状态声明

parameter

statel=0,//状态1

state2=1,//状态2

state3=2,//状态3

state4=3,//状态4

state5=4,//状态5

state6=5;//状态6

//线程二:状态任务处理(实时处理)

always@(posedgeTim_CLK)begin

//复位信号检测

if(!State_RST)

state<=statel;

elsebegin

//任务处理与检测

case(state)

//状态1

statel:begin

NUM5(二7'blllllll;

NUM4〈二7'blllllll;

NUM3<=7'blllllll;

NUM2<=7'blllllll;

NUM1<=7'blOOOOOO;

〃下一状态

state<=state2;

end

//状态2

state2:begin

NUM5<=NUM4;

NUM4<=NUM3;

NUM3<=NUM2;

NUM2<=NUM1;

NUM1<=7'bOlOOlOO;

//下一状态

state<=state3;

end

//状态3

state3:begin

NUM5<=NUM4;

NUM4<=NUM3;

NUM3<=NUM2;

NUM2<=NUM1;

NUM1<=7'bOllOOOO;

〃下一状态

state<=state4:

end

//状态4

state4:begin

NUM5<=NUM4;

NUM4<=NUM3;

NUM3<=NUM2;

NUM2<=NUM1;

NUM1<=7'bOOllOOl;

//下一状态

state<=state5;

end

//状态5

state5:begin

NUM5<=NUM4;

NUM4<=NUM3;

NUM3<=NUM2;

NUM2<=NUM1;

NUM1<=7'bOOlOOlO;

//下一状态

state<=state6;

end

//状态6

stateb:begin

temp<=NUM5;

NUM5<=NUM4;

NUM4<=NUM3;

NUM3<=NUM2;

NUM2<=NUM1;

NUM1<=temp;

//下一状态

state<=state6;

end

default:state<=state1;

endcase

end

end

endmodule

lxRTL图表:

SEC・StateStateCoMition

(Stet^RST)

(Stett_RST)

(Stett.RST)

(StrttJST)

(Stett.RST)

(Stttt.RST)

3、时序仿真图:

4、硬件测试:

1)、测试方案

下载到DE2板上测试电路。使用hexO-4为数码管显示,keyO为加

速,可以为减速,swO,swl为速度和状态复位,用50MHz时钟信号

对FSM进行时钟操作。

2)、引脚锁定

ntooertameurecwi|LocaoonlAJDanrvgurocpWicancarcKwerveo

•OJC.SOMInputPDNJ42282J13.3-¥L^ni(defmJt)

OOutputPW.V13•B8.N03KMn(defa叫

€>NUM1(5]OutputPIN.V14•B8.N033VlEl(defadt)

3NUM1MOutputPW.Aeil8B8_N033YIEI(defadt)

3NUMlfflOuWPW.AOll•B8.N03.3-VLVTH(defalt)

3NUM1(2]OuwFtNJ^CU.M.NO3.3-VLVm

2NUM1(1)OutputPWA812•B8.N03.3-Yiyrn(defadt)

89S.N03.HLEL(defadt)

PW.AB246B6JU3.3-VLVni(defadt)

PIN.AA236B6.N13.am(defaUt)

6B6.N13.3-VL/ni(defMJt)

PW.Y226B6.N13.34lEl(defadt)

孙一W216B6.N13.3-Vl/m(defadt)

P1N.V21686fl3.HLEI(defadt)

PIN.V2O6B6.N13.3-¥L/m(defadt)

PIN.Y24696M3.3-VL/Hl((tefadt)

PW.AB2S6B6JU33Vlm(defadt)

PINAB26696.N1

PW.AC26686.N13.3-Vl/rn(defidt)

PW.AC256M.Nl3.3WIEI(defadt)

PW.V226B6.N13.3-VL/Hl(defadt)

PDN.A6236B6,N13.*LEl(deD

PIN.W246B6.N133VlEl(defMX)

PW.U226B6_N13.3-VLVTTl(de^Ut)

08JU3.3-VlVTn

PtN_Y26686fl3.3-¥lVm(defaJt)

PJN.AA26686N13.3-Yl/m(defaJt)

PINM25696N11>¥L/ni(defaJt)

NUM5[6]OutputPINJ31B1.NO3.3-VLVm.(defaJt)

NUM5[5]OutputPIN.R61B1.NO3.3-VLVTTL(defaiit)

NUM5MOutputPIN.R71B1.N03.3-VLVTTL(defadt)

NUM5[3]OutputPINJ41Bl.NO3.3-VLVTTL(defadt)

NUM5[2]OutputPIN.U21Bl.NO3.3-VLVTTl(defadt)

NUM5[1]OutputPIN.U11

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论