Augus

2.菜鸟初入FPGA之二选一多路器的验证

0
阅读(4137)


    学FPGA少不了语言的使用,因为Verilog语言类似C语言,本人有一定C语言基础,所以从Verilog开始相对简单.FPGA学习开始:

    1:Verilog语言的学习,熟悉Verilog语言的各种语法,少不了夏宇闻教授的《verilog 数字系统设计教程

     2:熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA板子。

---------------------------------------------------------------------------------------------------     好了下面进入正题:开始第一次的设计--二选一多路器的验证

关于多路数据选择器,大致就是指经过选择,把多个通道的数据传送到唯一的公共数据通道上去,实现数据选择功能的逻辑电路称为数据选择器。它的作用相当于多个输入的单刀多掷开关,这样应该更容易懂点.

   下图所示为二选一数据选择器原理图,a,b为输入端,sel为控制端,out为输出端 

                  2016-03-23_162317.jpg

下面通过按键控制LED对二选一选择器的验证

设计定义:

二选一多路器

两个输入IO,a、b。可以是高电平,也可是低电平

输入按键按下时,

LED灯与a端口状态保持一致。

输入按键释放时,

LED灯与b端口状态保持一致



参考代码:

module led_test(a,b,key_in,led_out);  //module xxx(); 
	input a;//输入端口A
	input b;//输入端口B
	input key_in;	//按键输入,控制多路数据输出的选择
	
	output led_out;	//led 控制端口
	
	assign led_out = (key_in == 0)? a : b;//当key_in == 0 :led_out = a
	
endmodule

仿真代码:

`timescale 1ns/1ps    //时间精度设置
module led_test_tb;
       //激励信号定义,对应连接到待测试模块的输入端口
	reg signal_a;
	reg signal_b;
	reg signal_c;
       //待检测信号定义,对应连接到待测试模块的输出端口	
	wire led;

      //例化待测试模块,注意:"led_test"必须和文件名必须和顶层名称一致 "led_test_tb"可以个人定义
	led_test led_test_tb(
		.a(signal_a),
		.b(signal_b),
		.key_in(signal_c),
		.led_out(led)
	);
	
      //产生激励测试	
	initial begin
		signal_a = 0;signal_b = 0;signal_c = 0;
		#100;//延时100ns
		signal_a = 0;signal_b = 0;signal_c = 1;
		#100;
		signal_a = 0;signal_b = 1;signal_c = 0;
		#100;
		signal_a = 0;signal_b = 1;signal_c = 1;
		#100;
		signal_a = 1;signal_b = 0;signal_c = 0;
		#100;
		signal_a = 1;signal_b = 0;signal_c = 1;
		#100;
		signal_a = 1;signal_b = 1;signal_c = 0;
		#100;
		signal_a = 1;signal_b = 1;signal_c = 1;
		#200;
		$stop;	//$stop的使用结束仿真
	end
endmodule

对程序完成编译,观察一下RTL viewer

    2016-03-23_164231.jpg

可以看到,RTL与我们需要的设计结果一样

然后我们就可以直接调用 modelsim 进行仿真查看前仿真波形,再次观察结果是否符合设计

2016-03-23_164557.jpg

通过观察仿真波形没有问题,说明代码逻辑可能正确(当然进一步确认需要后仿真和板级验证),最后当程序能够在板上正确运行才算成功.

    

   由于本人能力有限,出错之处的请各位给予帮助.谢谢!


 更多资料参考

                发烧友小梅哥专版 http://bbs.elecfans.com/zhuti_fpga_1.html

                   梦翼师兄的炼狱传奇


下图所示为二选一数据选择器原理图,

a,b

为输入端,

sel

为控制端,

out

为输出端