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,微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TMS320C6000 DSP中断选择器参考指南

    电子发烧友网站提供《TMS320C6000 DSP中断选择器参考指南.pdf》资料免费下载
    发表于 12-24 17:11 0次下载
    TMS320C6000 DSP中断<b class='flag-5'>选择器</b>参考指南

    零基础入门PCB工程师

    各位前辈大家好,零基础入门PCB工程师,有什么学习资料推荐吗?
    发表于 11-27 16:54

    零基础嵌入式开发学习路线

    “嵌入式开发”没有接触过的同学可能会不明觉厉,但是只要你了解了,感兴趣并且有一个正确的学习路线的话,零基础也能入门。给大家介绍一个简单易懂的学习路线,让你能够从开始
    发表于 10-25 15:55

    为MCU扩展选择正确的多路复用器

    电子发烧友网站提供《为MCU扩展选择正确的多路复用器.pdf》资料免费下载
    发表于 09-18 11:52 0次下载
    为MCU扩展<b class='flag-5'>选择</b>正确的<b class='flag-5'>多路</b>复用器

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

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

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

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

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

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

    基于FPGA的“俄罗斯方块”设计(代码

    今天给各位大侠带来基于FPGA的“俄罗斯方块”设计,设计思路以及代码参考文档。本篇主要在FPGA上实现了一个经典小游戏“俄罗斯方块”。本项目基本解决方案是,使用Xilinx Zynq系列开发板
    发表于 07-14 08:31

    FPGA基础知识学习

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

    逻辑器件多路转换是什么?

    的智慧调度师。本文将深入探讨多路转换的工作原理、应用场景和未来发展,带您一起揭开这个逻辑器件的奥秘。 一、工作原理 多路转换通常由多个数据输入端、一个
    的头像 发表于 04-28 18:01 1566次阅读

    具有N通道功率MOSFET选择器的1-4节锂离子电池SMBus充电控制bq24735数据表

    电子发烧友网站提供《具有N通道功率MOSFET选择器的1-4节锂离子电池SMBus充电控制bq24735数据表.pdf》资料免费下载
    发表于 04-01 10:58 0次下载
    具有N通道功率MOSFET<b class='flag-5'>选择器</b>的1-4节锂离子电池SMBus充电控制<b class='flag-5'>器</b>bq24735数据表

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

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

    fpga学习需要具备哪些课程

    FPGA(Field Programmable Gate Array)学习需要具备一系列的课程知识和实践技能
    的头像 发表于 03-14 15:51 1215次阅读

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

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

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

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