FPGA笔记1 ——FPGA开发流程

老子叫甜甜 提交于 2020-02-23 02:14:11

流程

1/设计定义
2/设计输入(Verilog等)
3/分析与综合(quartus2)
4/功能仿真 (modelsim-altera)
5/布局布线
6/时序仿真 (modelsim-altera)
(不成功——时序约束)
7/io分配 及配置文件的生成
8/烧写fpga
9/在线调试(逻辑分析仪等)------------------

示例

二选一多路器(按键控制led)

/1设计定义
两个 IO ,(ab) 可以是高电平 也可以是低电平
输入按键,按下时LED 与 a端口 状态保持一致
释放时LED 与 b端口 状态保持一致

开始!

创建新的工程

文件保存位置设置 工程名设置
在这里插入图片描述
文件保存位置 在一个大文件夹内创建四个子文件夹 选择prj
在这里插入图片描述
rtl代码 doc文档 img图 prj 工程
然后 在添加代码页面 next
然后选择器件型号
设置EDA中 仿真工具 选择modelsim—Altera 语言选择 verilog
在这里插入图片描述
新建——
在这里插入图片描述

代码组成

module  led_test(a,b,key_in,led) ;  //顶层模块名要工程保持一致  括号里的是端口列表 模块中有几个    
                                      //端口 然后下一步 就是需要对 端口进行解释 哪个是哪个?
	input a;
	input b;//输入端口 a 与 b
	input key_in;//按键输入(实现输入通道的选择)   
	output led_out//led控制端口
	
	//逻辑设计开始
	//输入按键,按下时LED 与 a端口 状态保持一致  释放时LED 与 b端口 状态保持一致
	//这里按键采取的是上拉电阻输入的方式   闲时状态:高电平   按下状态:低电平 
	//key_in == 0 时 led_out == a  否则 led_out==b
	assign led_out = (key_in == 0) ? a : b;  //组合逻辑

endmodule //端口解释结束


————————————————————进行分析与综合

搭建测试平台

在这里插入图片描述
新建——
在这里插入图片描述

`timecale 1ns/1ps  //仿真时间步进 与 仿真精度(小数点)
module led_test_tb; 
// 激励信号定义, 对应连接到待测试模块的输入端口
    reg signal_a;
    reg signal_b;
    reg signal_c;  
    
//检测信号定义,对应连接到,待测试模块的输出端口
    wire led;       //定义输出信号的线

//例化待测试模块 连接起来    
	led_test led_test0 ( 
	.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;      //延时100ns
	 signal_a= 0; signal_b = 1; signal_c = 0;
	 #100;      //延时100ns
	 signal_a= 0; signal_b = 1; signal_c = 1;
	 #100;      //延时100ns
	 signal_a= 1; signal_b = 0; signal_c = 0;
	 #100;      //延时100ns
	 signal_a= 1; signal_b = 0; signal_c = 1;
	 #100;      //延时100ns
	 signal_a= 1; signal_b = 1; signal_c = 0;
	 #100;      //延时100ns
	 signal_a= 1; signal_b = 1; signal_c = 1;
	 #200;      //延时100ns
	 $stop; //系统函数 立即停止运行仿真
	 end
	 
endmodule

保存在 testbench下
在这里插入图片描述
——————————————进行分析与综合

----------------------------成功结束后--------------------------------
—>进行modelsim仿真
在这里插入图片描述
1设置脚本:工具栏assignments —>setting
在这里插入图片描述
在这里插入图片描述进行设置
效果:在这里插入图片描述

开始仿真

在这里插入图片描述
((((PS:如果出现了以下路径报错的提示:
在这里插入图片描述
工具栏 tools - options -
在这里插入图片描述
找到你的modelsim的安装位置 xxxae /ase - xxxaloem))))

仿真完成后会弹出波形窗口 点击在这里插入图片描述
进行预览全局
在这里插入图片描述
c是我们的按键信号
当他为低电平时 表示按键按下 这时led的状态 跟随信号a的状态
当他为高电平时 表示按键松开 这时led的状态 跟随信号b的状态
~这与我们的想法一致 然后就可以开始布局布线了

全编译----> 工具栏 ——processing——start Compilation (蓝色三角)
门级仿真---->工具栏—— tools——run simulation tool——gate level simulation
在这里插入图片描述
再次弹出仿真——
在这里插入图片描述
这就是我们的后仿真 (门级仿真) 会有尖峰脉冲 而在理想的前仿真中 是不会出现的
测量一下 尖峰的脉宽:
选择脉冲边沿 锁定 在添加标尺 再锁定
在这里插入图片描述
在这里插入图片描述
------------------------emmm------------------------------------------------------
在这里插入图片描述在这里可以看到 我们的按键状态变化后 led的状态没有马上就变化 而是 间隔了一段时间后才发生跳变 这个就是逻辑延迟 这个是实际存在的 后仿真会显示出来

关掉仿真 进行:

IO分配

设计终究是要实现在电路板上的 将设计里面的端口 与我们板子的管脚一一对应起来!
–> 工具栏 —— Assignments——Pin Planner

——————然后就可以根据你板子上原件对应引脚来设置了在这里插入图片描述
我们的设计:
{
当他为低电平时 表示按键按下 这时led的状态 跟随信号a的状态
当他为高电平时 表示按键松开 这时led的状态 跟随信号b的状态
} ~所以就直接将ab分配到普通io 然后再给io分别接上高低电平就可以了

最后 ——再次全编译----> 工具栏 ——processing——start Compilation (蓝色三角)

下载到板子

点击programer
在这里插入图片描述
在这里插入图片描述他会自动加载.sof文件 然后选择 usb blaster
在这里插入图片描述
————start 下载——

                                               放弃原子看小梅哥的第一天
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!