FPGA编程入门——基于Quartus件完成一个1位全加器的设计

  1. 基于Quartus件完成一个1位全加器的设计,分别采用:1)原理图输入 以及 2)Verilog编程 这两种设计方法。开发板基于Intel DE2-115。

  1. 在此基础上,用原理图以及Verilog 编程两种方式,完成4位全加器的设计,对比二者生成的 RTL差别;使用modelsim验证逻辑设计的正确性,并在DE2-115开发板上实际验证。

1位全加器可以用两个半加器及一个或门连接而成, 因此需要先完成半加器的设计。 下面将给出使用原理图输入的方法进行底层元件设计和层次化设计的主要步骤。

一,半加器设计

一,建立工程,

  1. 创建工程过程(

启动 Quartus II 软件,选择File->New Project Wizard,在出现的界面下先Next,填写工程的路径和名称,然后接着Next,直到出现下面界面并进行相应操作。接着一路Next,直到Finish,完成工程的创建。

  1. 此时界面上会出现顶层文件名和项目名:

  1. 绘制过程实现

首先选择File->New,进入后选择Block Diagram/Schematic File

选择元件

添加输入输出,完成效果

保存文件,并且编译

选择菜单File——Save As,选择刚才建好的目录,F/fpag/halfadder/bdf,将已设计好的原理图文件取名为:halfadder.bdf(注 意默认的后缀是.bdf),并存盘在此文件夹内.

点击编译

发现没有问题

通过tool->Netlist Viewers->RTL Viewer,查看电路图

  1. 为了构成全加器的项层设计,必预将以上设计的半加器half_adder.bdf设置成可调用的元件。方法图所示,在打开半加器原理图文件half_adder1.bdf的情况下,选择菜中File中Create/Update→Create Symbol Files forCurrent File项,即可将当前文件h_adder. bdf变成一仿真实现

使用完全相同的方法也可以将VHDL文本文件变成原理图中的一个元件 符号,实现VHDL文本设计与原理图的混合输入设计方法。转换中需要注意以 下两点: 〔1)转换好的元件必须存在当前工程的路径文件夹中; (2)该方法只能针对被打开的当前文件。

5.仿真实现

创建一个向量波形文件,选择菜单项 File→New->VWF

添加信号

最后点击ok

编辑信号

仿真。先保存文件为“Halfadder.vwf”,点击工具栏上功能仿 真按钮 ,完成后会自动跳出仿真后的文件。如图。从该图中可以分析半加器的逻 辑关系是否正确 。

功能仿真结果

时序仿真结果

至此完成半加速设计。

二,全加器设计

首用半加器元件实现全加器

先选择File->New,进入后选择Block Diagram/Schematic File

选择元件

与调入元件的方法一样,即在新打开的原理图编辑窗双击鼠标,在弹出 的“symbol”窗的“name”栏输入底层文件半加器的存储名“halfadder” 调出半加器,如图

再调出其他需要的元件,连接好全加器的电路图。 以full_project1.bdf名将此全加器设计存在同一路径F/Fpga的文件夹中。

将设计项目设置成顶层文件并编译仿真,保存文件并且改名为fulladder。

将顶层文件fuddler.bdf设置为顶层文件的方法:project t→set astop_level entity。 如图:

通过tool->Netlist Viewers->RTL Viewer,查看电路图

实现仿真

创建一个向量波形文件,选择菜单项 File→New->VWF

编辑信号

进行仿真配置,选择tool->launch simulation library complier

功能仿真结果

时许仿真结果

三,verilog实现一位半加速的实现

  1. 创建Verilog文件

  1. 代码实现

module Fulladder
(input    a,b,output    sum,output     cout,input     cin
);
assign{cout,sum} = a+b+cin;
endmodule

保存并编译文件

通过tool->Netlist Viewers->RTL Viewer,查看电路图

3.写入仿真代码

`timescale 1ns/1ns
module TB_FUlladder();    // 设置仿真引脚reg     tb_a       ;reg     tb_b       ;reg     tb_cin     ;wire    tb_sout    ;wire    tb_cout    ;FUlladderu_FUlladder(  // 绑定引脚,绑定仿真文件与源代码文件中对应的引脚.a      (tb_a)      ,.b      (tb_b)      ,.cin    (tb_cin)    ,.cout   (tb_cout)   ,.sum    (tb_sout));parameter CYCLE = 40;   // 设置周期always  # 5     tb_a    =   ~tb_a   ;   // 设置输入变量always  # 10    tb_b    =   ~tb_b   ;always  # 20    tb_cin  =   ~tb_cin ;initial begin       // 初始化变量tb_a        =       1'b0    ;tb_b        =       1'b0    ;tb_cin      =       1'b0    ;#(CYCLE * 4)                ;   // 设置到达指定周期停止$stop                       ;end
endmodule

然后我们选择进行完整编译,编译成功后,我们在进行仿真之前,我们需要绑定仿真文件,下面给出完整步骤:

成功添加 testbench 仿真文件之后重新编译,然后就可以进行仿真了:

我们可以先点击运行,然后点击右面的缩放,最后我们只需要缩放到自己需要的大小即可,我们仿真后生成的波形如下:

三、Verilog实现1位加法器

1.创建Verilog文件

  1. 代码实现

module full_adder(//输入信号,ain表示被加数,bin表示加数,cin表示低位向高位的进位input ain,bin,cin,//输出信号,cout表示向高位的进位,sum表示本位的相加和output reg cout,sum);
reg s1,s2,s3;
always @(ain or bin or cin) beginsum=(ain^bin)^cin;//本位和输出表达式s1=ain&cin;s2=bin&cin;s3=ain&bin;cout=(s1|s2)|s3;//高位进位输出表达式
end
endmodule

保存并编译文件

通过tool->Netlist Viewers->RTL Viewer,查看电路图

3.

仿真实现

创建一个向量波形文件,选择菜单项 File→New->VWF

添加信号

编辑信号

保存文件并启动功能仿真,出现错误,进行仿真配置,选择tool->launch simulation library complier功能仿真结果

时序仿真结果

通过仿真结果,可以发现得到的结果与真值表中是相吻合的。

四,下载测试

芯片引脚配置表

(一)输入原理图

1.

将设计项目设置为顶层文件

选中对应的设计文件

2.配置引脚

使用3个SW作为输入信号,2个LED作为输出信号

原理如下

下载

结果效果
通过拨动SW,观察LED的亮灭的效果,发现SW开表示1,关表示0,LED亮表示1,灭表示0。最终,验证的结果为跟其真值表相吻合。

(二)Verilog代码

  1. 配置引脚
    使用3个SW作为输入信号,2个LED作为输出信号

  1. 下载

  1. 结果效果
    通过拨动SW,观察LED的亮灭的效果,发现SW开表示1,关表示0,LED亮表示1,灭表示0。最终,验证的结果为跟其真值表相吻合。

1位全加器的实现完成后,可以根据多个1位全加器的级联实现多位全加器。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛保研 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于CNN实现谣言检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐&am…

SQL---Zeppeline前驱记录与后驱记录查询

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…

Latex生成的PDF中加入书签/Navigation/导航

本文参考:【Latex学习】在生成pdf中加入书签/目录/提纲_latex 书签-CSDN博客 (这篇文章写的真的太棒了!非常推荐) 题外话,我的碎碎念,这也是我如何提高搜索能力的办法:想在Latex生成的PDF中加入…

Java代码审计Mybatis注入文件上传下载读取(非常详细!!)

目录 0x00 前言 0x01 Mybatis注入审计 - 若依(Ruoyi)后台管理系统 4.6.0 1、项目介绍与部署 - Ruoyi 2、若依 Ruoyi - Mybatis注入 - 代码审计 3、代审常搜词 - Java SQL 注入 0x02 文件上传漏洞审计 - Inxedu && Tmall 1、项目介绍与部署…

大规模采用奇点临近?Web3应用爆发离不开这个“支撑”赛道

作者|Jason Jiang 数据是当今世界最具价值的资源,也是数字掘金的必争之地。尽管Web3迄今仍有诸多争议,但随着铭文、Gamefi、DeFi等链上生态的多样化发展,我们正身处Web3应用爆发的洪流之中,区块链数据赛道也因此备受关…

Qt 多线程用法

文章目录 开发平台QThread 类 moveToThreadQtConcurrent::run QFutureWatcherQThreadPool QRunnable 开发平台 项目说明OSwin10 x64Qt6.6compilermsvc2022构建工具cmake QThread 类 moveToThread 写一个简单的例子吧,比较容易理解,方便入门. 也可以看出这种方式,对于线程…

基于SSM框架的二手房中介管理系统+vue论文

摘 要 如今社会上各行各业,都在用属于自己专用的软件来进行工作,互联网发展到这个时候,人们已经发现离不开了互联网。互联网的发展,离不开一些新的技术,而新技术的产生往往是为了解决现有问题而产生的。针对于二手房信…

达梦到达梦的外部链接dblink(DM-DM DBLINK)

一. 使用场景: 部链接对象(LINK)是 DM 中的一种特殊的数据库实体对象,它记录了远程数据库的连接和路径信息,用于建立与远程数据的联系。通过多台数据库主库间的相互通讯,用户可以透明地操作远程数据库的数…

25年老品牌 美好蕴育润康守护孕期妈妈的健康之路

孕期是每一位女性人生中最为特殊的阶段。每一位妈妈都期待着健康、快乐的度过每一天。然而,随着孕周的增加,孕期的不适和困扰也随之而来。孕吐、腰酸背痛、便秘等孕期症状让许多妈妈倍感疲惫和焦虑。在这个关键时刻,美好蕴育润康作为25年的老…

JSON Web Token JWT几种简单的绕过方法

JWT结构 JSON Web Token(JWT)是一个非常轻巧的规范。 这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 JWT常被用于前后端分离,可以和Restful API配合使用,常用于构建身份认证机制 如图为JWT加密后的示例&…

万德高科携手航天科技AIRIOT打造智慧能碳管理平台, 助力碳达峰碳中和

“十四五”时期,我国生态文明建设进入了以降碳为重点战略方向、推动减污降碳协同增效、促进经济社会发展全面绿色转型、实现生态环境质量改善由量变到质变的关键时期。“实施数字化赋能行动”,聚焦能源管理、节能降碳、低碳能力等典型场景,推…

【前缀和】【单调栈】LeetCode2281:巫师的总力量和

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调栈 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 作为国王的统治者,你有一支巫师军队听你指挥。 给你一个下标从 0 开始的整数数组 strength &…