0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【教程分享】零基础学习:基于FPGA的多路选择器设计(附代码)

电子发烧友论坛 来源:未知 2023-06-07 12:25 次阅读

大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子信息通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。


系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。后续会陆续更新 Xilinx 的 Vivado、ISE 及相关操作软件的开发的相关内容,学习FPGA设计方法及设计思想的同时,实操结合各类操作软件,会让你在技术学习道路上无比的顺畅,告别技术学习小BUG卡破脑壳,告别目前忽悠性的培训诱导,真正的去学习去实战应用,这种快乐试试你就会懂的。话不多说,上货。



多路选择器设计


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


二选一多路选择器


二选一多路选择器的数据输入有两个,分别为dataa和datab。为了能够确定选择那一路数据能够通过,还需要一个选择端(sel)。因为输入只有两路数据,选择端只要能够表现出两种状态即可,因而选择端位宽为1即可。


假设dataa和datab都是位宽为1的数据,当sel为0时,选择dataa通过;当sel为1时,选择datab通过;odata表示通过后的数据。



图1 :二选一多路选择器模型


根据上述功能,列出真值表。



图2 :二选一多路选择器真值表


根据真值表,化简得出布尔表达式:

odata = (dataa &(~sel)) | (datab & sel);


verilog中,算术运算中,“&”表示算术(按位)与,“|”表示算术(按位)或,“~”表示算术(按位)取反。


在数字电路基础中,根据表达式,就可以得到电路图。


现在我们要在FPGA中实现,二选一多路选择命名为“mux2_1”,不要命名为mux21,mux21是quartus中默认器件库中的名字,命名相同会出现错误。


建立工程后,输入如下设计代码:(mux2_1代码)




图4 :mux2_1的RTL视图


设计完成后,输入如下testbench代码:(mux2_1_tb代码)



在verilog中,“//”表示本行被注释,综合器综合时,自动略过。


在testbench中,连接线的名字可以随意定义,建议和端口相同。


设置好testbench后,运行RTL 仿真



图6 :RTL仿真波形


对比波形和真值表,设计正确。


四选一多路选择器


四选一多路选择器的数据输入有四个,分别为dataa、datab、datac和datad。为了能够确定选择那一路数据能够通过,还需要一个选择端(sel)。因为输入四路数据,选择端要求能够表现出四种状态,因而选择端位宽为2。


假设dataa、 datab、datac和datad都是位宽为8的数据,当sel为00时,选择dataa通过;当sel为01时,选择datab通过;当sel为10时,选择datac通过;当sel为11时,选择datad通过;odata表示通过后的数据。


图7 :四选一多路选择器模型


根据组合逻辑设计规则,我们将所有的情况全部列出,得出真值表,进而得到布尔表达式。但是现在输入的组合排列太多了(2的34次幂),不能够直接得出真值表。


此时的设计有两种方法。


第一种方法,根据功能拆分逻辑。将输入为8的四选一多路选择器,拆分为8个位宽为1的四选一多路选择器,首先列出位宽为1真值表,得出位宽为1的四选一多路选择器。然后并接八个即可。



图8 :8个位宽1多路选择器构成位宽8的多路选择器


这种设计方法,不在提供设计源码,读者可以自行讨论设计。


第二种方法,根据verilog的设计规则,可以直接描述逻辑功能,而不用描述门电路。这种设计规则有利于将设计做的比较大。


位宽为8的四选一多路选择器命名为“mux4_1”。


建立工程后,输入设计代码如下:(mux4_1代码)



always 语句用来表示组合逻辑时,即可以采用门电路的描述方法,也可以采用功能性的描述语句。


“always @()”中()是信号敏感列表。中间可以写入本模块的所有的敏感信号,“*”可以表示所有的敏感信号。建议利用always语句描述组合逻辑时,用“*”表示所有信号。用“*”时,“()”可以省略。即:always@(*) 等效 always@*。



在case语句中,首先会判断变量和那个分支相同,并且执行对应的表达式。当和所有的分支都不相同时,执行default后的表达式。


verilog规定,在always语句中被赋值的变量,应该定义为“reg”类型。



图11 :mux4_1的RTL视图


设计完成后,输入testbench代码。mux4_1_tb 代码如下:



由于本次输入的的组合太多,不能全覆盖测试。故采用随机数来进行测试。


$random是一个系统函数,调用时,可以返回一个随机值。注意:这个系统函数只能出现testbench中,在设计中出现是不可综合的。


“$random函数调用时返回一个32位的随机数,它是一个带符号的整形数...”。例:

reg[23:0] rand;

rand=$random % 60; //产生一个在 -59—59范围的随机数


产生0~59之间的随机数,例:

reg[23:0] rand;

rand={$random} % 60; //通过{}产生0—59范围的随机数


产生在min, max之间随机数,例:

reg[23:0] rand;

rand = min+{$random}%(max-min+1);


在testbench中,需要按照一定顺序给输入线赋值。在mux4_1_tb中,我们可以通过延迟赋值,然后再次延迟赋值,来完成赋值。因为赋值时采用随机数,所以每次编写的语句是相同的。verilog中提供了repeat语句,用来减少人工输入。



图13 :两种等效的赋值方式


输入testbench后,进行综合分析。


设置testbench,运行RTL仿真。



图14:RTL仿真图


经过分析,符合四选一多路选择器的设计。





声明本文由电子发烧友社区发布,转载请注明以上来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。


更多热点文章阅读

  • 基于Cortex-M3内核的32位微控制器STM32项目实战分享!

  • 基于32位RISC-V设计的互联型微控制器,沁恒微CH32V307开发样例

  • RK3568!四核64位ARMv8.2A架构,汇聚编译源码及实战样例

  • 尺寸仅有21mm*51mm,板边采用邮票孔设计,合宙 Air105 核心板开发总结

  • 嵌入式Linux开发秘籍!工程师大佬亲历分享项目样例


原文标题:【教程分享】零基础学习:基于FPGA的多路选择器设计(附代码)

文章出处:【微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

原文标题:【教程分享】零基础学习:基于FPGA的多路选择器设计(附代码)

文章出处:【微信号:gh_9b9470648b3c,微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问模拟开关跟多路复用器有什么区别?

    我想请问,模拟开关跟多路复用器有什么区别。比如单刀双掷开关,是不是就是2选1的多路选择器,只是模拟开关是1:2,AMUX是2:1?我理解的区别是模拟开关的状态要么通道A导通,要么通道B导通,不能同时导通,然而
    发表于 08-12 08:16

    数据选择器是时序逻辑电路吗

    选择器的基本概念 数据选择器,也称为多路选择器(Multiplexer,简称Mux),是一种常见的数字电路组件,其基本功能是从多个输入信号中选择
    的头像 发表于 08-01 14:39 283次阅读

    数据选择器是组合逻辑电路吗

    数据选择器(Data Selector)是一种常见的组合逻辑电路,用于根据输入的选择信号,从多个输入信号中选择一个输出。在数字电路设计中,数据选择器广泛应用于
    的头像 发表于 08-01 14:28 234次阅读

    FPGA基础知识学习

    和布局布线 :综合是将硬件描述语言代码转换为逻辑网表的过程,而布局布线则是将逻辑网表映射到FPGA的物理资源上,包括逻辑单元(Look-Up Tables, LUT)、寄存、连线等。 静态时序分析
    发表于 04-29 23:26

    FPGA零基学习系列精选:半导体存储和可编程逻辑器件简介

    大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白
    发表于 03-28 17:41

    DA1453x闪存选择器指南应用说明

    电子发烧友网站提供《DA1453x闪存选择器指南应用说明.pdf》资料免费下载
    发表于 02-21 09:40 0次下载
    DA1453x闪存<b class='flag-5'>选择器</b>指南应用说明

    从入门到放弃……为什么你会觉得FPGA难学?如何学习FPGA

    问:本人零基础,想学FPGA,求有经验的人说说,我应该从哪入手,应该看什么教程,应该用什么学习板和开发板,看什么书等,希望有经验的好心人能够给我一些引导。 如果想速成,那就上网看视频吧,这样主要
    的头像 发表于 02-02 17:04 657次阅读
    从入门到放弃……为什么你会觉得<b class='flag-5'>FPGA</b>难学?如何<b class='flag-5'>学习</b><b class='flag-5'>FPGA</b>?

    零基础入门 Hyperlynx 仿真教程

    电子发烧友网站提供《零基础入门 Hyperlynx 仿真教程.pdf》资料免费下载
    发表于 12-22 10:49 24次下载

    鸿蒙原生应用/元服务开发-利用picker选择器来多选相册图片

    完成某些功能测试的时候就很不方便。后来官方文档更新后,我发现一种比较方便的接口来完成这一功能。那就是利用 @ohos.file.picker (选择器),直接完成对相册里面图片的选择和多选。 正文
    发表于 12-01 17:04

    硬件电路设计之多路复用开关电路设计

    多路复用开关(MUX) 是个数字开关器件,也成为数据选择器。它是一种通过一根控制线来选择数据路由的组合逻辑电路。
    的头像 发表于 11-20 17:23 2863次阅读
    硬件电路设计之<b class='flag-5'>多路</b>复用开关电路设计

    如何设计一个参数化的数据选择器

    FPGA设计中,大部分情况下我们都得使用到数据选择器。并且为了设计参数化,可调,通常情况下我们需要一个参数可调的数据选择器,比如M选1,M是可调的参数。
    的头像 发表于 11-20 10:27 998次阅读
    如何设计一个参数化的数据<b class='flag-5'>选择器</b>

    FPGA零基学习之Vivado-VGA驱动设计

    大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白
    发表于 11-02 19:54

    FPGA零基学习之Vivado-超声波驱动设计

    大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白
    发表于 11-01 17:48

    数据选择器及其主要应用

    数据选择器(data selector) 根据给定的输入地址代码,从一组输入信号中选出指定的一个送至输出端的组合逻辑电路。
    的头像 发表于 10-11 15:33 7724次阅读
    数据<b class='flag-5'>选择器</b>及其主要应用

    MAX17614EVKIT:评估:在Ideal Diode/Power源选择器应用数据表中的MAX17614 MAX17614EVKIT:评估:在Ideal Diode/Power源选择器应用数据表中的MAX17614

    电子发烧友网为你提供ADI(ADI)MAX17614EVKIT:评估:在Ideal Diode/Power源选择器应用数据表中的MAX17614相关产品参数、数据手册,更有MAX17614EVKIT
    发表于 10-07 17:52
    MAX17614EVKIT:评估:在Ideal Diode/Power源<b class='flag-5'>选择器</b>应用数据表中的MAX17614 MAX17614EVKIT:评估:在Ideal Diode/Power源<b class='flag-5'>选择器</b>应用数据表中的MAX17614