期望效果:
我们希望通过一个按键对输入LED的信号进行选择,在当我们摁下key3时,即当key3为低信号时,LED选择Key2为LED的信号,反之则取key1的信号进行参考。
多路选择器是数据选择器的别称,在多路数据传输中,能够根据需要将其中任一路选择出来的电路,叫做数据选择器,也称多路选择器或多路开关。是一种简单的组合逻辑电路。
组合逻辑实际是VerilogHDL设计中的一个重要组成部分。从电路本质上讲,组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数,与其他时刻的输入状态无关,无存储电路,也没有反馈电路。
在工程开始时,新建一个项目文件,里面新建四个文件夹,分别为:
prj(工程文件)、rtl(.v文件)、sim(仿真测试文件)、doc(波形绘制文件)
添加形状

模块框图
波形图
在sel为0时,Out输出信号是in_2波形、反之为in_1波形。

在rtl文件夹里创建一个mus2_1.v的文件,定义的模块名需要与文件名一致。此时双击打开VSCode进行代码编写。
module mus2_1(input wire in_1,input wire in_2,input wire sel,//选通信号output reg out
);
always @(*)//组合逻辑进行阻塞赋值if(sel == 1'b1)out=in_1;elseout =in_2;endmodule
在sim文件夹里新建测试文件tb_mus2_1.v
`timescale 1ns/1ns //时间尺度
module tb_mus2_1();
reg in_1;
reg in_2;
reg sel;
wire out;
initial begin //初始化变量,上电后只执行一次in_1<=1'b0;in_2<=1'b0;sel <=1'b0;
end
//设置随机波形图
always #10 in_1<={$random}%2;
always #10 in_2<={$random}%2;
always #10 sel<={$random}%2;mus2_1 mus2_1_inst ( //实例化模块.in_1(in_1),.in_2(in_2),.sel(sel),//选通信号.out(out)
);
endmodule
点击next

选择工程路径,选择到前面我们创建的prj文件夹下。填写工程名,这里尽量选择与我们的.v文件一致的名字—mus2_1。

这里我们不选择模板,直接next。

文件我们后面再添加,先next。




双击
选择文件进行添加
将测试文件添加到仿真中




在上图的1下,选择测试文件,在2处填写测试文件名。
点击下方自动打开仿真软件


解释:在标线所处位置sel为1时,输出电平应为in_1的信号为0,此时out也为0。仿真成功!如何进行仿真的具体步骤这里不进行介绍。
根据厂商提供的引脚分配图进行分配

设置引脚

依次填写对应的引脚

这里key1控制in_1信号,key2控制in_2信号,key3作为选通信号。初始时,三个按键均未摁下,key3为高电平,输出信号为key1,此时摁下key1时,key1处低电平灯亮。反之,摁下key3,选通信号选择的是key2信号,此时摁下key2,灯亮。总结,就是摁下key1灯亮,或者摁下key2+key3灯亮。


这里如果没有检测到USB-Blaster,有两种情况一是你的数据线不支持数据的传输、二是你驱动没有更新,搜一下进行更新即可识别。

keyofLED
这是第一次实物操作fpga板子,感觉很棒,总体来说这次的操作还是比较简单,但是通过自己画模块框图及波形图,对后面的仿真及代码的理解具有很强的理解性上的帮助!通过这次实验,应该算是入坑了吧,哈哈!