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同理