EDA技术Verilog密码锁.docx

上传人:b****3 文档编号:5876723 上传时间:2023-05-09 格式:DOCX 页数:14 大小:148.81KB
下载 相关 举报
EDA技术Verilog密码锁.docx_第1页
第1页 / 共14页
EDA技术Verilog密码锁.docx_第2页
第2页 / 共14页
EDA技术Verilog密码锁.docx_第3页
第3页 / 共14页
EDA技术Verilog密码锁.docx_第4页
第4页 / 共14页
EDA技术Verilog密码锁.docx_第5页
第5页 / 共14页
EDA技术Verilog密码锁.docx_第6页
第6页 / 共14页
EDA技术Verilog密码锁.docx_第7页
第7页 / 共14页
EDA技术Verilog密码锁.docx_第8页
第8页 / 共14页
EDA技术Verilog密码锁.docx_第9页
第9页 / 共14页
EDA技术Verilog密码锁.docx_第10页
第10页 / 共14页
EDA技术Verilog密码锁.docx_第11页
第11页 / 共14页
EDA技术Verilog密码锁.docx_第12页
第12页 / 共14页
EDA技术Verilog密码锁.docx_第13页
第13页 / 共14页
EDA技术Verilog密码锁.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EDA技术Verilog密码锁.docx

《EDA技术Verilog密码锁.docx》由会员分享,可在线阅读,更多相关《EDA技术Verilog密码锁.docx(14页珍藏版)》请在冰点文库上搜索。

EDA技术Verilog密码锁.docx

EDA技术Verilog密码锁

电子科技大学

实验报告

学生姓名:

吴成峰学号:

2014070906016指导教师:

黄志奇

一、实验室名称:

主楼C2-514

二、实验项目名称:

密码锁

三、实验原理:

利用FPGA开发班上的3个按钮开关btn[2:

0]来输入4位数字的密码。

例如,输入“2-0-1-2”打开门锁。

将用拨位开关sw[7:

0]来设置密码,通过按钮开关btn[2:

0]来输入密码。

其中,btn[0]、btn[1]和btn[2]分别对应的有效输入为“00”(十进制0)、“01”(十进制1)和“10”(十进制2),sw[7:

6]、sw[5:

4]、sw[3:

2]和sw[1:

0]分别对应密码的1、2、3、4位。

用sw[7:

0]设置密码的同时,通过7段数码管复用电路,将其显示到7段数码管上。

注意:

需将8位输入扩展成16位,即,x[15:

0]={2'b00,sw[7:

6],2'b00,sw[5:

4],2'b00,sw[3:

2],2'b00,sw[1:

0]}

输入4位数字后,才能知道所输入的密码是否正确。

如果密码是正确的,led[1]亮起;如果密码错误,led[0]将亮起。

图1给出了设计的顶层模块。

当按下btn[0]、btn[1]、btn[2]

中任何一个按钮时,将会产生一个时钟脉冲。

当分别按下按钮

btn[0]、btn[1]、btn[2]时,锁模块对应的2位输入bn[1:

0]为“00”、

btn[0]btn[l]btn[2:

“01”和“10”。

输入的密码与拨位开关上设置的密码相比较,产生图2所示的状态转移图。

注意:

即使密码输入错误,也必须完成完整的4位密码输入,才能进入“fail”状态E4。

图1•门锁电路的顶层模块

图2•门锁电路的状态转移图

四、实验目的:

熟悉利用HDL代码输入方式进行组合逻辑电路的设计和仿

真的流程,掌握Verilog语言的基本语法。

并通过一个密码锁的设计把握利用EDA软件(XilinxISE10.1)进行HDL代码输入方式的电子线路设计与仿真的详细流程,熟悉摩尔状态机。

五、实验内容:

1)利用HDL代码输入方式在XilinxISE10.1平台上实现一个密码锁设计,可以设定密码并显示,输入密码以解锁;

2)设计密码锁的顶层模块,使用模块实例语句连接前面所设计的密码锁模块;

3)生成比特流文件下载到开发板上进行验证。

六、实验器材(设备、元器件):

1)计算机(安装XilinxISE10.1软件平台);

2)BASYS2FPGA开发板一套(带USB-MlniUSB下载线)。

七、实验步骤:

1、在XilinxISE10.1平台中,新建一个工程lock。

我们选用的BASYS2FPGA开发板采用的是Spartan3EXA3S100E芯片和CPG132封装,设置好器件属性,如图3所示。

\M目:

',ProjectWizard”Os’,cehoa凸诧百

Selectthedevianddgsiflowfortheproject

Propertylaae

V^Lue

ProductCategory

All

Family

Autoffl&tiV*Sparlan3E

Device

XA3S100ET

Facka.ge

CFG132〒

Speed

7s

Top-LevelSourceType

HDL

SynthesisTod

XJT(V]U)L/y«rilo£)〒

Simulator

ISESim^Litor(YHDUVerily)寸

PreferredLanguage

Verilog寸

EnablsEnhancedDe-signSummtry疋

EnableFilt曹arixi哲

DisplayIncremental

2'

MoreInfo

Cuicel

图3.设置器件属性

2、在工程管理区任意位置单击鼠标右键,在弹出的快捷菜单中选

择“NewSource”命令,弹出新建源代码对话框,这里我们选择“VerilogModule”类型,输入Verilog文件名“lock”。

ISE会自动创建一个Verilog的模板,并在源代码编辑区打开,接

下来的工作就是将代码编写完整。

完整代码如下:

modulelock(inputclk,inputclr,input[7:

0]sw,input[1:

0]bn,outputregpass,outputregfail);

reg[3:

0]pre_s,nex_s;

parameterS0=4'b0000,S1=4'b0001,S2=4'b0010,S3=4'b0011,S4=4'b0100,E1=4'b0101,E2=4'b0110,E3=4'b0111,E4=4'b1000;

//stateregistersalways@(posedgeclkorposedgeclr)begin

if(clr==1)pre_s<=S0;

elsepre_s<=nex_s;

end

//C1always@(*)begincase(pre_s)

S0:

if(bn==sw[7:

6])

nex_s<=S1;else

nex_s<=E1;S1:

if(bn==sw[5:

4])

nex_s<=S2;else

nex_s<=E2;S2:

if(bn==sw[3:

2])

nex_s<=S3;else

nex_s<=E3;S3:

if(bn==sw[1:

0])

nex_s<=S4;else

nex_s<=E4;S4:

if(bn==sw[7:

6])

nex_s<=S1;else

nex_s<=E1;

E1:

nex_s<=E2;

E2:

nex_s<=E3;

E3:

nex_s<=E4;E4:

if(bn==sw[7:

6])nex_s<=S1;

else

nex_s<=E1;default:

nex_s<=S0;

endcase

end

//C2always@(*)beginif(pre_s==S4)pass=1;

elsepass=0;

if(pre_s==E4)fail=1;

else

fail=0;

end

endmodule

3、建立分频模块“clkdiv”,过程如上,代码如下:

moduleclkdiv(

inputmclk,

inputclr,outputclk190);

reg[24:

0]q;

always@(posedgemclkorposedgeclr)begin

if(clr==1)

q<=0;else

q<=q+1;

end

assignclk190=q[17];//190Hz

endmodule

4、建立时钟脉冲模块“clock_pulse”,代码如下:

moduleclock_pulse(

inputinp,

inputcclk,

inputclr,outputoutp);

regdelay1;

regdelay2;

regdelay3;always@(posedgeclrorposedgecclk)begin

if(clr==1)

begin

delay1<=0;

delay2<=0;

delay3<=0;

endelse

begindelay1<=inp;delay2<=delay1;delay3<=delay2;

end

end

assignoutp=delay1&delay2&~delay3;

endmodule

5、建立七段数码管复用模块“hex7seg‘,代码如下:

modulehex7seg(

input[15:

0]x,

inputclk,

inputclr,

outputreg[6:

0]a_to_g,

outputreg[3:

0]an,

outputdp

);

wire[1:

0]s;

reg[3:

0]digit;

wire[3:

0]aen;

reg[19:

0]clkdiv;

assigndp=1;

assigns=clkdiv[19:

18];

assignaen[3]=1;

assignaen[2]=1;

assignaen[1]=1;

assignaen[0]=1;

//四位四选一

always@(*)

case(s)

0:

digit=x[3:

0];

1:

digit=x[7:

4];

2:

digit=x[11:

8];

3:

digit=x[15:

12];default:

digit=x[3:

0];

endcase//数码管显示

always@(*)

case(digit)

0:

a_to_g=7'b0000001;

1:

a_to_g=7'b1001111;

2:

a_to_g=7'b0010010;

3:

a_to_g=7'b0000110;

4:

a_to_g=7'b1001100;

5:

a_to_g=7'b0100100;

6:

a_to_g=7'b0100000;

7:

a_to_g=7'b0001111;

8:

a_to_g=7'b0000000;

9:

a_to_g=7'b0000100;

'hA:

a_to_g=7'b0001000;

'hB:

a_to_g=7'b1100000;

'hC:

a_to_g=7'b0110001;

'hD:

a_to_g=7'b1000010;

'hE:

a_to_g=7'b0110000;

'hF:

a_to_g=7'b0111000;

default:

a_to_g=7'b0000001;endcase//digitselectalways@(*)beginan=4'b1111;

if(aen[s]==1)an[s]=0;

end//时钟分频器always@(posedgeclkorposedgeclr)begin

if(clr==1)clkdiv<=0;

else

clkdiv<=clkdiv+1;

endendmodule

6、顶层模块lock_top设计。

代码如下:

modulelock_top(

inputmclk,

input[7:

0]sw,

input[3:

0]btn,

output[1:

0]led,

output[6:

0]seg,

output[3:

0]an,

outputdp

);

wireclr,clk190,clkp,btn012;

wire[1:

0]bn;

wire[15:

0]x;

assignx={2'b00,sw[7:

6],2'b00,sw[5:

4],2'b00,sw[3:

2],2'b00,sw[1:

0]};

assignclr=btn[3];

assignbtn012=btn[0]|btn[1]|btn[2];

assignbn[1]=btn[2];

assignbn[0]=btn[1];

clkdivU1(.mclk(mclk),

.clr(clr),.clk190(clk190));

clock_pulseU2(.inp(btn012),

.cclk(clk190),.clr(clr),.outp(clkp));

lockU3(.clk(clkp),

.clr(clr),.sw(sw),.bn(bn),.pass(led[1]),.fail(led[0]));

hex7segU4(.x(x),

.clk(mclk),.clr(btn[3]),.a_to_g(seg),.an(an),.dp(dp));

Endmodule

Sourcefor”中

7、将工程编译、综合与实现。

在工程管理区的

选取“Implementation”选项,然后在进程管理区双击“Synthesize-XST'进行综合,如图4所示。

Sources

Frfor:

lock_tap

AddExistingSource

CreaiteNewSource

ViewDesignSummary

D电signUtilities

|>UserCoiistraints

【t^Synthesire~XST

-&丄环1ementD«sign

-Jj\GentrateProgra/Mriin^File

fiConfigureTargetDevice

图4.综合进程与源程序结构

综合完成以后是实现,实现主要分为三个步骤:

翻译逻辑网表、映射到器件单元和布局布线,如图4所示。

注意的是,在实现前还必须为模块中的输入/输出信号添加引脚约束,即添加UCF文件。

开发板BASYS2的UCF文件可以在其网站上上下载,当然也可以自己编辑UCF文件。

实验所用的UCF文件如图5所示。

图5.BASYS2开发板所需的UCF文件

6、器件配置。

首先生成可以下载到硬件中的二进制比特文件。

双击图10中的“GenerateProgrammingFile”的选线,ISE就会为设计生成相应的二进制比特文件。

BASYS2开发板提供了非常方便的JTAG配置方案,使用USB-miniUSB线缆结合DigilentAdept软件实现FPGA的配置,配置界面如图6所示。

这里我们对FPGA进行配置,配置成功状态栏会显示“ProgrammingSuccessful信息,如图6所示。

然后可在器件上验证设计。

图6.DigilentAdept界面与配置

八、实验数据及结果分析:

CT

图7.设定密码为2012

BASYSa

beyondtheory

E抵Lfe>齟

[■S谡1严"

IGiLENTicjooco

&>>:

图8.输入密码0000,led[0]亮,输入错误

j&

T

iOOrtHl

c>®:

UCLK[QQQG

rtXfiSSrJra,

Iu-m-bvW^s"1—■

DIGILENTicdoooJ2

THEOIgp>■

艰雜1脸怎Jte鼬口I!

图8.输入密码2012,led[1]亮,输入正确

九、实验结论:

由上面实验结果可得,实验仿真结果证明了设计的正确性,该

 

设计是合理的,能够满足实验所需的,完成了题设要求。

十、总结及心得体会:

此次实验结合了前几次的学习的成果,将七段数码管复用的部分结合进来,并通过分频电路和时钟脉冲电路来实现通过按键对时序系统的输入,而密码锁本身即是时序电路摩尔机的利用。

至此,我们完整的梳理了一遍这个学期的所学,组合电路设计,时序电路设计合为一体,更能深刻的理解Verilog语言和EDA,收获良多。

报告评分:

指导教师签字:

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2