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

本文详细介绍了使用Vivado2015.4进行VerilogHDL设计的过程,包括创建项目、添加源代码、仿真、综合、管脚分配、实现和下载到MINISYS-1开发板。同时,讲解了可配置输入端口数和数据宽度的与门IP核设计,包括模块创建、仿真、综合和封装。实验中解决了运行冲突、波形显示和硬件加载问题,并提供了8位全加器的VerilogHDL实现及仿真。
摘要由CSDN通过智能技术生成

一、实验目的

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按钮
    ——完成封装,点击路径查看
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MorleyOlsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值