FPGA二选一选择器

时间:2024-07-17 08:21:28

1、需求

使用XILINX的XC7A35TFFG484-2开发板,完成二选一选择器的设计。

2、分析

二选一选择器如下所示:
在这里插入图片描述
观察可知有三个输入端,一个输出端,其逻辑原理为:当sel为高电平时,out=a,当sel为低电平时,out=b。

3、工程创建以及Verilog代码的编写

a)打开Vivado软件,创建一个新工厂,名为mux2_test
b)在setting中点击Add sources,接下来选择第二个:Add or create design sources。创建设计文件。再点击create file,如果之前已经写好可以直接导入。接下来一直点击OK,YES,Finish即可。
c)在左上的sources出多了一个mux2_test.v文件,点击打开,开始编写verilog代码。
在这里插入图片描述

module mux2_test(
	a,b,sel,out    //输入输出端口
);
input a;        // 端口类型定义
input b;
input sel;
output out;
assign out=(sel==1)?a:b;   // 三目运算符,sel为1,则out=a,否则out=b
endmodule

d)创建testbench文件
即写测试文件,可以理解为将我们的硬件放在一个测试桌上,然后要对齐进行测试输入。同上点击add source后选择第三项Add or create simulation sources,命名为mux2_test_tb。接下来在左侧sources打开对应的testbench文件后编写即可。

`timescale 1ns/1ps  //单位1ns,精度1ps
module mux2_test_tb();
// 例化,可理解为贴标签
reg a;
reg b;
reg sel;
wire out;   //这里相当于是对测试桌上的线声明类型
mux2_test mux2_test_inst0(
	.a(a),
	.b(b),
	.sel(sel),
	.out(out)
);
initial begin
a=0;b=0;sel=0;  //三输入八种情况,每次延迟200纳秒,主要是为了仿真的时候容易分辨 
#200;
a=0;b=0;sel=1;
#200;
a=0;b=1;sel=0;
#200;
a=0;b=1;sel=1;
#200;
a=1;b=0;sel=0;
#200;
a=1;b=0;sel=1;
#200;
a=1;b=1;sel=0;
#200;
a=1;b=1;sel=1;
#200;
$stop;   //让其自动停止,不过这里是1600纳秒,一般默认自动仿真到1000ns
end  
endmodule

e)按F11,即run synthesis,进行综合,编译后再运行Run lmplementation,最后点击Run Simulation,进行时序仿真。默认运行1000ns,点击运行图标可以让他继续运行。时序图如下所示:
在这里插入图片描述

可发现符合二选一多路器的逻辑。
f)查看RTL图
点击RTL,可生产对应的数字电路图,如下所示
在这里插入图片描述
g)引脚分配
根据提供的引脚分配表,如下所示
在这里插入图片描述在这里插入图片描述
将拨码开关SW2,SW1,SW0分配给sel,a,b,将led0分配给out
在这里插入图片描述
h)生成比特流文件,点击Generate Bitstream,生成后点击Open Hardware Manager
,打开硬件管理器,点击左上open target,打开开发板后点击Auto connect。再点击program device,即写入设备后即可在开发板上运行。如下所示
在这里插入图片描述

上拨b,即b为1,此时sel为0,out=b=1。
在这里插入图片描述
a同理

在这里插入图片描述