【计算机组成与体系结构Ⅰ】实验6 熟悉Vivado及MINISYS-1实验系统

news2024/11/15 23:24:21

一、实验目的

1:熟悉Vivado的开发环境及开发流程,掌握Vivado中Verilog HDL文本输入设计方法,包括仿真、综合、实现与下载。熟悉Minisys开发板的功能和使用方法。

2:学会可配置IP核的设计与封装方法,深入理解与门逻辑。

二、实验环境

软件:Vivado 2015.4;

硬件:MINISYS-1开发板;

三、实验内容

3.1 拨码开关与LED灯(熟悉vivado和实验台)

1:创建项目

使用Vivado创建一个新项目,项目类型选择为RTL,不增加源文件、IP核、约束文件等,选择器件为xc7a100tfgg484-1,最后点击完成Finish。

2:添加源代码


添加设计文件,创建设计文件Ex_1,设置sw和led管脚数目及输入输出。将设计文件Ex_1中的源代码替换为实验指导中的代码,实现将拨码开关sw的内容赋值给led。管脚的相关设置和替换的代码如下图所示:

 

 


3:仿真


为了检查电路设计的正确性,添加仿真文件Ex_1_sim,将仿真文件Ex_1_sim中的源代码替换为实验指导中的代码,实现对Ex_1模块的例化,初始化sw=0,每隔10ns将sw加一。替换的代码如下图所示:


之后点击Run Similation,运行仿真文件Ex_1_sim,将仿真时间调整为10ns,仿真后得到波形图。该波形图上下相同,每隔10ns可以使sw的值自动加一。仿真的波形图如下图所示:

 

4:综合


点击Run Synthesis,运行综合情况。若无问题,则弹出窗口。窗口如下图所示:

 

5:管脚分配
点击Layout-I/O Planning,打开管脚分配表。将I/O Std这一列全部改为LVCMOS33,并点击site改变管脚分配。管脚分配表如下图所示:

 

 

设置完成后,按ctrl+s保存管脚设置,生成约束文件led_lights,完成后关闭综合设计窗口。

6:实现


    点击Run Implementation,对设计进行实现,实现完成后弹出窗口。窗口如下图所示:

 

7:产生比特流文件并下载


    在6中弹出的窗口处选择Generate Bitstream并确定,完成后弹出新窗口。新窗口如下图所示:

 

选择硬件管理界面并确认,点击open target。用USB下载线将电脑主机与Minisys开发板相连,同时将电源线连接开发板。之后选择xc7a100t_0,将比特流文件下载到开发板中。下载完成后,用拨码开关控制Minisys开发板,发现LED灯会随着对应的拨码开关的打开而点亮。

3.2 可配置输入端口数和数据宽度的与门IP核设计

1:创建并仿真andgate项目

创建一个andgate项目,在andgate.v文件中设置andgate模块。模块如下图所示:

 建立仿真1位8输入的情况,在andgate_sim.v文件中设置andgate_sim模块。模块如下图所示:

 

 按照3.1的方法进行仿真,获得仿真波形图。仿真波形图如下图所示:

 在仿真文件中,我们将c、d、e、f、g、h这6个输入均设置为1,因此q会随着a、b输入的变化而变化。从仿真结果中可以发现,当a、b任意一个输入为0的时候,q的输出也为0,满足与门的逻辑。

2:测试32位与门
在andgate32_sim.v文件中设置andgate32_sim模块。模块如下图所示:

 

 按照3.1的方法进行仿真,获得仿真波形图。仿真波形图如下图所示:

 

分析仿真结果后可知,实验具备正确性。

3:综合并封装IP核
仿真andgate模块并综合,之后设置IP并封装。IP的设计如下图所示:

 

添加IP核所支持的芯片家族,除了artix7以外全部选择,Life-circle选择Production。之后设置Port_Num参数、WIDTH参数等。再在端口存在栏中选择Optional,表明端口的存在有条件,在启动表达式编辑框中输入$Port_Num>2,表明当输入端口大于2的时候,c端口被启用。同理,设置d、f、g、h端口的参数。最终的设置结果如下图所示:

 最后IP生成到CSE_CSE_andgate_1.0.zip压缩包中,完成IP核的封装。压缩包如下图所示:

 

四、问题回答

1:总结在可配置输入端口数和数据宽度的“与门”IP 核实验中遇到的问题和解决的方法。

问题:

1:在加入多个模拟文件后并点击run simulation的时候,会发生运行冲突。

2:在观察波形的时候,波形图点击全局观察后仍出现不符合预期的效果。

3:在MINISYS-1开发板上,发现加载比特流后,拨动开关后的LED显示结果与预期不符合。

解决方法:

1:查看.v文件的属性,将其中不需要模拟的文件的使能端Enable处取消勾选,再点击run simulation进行模拟。

2:在波形图处点击ctrl+鼠标中间键,对波形图进行人为的放大和缩小处理,直至符合预期为止。

3:重新对管脚进行分配,原实验指导中的表格有一定问题。

2:约束文件所起作用?

约束文件在Verilog中用于描述设计的物理限制和时序要求。它包含了时钟频率、时序延迟、输入输出时序、时钟分频等信息,以确保设计符合所需的输入输出特性。约束文件可以帮助避免时序冲突等问题,从而提高设计的稳定性和可靠性。

3:请用Verilog HDL实现一个8位全加器,提供源文件和仿真文件。

源文件代码为:

module full_adder_8bit(input [7:0] A, input [7:0] B, input cin, output [7:0] S, output cout);

wire [7:0] c;

assign c[0] = cin;

genvar i;

generate
    for(i=0;i<8;i=i+1)
    begin: adder
        full_adder fa(A[i],B[i],c[i],S[i],c[i+1]);
    end
endgenerate

assign cout = c[7];

endmodule

module full_adder(input a, input b, input cin, output s, output cout);

assign s = a ^ b ^ cin;

assign cout = (a & b) | (a & cin) | (b & cin);

endmodule

仿真文件代码为:

`timescale 1ns / 1ps

module full_adder_8bit_tb;

reg [7:0] A, B;
reg cin;
wire [7:0] S;
wire cout;

full_adder_8bit DUT(.A(A), .B(B), .cin(cin), .S(S), .cout(cout));

initial begin
    // test case 1
    A = 8'b00000000;
    B = 8'b00000000;
    cin = 0;
    #10;
    if (S !== 8'b00000000 || cout !== 0)
        $error("Test case 1 failed!");

    // test case 2
    A = 8'b11111111;
    B = 8'b00000001;
    cin = 0;
    #10;
    if (S !== 8'b00000000 || cout !== 1)
        $error("Test case 2 failed!");

    // test case 3
    A = 8'b00000000;
    B = 8'b00000001;
    cin = 1;
    #10;
    if (S !== 8'b00000001 || cout !== 0)
        $error("Test case 3 failed!");

    // test case 4
    A = 8'b11111111;
    B = 8'b11111111;
    cin = 1;
    #10;
    if (S !== 8'b11111111 || cout !== 1)
        $error("Test case 4 failed!");

    $display("All test cases passed!");
    $finish;
end

endmodule


仿真波形图如下所示:

 

由仿真波形图可知,四个测试案例均仿真正确,符合理论的实验结果。

五、实验总结

  1. 逻辑组合元件是数字电路中的一类元件,它们的输出仅取决于它们的输入,而与电路的时序状态无关。逻辑组合元件可以执行逻辑运算,例如与、或、非、异或等,用于处理二进制数据信号。逻辑组合元件的输出只有两种状态,通常表示为“0”和“1”,分别代表低电平和高电平。基本的逻辑组合元件有与门、非门、或门、或非门等。
  2. IP核封装时会显示路径,需要记住,便于后续进行查找。路径如下图所示:

  3. 开发板的LED显示情况如下图所示:
  4. IP核(Intellectual Property core,知识产权核)是指在数字电路中常用的可重用的、预先设计好的、经过验证的电路模块,可以用于快速设计和实现数字电路系统。IP核通常由硬件描述语言(如Verilog、VHDL等)编写而成,可以直接在FPGA或ASIC芯片上实现。
  5. 在Verilog语言中,#100表示延迟100个时钟周期,即表示在当前模拟时钟周期后,延迟100个时钟周期,然后再执行下一条语句。通常用于在仿真过程中模拟延迟,以便更好地测试电路的行为。
  6. 在本实验中,创建IP核的方式如下:
    ——对仿真正确的模块进行综合
    ——弹出窗口后点击cancel
    ——点击Project Manager中的Project Settings
    ——对话框中选择IP,并进入Packager选项卡
    ——设置相关参数后点击Apply和OK
    ——在菜单栏的Tools中选择Create and Package IP
    ——在弹出窗口中设置封装选项,设置IP Location等
    ——依次在Package IP界面中进行封装设置,最后点击Review and Package中的Package IP按钮
    ——完成封装,点击路径查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux驱动入门(五)——简单的字符设备驱动程序

文章目录 前言字符设备驱动程序框架字符设备和块设备主设备号和次设备号申请和释放设备号 初识cdev结构cdev结构体file_operations结构体cdev和file_operation结构体的关系inode结构体 字符设备驱动的组成字符设备加载和卸载函数file_operations结构体和其他成员函数驱动程序与…

Tomcat面试题

江湖无名 安心练剑 关注微信公众号&#xff1a;程序三两行 获取最新版面试资料、java学习路线 1、Tomcat 的缺省端口是多少&#xff0c;怎么修改&#xff1f; 1&#xff09;找到 Tomcat 目录下的 conf 文件夹 2&#xff09;进入 conf 文件夹里面找到 server.xml 文件 3&…

Elasticsearch】文档操作

目录 3.文档操作 3.1.新增文档 3.2.查询文档 3.3.删除文档 3.4.修改文档 3.4.1.全量修改 3.4.2.增量修改 3.5.总结 3.文档操作 3.1.新增文档 语法&#xff1a; POST /索引库名/_doc/文档id {"字段1": "值1","字段2": "值2"…

AUTOSAR CP标准的RTE和BSW各模块的设计及开发工作

AUTOSAR&#xff08;Automotive Open System Architecture&#xff09;是一种开放的汽车电子系统架构标准&#xff0c;旨在提供一种统一的软件架构&#xff0c;以实现汽车电子系统的模块化和可重用性。 AUTOSAR标准中的两个重要模块是RTE&#xff08;Runtime Environment&…

YOLOV5/V7动态多Batch推理,GPU预处理、后处理C++源码

YOLO系列多batch处理后处理代码&#xff0c;C代码&#xff0c;结构清晰&#xff0c;自己后期会继续发布真实场景项目&#xff1b;关注公众号欢迎下载。 一、获取链接 所有源码获取方法&#xff0c;链接&#xff1a;https://www.cnblogs.com/shenduxuexizahuopu/p/17538815.htm…

【LeetCode】HOT 100(22)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

【Python】Python实现串口通信(Python+Stm32)

&#x1f389;欢迎来到Python专栏~Python实现串口通信 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;Python学习专栏 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望…

在linux中安装HAProxy

使用xfrp将压缩包上传到linux的opt目录下 1.解压HAProxy安装包 tar -zxvf haproxy-1.8.12.tar.gz 2. 查看点钱的内核及版本: uname -r 3. 根据内核版本选择编译参数 cd haproxy-1.8.12 cat README 4. 编译安装HAProxy make TARGETlinux2628 ARCHx86_64 PREFIX/usr/local…

测试,写用例!真有必要?

今天的文章是想跟所有小伙伴讨论软件测试工作中必不可少的一项工作&#xff1a;写测试用例&#xff0c;但目前还有很多公司并不重视写测试用例&#xff0c;觉得写测试用例是浪费时间&#xff0c;还不如拿这些时间来执行测试&#xff0c;那我们真的有必要写测试用例么&#xff1…

算法与数据结构-递归

文章目录 什么是递归递归需要满足的三个条件递归可能存在的问题堆栈溢出重复计算 总结 什么是递归 递归是一种直接或者间接调用自身函数或者方法的算法&#xff08;或者编程技巧&#xff09;&#xff0c;应用非常广泛。我们举个例子来说明什么是递归&#xff1a; 推荐注册返佣金…

join的作用【A中调用B.join表示 B先完成后A再继续】【b.join 表示b先完成】

★ 2.5 等待一个线程-join() ★★★A中调用B.join表示 B先完成后A再继续 有时&#xff0c;我们需要等待一个线程完成它的工作后&#xff0c;才能进行自己的下一步工作。例如&#xff0c;张三只有等李四转账成功&#xff0c;才决定是否存钱&#xff0c;这时我们需要一个方法明确…

maya粒子碰撞(碰撞几何体索引)

全部下滑了 nParticleShape1.rgbPP<<1,0,0>>; 碰撞层 int $yase nParticleShape1.collisionGeometryIndex; if ($yase 0 ) nParticleShape1.rgbPP<<0,1,0>>; int $yase nParticleShape1.collisionGeometryIndex; if ($yase 0 ) nParticleShape1.…

【Linux】网络基础和网络套接字的概念

文章目录 前言一、网络的发展及其网络中的概念总结 一、网络的发展及其网络中的概念 刚开始的计算机大多处于独立模式&#xff0c;也就是说计算机之间相互独立。等到网络出现的时候就出现了网络互联&#xff0c;多台计算机连接在一起完成数据共享。随着发展计算机越多越多就出…

选购云主机

目录 一、购买云主机 二、SSH连接云主机 三、在云主机上面开放端口 一、购买云主机 云服务商有很多&#xff0c;但是我推荐大家使用腾讯云。之前我讲过阿里云超卖的事情&#xff0c;云主机IO性能非常差劲&#xff0c;我们要在云主机上面安装MySQL、MongoDB这样的数据库&…

TortoiseGit 入门指南01:环境搭建和软件设置

在我的博文Keil MDK环境下Git入门指南的最后&#xff0c;我这样写道&#xff1a; 目前使用 TortoiseGit 管理工程&#xff0c;用 Gitee 作为远程仓库。 命令行 Git 已经不再使用。 当时我并没有介绍软件 TortoiseGit 的使用方法&#xff0c;这个系列补上。如果你还没有看过《Ke…

Linux开发工具【gcc/g++】

Linux开发工具之【gcc/g】 上文我们已经学习了vim编辑器的相关操作和使用&#xff0c;已经可以在Linux下编写代码了&#xff0c;有了代码就需要编译运行&#xff0c;此时就需要用到Linux中的编译工具gcc/g了&#xff0c;其中gcc是C语言的编译器&#xff0c;g是C的编译器&#…

RabbitMQ系列(29)--RabbitMQ搭建Shovel

前言&#xff1a; Federation具备的数据转发功能类似&#xff0c;Shovel能够可靠、持续地从一个Broker中的队列(作为源端&#xff0c;即source)拉取数据并转发至另一个Broker中的交换器(作为目的端&#xff0c;即destination)。作为源端的队列和作为目的端的交换器可以同时位于…

SGM58031与单片机驱动实现

SGM58031与单片机驱动实现 文章目录 SGM58031与单片机驱动实现CUBEIDE设置I2C通讯封装SGM58031通讯实现 CUBEIDE设置 使用硬件I2C与sgm芯片通讯&#xff0c;上面即配置硬件I2C,其他参数默认即可。 I2C通讯封装 封装实现 /*** brief Manages error callback by re-initializ…

【JVM调优】JVM调优工具之Arthas

Arthas的作用 Arthas是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#x…

【Elasticsearch】索引库操作

目录 2.索引库操作 2.1.mapping映射属性 2.2.索引库的CRUD 2.2.1.创建索引库和映射 基本语法&#xff1a; 示例&#xff1a; 2.2.2.查询索引库 2.2.3.修改索引库 2.2.4.删除索引库 2.2.5.总结 2.索引库操作 索引库就类似数据库表&#xff0c;mapping映射就类似表的…