二选一数据选择器的设计

写在前面的话

数据选择器在数字电路设计中的应用尤为广泛。同时,作为基础的电路功能单元,也比较适合作为初学者的入门实验。现在梦翼师兄陪大家一起来设计一个最基础的数据选择器。

项目需求

设计一个二选一数据选择器,然后用一路控制信号选择输出数据选通哪一路输入的数据信号。

系统架构

模块功能介绍


模块名


功能描述


mux2


通过Data_sel 选择输出结果的值

顶层模块端口描述


端口名


端口说明


Data_a


A通道数据输入


Data_b


B通道数据输入


Data_out


数据输出端


Data_sel


数据选通控制

代码解释

mux2代码解释


/****************************************************

*   Engineer      :   梦翼师兄

*   QQ             :   761664056

*   The module function:二选一多路器

*****************************************************/

00  module mux2(

01                  data_a,     //A通道数据输入

02                  data_b,     //B通道数据输入

03                  data_sel,   //输出数据选通信号

04                  data_out    //数据输出

05             );

06  //系统输入

07  input data_a;   //A通道数据输入

08  input data_b;   //B通道数据输入

09  input data_sel; //输出数据选通信号

10  //系统输出

11  output reg data_out;//数据输出

12  //二选一多路器控制逻辑

13  always@(*)

14      begin

15          if(data_sel)//选通信号为高电平

16              data_out=data_a;//输出结果为A通道数据

17          else        //选通信号为低电平

18              data_out=data_b;//输出结果为B通道数据

19      end

20  endmodule

01~05行列出了多路器所有输入/输出接口,07~11行定义了端口属性,13~19行描述了二选一多路器的逻辑功能。

仿真代码


/****************************************************

*   Engineer      :   梦翼师兄

*   QQ             :   761664056

*   The module function:多路器测试代码

*****************************************************/

00  `timescale 1ns/1ps                              //仿真时间单位是ns,仿真时间精度是ps

01  module mux2_tb;

02

03  reg data_a, data_b;                             //仿真激励数据a,b信号端口

04  reg data_sel;                                   //仿真激励数据选择信号端口

05

06  wire data_out;                                  //仿真结果输出信号

07

08  initial begin

09  data_a = 0;                                  //data_a复初始值等于0

10  data_b = 0;                                     //data_b复初始值等于0

11  data_sel = 0;                                   //data_sel复初始值等于0

12  #200 data_a = 0; data_b = 1;                    //200ns之后,data_a=0;data_b=1;

13  #200 data_a = 1; data_b = 0;                    //200ns之后,data_a=1;data_b=0;

14  #200 data_a = 1; data_b = 1;                    //200ns之后,data_a=1;data_b=1;

15  #200 data_a = 0; data_b = 0; data_sel = 1;      //200ns之后,data_a=0;data_b=0;data_sel=1;

16  #200 data_a = 0; data_b = 1;                    //200ns之后,data_a=0;data_b=1;

17  #200 data_a = 1; data_b = 0;                    //200ns之后,data_a=1;data_b=0;

18  #200 data_a = 1; data_b = 1;                    //200ns之后,data_a=1;data_b=1;

19  #400 $stop;                                     //400ns之后,仿真结束

20  end

21

22  mux2 mux2(                                      //把激励信号送进mux2模块

23              .data_a(data_a),

24              .data_b(data_b),

25              .data_sel(data_sel),

26              .data_out(data_out)

27          );

28

29  endmodule

仿真分析

仿真图可知,当Data_sel为低电平的时候,Data_out=Data_b,当Data_sel为高电平的时候,Data_out=Data_a,Data_out的输出由Data_sel的电平来决定,满足了二选一数据选择器的要求。

6.1.8 二选一数据寄存

下面我们将二选一数据选择器的结构改造一下,使二选一数据选择器的输出端连接有寄存器

编写代码如下


/****************************************************

*   Engineer      :   梦翼师兄

*   QQ             :   761664056

*   The module function:二选一多路器(带寄存器输出)

*****************************************************/

00  module mux2_clk(

01                          clk,            //时钟信号输入

02                          rst_n,          //复位信号输入

03                          data_a,         //数据a输入

04                          data_b,         //数据b输入

05                          data_sel,       //数据选择信号

06                          data_out        //数据输出

07                      );

08

09  input clk, rst_n;                       //时钟信号,复位信号输入端口

10  input data_a, data_b;                   //数据a,b端口输入

11  input data_sel;                         //数据选择信号端口

12

13  output data_out;                        //数据输出端口

14

15  reg data_out;

16

17  always@(posedge clk or negedge rst_n)   //沿触发检测

18  begin

19      if(!rst_n)

20          data_out    <=  1‘d0;           //复位初始化

21      else    if(data_sel)

22          data_out    <=  data_a;         //当data_sel为高电平,输出data_a

23      else

24          data_out    <=  data_b;         //当data_sel为低电平,输出data_b

25  end

26

27  endmodule

仿真代码


/****************************************************

*   Engineer      :   梦翼师兄

*   QQ            :   761664056

*   The module function:二选一多路器测试代码(带寄存器输出)

*****************************************************/

00  `timescale 1ns/1ps                              //仿真时间单位是ns,仿真时间精度是ps

01  module mux2_clk_tb;

02

03  reg clk, rst_n;                                 //仿真激励时钟,复位信号端口

04  reg data_a, data_b;                             //仿真激励数据a,b信号端口

05  reg data_sel;                        //仿真激励数据选择信号端口

06

07  wire data_out;                       //仿真结果输出信号

08

09  initial begin

10  clk = 0;                              //时钟信号初始化

11  rst_n = 0;                            //复位信号有效

12  data_a = 0;                           //data_a复初始值等于0

13  data_b = 0;                           //data_b复初始值等于0

14  data_sel = 0;                         //data_sel复初始值等于0

15  #200.1 rst_n  = 1;                   //复位结束

16  #200 data_a = 0; data_b = 1;      //200ns之后,data_a=0;data_b=1;

17  #200 data_a = 1; data_b = 0;      //200ns之后,data_a=1;data_b=0;

18  #200 data_a = 1; data_b = 1;      //200ns之后,data_a=1;data_b=1;

//200ns之后,data_a=0;data_b=0;data_sel=1;

19  #200 data_a = 0; data_b = 0; data_sel = 1;

20  #200 data_a = 0; data_b = 1;        //200ns之后,data_a=0;data_b=1;

21  #200 data_a = 1; data_b = 0;        //200ns之后,data_a=1;data_b=0;

22  #200 data_a = 1; data_b = 1;        //200ns之后,data_a=1;data_b=1;

23  #400 $stop;                                     //400ns之后,仿真结束

24  end

25

26  always#50 clk = ~clk;                           //产生1Mhz时钟信号

27

28  mux2_clk mux2_clk(                       //把激励信号送进mux2_clk模块

29                              .clk(clk),

30                              .rst_n(rst_n),

31                              .data_a(data_a),

32                              .data_b(data_b),

33                              .data_sel(data_sel),

34                              .data_out(data_out)

35                          );

36

37  endmodule

查看仿真波形如下

由仿真图可知,当Data_sel的电平发生变化时,Data_out的输出结果在时钟上升沿到来的时候才会变化,输出的结果被时钟同步化了。

原文地址:https://www.cnblogs.com/mengyi1989/p/11517663.html

时间: 2024-10-07 14:55:41

二选一数据选择器的设计的相关文章

Verilog 二选一多路选择器 Modelsim设计。

一个简单的二选一多路选择器 逻辑图 Verilog源程序 module Mux_Two ( input a, //Data input b, //Data input sl, //High: b ;Low: a output reg out ); always@(sl or a or b) if(!sl) out=a; else out=b; endmodule Modelsim架构文件 a为输入25MHz方波,b为输入12.5MHz的方波,sl为输入6.25MHz的方波.sl为高电平时,out

使用verilog实现4选1数据选择器的几种方法

第一种方法module mux( d1, d2, d3, d4, se1, se2, dout ); input d1; input d2; input d3; input d4; input se1; input se2; output dout; reg dout; always @ (d1 or d2 or d3 or d4 or se1 or se2) case({se1,se2}) 2'b00 : dout=d1; 2'b01 : dout=d2; 2'b10 : dout=d3; 2

2017.0311.数字电路与系统-数据选择器分配器的理解

数据选择器 1.这里讲解一个特殊情况,如果给定的函数是F(A,B,C,D)拥有四个变量,要求我们采用74151八选一数据选择器来实现四变量的函数.74151八选一数据选择器的地址端只有三个,和四个变量对不上,该怎么解决这个问题.这里的解决办法有两种:74151八选一数据选择器增加一个地址端:降变量,把表达式的四变量改为三变量.(卡诺图降位) 74151八选一数据选择器增加一个地址端:用两片74151构建一个16选一的数据选择器,但是这里是共用地址端么?双四选一74153数据选择器就是共用地址端,

多终端数据同步机制设计(二)

多终端数据同步机制设计(二) Intro 如果您没有看上一篇文章,建议您先移步到这里查看第一部分 上一次主要解决了基本的数据增量同步的问题,但仍然存在一些问题. 可能存在的主要问题: 大数据量传输时,数据在传输过程出现部分丢失,数据不完整 超大数据量需要同步,导致响应时间过长而导致连接超时 针对以上可能出现的这两个问题,需要对数据进行校验并且数据量超过一定量时进行分批量传输, 本文将着手解决 数据校验 和 数据分批次传输 这两个问题. 同步流程概览 结合之前的同步流程,加上数据校验和分批次传输数

阿里,腾讯内部十二个大数据项目,你都有做过吗?

随着社会的进步,大数据的高需求,高薪资,高待遇,促使很多人都来学习和转行到大数据这个行业.学习大数据是为了什么?成为一名大数据高级工程师.而大数据工程师能得到高薪.高待遇的能力在哪?自然是项目经验.下面给大家大概介绍一下在阿里的"双11"."双12"."双旦"即将到来的"618"与腾讯大数据都用上的十二个大数据项目:阿里,腾讯内部十二个大数据项目,你都有做过吗?一个大数据分析项目关键构成如下: 信息采集组.数据清洗组.数据融合

基于Bootstrap框架的临床数据管理系统的设计与开发

    基于Bootstrap框架的临床数据管理系统的设计与开发     2018年11月10日 目  录 第一章绪论... 6 1.1 选题背景及其意义... 6 1.2国内外研究现状... 7 1.2.1 临床大数据管理系统发展现状... 7 1.2.2医疗电子表单管理发展现状... 8 1.3研究目标... 9 1.4 研究内容... 10 1.5论文整体结构... 10 第二章相关技术研究... 12 2.1 AngularJS技术简述... 12 2.2 RESTful API +sw

sencha touch Model validations 自定义验证 二选一输入验证、重复验证

项目初始化时执行以下代码 1 //重写模型,方便进行自定义验证 2 Ext.define("Ext.zh.data.Model", { 3 override: "Ext.data.Model", 4 validate: function () { 5 var errors = Ext.create('Ext.data.Errors'), 6 validations = this.getValidations().items, 7 validators = Ext.d

DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表

原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这样浪费时间才写的这篇文章,高手不想的看请路过 本文内容来DevExpress XtraReports帮助文档,如看过类似的请略过. 废话少说 开始正事 一.创建应用程序并添加报表 启动 MS Visual Studio (2005.2008.或 2010). 在 Visua

那些年 我们在互联网公司之间做的二选一

众所周知,亚马逊的AWS平台在自用的同时也对外提供计算.存储和网络等基础设施服务,而沃尔玛方面所使用的一些科技公司的应用程序同样也会在AWS平台上运行.但前不久,沃尔玛告知这些科技公司如果它们想要继续获得更多业务,就不能在亚马逊AWS中运行有关沃尔玛的应用程序,原因是不希望自己的数据出现在竞争对手的平台上.有了"大哥"沃尔玛带头,随后一些零售商也对自己合作的科技公司提出了相同的要求,虽然科技公司的出走不至于伤到亚马逊的筋骨,但想必对于亚马逊来说,也要郁闷一阵子了. 虽然对国外的零售商来