FPGA 第6讲 简单组合逻辑多路选择器

时间:2024.11.11-11.14

一、学习内容

1.组合逻辑

       组合逻辑是VerilgHDL设计中一个重要组成部分。从电路本质上讲,组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数,与其他时刻的输入状态无关,无存储电路,也没有反馈电路。

2.多路选择器

       多路选择器是数据选择器的别称。在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也称多路选择器或多路开关。

3. 实验目标
       设计并实现 2 选 1 多路选择器,主要功能是通过选通控制信号 S 确定选通 A 路或 B 路作为信号输出。当选通控制信号 S 为 1 时,信号输出为 A 路信号;当选通控制信号 S 为 0时,信号输出为 B 路信号。

       开发板的按键未按下时为高电平、按下后为低电平;LED 灯则为低电平点亮。

二、实验

1.准备工作

新建文件夹存放工程

2.利用visio绘制和波形图

蓝色的线代表有效信号。

3. 代码编写

在rtl文件夹里新建.v文件进行编写代码

3.1编写代码

方法一:使用always进行组合逻辑的编写,同时使用if-else条件分支语句进行多路选择器的实现
module mux2_1      //模块名称与文件名尽量保持一致
(input   wire    [0:0]  in_1,  //输入信号1input   wire           in_2;  //输入信号2input   wire           sel,   //选通信号output  reg           out     //输出信号);
//用always给变量赋值,()里面是敏感条件,*表示通配符,在此处表示任何一个信号只要有电平变化都要执行这条语句
//此处*相当于sel,in_1,in_2
always@(*)if(sel==1'b1)out = in_1;elseout = in_2;
endmodule

方法二:使用always-case进行代码编写

方法三:使用assign中的三目运算符进行编写代码

3.2实验工程的创建

在Quartus里创建工程,添加.v文件,进行编译,编译成功后进行仿真文件的书写

3.3编写仿真文件

在sim文件夹里创建.v文件,进行仿真文件的编写

`timescale 1ns/1ns
module tb_mux2_1();
//仿真文件就是要对我们被仿真的模块进行一个输入信号的模拟
reg    in_1;
reg    in_2;
reg    sel;
//进行输出信号的命名,将输出信号引出,便于信号的观察
wire   out;
//initial语句上电只执行一次,它的结构一般是initial-begin-end
//在仿真文件中,begin-end之间的内容都是顺序执行的,在没有延时的情况下,几乎没有差别,看上去像并行执行
//在rtl语句中,begin-end相当于括号的作用,在同一个always块中,如果给多个变量赋值,要使用begin-end
initialbeginin_1  <= 1'b0;in_2  <= 1'b0;sel   <= 1'b0;end
//对三个输入信号进行随机数的赋值
//每隔10ns对in_1进行一次赋值,赋值的是一个随机的数(0/1)
always #10 in_1 <= {$random}%2;           //$random随机数的产生,系统函数
always #10 in_2 <= {$random}%2;
always #10 sel  <= {$random}%2;//为了便于观察,需要添加一些系统函数
initialbegin$timeformat(-9,0,"ns",6);   //显示时间格式是ns,10的-9次方,0表示小数点后的位数(精确度)//""里写的内容要和-9处写的对应,6表示打印的最小数字字符是6个$monitor("@time %t:in1=%b in2=%b sel=%b out=%b",$time,in_1,in_2,sel,out);  //监测的系统函数,便于观察end//实例化:在仿真文件中调用我们被仿真的文件
mux2_1    mux2_1_inst  //模块名   实例化名称(如果实例化了多次,可以在实例化名称后面加数字,例如mux2_1_inst3)
(
//此处的.代表连接. in_1(in_1),  //输入信号1. in_2(in_2),  //输入信号2. sel (sel),   //选通信号. out (out)    //输出信号);endmodule

3.4仿真波形验证

添加文件后,在modelsim里面进行仿真波形的验证 

3.5上板验证

引脚约束后,连接开发板,进行上板验证

三、实验结果

 波形图

打印结果

四、知识点和小技巧

1.模块名称与文件名尽量保持一致

2.代码编写规范

输入一定是wire类型;

一位宽可以不写,也可以写成[0:0];

输出可以是wire或reg类型,用always赋值的变量是reg型;

最后一条信号后面不需要加,

*表示通配符;

每个模块只能有一组module和endmodule,所有的模块要在这两个之间进行编写

3.设置时间格式的系统函数$timeformat

$timeformat(-9,0,"ns",6);   //显示时间格式是ns,10的-9次方,0表示小数点后的位数(精确度)//""里写的内容要和-9处写的对应,6表示打印的最小数字字符是6个

4.获取随机数的系统函数$random

//对三个输入信号进行随机数的赋值
//每隔10ns对in_1进行一次赋值,赋值的是一个随机的数(0/1)
always #10 in_1 <= {$random}%2;           //$random随机数的产生,系统函数
always #10 in_2 <= {$random}%2;
always #10 sel  <= {$random}%2;

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

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

相关文章

【C++初阶】C++入门

1、C第一个程序 C是脱胎于C语言的&#xff0c;所以也包含了C语言绝大多数的内容&#xff0c;C兼容C语言绝大多数的语法,在C语言中能实现的程序在C中也是可以执行的&#xff0c;但需要将定义文件代码的后缀改为.cpp 就比如hello world程序 // test.cpp #include<stdio.h&g…

selenium元素定位校验以及遇到的元素操作问题记录

页面元素定位方法及校验 使用比较多的是通过id、class和xpath来对元素进行定位。在定位前可以现在浏览器验证是否可以找到指定的元素。这样就不用每添加一个元素定位都运行代码来检查定位方式表达式是否正确。 使用XPATH定位 在浏览器F12&#xff0c;找到元素&#xff0c;在元…

网络安全之国际主流网络安全架构模型

目前&#xff0c;国际主流的网络安全架构模型主要有&#xff1a; ● 信息技术咨询公司Gartner的ASA&#xff08;Adaptive Security Architecture自适应安全架构&#xff09; ● 美国政府资助的非营利研究机构MITRE的ATT&CK&#xff08;Adversarial Tactics Techniques &…

十一:HTTP 状态码详解:解读每一个响应背后的意义

HTTP(超文本传输协议)是网络通信的基石之一,主要用于客户端(例如浏览器)和服务器之间的通信。为了让服务器能准确地向客户端反馈请求的处理状态,HTTP设计了一套标准的状态码。每一个状态码代表了特定的含义,指示了请求的状态、潜在的问题或成功的信息。 1. 信息响应 (1…

【星海随笔】分布式管理Zookeeper

高可用集群 地址&#xff1a;https://archive.apache.org/dist/zookeeper TPS既每秒系统吞吐量 QPS即每秒查询率 Zookeeper的选举机制 确保所有节点对外表现为一个统一的服务。 选举机制分为两个阶段&#xff1a;Leader选举和投票确认 Zookeeper 的选举机制确保集群中的所有节…

CC工具箱使用指南:【CAD导出界址点Excel】

一、简介 群友定制工具。 面图层导出界址点Excel表之前已经做过好几个&#xff0c;这个工具则是将CAD导出Excel。 CAD数据如下&#xff1a; 工具将如上截图中的边界线导出界址点Excel&#xff0c;并记录下面内的文字。 二、工具参数介绍 点击【定制工具】组里的【CAD导出界…

windows wsl

设置默认版本 wsl --set-default-version 2 wsl --install wsl --list --online 1.修改Windows的网络配置&#xff0c;使用netsh命令添加端口转发规则 netsh interface portproxy add v4tov4 listenport2222 listenaddress0.0.0.0 connectport22 connectaddress172.25.2.…

如何在项目中用elementui实现分页器功能

1.在结构部分复制官网代码&#xff1a; <template> 标签: 这是 Vue 模板的根标签&#xff0c;包含所有的 HTML 元素和 Vue 组件。 <div> 标签: 这是一个普通的 HTML 元素&#xff0c;包裹了 el-pagination 组件。它没有特别的意义&#xff0c;只是为了确保 el-pagi…

Linux安装Nginx和Nginx基础配置

下载Nginx 方式一&#xff1a;通过官网下载后上传 通过官网下载安装包。下载地址https://nginx.org/en/download.html 这里选择稳定版的进行下载。 这里使用FinalShell终端工具操作&#xff0c;使用其他工具操作亦可。FinalShell工具下载地址&#xff1a;http://www.hostbuf…

Graph returned an error: An unknown error 的错误如何处理

文章来源&#xff1a;Graph returned an error: An unknown error 的错误如何处理 - 出海打渔 这个错误通常说5分钟内能重试成功就能成功&#xff0c; 一直失败的话&#xff0c;通常是投的application设置异常&#xff0c; 也有可能fb meta他们正在发版&#xff0c;marketing …

Ubuntu20.04从零安装IsaacSim/IsaacLab

Ubuntu20.04从零安装IsaacSim/IsaacLab 电脑硬件配置&#xff1a;安装Isaac sim方案一&#xff1a;pip安装方案二&#xff1a;预构建二进制文件安装1、安装ominiverse2、在ominiverse中安装isaac sim&#xff0c;下载最新的4.2版本 安装Isaac Lab1、IsaacLab环境克隆2、创建con…

Hashing

7-7 Hashing 分数 25 全屏浏览 切换布局 作者 陈越 单位 浙江大学 The task of this problem is simple: insert a sequence of distinct positive integers into a hash table, and output the positions of the input numbers. The hash function is defined to be H(key)…

C++ STL知识点100问

1问&#xff1a;STL有哪几类&#xff0c;对其进行简单描述 答&#xff1a;STL 主要由适配器 allocator&#xff0c;容器 container&#xff0c;算法 algorithm,迭代器 iterator 和仿函数 functor5大类构成。 适配器allocator&#xff1a;STL 提供了三个容器适配器&#xff1a;…

基于Java Springboot宠物猫售卖管理系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&#xff1a;…

【网络安全】SSL(一):为什么需要 Keyless SSL?

未经许可,不得转载。 文章目录 背景正文背景 随着网站和应用程序向云端迁移,使用 HTTPS(SSL/TLS)加密流量已成为行业标准。然而,传统的 HTTPS 配置要求服务器持有网站的私钥,这在云计算环境中引发了一系列安全性和合规性问题。一旦云服务器遭到攻击,私钥泄露可能带来不…

python处理单元格语句去重

Python处理单元格内连续出现的重复词语 1. 环境配置 导入必要的库 import pandas as pd # 数据处理库 import re # 正则表达式库 import jieba # 中文分词库2. 处理字符串 检查输入有效性‌ &#xff1a;如果输入是 NaN、None 或非字符串类型&#xff0c;则直接返回输入。…

Linux—ln(link files)命令使用方法(How to create links on Linux)

Linux—ln&#xff08;link files&#xff09;命令使用方法 在 Linux 系统中工作时&#xff0c;需要在不同的目录中使用相同的文件时&#xff0c;不必在每个目录下都复制一份文件&#xff0c;这样不仅浪费磁盘空间&#xff0c;还会导致文件管理上的混乱。 ln(link files) 便是…

RecyclerView详解——(四)缓存复用机制

稍微看了下源码和部分文章&#xff0c;在此做个小小的总结 RecyclerView&#xff0c;意思为可回收的view&#xff0c;那么相对于listview&#xff0c;他的缓存复用肯定是一大优化。 具体而言&#xff0c;当一个列表项被移出屏幕后&#xff0c;RecyclerView并不会销毁其视图&a…

Elasticsearch面试内容整理-核心概念与数据模型

在 Elasticsearch 中,理解核心概念与数据模型是非常重要的,因为它们定义了数据如何被组织、存储和搜索。以下是 Elasticsearch 的核心概念和数据模型的详细介绍。 核心概念 集群(Cluster) ● 集群是由一个或多个节点组成的,用于共同存储和搜索数据的集合。

vulhub之log4j

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) 漏洞简介 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 Apache Log4j 在应用程序中添加日志记录最…