当前位置: 首页 > news >正文

第一篇 逻辑门(与门、或门、非门、异或门)

一、实验目的

  1. 了解DE1-SOC开发板一些外设。

  2. 掌握常用组合逻辑门电路的基本原理。

  3. 学习Verilog HDL的基本语法。

  4. 学习使用ModelSim工具对设计的电路进行仿真,包括编写Testbench仿真代码,以及ModelSim工具的使用。

  5. 熟悉使用Quartus软件从创建Quartus工程到最终配置FPGA并观察实验现象的流程。

二、逻辑门电路介绍

逻辑门电路是数字电路中最基本的单元电路,是构成各种逻辑功能电路的基本电路。常用的逻辑门电路在逻辑功能上有与门、或门、非门、与非门、或非门、异或门。本实验主要介绍其中的与门、或门、非门和异或门。

1. 与门

与门又称逻辑与电路,是执行与运算的基本逻辑门电路,有多个输入端,一个输出端。当所有的输入同时为高电平(逻辑1)时,输出才为高电平,否则输出为低电平(逻辑0)。

如下表1.1所示为二输入与门的真值表。

表1.1 二输入与门真值表 ​

输入A输入B输出S
000
010
100
111

下图所示为二输入与门逻辑符号。

image-20210629111458092

以上二输入与门用逻辑运算表达式可表示为S = A&B,用Verilog HDL描述该与门的代码语句为:

assign S = A & B;

2. 或门

或门又称逻辑或电路。如果几个条件中,只要有一个条件得到满足,某事件就会发生,这种关系叫做或逻辑关系。或门有多个输入端,一个输出端,只要输入中有一个为高电平时(逻辑1),输出就为高电平(逻辑1);只有当所有的输入全为低电平(逻辑0)时,输出才为低电平(逻辑0)。

如下表1.2所示为二输入或门的真值表。

表1.2 二输入或门真值表 ​

输入A输入B输出S
000
011
101
111

下图所示为二输入或门逻辑符号。

image-20210629111642275

以上二输入或门用逻辑运算表达式可表示为S = A + B,用Verilog HDL描述该或门的代码语句为:

assign S = A | B;

3. 非门

非门实现逻辑代数非的功能,即输出始终和输入保持相反。当输入端为高电平(逻辑1)时,输出端为低电平(逻辑0);反之,当输入端为低电平(逻辑0)时,输出端则为高电平(逻辑1)。

如下表1.3所示为非门的真值表。

表1.3 非门真值表 ​

输入A输出S
01
10

下图所示为非门逻辑符号。

image-20210629111744098

非门用逻辑运算表达式可表示为S= ~A,用Verilog HDL描述该非门的代码语句为:

assign S = ~ A;

4. 异或门

异或门是数字逻辑中实现逻辑异或的逻辑门,有多个输入端、一个输出端。若输入端的电平不同,则输出为高电平1;若输入端的电平都相同,则输出为低电平0。

如下表1.4所示为二输入异或门的真值表。

表1.4 异或门真值表​

输入A输入B输出S
000
011
101
110

下图所示为二输入异或门逻辑符号。

image-20210629111910724.png

以上二输入异或门用逻辑运算表达式可表示为S = A xor B ,用Verilog HDL描述该异或门的代码语句为:

assign S = A ^ B;

也可以用以下代码语句表示:

assign S = (~A & B) | (A & ~B);

三、逻辑门实验任务

设计并实现二输入与门、或门、异或门以及非门电路,两个操作数用DE1-SOC的滑动开关控制,并将该四个门电路的输出结果显示在DE1-SOC开发板的4个LED上,通过操作SW滑动开关观察LED相应的变化来验证所设计电路的正确性。

1. 硬件介绍

滑动开关

如下图所示,DE1-SOC开发板上有10个滑动开关,可在电路中用作电平触发的数据输入。每个滑动开关都连接到Cyclone V FPGA对应的一个引脚,当某个滑动开关拨到向上(up)的位置时,会产生一个高电平到FPGA;当拨到向下(down)的位置时,会产生一个低电平到FPGA。

img

LED

如下图所示,DE1-SOC开发板上有10个红色LED。每个LED连接到Cyclone V FPGA对应的一个引脚,将这些引脚输出设置为高电平1即可点亮对应的LED,反之设置低电平0$即可使对应的LED熄灭。

img

2. 设计思路

本实验所实现的电路,包含了与门、或门、非门以及异或门。与门、或门以及异或门的输入为ab,而输出分别为s0s1s2。非门的输入为a,输出为s3。在DE1-SOC实现该电路时,将SW[0]SW[1]作为输入ab,将LEDR[3]~LEDR[0]作为输出s3~s0

img

如下图举例显示了该逻辑门电路的波形图。

image-20210709160125235

四、逻辑门电路设计

1. 创建一个新Quartus工程

(1) 点击电脑右下角的开始菜单找到Quartus软件,双击Quartus (Quartus Prime 17.1)打开Quartus Prime软件。

img

点击菜单File-->New Project Wizard弹出工程创建的对话框。

img

(2)在弹出的对话框中点击Next。

img

(3)在您的DE1-SOC 工作文件夹下创建一个lab1的文件夹,并将工程路径指向该文件夹,且工程的名称也命名lab1。

img

(4)连续点击3次Next得到如下界面,通过器件过滤器筛选选中DE1-SoC的Cyclone V 5CSEMA5F31C6器件。

img

(5)点击Next两次后得到工程的生成报告窗口,检查无误后点击Finish完成工程创建。

img

img

(6)点击Quartus菜单File——New新建一个.v文件。

img

(7)选择Verilog HDL File,然后点击OK完成top文件.v文件的创建。

img

(8)在新建的空白.v文件敲入如下Verilog代码,然后点击保存,文件名保持默认的logic_gates.v即可。

module logic_gates( //模块开头以module开始,模块命名为logic_gates
input a, //1位数据输入信号a
input b, //1位数据输入信号b
output s0, //1位输出信号s0
output s1, //1位输出信号s1
output s2, //1位输出信号s2
output s3 //1位输出信号s3
);
​
assign s0 = a & b; //将与逻辑运算结果赋值给输出信号s0
assign s1 = a | b; //将或逻辑运算结果赋值给输出信号s1
assign s2 = ~ a; //将非逻辑运算结果赋值给输出信号s2
assign s3 = a ^ b; //将异或逻辑运算结果赋值给输出信号s3
​
endmodule //模块以endmodule结束

img

(9)点击Quartus软件工具栏的Processing --> Start --> Start Analysis & Synthesis或点击

image-20210603145513555

按钮对Verilog HDL代码执行语法检查和综合,该过程成功完成之后在Quartus软件窗口的Tasks页面中,Analysis & Synthesis旁边将显示一个绿色勾型标记,如下图所示。如果在该过程中提示有错误,请检查Verilog HDL代码语法,确保与上述代码块完全一致。

img

2. 对电路进行仿真

对Verilog HDL代码进行语法分析与综合确认无误之后,就可以对设计进行功能仿真(也称之为前仿真)了,这个操作是为了验证电路逻辑功能是否符合设计要求。通过功能仿真可以及时发现设计中的错误,在系统设计前期即可完成修改,提高设计可靠性。

(1) 点击Quartus软件工具栏的File --> New --> Verilog HDL File,点击OK,这样就新建了一个空白Verilog HDL文件,再点击File --> Save As ...保存,命名为logic_gates_tb.v。然后将如下仿真代码保存到logic_gates_tb.v文件中。

`timescale 1ns/1ps
​
module logic_gates_tb;  //定义逻辑门测试仿真模块,包含输入信号a,b以及输出信号s0,s1,s2,s3reg        a;reg        b;wire    s0;wire    s1;wire    s2;wire    s3; logic_gates logic_gates_inst(    //例化逻辑门模块
​.a    (a),.b    (b),.s0    (s0),.s1    (s1),      .s2    (s2),     .s3    (s3)
);
​initial begin                      //设置输入信号a,b的四种不同输入组合// a = 1'b0;b = 1'b0;# 20;// a = 1'b0;b = 1'b1;# 20;//a = 1'b1;b = 1'b0;# 20;//a = 1'b1;b = 1'b1;# 20;end
​
endmodule

img

(2)要先将Modelsim 的安装路径设置一下,然后Quartus系统才可以自动调用指定的仿真工具。依次点击Quartus菜单Tools——Options...

img

将仿真工具路径指定到...intelFPGA_lite\17.1\modelsim_ase\win32aloem。

img

(3)点击Quartus软件工具栏的Assignments --> Settings,在弹出的Settings窗口中,选中Simulation栏,Tool name选择ModelSim-Altera,设置Quartus自动调用ModelSim。然后选择添加Test Bench文件。

img

img

img

img

点击Add和OK后,再点击OK、Aplly和OK完成仿真工具和仿真文件的设置。

img

(4)击Quartus软件工具栏的Tools --> Run Simulation Tool --> RTL Simulation启动ModelSim仿真。

img

(5)点击Wave选项卡切换到仿真波形窗口此时还看不到完整的仿真波形,可以通过点击下图所示的Zoom Full按钮来显示完整的波形。

img

img

img

从上面波形图可以看出:

a. 当输入a=0,b=0时,四个输出分别为s0=0,s1=0,s2=1,s3=0;

b. 当输入a=0,b=1时,四个输出分别为s0=0,s1=1,s2=1,s3=1;

c. 当输入a=1,b=0时,四个输出分别为s0=0,s1=1,s2=0,s3=1;

d. 当输入a=1,b=1时,四个输出分别为s0=1,s1=1,s2=0,s3=0。

结果与预期一致,说明本实验要求的逻辑门电路已实现。

3. 引脚分配和全编译

一般功能仿真也可以跳过不做,在分析和综合的步骤完成以后,就可以进行FPGA引脚分配了。点击Assignments——Pin Planner弹出引脚分配窗口,按照DE1-SOC 用户手册或者电路图进行引脚分配。

img

img

关于引脚分配信息可以查看DE1-SoC_v.5.1.3_HWrevF.revG_SystemCD\UserManual\DE1-SoC_User_manual.pdf第 25、26页或者E:\CD_Package\01-DE1-SoC\DE1-SoC_v.5.1.3_HWrevF.revG_SystemCD\Schematic\DE1-SoC.pdf的第3页。

这里,a和b两个操作数可以通过拨码开关SW0、SW1来控制,s0到s3信号分别输出到LEDR0到LEDR3。

img

img

img

关闭Pin Planner窗口,点击如下按钮进行工程的全编译。

img

如果编译成功,Quartus窗口右下角会显示100%,同时会在...lab1\output_files文件夹下生成一个logic_gates.sof文件。

img

4. 下板测试

(1)将DE1-SOC开发板和电脑用板子自带的白色USB type B 线缆连接起来。给DE1-SOC插上电源并按SW11按键进行开机。

img

(2)打开Quartus的Programmer工具,点击Hardware Setup,选择DE-SOC[USB-1]端口。

img

img

(3)点击Auto Detect,选择DE1-SOC对应的FPGA器件5CSEMA5。

img

img

(4)这时会出现两个器件(5CSEMA5和SOCHPS),右击器件5CSEMA5,选择Change File...,然后选择...\lab1\output_files路径下的logic_gates.sof文件。

img

(5) 然后勾选Program/Configure复选框,点击Start按钮开始配置FPGA。

img

进度条显示100%代表FPGA 配置成功。

img

(6)拨动SW0和SW1观察LEDR0-3的现象。

SW1、SW0分别为00:

img

SW1、SW0分别为01:

img

SW1、SW0分别为10:

img

SW1、SW0分别为11:

img

相关文章:

第一篇 逻辑门(与门、或门、非门、异或门)

一、实验目的 了解DE1-SOC开发板一些外设。 掌握常用组合逻辑门电路的基本原理。 学习Verilog HDL的基本语法。 学习使用ModelSim工具对设计的电路进行仿真,包括编写Testbench仿真代码,以及ModelSim工具的使用。 熟悉使用Quartus软件从创建Quartus工…...

车牌号码智能监测识别摄像机

车牌号码智能监测识别摄像机是一项革命性的技术,为交通管理和安全提供了全新的解决方案。这种摄像机利用先进的人工智能和图像识别技术,能够实时监测道路上的车辆,并准确识别车辆的车牌号码,为交通管理和安全提供了强有力的支持。…...

Python局部变量:深入探索与实战应用

Python局部变量:深入探索与实战应用 在Python编程中,局部变量是一个至关重要的概念。它们被定义在函数或方法内部,并且只在定义它们的那个特定的代码块中可见。然而,局部变量的使用并不总是那么简单明了,尤其是当涉及…...

Java面试八股之怎么降低锁竞争

怎么降低锁竞争 减少锁的持有时间: 尽量缩短线程持有锁的时间,只在必要时才获取锁,一旦操作完成立即释放锁。可以通过将同步代码块的范围缩小到最小必要程度来实现,避免在锁保护的代码块中执行耗时操作或等待操作,比如…...

数组的操作方法

数组的操作方法 forEach 循环 数组的私有方法 7个内置操作方法 1.push 尾部添加 2.pop 尾部删除 3.shift 头部删除 4.unshift 头部添加 5.splice 删除 替换 插入(本质是删除 返回的是删除的元素组成的数组[因为可以删除多个…...

RK3588 Android13添加开机logo或开机动画

wzhlenkeng-HP-Pro-Tower-ZHAN-99-G9-Desktop-PC:/media/extern_sda/wzh/rk3588_android/device/rockchip/rk3588$ git show commit e8da2099dccfed7f7b348c2e324d9c3d3e555d39 (HEAD) Author: wzh <wuzenghonglenkeng.com> Date: Tue Jun 4 09:53:48 2024 0800添加开…...

JVM学习-监控工具(一)

使用数据说明问题&#xff0c;使用知识分析问题&#xff0c;使用工具处理问题 无监控&#xff0c;不调优&#xff01; 命令行工具 在JDK安装目录下&#xff0c;可以查看到相应的命令行工具&#xff0c;如下图 jps(Java Process Status) 显示指定系统内所有的Hotpot虚拟机…...

基础—SQL—DQL(数据查询语言)分页查询

一、引言 上一篇博客学习了排序查询&#xff0c;这次来讲查询的最后一个部分&#xff1a;分页查询。 涉及到的关键字是&#xff1a;LIMIT 。 二、DQL—分页查询 对于分页&#xff0c;不管以后做的是传统的管理系统还是做互联网的项目&#xff0c;基本上都会遇到分页查询的操…...

独立开发者通过这100种方式赚钱

独立开发者可以通过多种方式赚钱&#xff1a; 销售游戏&#xff1a;独立开发者可以通过 Steam、Itch.io 和 App Store 等平台直接向消费者销售他们的游戏。 他们还可以在自己的网站上出售游戏的实体副本或数字下载。 提供游戏内购买&#xff1a;一些游戏包括微交易或游戏内购…...

gitlab服务器迁移(亲测有效)

描述&#xff1a;最近公司迁移gitlab&#xff0c;我没有迁移过&#xff0c;经过网上查找资料最终完成迁移&#xff0c;途中也遇到挺多坑和两个问题&#xff0c;希望能帮到你。 新服务器安装gitlab 注意&#xff1a;新服务器gitlab版本也需要和旧版本一致。 首先查看原Gitlab…...

【刷题(12)】图论

一、图论问题基础 在 LeetCode 中&#xff0c;「岛屿问题」是一个系列系列问题&#xff0c;比如&#xff1a; 岛屿数量 &#xff08;Easy&#xff09;岛屿的周长 &#xff08;Easy&#xff09;岛屿的最大面积 &#xff08;Medium&#xff09;最大人工岛 &#xff08;Hard&…...

FASTGPT:可视化开发、运营和使用的AI原生应用

近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;AI的应用逐渐渗透到各行各业。作为一种全新的开发模式&#xff0c;AI原生应用正逐步成为行业的焦点。在这方面&#xff0c;FASTGPT无疑是一款颇具代表性的产品。本文将详细介绍FASTGPT的设…...

代码随想录-Day27

39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重…...

TalkingData数据统计:洞察数字世界的关键工具

TalkingData数据统计&#xff1a;洞察数字世界的关键工具 在数字化时代&#xff0c;数据已成为推动社会进步和商业决策的核心动力。TalkingData作为国内领先的移动数据服务平台&#xff0c;为众多企业提供了全面、精准的数据统计服务。本文将深入探讨TalkingData数据统计的应用…...

printf 一次性写

PWN里printf漏洞感觉很小&#xff0c;可发现居然理解的不全。 一般情况下&#xff0c;当buf不在栈内时&#xff0c;就不能直接写指针。这时候需要用到rbp链或者argv链。一般操作是第一次改指针&#xff0c;第二次改数值。 DAS昨天这里只给了一次机会然后就exit了。今天ckyen给…...

【Axure高保真原型】切换查看大图列表

今天和大家分享切换查看大图列表的原型模板&#xff0c;我们可以点击列表里的图片查看对应的大图&#xff0c;点击左右箭头可以切换切换上一页或下一页&#xff0c;如果是首页会自动禁用左箭头&#xff0c;末尾页会自动禁用右箭头。这个原型模板是用中继器制作的&#xff0c;所…...

Ant-Design-Vue动态表头并填充数据

Ant-Design-Vue动态表头并填充数据 Ant-Design-Vue 是一个基于 Vue.js 的前端UI框架&#xff0c;它继承了 Ant Design 的优秀设计理念&#xff0c;并针对 Vue.js 进行了深度优化。在实际开发过程中&#xff0c;我们经常需要处理各种复杂的表格数据&#xff0c;而 Ant-Design-V…...

Python-匿名函数

一、概念 匿名函数造出来的是一个内存地址&#xff0c;且内存地址没有绑定任何名字&#xff0c;很快被当做垃圾清理掉。所以匿名函数只需要临时调用一次&#xff0c;而有名函数永久使用&#xff1b; 匿名函数一般和其他函数配合使用&#xff1b; # 有名函数def func(x, y):…...

探索Web3工具:正确使用区块链平台工具的秘诀

在当今日新月异的数字时代&#xff0c;区块链技术正以惊人的速度改变着我们的生活和工作方式。尤其对于那些想要踏入区块链世界的人来说&#xff0c;正确使用区块链平台工具至关重要。本文将向您介绍一些关键的Web3工具&#xff0c;并以TestnetX.com为例&#xff0c;展示如何利…...

器利而事善——datagrip 的安装以及连接mysql

一&#xff0c;安装 下载&#xff1a;直接到官网下载即可&#xff0c; 破解&#xff1a;这是破解连接&#xff1a;https://pan.baidu.com/s/11BgOMp4Z9ddBrXwCVhwBng &#xff0c;提取码&#xff1a;abcd&#xff1b; 下载后&#xff0c;选择倒数第三个文件&#xff0c;打开da…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...