FPGA:二选一选择器

1、需求

使用XILINX的XC7A35TFFG484-2开发板,完成二选一选择器的设计。

2、分析

二选一选择器如下所示:
在这里插入图片描述
观察可知有三个输入端,一个输出端,其逻辑原理为:当sel为高电平时,out=a,当sel为低电平时,out=b。

3、工程创建以及Verilog代码的编写

a)打开Vivado软件,创建一个新工厂,名为mux2_test
b)在setting中点击Add sources,接下来选择第二个:Add or create design sources。创建设计文件。再点击create file,如果之前已经写好可以直接导入。接下来一直点击OK,YES,Finish即可。
c)在左上的sources出多了一个mux2_test.v文件,点击打开,开始编写verilog代码。
在这里插入图片描述

module mux2_test(a,b,sel,out    //输入输出端口
);
input a;        // 端口类型定义
input b;
input sel;
output out;
assign out=(sel==1)?a:b;   // 三目运算符,sel为1,则out=a,否则out=b
endmodule

d)创建testbench文件
即写测试文件,可以理解为将我们的硬件放在一个测试桌上,然后要对齐进行测试输入。同上点击add source后选择第三项Add or create simulation sources,命名为mux2_test_tb。接下来在左侧sources打开对应的testbench文件后编写即可。

`timescale 1ns/1ps  //单位1ns,精度1ps
module mux2_test_tb();
// 例化,可理解为贴标签
reg a;
reg b;
reg sel;
wire out;   //这里相当于是对测试桌上的线声明类型
mux2_test mux2_test_inst0(.a(a),.b(b),.sel(sel),.out(out)
);
initial begin
a=0;b=0;sel=0;  //三输入八种情况,每次延迟200纳秒,主要是为了仿真的时候容易分辨 
#200;
a=0;b=0;sel=1;
#200;
a=0;b=1;sel=0;
#200;
a=0;b=1;sel=1;
#200;
a=1;b=0;sel=0;
#200;
a=1;b=0;sel=1;
#200;
a=1;b=1;sel=0;
#200;
a=1;b=1;sel=1;
#200;
$stop;   //让其自动停止,不过这里是1600纳秒,一般默认自动仿真到1000ns
end  
endmodule

e)按F11,即run synthesis,进行综合,编译后再运行Run lmplementation,最后点击Run Simulation,进行时序仿真。默认运行1000ns,点击运行图标可以让他继续运行。时序图如下所示:
在这里插入图片描述

可发现符合二选一多路器的逻辑。
f)查看RTL图
点击RTL,可生产对应的数字电路图,如下所示
在这里插入图片描述
g)引脚分配
根据提供的引脚分配表,如下所示
在这里插入图片描述在这里插入图片描述
将拨码开关SW2,SW1,SW0分配给sel,a,b,将led0分配给out
在这里插入图片描述
h)生成比特流文件,点击Generate Bitstream,生成后点击Open Hardware Manager
,打开硬件管理器,点击左上open target,打开开发板后点击Auto connect。再点击program device,即写入设备后即可在开发板上运行。如下所示
在这里插入图片描述

上拨b,即b为1,此时sel为0,out=b=1。
在这里插入图片描述
a同理

在这里插入图片描述

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

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

相关文章

Python面试题:详细讲解Python的多线程与多进程编程问题

在 Python 中,多线程和多进程编程是并发编程的两种主要方式,用于提高程序的执行效率和响应性。虽然它们都可以实现并发执行,但它们的工作原理和适用场景有所不同。以下是对 Python 多线程和多进程编程的详细讲解,包括它们的工作原…

高级PER语言编程:优化和性能提升

高级PER语言编程:优化和性能提升 作为一名资深的PER语言技术工程师,我很高兴能为你提供关于高级PER语言编程的详细指南,特别是在优化和性能提升方面。本文将深入探讨各种优化技术和性能提升策略,并通过示例代码来展示如何在实际项…

十二、数组(2)

1.冒泡排序数组(升序) 冒泡排序:将一个整型数组排序(升序) 例: 10 9 8 7 6 5 4 3 2 1 9 10 8 7 6 …

Nginx系列-4 proxy_pass使用和路径拼接问题

1.proxy_pass使用 proxy_pass指令用于请求的转发,请客户端请求转发至第三方服务器;如下所示: location /query {proxy_pass http://www.baidu.com; }上述案例将以/query开头的url请求转发至http://www.baidu.com. proxy_pass用法较为简单,但…

第十四届蓝桥杯省赛C++C组C题【三国游戏】题解(AC)

解题思路 由于三种国家都有获胜的可能,所以我们需要分别枚举 X , Y , Z X,Y,Z X,Y,Z 获胜的情况。 设 X X X 获胜,那么对于第 i i i 个事件的贡献为 a [ i ] − ( b [ i ] c [ i ] ) a[i]-(b[i]c[i]) a[i]−(b[i]c[i]),根据贪心的策略…

【银河麒麟服务器操作系统】java进程oom现象分析及处理建议

了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区:https://product.kylinos.cn 现象描述 某服务器系统升级内核至4.19.90-25.22.v2101版本后仍会触发oom导致java进程被kill。 现象分析 oom现象分析 系统messages日志分析,故…

人工智能前沿讲座——融合知识的自然语言处理

目录 引言 NLP的发展与现状 发展 机器翻译 机器翻译知识记忆(高频词汇记录) 现状 我们的尝试 融入外部知识库 融合语言先验知识 融合语篇知识 融合人类行为知识 引言 自然语言处理没有大家都认可的一个定义。 研究人与人交际中以及在人与计算…

配置文件格式 JSON 快速上手

文章目录 1.语法2.实例3.解析参考文献 JSON(JavaScript Object Notation) 是轻量级的文本数据交换格式,独立于语言,具有自我描述性。JSON 类似于 XML,但比 XML 更小、更快,更易解析。 1.语法 JSON 语法是 …

数据编织 Data Fabric:解决“数据孤岛”的新思路

一个不争的事实是,企业内部数据孤岛的形成,根因在于业务发展的复杂性与技术迭代的快速性导致。具体而言,随着企业业务快速增长,如新生产线的引入或外部公司的并购,这些活动往往伴随着新系统上线与独立数据体系的融入&a…

【safari】react在safari浏览器中,遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。如何解决

在safari浏览器中,可能会遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。 PS:由于useState是一个普通的函数, 定义为() > void;因此此处不能用await/async替代setTimeout,只能用在返…

网络安全行业最大的敌人是自己

在危机四伏的数字丛林时代,网络安全行业需要跳出资本和市场的博弈陷阱,通过拯救自己来拯救所有人。当然,政府和资本也应该意识到这一点。 在当今这个数字化时代,网络安全的重要性与日俱增。然而,尽管政府和企业不断强调…

【vue+el-table】实现表尾合计行分两行显示,一行显示勾选项之和,一行显示合计,已实现,具体思路解析

效果图: 思路解析: 首先进行了el-table列表的组件封装,很多参数是传进来的。如果是普通的列表,相关参数直接定义就行 1、使用el-table的summary-method处理表尾行 (1)定义summaryIndex用于指定合计在哪一列…

Linux下载网络文档

1. 使用wget 1.1 安装wget sudo apt install wget1.2 下载网页或者文件 wget URL1.3 下载并重命名 wget -O filename URL1.4 下载文件夹 wget -r ftp://server-address.com/directory1.5 下载整个网站 wget -m --convert-links --page-requisites website_address2. 使用…

vue学习笔记(十一)——开发心得(axios的封装、promise细节、vue-router开发中的使用)

1. axios的网络请求的封装 1.1 为什么要封装api? 代码分层,便于以后的修改,无需触碰逻辑页面 目标: 网络请求,不散落在各个逻辑页面里,封装起来方便以后修改 1.2 封装api步骤 ① 在项目 src 下新建目录 utlis &am…

浅谈大模型领域内数据微调的一些个人理解

近期由于连续做了两个大模型相关的项目尝试,发现一些现象,在查阅了多篇论文及圈内大佬的点评之后,个人对大模型领域内数据微调有了更深入的理解,今天简单交流下,个人的一些理解,欢迎资深大佬对其中的不足之…

Go的数据结构与实现【LinkedList】

介绍 所谓链表(Linked List),就是按线性次序排列的一组数据节点。每个节点都是一个对象,它通过一个引用指向对应的数据元素,同时还通过一个引用next指向下一节点。 实现 逻辑方法 我们定义链表的结构体&#xff1a…

VTD学习笔记(一)-启动vtd、基本界面和按钮

写在前面:真快啊,眨眼就毕业上班了,岗位也是做仿真,看来以后就是一直做仿真了,再见了定位~。公司使用的是vtd,看资料是一个很庞大的自动驾驶仿真软件,囊括了车辆动力学到传感器仿真,…

【WPF开发】上位机开发-串口收发

一、引言 在现代工业控制、嵌入式系统等领域,串口通信作为一种常见的通信方式,被广泛应用于各种场景。C#作为一门强大的编程语言,结合Windows Presentation Foundation(WPF)框架,可以轻松实现串口通信功能…

MMDet3d TR3D: RuntimeError: Error compiling objects for extension

项目: https://github.com/open-mmlab/mmdetection3d 问题复现: 步骤 运行python tools/test.py projects/TR3D/configs/tr3d_1xb16_scannet-3d-18class.py checkpoints/tr3d_1xb16_sunrgbd-3d-10class.pth后报错: File "/home/kyle…

vue2高级特性

1、vue父子组件如何通信 通过props和emit事件传递 // 父组件中<Child :data"data" dataChange"dataChangeHandle"></Child>...methods: {dataChangeHandle(data) {...do somthing} } // 子组件中export default {props: {data: {type: Objec…