04FPGA组合逻辑—多路选择器(二选一)

目录

1. 理论

2. 实操

2.1 硬件资源

2.2 程序设计

2.2.1 模块框图

2.2.2 波形图绘制 

2.2.3 rtl代码

2.2.4 验证

3.总结


1. 理论

       多路选择器又称数据选择器、多路开关。在选择变量控制下,从多路数据输入中选择某一路数据送至输出端。多路选择器是 FPGA 内部的一个基本资源,主要用于内部信号的选通。

2. 实操

实验目标:  设计并实现 2 选 1 多路选择器,功能是通过选通控制信号 S 确定选通 A 路或 B 路作为信号输出。当选通控制信号 S 为 1 时,信号输出为 A 路信号;当选通控制信号 S 为 0时,信号输出为 B 路信号。

2.1 硬件资源

       开发板上的按键和 LED 灯进行 2 选 1 多路选择器的验证,选取 KEY1、KEY2、 KEY3 分别作为信号 A、信号 B 和选通信号 S 的信号输入;以 LED 灯 D5 作为信号输出 ,如下图所示。

04FPGA组合逻辑—多路选择器(二选一)_第1张图片

     按键未按下为高电平、按下为低电平; LED 灯高电平点亮。

2.2 程序设计

2.2.1 模块框图

04FPGA组合逻辑—多路选择器(二选一)_第2张图片

变量名与硬件电路管脚对应关系:

            in1——>key1        in2——>key2       sel——>key3      out——>led

2.2.2 波形图绘制 

04FPGA组合逻辑—多路选择器(二选一)_第3张图片

(规律性很强,当sel为高时,out完全与in1波形相同;当sel为低时,outout完全与in2波形相同) 

2.2.3 rtl代码

依据波形图写代码,可选择if...case、if...else、三目运算符三种语句中一种实现该功能。

`timescale  1ns/1ns

module  mux2_1             
(
    input   wire    in1,    
    input   wire    in2,    
    input   wire    sel,    

    output  reg    out     
);                        

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

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


//assign out = (sel == 1'b1) ? in1 : in2; //注意将端口号中管脚属性的reg改为wire

endmodule                       

2.2.4 验证

仿真验证:

`timescale  1ns/1ns

module  tb_mux2_1();    

reg     in1;
reg     in2;
reg     sel;

wire    out;

initial
    begin   
        in1 <= 1'b0;
        in2 <= 1'b0;
        sel <= 1'b0;
    end

//in1:产生输入随机数,模拟输入端1的输入情况
always #10 in1 <= {$random} % 2;    //取模求余数,产生非负随机数0、1,每隔10ns产生一次随机数

//in2:产生输入随机数,模拟输入端2的输入情况
always #10 in2 <= {$random} % 2;

//sel:产生输入随机数,模拟选择端的输入情况
always #10 sel <= {$random} % 2;

mux2_1  mux2_1_inst
(   
    .in1(in1),  
    .in2(in2),  
    .sel(sel),  

    .out(out)   
);

endmodule

04FPGA组合逻辑—多路选择器(二选一)_第4张图片

 上板验证:

sel为高,led为key1的状态; 

04FPGA组合逻辑—多路选择器(二选一)_第5张图片

sel为高,led为key1的状态(key1被按下);

04FPGA组合逻辑—多路选择器(二选一)_第6张图片

 sel为低,led为key2的状态(key2被按下);

04FPGA组合逻辑—多路选择器(二选一)_第7张图片

 

3.总结

1.重点掌握三目运算符的使用和仿真中如何产生随机数。 

2. 常见的数据选择器有二选一,四选一、八选一以及十六选一,这里注意区分数据选择器与译码器,虽然可以实现的效果相同,但是实现方式不一样,故他们消耗的资源也不一样。

说明:

       本人使用的是野火家Xilinx Spartan6系列开发板及配套教程,以上内容如有疑惑或错误欢迎评论区指出,或者移步B站观看野火家视频教程。

开发软件:ise14.7     仿真:modelsim 10.5 

如需上述资料私信或留下邮箱。

你可能感兴趣的:(FPGA_Xilinx,Spartan6基础入门,fpga开发,硬件工程)