(1)FPGA仿真——二选一数据选择器

这篇具有很好参考价值的文章主要介绍了(1)FPGA仿真——二选一数据选择器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据选择器设计

数据选择器是指经过选择,把多个通道的数据传送到唯一的公共数据通道上去,实现数据选择功能的逻辑电路称为数据选择器。在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也称多路选择器或多路开关。在选择变量n控制下,从多路数据输入中某一路数据送至输出端。对于一个具有 2^n 个输入和 1 个输出的多路选择器,有 n 个选择变量。多路选择器也是 FPGA 内部的一个基本资源,主要用于内部信号的选通。简单的多路选择器还可以通过级联生成更大的多路选择器。

下边举例来说明一下数据选择器,不妨设选择器为2输入in1,in2,选择端为sel,输出out。
选择器的逻辑是这样的,如果sel=0,选择in2信号输出,即out=in2,如果sel=1,选择in1信号输出,sel=in1。而在数字电路当中,一个变量可以有两个状态0和1,所以两输入变量对应四种不同的结果,如果考虑选择端sel,则可以列出如下真值表所示。

sel in1 in2 out
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 1

这样得到输出out的表达式为out=sel’&in2+sel&in1('表示反变量的意思)

根据上述真值表可以得到下边基本门电路组成的二选一数据选择器的电路图
(1)FPGA仿真——二选一数据选择器
但是在数字电路当中,我们不需要在门电路设计电路,只需要知道电路的逻辑功能,直接使用封装好的芯片即可,封装好的芯片就是把能实现一定功能的门电路封装起来,比如我们要实现的数据选择器,直接用比如说74HC153即可。并且verilog是在寄存器级的描述语言,只要你告诉它你要实现的功能,便会自动给出搭电路,我们下边的RTL视图就是软件实现我们描述的逻辑功能的电路。所以我们通常用下边的框图表示二选一数据选择器。

(1)FPGA仿真——二选一数据选择器

比如,常见的双二选一数据选择器的芯片如下图示

(1)FPGA仿真——二选一数据选择器

而在verilog语言里边,实现上述电路有三种方法,if语句和case语句,以及三目运算符实现。

下边分别给出三种不同实现方法的代码,以及对应的RTL视图,方便读者了解这三种实现方法的不同,尽管使用的语法不一样,但是最后电路实现的功能是一样的。所以大家在代码的实现上就有很多的选择,看到别人不同的写法也不要大惊小怪,我们要关注的是最后的功能,在不考虑资源使用的情况下只要功能满足要求,代码的灵活性可以随意控制。通过对比发现以上三种不同代码方式实现的 2 选 1 多路选择器对应综合出的 RTL 视图虽有所差别,但综合工具在布局布线和最后映射 FPGA 资源时会自动优化,使最终的功能和占用的逻辑资源都是相同的。

这里介绍2输入的数据选择器,对于输入个数更大的数据选择器,请读者类推。

下边给出三种实现方法和对应的RTL视图以及仿真波形(三种实现方式波形一致),读者可以挑其中一种实现方法即可。

如果不记得软件的操作和仿真设置可以点击下边链接查看。

软件的使用和仿真设置看这里

代码实现和仿真波形

一、if-else语句实现代码

module mux2_1(
	input wire in1,in2,//两个输入变量
	input wire sel,//数据选择端
	output reg out//输出信号端

);

	always @ (*)
		if(sel==1'b1)
			out=in1;
		else
			out=in2;
endmodule

RTL视图
(1)FPGA仿真——二选一数据选择器
二、case语句实现

module mux2_1(
	input wire in1,in2,//两个输入变量
	input wire sel,//数据选择端
	output reg out//输出信号端

);

always @ (*)
	case(sel)
		1'b0:out=in1;
		1'b1:out=in2;
		default:out=in1;
	endcase

endmodule

RTL视图

(1)FPGA仿真——二选一数据选择器
三、三目运算符实现

module mux2_1(
	input wire in1,in2,//两个输入变量
	input wire sel,//数据选择端
	output wire out//输出信号端

);

	assign out=(sel==1'b1)? in1:in2;
	
endmodule

RTL视图
(1)FPGA仿真——二选一数据选择器

三、仿真文件编写

`timescale 1ns/1ns

module tb_mux2_1();

	reg in1,in2,sel;
	wire out;

initial
begin//将变量赋初值为0
	in1<=1'b0;
	in2<=1'b0;
	sel<=1'b0;
end
//每个10ns 变量随机取值为0或者1,不用人为赋值
always #10 in1<={$random} % 2;
always #10 in2<={$random} % 2;
always #10 sel<={$random} % 2;

//下边的initial块的语句可以不要,只是方便波形的观察
initial begin
	$timeformat(-9,0,"ns",6);//设置显示的时间格式,此处表示的是(打印时间单位为纳秒,
//小数点后打印的小数位为 0 位,时间值
//后打印的字符串为“ns”,打印的最小数量字符为 6 个)
	$monitor("@time %t:in1=%b in2=%b sel=%b out=%b",$time,in1,in2,sel,out);
	//只要监测的变量(时间、in1, in2, sel, out)发生变化,就会打印出相应的信息
end

mux2_1 mux2_1_inst(//模块实例化
.in1(in1),
.in2(in2),
.sel(sel),
.out(out)

);
endmodule

这里使用了 $monitor系统函数来输出变量的值, 用法如下 $monitor(“%b+%b=%d”,a,b,c); //“%b+%b=%d” 格式控制,未指定时默认十进制
%h 或%H //以十六进制的形式输出
%d 或%D //以十进制的形式输出
%o 或%O //以八进制的形式输出
%b 或%B //以二进制的形式输出

$time 为时间函数,返回 64 位当前仿真时间; $random 用于产生随机函数,返回随机
数,{ $random} % n返回一个0到n-1的随机数。

系统函数的用法比较固定,如果不理解,也不影响输出的波形,直接方便读者观看结果而已

波形图
(1)FPGA仿真——二选一数据选择器

根据波形图sel的取值,看sel=1时,out是否等于in1,sel=0时,out是否等于in2,即可验证波形的正确性。

为了观看变量在不同时刻的值,可以选择Modelsim的”View“下”Transcript“,即可观看变量在不同时刻的值

(1)FPGA仿真——二选一数据选择器
比如550ns(下图第5行)时,sel=1,此时应该选择sel,所以out和in1输出一致,尽管in2=1,但是out选择的是in1
(1)FPGA仿真——二选一数据选择器文章来源地址https://www.toymoban.com/news/detail-488663.html

下节内容——3-8译码器

到了这里,关于(1)FPGA仿真——二选一数据选择器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA 中的多路选择器综述:实现八选一功能

    FPGA 中的多路选择器综述:实现八选一功能 多路选择器是FPGA中常见的基础电路之一,也叫做数据选择器,用于从多个输入信号中选择一个输出信号。选择器的输入端通常有一个选择控制端,来决定哪一个输入信号会被输出。在本文中,我们将详细介绍FPGA中的多路选择器实现

    2024年02月08日
    浏览(75)
  • FPGA四选一的多路选择器(用三元运算符?:解决)

           ?:符号通常用于条件运算符,表示条件判断。它类似于C语言中的三元运算符,用于根据条件选择不同的操作或值。         例如,在Verilog中,条件运算符?:可以用于if-else语句的简写形式。它的一般语法格式如下:         如果表达式为真,则结果为结果1;否

    2024年01月21日
    浏览(41)
  • Docker官方文档学习笔记(一):安装Docker Engine(和安装Docker Desktop for Linux二选一)

    参考官方文档 /var/lib/docker 中的内容会被保留,如果要完全删除,继续参考文章最后的卸载教程完成卸载 三种方法,通过仓库安装(推荐),通过DEB包手动安装,以及使用脚本安装。 在安装之前,请让自己熟悉脚本安装的潜在风险和限制: 该脚本需要root或sudo特权才能运行。

    2024年02月12日
    浏览(31)
  • Docker官方文档学习笔记(一):安装、升级、卸载Docker Desktop for Linux(和安装Docker Engine二选一,推荐Docker Engine)

    参考自官方文档Install Docker Desktop on Linux和Install Docker Desktop on Ubuntu 本教程所用系统为Ubuntu22.04 对新手来说有个图形化界面还是挺方便的,可以装上跟着学习笔记(二)熟悉Docker,我是练完手之后卸载了Docker Desktop转而装了Docker Engine,因为当时发现DD4L好像不支持容器内运行图

    2024年02月10日
    浏览(37)
  • 基于dsp+fpga+AD+ENDAC的半导体运动台高速数据采集电路仿真设计(四)

    整个调试验证与仿真分析分三个步骤:第一步是进行 PCB 检查及电气特性测试,主 要用来验证硬件设计是否正常工作;第二步进行各子模块功能测试,包括高速光纤串行 通信的稳定性与可靠性测试, A/D 及 D/A 转换特性测试, EnDat 串行通信相关时序测试 与验证等,主要用来验

    2024年02月01日
    浏览(38)
  • FPGA设计毕业论文题目【仿真+代码】

    基于FPGA的实时目标跟踪设计与实现 基于国产FPGA的数据采集存储系统的研究与设计 基于FPGA的多通道数据采集单元设计与实现 基于FPGA的高速数据采集系统设计 基于FPGA的水下高速激光通信系统的研究 基于FPGA的多通道数据采编器的设计与实现 基于FPGA的实时图像边缘检测系统设

    2024年02月04日
    浏览(33)
  • (2)FPGA仿真——3-8译码器设计

    译码是编码的逆过程,在编码时,每一种二进制代码,都赋予了特定的含义,即都表示了一个确定的信号或者对象。把代码状态的特定含义翻译出来的过程叫做译码,实现译码操作的电路称为译码器。或者说,译码器是可以将输入二进制代码的状态翻译成输出信号,以表示其

    2024年02月08日
    浏览(36)
  • FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

            本次做的题目是:基于FPGA的倒计时显示电路设计,         题目要求如下:         详细要求如下:         本次设计的代码通过了仿真。(用的是quartus自带的仿真器)         这次设计分为两个模块,一个是倒计时的控制模块,另一个是数码管

    2024年02月11日
    浏览(24)
  • FPGA设计——verilog实现乒乓操作并modelsim仿真

    乒乓操作是FPGA设计中常用的一种技巧,它通过数据流控制实现按节拍相互配合的切换,来提高数据处理效率,达到无缝缓冲和处理的效果。本文针对乒乓操作进行学习总结。 完整工程 一、原理图如下 : 1、二选一控制器来对缓冲模块1和2进行选择。 2、数据缓冲模块一般就是

    2023年04月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包