FPGA进阶教程一--ISE工具使用基础

版权说明:未经许可,不得转载

 

一.目的​

​1.了解FPGA的开发流程

2.学会使用XiLinxFPGA开发工具ISE

3.了解Digilent Anvyl实验平台的主要功能

4.掌握拨码开关和LED的使用

5.学习基本组合逻辑电路在FPGA上的开发、实现和验证方法

二.工具

1. Digilent Anvyl 开发板

 

2. 安装 ISE Design Suite软件的 PC 机一台

下载链接​

3. USB 数据线一根

三.简单上手实验

1.请采用门级和数据流级别描述方式建模,实现一个2输入与门。

2. 请采用行为级描述方式,实现一个4选1数据选择器,要求使用case语句和if_else语句分别实现。

3.设计并实现一个4输入电路,当大多数输入信号(3或4输入)为1时,输出为1,否则输出为0。

4. 设计并实现一个组合逻辑电路,要求:以SW0~SW3作为4个开关输出,控制LD0~LD1两个灯,完成集成照明控制逻辑,SW0是总开关; SW1开则LD0亮; SW2和SW3为双控开关,控制LD1。

​四.实验步骤与结果分析

​实验一:请采用门级和数据流级别描述方式建模,实现一个2输入与门。

设计过程:

真值表

根据真值表可知:led = sw0 & sw1

门级描述方法源程序:

.v文件:

module led{

    input[1:0] sw,

    outputled

    };

    andU(led,sw[0],sw[1]);

endmodule

.ucf文件:

​NET sw<0> LOC=V5;

NET sw<1> LOC=U4;

NET led LOC=W3;

 

数据流级描述方法源程序:

.v文件:

module led{

    input[1:0] sw,

    outputled

    };

    assignled = sw[0]&sw[1]

endmodule

 

.ucf文件:

​NET sw<0> LOC=V5;

NET sw<1> LOC=U4;

NET led LOC=W3;

实验结果:

上图为1&1=1的结果

实验二:请采用行为级描述方式,实现一个4选1数据选择器,要求使用case语句和if_else语句分别实现。

设计过程:

真值表

​行为级描述方法源程序:

.v文件(case语句):

module test2{

    input[1:0] control,

    input[3:0] data

    outputz

    };

    always@(controlor data)

    begin

       case(control):

           0:z=data[0]

           1:z=data[1]

           2:z=data[2]

           3:z=data[3]

    end

endmodule

 

.v文件(if else语句):

​module test2{

    input[1:0] control,

    input[3:0] data,

    outputz

    };

    always@(controlor data)

    begin

       if(control==0)

           z= data[0];

       elseif(control==1)

           z= data[1];

       elseif(control==2)

           z= data[2];

       elseif(control==3)

           z= data[3];

    end

endmodule

 

.ucf文件(两种方式都相同):

​NET control<0> LOC=V5;

NET control<1> LOC=U4;

NET data<0> LOC=V3;

NET data<1> LOC=P4;

NET data<2> LOC=R4;

NET data<3> LOC=P6;

NET z LOC=W3;

上图为四选一选择最右边的LED0

 

实验三:设计并实现一个4输入电路,当大多数输入信号(3或4输入)为1时,输出为1,否则输出为0。

设计过程:

真值表

​由真值表可画出如下卡诺图:

卡诺图

​根据卡诺图可知:z =x0x1x3+x0x1x3+x0x2x3+x1x2x3

则数据流级描述方法程序如下:

.v文件:

module test3{

    input[3:0] x,

    outputz

    };

    assignz =(x[0]&x[1]&x[3])|(x[0]&x[1]&x[2])|(x[0]&x[2]&x[3])|(x[1]&x[2]&x[3])

endmodule

 

.ucf文件:

​NET x<0> LOC=V5;

NET x<1> LOC=U4;

NET x<2> LOC=V3;

NET x<3> LOC=P4;

NET z LOC=W3;

实验结果(略)

 

实验四:设计并实现一个组合逻辑电路,要求:以SW0~SW3作为4个开关输出,控制LD0~LD1两个灯,完成集成照明控制逻辑,SW0是总开关; SW1开则LD0亮; SW2和SW3为双控开关,控制LD1。

设计过程:

真值表

根据真值表可画出如下卡诺图:

卡诺图

​由卡诺图可知:

Z0 = x0x1

Z1 = x0(x2⊙x3)

则数据流级描述方法源程序如下:

.v文件:

​module test4{

    input[3:0] x,

    output[1:0] z

    };

    assignz[0] = x[0]&x[1];

    assignz[1] = x[0]&(x[2]~^x[3]);

endmodule

 

.ucf文件:

​NET x<0> LOC=V5;

NET x<1> LOC=U4;

NET x<2> LOC=V3;

NET x<3> LOC=P4;

NET z<0> LOC=AB3;

NET z<1> LOC=AA4;

 

实验结果:

上图为输入为1011时,输出01

上图为输入为1111时,输入为11

​五.实验总结

1.Verilog语言与所学的其他语言存在一定差异性,写的时候一定注意语法,不然很容易报错。

2.应该对每个小实验都新建一个文件夹来存放。因为不同实验中有些相同的变量如果放在同一文件夹中会引起冲突

 

对于以上实验若有不理解的地方,请参考​相关实验说明文件

​---------------------------@weekdawn 版权所有------------------------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值