集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2249|回复: 1

[资料] 实验1-2:2多输入基本门电路【转帖

[复制链接]
xin-度 发表于 2019-3-22 12:56:14 | 显示全部楼层 |阅读模式
1.实验目的
熟悉和掌握FPGA开发流程和Lattice Diamond软件使用方法
通过实验理解基本门电路
掌握用Verilog HDL数据流基本门电路的方法

2.实验任务
利用Verilog语言实现不同的多输入基本逻辑门。

3.实验原理
4输入与门,或门,与非门,或非门,异或门,同或门真值如下表所示:

四、Verilog HDL建模描述详情请见下面评论


五、实验步骤


1.新建工程

双击打开Lattice Diamond软件,点击File—New—Project新建工程,输入工程名称,指定工程保存目录,单击Next,选择设备如下:
Family选择MachXO2,
Device选择LCMXO2-4000HC,
Performance grade选择4,
Package type选择CSBGA132,
Operating conditions选择Commercial,
Part Names为LCMXO2-4000HC-4MG132C。
选择综合工具Lattice LSE,完成。


2. 输入Verilog文件

点击File—New—File新建文件,类型选择Verilog Files,输入文件名称,选择保存路径,输入实验中的源代码后保存,编辑器会自动检查有无编辑错误,在下面的Output一栏会输出检查结果,如果有错误更正后重新保存直到没有报错为止。


3. 输入仿真文件

按照步骤(2)新建一个Verilog仿真文件,输入实验例程中仿真文件的代码后保存。在软件File List一栏中,右键单击“仿真文件”—Include for—Simulation,将文件设置为仿真文件(设置完成后文件图标的V会消失)。


4. 功能仿真

点击Tools选择Simulation Wizard或点击图标,按照仿真向导指示新建仿真工程,
输入工程名称,选择工程目录,选择Simulator为Active-HDL,
Process Stage选择RTL,
Add and Reorder Source:确认参与仿真的文件列表,Next
Parse HDL files for simulation:软件会编译仿真文件,若报错需修改后重新仿真
Summary:确认仿真工程信息,勾选Run simulator、Add top-level signals to waveform display和Run simulation,然后Finish
仿真软件会自动启动、运行仿真并显示仿真结果。查看仿真结果是否符合预期功能,如果不符合电路功能,则修改Verilog代码保存后,在Active-HDL中选择Design—Compile All 重新编译文件,编译通过后,在Simulation中重新开始仿真。


5. 综合

在Lattice Diamond软件的Process一栏,双击第一项Synthesize Design进行综合(确保仿真文件设置为simulation后不参与综合),综合结果会在下面的Output一栏中给出,如果有错误则修改Verilog文件后重新综合直至综合成功为止。


6. 分配管脚

打开Tools—Spreadsheet View或是点击图标在Port Assignments一栏中对输入输出信号分配引脚。


7. 布局布线

双击Process一栏的Map Design和Place & Route Design完成FPGA内部的布局布线。


8. 生成配置文件

勾选并双击JEDEC File生成可下载的jed文件。


9. 下载

打开Tools—Programmer或单击图标,根据下图选择设备和下载文件,点击上面的绿色按钮Program,下载jed文件到FPGA,下载成功后Status状态显示PASS(下载前确保下载器驱动成功安装)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| xin-度 发表于 2019-3-22 13:04:55 | 显示全部楼层
4.Verilog HDL建模描述

程序清单four_in_gates.v
//********************************************************
//
//   Copyright(c)2016, STEP FPGA
//   All rights reserved
//
//   File name       :   four_in_gates.v
//   Module name     :   four_in_gates

//   Author          :   STEP
//   Email           :   info@stepfpga.com
//   Data            :   2016/08/19

//   Version         :   V1.0
//   Description     :   4 inputs and 6 logic four_in_gates
//
//   Modification history
//   ----------------------------------------------------------------------------
// Version       Data(2016/08/19)   V1.0
// Description   
//
//********************************************************
//
//
//*******************
//DEFINE MODULE PORT
//*******************

module four_in_gates
(
        //INPUT
        a                        ,


        //OUTPUT
        led                        ,
        empty
);
        //*******************
        //DEFINE INPUT
        //*******************
        input         [3:0]  a;     

        //*******************
        //DEFINE OUTPUT
        //*******************
        output  [7:0]         empty;
        output  [5:0]        led;

        wire        [5:0]        z;

        //Combinational logic style
//        assign        z[5]=a[0]&a[1]&a[2]&a[3];                                 //three kinds of AND logic expression
//        assign        z[5]=&a;
        and(z[5],a[0],a[1],a[2],a[3]);

//        assign        z[4]=~(a[0]&a[1]&a[2]&a[3]);                        //three kinds of NAND logic expression
//        assign        z[4]=~&a;
        nand(z[4],a[0],a[1],a[2],a[3]);

//        assign        z[3]=a[0]|a[1]|a[2]|a[3];                                //three kinds of OR logic expression
//        assign        z[3]=|a;
        or(z[3],a[0],a[1],a[2],a[3]);

//        assign        z[2]=~(a[0]|a[1]|a[2]|a[3]);                        //three kinds of NOR logic expression
//        assign        z[2]=~|a;
        nor(z[2],a[0],a[1],a[2],a[3]);

//        assign        z[1]=a[0]^a[1]^a[2]^a[3];                                //three kinds of XOR logic expression
//        assign        z[1]=^a;
        xor(z[1],a[0],a[1],a[2],a[3]);

//        assign        z[0]=a[0]~^a[1]~^a[2]~^a[3];                        //three kinds of XNOR logic expression
//        assign        z[0]=~^a;
        xnor(z[0],a[0],a[1],a[2],a[3]);

        assign        led=~z;                        //led is low active

        assign  empty=8'b1111_1111;        //led's defualt mode is lighted

endmodule
仿真程序清单gates_tb.v
//
//*******************
//DEFINE MODULE PORT
//*******************
`timescale 1ns/100ps
module four_in_gates_tb;

reg [3:0] a;
initial
        begin
                a[0]=0;
                a[1]=0;
                a[2]=0;
                a[3]=0;
                #50;
                a[0]=0;
                a[1]=0;
                a[2]=0;
                a[3]=1;
                #50;
                a[0]=0;
                a[1]=0;
                a[2]=1;
                a[3]=0;
                #50;
                a[0]=0;
                a[1]=0;
                a[2]=1;
                a[3]=1;
                #50;
                a[0]=0;
                a[1]=1;
                a[2]=0;
                a[3]=0;
                #50;        
                a[0]=0;
                a[1]=1;
                a[2]=0;
                a[3]=1;
                #50;        
                a[0]=0;
                a[1]=1;
                a[2]=1;
                a[3]=0;
                #50;        
                a[0]=0;
                a[1]=1;
                a[2]=1;
                a[3]=1;
                #50;        
                a[0]=1;
                a[1]=0;
                a[2]=0;
                a[3]=0;
                #50;
                a[0]=1;
                a[1]=0;
                a[2]=0;
                a[3]=1;
                #50;
                a[0]=1;
                a[1]=0;
                a[2]=1;
                a[3]=0;
                #50;
                a[0]=1;
                a[1]=0;
                a[2]=1;
                a[3]=1;
                #50;
                a[0]=1;
                a[1]=1;
                a[2]=0;
                a[3]=0;
                #50;
                a[0]=1;
                a[1]=1;
                a[2]=0;
                a[3]=1;
                #50;
                a[0]=1;
                a[1]=1;
                a[2]=1;
                a[3]=0;
                #50;
                a[0]=1;
                a[1]=1;
                a[2]=1;
                a[3]=1;
                #50;               
        end
four_in_gates four_in_gates_tb_uut(
                              .a(a)
                                );
endmodule
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-11 21:26 , Processed in 0.075767 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表