Quartus II 之1位全加器

2023-11-14

一、半加器和1位全加器原理

1. 半加器

所谓半加器,是指对两位二进制数实施加法操作的元器件。
二进制半加器的理解比较简单,就是逢2进1,其真值表为如下图:
在这里插入图片描述

2. 1位全加器

全加器只是加多了一个输入,其实原理和半加器是一样的。全加器真值表如下:
在这里插入图片描述

二、实验目的

通过1位全加器的详细设计,掌握原理图输入以及Verilog的两种设计方法。
软件基于quartusII 13.0版本,开发板基于Intel DE2-115。
1位全加器可以用两个半加器及一个或门连接而成, 因此需要先完成半加器的设计。

三、设计半加器

1. 新建项目

  1. file->new Project Wizard 选择项目目录,项目名称,顶层文件

在这里插入图片描述

  1. 选择对应芯片型号
    在这里插入图片描述

  2. 选择仿真
    在这里插入图片描述

  3. next->finsh

2. 创建原理图

  1. file->new-> Block Diagram/Schematic File->OK
    在这里插入图片描述

  2. 点击按纽 Symbol Tool或直接双击原理图空白处
    在这里插入图片描述

  3. 从Symbol窗中选择需要的符号,或者直接在name文本框中键入元件名
    在这里插入图片描述

  4. 分别调入元件and2,xnor和输入输出引脚input和output。并如图用点击拖动的方法连接好电路。输入各引脚名:a、b, co和s。
    在这里插入图片描述

  5. 保存,编译
    在这里插入图片描述

  6. 将设计项目设置成可调用的元件
    为了构成全加器的项层设计,必预将以上设计的半加器half_adder.bdf设置成可调用的元件
    file->Create/Update->Create Symbol Files For Current File
    在这里插入图片描述

3. 半加器仿真

  1. 选择file->new->University Program VWF->OK

在这里插入图片描述

  1. 选择引脚序号依次选择
    在这里插入图片描述

  2. 设置高低电平之后运行
    在这里插入图片描述

  3. 运行会报错
    在这里插入图片描述

  4. 选择Tools->Launch Simulation Library Compiler
    在这里插入图片描述

  5. 选择modelSim安装路径,选择芯片类型,选择库语言,选择输出文件路径
    在这里插入图片描述

  6. 出现0 warnings 说明编译成功

在这里插入图片描述

  1. 再次设置波形,运行,观察波形图
    在这里插入图片描述

四、设计全加器

  1. 新建原理图 full_adder,并设为顶层文件
    在这里插入图片描述

  2. 调用之前设计的半加器元件,以此设计出全加器原理图
    在这里插入图片描述

在这里插入图片描述

  1. 仿真测试
    在这里插入图片描述

五、硬件下载测试

1. 引脚绑定

引脚绑定前先要确定具体硬件电路,即目标芯片与外围电路(输入、输出显
示等)的连接情况。实验室使用的ED2-115开发板,除了核心FPGA芯片外,还自
带一些外围输入输出电路。我们就是利用这些输入输出电路来进行硬件测试。
在这里插入图片描述
如全加器引脚绑定,可以这样设计:开发板上的18个拨码开关选其中三
个,SW0,SW1,SW2分别接ain、bin、cin(开关向上拨和向下拨分别显示输入
是高还是低电平);LED0,LED1分别接co和sum,灯亮表示输出为“1”,灯灭
表示输出为“0”。
硬件设计好后,还需要查引脚图(引脚图见附录)进行引脚绑定。
从 附 录 “ 表 4-1 拨 动 开 关 引 脚 配 置 ” 中 找 到 输 入 的 三 个 开 关
SW0,SW1,SW2,再找到对应的“FPGA引脚号”。如图:

相应的,在附录的表 4-3 中查找到 LED 的引脚配置。
然后在软件中,从菜单中选择“assignments→pin planner”,如图,调出引
脚绑定窗口,然后从下拉窗口中选择相应的输入输出端口,再在“location”栏
填入对应的 FPGA 引脚即可,如图。
在这里插入图片描述

在这里插入图片描述

选定了引脚之后原理图文件一定要再编译一次,才能真正把引脚绑定上。引脚绑定好
并编译过的文件如图
在这里插入图片描述
然后就可以下载到硬件上进行测试了。

2. 下载测试

把开发板接上电源,USB 接口接电脑。打开电源开关(注意不用下载时请一定关闭开
关,以免烧坏板子)。点击软件工具栏上的按钮 ,在这里插入图片描述
则出现下载界面。第一次下载需安装
硬件。即在下载界面中点击按钮“hardware setup…”,然后在弹出的对话框中选择“USB
blaster”,再点击“ok”,则硬件被安装上。
在这里插入图片描述

安装好硬件的界面如图。然后在下载的.sof 文件后面的复选框中打勾,再点击”start”,
当进度条达到 100%时,即下载成功,可以进行硬件观测
在这里插入图片描述

结果验证
请添加图片描述

ain bin cin sum cout
1 1 1 1 1

六、Verilog语言设计

  1. file->new->Verilog HDL File->OK
    在这里插入图片描述

  2. 代码:

module full_adder1
(
	input a,     	//加数
	input b,		//被加数
	input c,		//进位输入
	output s,		//结果输出
	output co		//进位输出
);
	assign s = a^b^c;
	assign co = (a&b)|((a^b)&c);
endmodule

  1. file->Create/Upadte->Create Aysbol Files For Current File 生成原理图
    在这里插入图片描述

  2. 选择原理图
    在这里插入图片描述

在这里插入图片描述

  1. 添加输入输出
    在这里插入图片描述

  2. 仿真测试
    在这里插入图片描述

七、总结

通过1位全加器的详细设计,掌握了原理图输入以及Verilog的两种设计方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Quartus II 之1位全加器 的相关文章

  • 为什么这个 verilog 关系语句返回 true?

    我有一条名为 sin hall2 的 9 位签名线 该语句返回 true sin hall2 8 0 gt 9 d1 当我查看模拟时 sin hall2 169 我假设这是 verilog 处理比较负数的方式 但我做错了什么 当我执行 si
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 如何在verilog中逐行读取文本文件?

    我有一个 SREC 文件 它是一个简单的文本文件 我想在 verilog 中逐行读取它 我怎样才能做到这一点 以下读取文件 每个时钟周期 1 行 预期的数据格式是每行一个十进制数 integer data file file handler
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • 如何在RTL中使用时钟门控?

    我正在对一些时钟进行门控latch以及我设计中的逻辑 我在综合和布局布线方面没有太多经验 在 RTL 中实现时钟门控的正确方法是什么 示例1 always comb begin gated clk clk latch update en e
  • 使用 Verilator 和 VPI 读取寄存器数组

    所以我在我的verilog中定义了以下寄存器 reg 31 0 register mem 0 15 verilator public 我的目标是从我的 verilator c 代码中读取存储在其中的 16 个值中的每一个 我发现有关 VPI
  • VHDL - PhysDesignRules:367

    当我尝试从 VHDL 代码合成 实现和生成程序文件时 我收到警告 当我尝试合成时出现此错误 WARNING Xst 647 Input
  • VHDL门控时钟如何避免

    我收到了避免使用门控时钟的建议 因为它可能会导致松弛和时序限制问题 但我想问一下我可以认为什么是门控时钟 例如 此代码对时钟进行门控 因为 StopCount 对它进行门控 process ModuleCLK begin if rising
  • Linux驱动程序DMA传输到PC作为主机的PCIe卡

    我正在开发一个 DMA 例程 将数据从 PC 传输到 PCIe 卡上的 FPGA 我阅读了 DMA API txt 和 LDD3 ch 15 详细信息 但是 我不知道如何从 PC 到 PCIe 卡上的一致 iomem 块进行 DMA 传输
  • 「HDLBits题解」Gates4

    本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接 Gates4 HDLBits module top module input 3 0 in out
  • 在逻辑中使用单端端口期待差异对?

    我使用的逻辑被设置为需要一个差分对时钟端口 然而 对于一个特定的应用程序 我只能输入一个单端时钟 由于硬件限制 修改逻辑以接受单端时钟不是一种选择 因为涉及许多文件和代码行 有没有办法可以输入单端端口并以某种方式将其馈送到模块的差异对端口
  • 模拟器和合成器之间初始化状态机的差异

    我的问题是关于合成状态机中使用的第一个状态 我正在使用莱迪思 iCE40 FPGA 用于仿真的 EDA Playground 和用于综合的莱迪思 Diamond Programmer 在下面的示例中 我生成一系列信号 该示例仅显示引用状态机
  • Verilog 错误:必须连接到结构网络表达式

    我收到错误 output or inout port Qout must be connected to a structural net expression 我评论了下面代码中发生错误的行 代码被修剪 压缩 我搜索了答案 似乎我无法将输
  • 如何在Altera Quartus中生成.rbf文件?

    什么是 rbf 文件以及如何在 Windows 上从 Quartus 输出文件 sof 生成它们 An RBF is a 原始二进制文件例如 它代表原始数据 这些数据将被加载到闪存中 以便在上电时初始化 FPGA A SOF is an S
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • 如何将时钟门映射到技术库单元

    我的设计中有以下时钟门 module my clkgate clko clki ena Clock gating latch triggered on the rising clki edge input clki input ena ou
  • 赋值语句中的“others=>'0'”是什么意思?

    cmd register process rst n clk begin if rst n 0 then cmd r lt others gt 0 elsif clk event and clk 1 then cmd r lt end if
  • 映射 MMIO 区域写回不起作用

    我希望对 PCIe 设备的所有读写请求都由 CPU 缓存进行缓存 然而 它并没有像我预期的那样工作 这些是我对回写 MMIO 区域的假设 对 PCIe 设备的写入仅在缓存回写时发生 TLP 有效负载的大小是缓存块大小 64B 然而 捕获的
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • 具有内部赋值延迟的阻塞和非阻塞语句之间的区别

    以下 2 个 verilog 代码片段有什么区别 1 always in out 5 in AND 2 always in out lt 5 in 考虑到always块中不存在其他行 输出会有什么不同吗 问题参考幻灯片 16 参见 o5 和

随机推荐

  • react滚动到指定位置_react 中 scrollTo 引发的思考

    如何在 React 中实现 scrollTo 效果 之前考虑过用scrollInToView 但是由于这个 API 实现的场景不能控制元素在屏幕上的显示位置遂选择其他出路 scrollTo 当只有一个元素需要直接滚动时 可以在 useEff
  • 一个插件,让你的 ChatGPT 不再报错!

    最近几天 相信大家都发现了 ChatGPT 一个问题 就是官网报错越来越频繁了 当你需用 ChatGPT 来处理一些比较琐碎的任务时 一旦你离开页面时间比较久 再度返回跟它进行对话 就会出现如下报错 虽然这个报错信息也曾有过 但没这么频繁
  • vscode 批量格式化

    今天推荐一个 vscode 批量格式化的扩展 Format Files 这个插件会依次打开需要格式化的文件进行格式化 使用方法很简单 在需要格式的文件夹右键 就可以看到开始格式化的操作 按照步骤进行即可 当然使用的前提 vscode 已经配
  • vue实现侧边栏导航和滚动定位

  • 计算机丢失msvcp90dll怎么办,msvcp90.dll

    msvcp90 dll官方版 msvcp90 dll官方版是电脑系统中不可缺少的dll文件 msvcp90 dll可以解决系统提示 找不到msvcp90 dll 或 msvcp90 dll 或者 msvcp90 dll 等情况 msvcp9
  • Win10家庭中文版开机后弹窗无法登录到你的账户点注销没用(解决过程记录)

    问题 之前一切正常 用完电脑后关机 没有提示有更新 也没更改系统设置 注册表什么的 时隔两天后开机就直接进入了临时账户 并弹窗 无法登录到你的账户 下面提示 通常可以通过从你的账户注销 然后重新登录来解决此问题 如果不立即注销 你创建的任何
  • Ubuntu系统配置花生壳内网穿透

    前言 本文档是基于被访问主机已经安装ssh服务 并且在内网已经确定ssh可用的情况下 做的穿透配置流程 一 被访问主机准备工作 被访问主机上下载花生壳并安装 我的是Ubuntu 1 Ubuntu安装包的下载命令如下 wget https d
  • 宏定义报重载错误

    我写了一个宏定义 define SWAP a b swap a a b b swap 然后在函数中进行引用 for i 1 i lt ma i SWAP covar k i covar j i 在编译过程中出现如下错误 error over
  • [Leetcode] 747. 至少是其他数字两倍的最大数

    题目描述 在一个给定的数组nums中 总是存在一个最大元素 查找数组中的最大元素是否至少是数组中每个其他数字的两倍 如果是 则返回最大元素的索引 否则返回 1 示例 1 输入 nums 3 6 1 0 输出 1 解释 6是最大的整数 对于数
  • FAST CGI的配置

    试着写一点fast cgi 查了一下 中文关于fast cgi的安装发现就一个文章 大家都是抄那个文章 那个文章写的还是不错 就是比较简单 只能指导大概的方法和方向 配置那个地方写的非常粗略 E文有一个文章写的非常详细 地址在这里 如果E文
  • wsl下ubuntu20.04配合clion编译openjdk8并运行

    起因 最近 看synchronized的锁的底层原理 其中有一个涉及底层C 部分的objectMonitor对象 在进一步了解的过程中 以及之前看深入理解java虚拟机中第一部分 自己编译jdk的触发 开始考虑本地编译jdk 在jdk上进行
  • cookie 相关

    https blog csdn net sinat 36594453 article details 88870899
  • Adaptive Execution如何让Spark SQL更高效更好用?

    文章目录 背景 动态设置 Shuffle Partition Spark Shuffle 原理 原有 Shuffle 的问题 自动设置 Shuffle Partition 原理 使用与优化方法 动态调整执行计划 固定执行计划的不足 Sort
  • 网赚项目分享:八条可以在线上做的副业兼职

    我自己就是从副业一路走过来的 从大学时游戏倒卖装备 时装和坐骑赚钱 到后来闲鱼无货源店铺 再到近期把自媒体写作变成主业 我亲身感受到拥有一份副业且不断坚持发展的重要性 小编是反对大家盲目创业 但是 不论你是上班族还是大学生 建议大家接受创业
  • Taylor theorem

    In calculus Taylor s theorem gives an approximation of a k times differentiable function around a given point by a polyn
  • 极客头条贡献者招募:欢迎懂分享的人

    极客头条 人人都是主编 http geek csdn net 发现 分享干货 我们组建了一个极客头条贡献者群 建立这个群 其实目的很明确 就是为了挖掘我们社区中热爱分享的成员 我们可以一块讨论技术 讨论极客头条 讨论社区 我们认为 每个技术
  • ActiveX控件中加载BCB编写的dll的注意事项

    最近写了一个ActiveX控件 使用MFC 控件中添加方法 其中调用BCB编写的一个dll进行读卡器的读卡并且返回卡号给前端页面 前台用JS调用activex控件的方法 测试中发现 BCB写好的dll 在Activex中加载时总是提示缺失相
  • require.js

    一 为什么要用require js 最早的时候 所有Javascript代码都写在一个文件里面 只要加载这一个文件就够了 后来 代码越来越多 一个文件不够了 必须分成多个文件 依次加载 下面的网页代码 相信很多人都见过 这段代码依次加载多个
  • 浅谈TCP滑动窗口机制

    1 浅谈TCP滑动窗口机制 概念 滑动窗口是两台主机间传送数据时的缓冲区 每台TCP IP 主机支持两个滑动窗口 一个用于接收数据 另一个用于发送数据 窗口尺寸表示计算机可能缓冲的数据量大小 2 工作原理 1 滑动窗口工作过程 TCP 协议
  • Quartus II 之1位全加器

    文章目录 一 半加器和1位全加器原理 1 半加器 2 1位全加器 二 实验目的 三 设计半加器 1 新建项目 2 创建原理图 3 半加器仿真 四 设计全加器 五 硬件下载测试 1 引脚绑定 2 下载测试 六 Verilog语言设计 七 总结