第一课:科学FPGA开发流程与二选一多路器

科学FPGA开发流程

  1. 设计定义:就是我们想要实现一个什么东西,例如计数器、二选一多路器等。
  2. 设计输入:实现我们的设计定义,可以通过画板子、硬件描述语言、现有IP核等方式来实现。
  3. 分析综合:检查我们的设计是否有语法错误等问题。
  4. 功能仿真:通过设计输入,观察输出的值是否符合我们的预期来检查设计是否正确,例如testbench。
  5. 布局布线:将我们的设计通过具体的元器件模型连接起来。
  6. 时序仿真:前面布局布线的结果是具体的器件连接,所以在实际电路中会有延迟,时序仿真就是在实际电路中检查结果是否符合预期。
  7. 时序约束:如果时序仿真不符合预期,就要通过时序约束来调整电路,使其达到预期。
  8. IO分配以及配置文件生成:将我们的设计中的输入输出和实际开发板的管脚进行一一对应,并生成相对应的配置文件。
  9. 配置(烧写):将生成的配置文件烧写到FPGA中。
  10. 在线调试: 在FPGA中进行调试、是否符合预期。

开发实例

设计定义

二选一多路器:两个输入IO分别为a和b,按下输入键时,LED灯与a状态保持一致,否则与b保持一致。

设计输入

  1. 设计模块
//非顶层模块,故有输入输出口
module led_test(a,b,key,out);
	//输入输出信号定义
	input a;
	input b;
	input key;
	output out;
	//逻辑部分
	assign out = (key==1'b0) ? a : b;
endmodule 
  1. 验证模块
//时间单位与精度定义,1ns表示单位,1ps表示精度
`timescale 1ns/1ps
//testbench模块开始,顶层模块,故没有输入输出口
module led_test_tb;
	//激励信号定义,一般为reg寄存器型
	reg signal_a;
	reg signal_b;
	reg signal_c;
	//输出信号定义,一般为wire线网型
	wire led;
	//实例化模块,需要连接模块的输入输出口
	led_test u0(
		.a(signal_a),
		.b(signal_b),
		.key(signal_c),
		.out(led)
	);
	//信号激励产生
	initial begin
		//定义信号值
		signal_a=1'b0;signal_b=1'b0;signal_c=1'b0;
		//表示100ns后
		#100;
		signal_a=1'b0;signal_b=1'b0;signal_c=1'b1;
		#100;		
		signal_a=1'b0;signal_b=1'b1;signal_c=1'b0;
		#100;
		signal_a=1'b0;signal_b=1'b1;signal_c=1'b1;
		#100;		
		signal_a=1'b1;signal_b=1'b0;signal_c=1'b0;
		#100;
		signal_a=1'b1;signal_b=1'b0;signal_c=1'b1;
		#100;		
		signal_a=1'b1;signal_b=1'b1;signal_c=1'b0;
		#100;
		signal_a=1'b1;signal_b=1'b1;signal_c=1'b1;
		#100;	
		//模块停止符号
		$stop;
	end
endmodule 
  1. 输出波形
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值