赞
踩
FPGA学习入门小白,学习FPGA开始由正点原子入门,开始时候学习方法和刚开始学习单片机的方法类似,学习了简单的流水灯、数码管的简单功能,后来发现还是有些区别的,对自己未来规划的重点方向是FPGA。感觉自己对FPGA的开发流程,仿真工具掌握的不是很好,师兄推荐了小梅哥的学习视频,虽然手头的板子是正点原子的,但是型号一样,就直接再用小梅哥的视频给我回炉重造一遍吧~
设计定义的目的是先明确设计需要完成的目标及功能,然后提出合理的设计要求
设计输入在Quartus ii软件上完成,使用verilog语言或调用IP核的方式,完成设计。也就是编写程序的过程。
主要用来检查语法和逻辑错误编译单个的verilog文件(类似于程序编译)
前仿真,不考虑实际延迟,只考虑逻辑情况,逻辑之间零延迟。
软件对设计代码布局到对应芯片并完成连线,生成带有逻辑延迟的仿真模型。(类似于全编译的过程,编译整个工程)
后仿真,当芯片中进行布局布线后,芯片内部存在延迟。如果传输时间太长,会导致时序设计失败。
修改方式:
1、修改设计输入,减少组合逻辑
2、使用时序约束
通过添加时序约束的按时可以防止由于芯片内部的线延迟等原因导致时序设计失败。
引脚分配,由FPGA连接到实际电路,具体引脚应该如何定义应该看板子内部是如何规定与外设之间的连线的。
生成和执行的.qpf文件,类似于单片机中的hex文件
在线仿真,在工作的状态下观测输出结果是否正确。与单片机的在线仿真调试类似。
举个例子来实现上面的整个步骤,重点在于怎么实现功能仿真和时序仿真的过程。
设计定义:一共用三个输入、一个输出
当输入1时,a与led输出状态一致
当输入0时,b与led输出状态一致
1、 编写testbench的verilog文件
`timescale 1ns/1ps //1ps:仿真精度 1ns:仿真步进 //#100.001 //延时100.001ns module led_test_tb; //激励信号定义,对应连接到待测试模块输入端口 reg signal_a; reg signal_b; reg signal_c; //检测信号定义,对应连接到待测试模块输出端口 wire led; //一个模块设计好后,可以多次使用 //led_test led_test0、led_test led_test1 //待测试模块例化 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; 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;//在仿真完成之后及时停止 end endmodule
2、 在EDA工具中添加仿真工具
首先将仿真工具的路径添加到Quartus中
添加对应仿真工具的仿真路径
这里因为课题室电脑和笔记本不太一样,笔记本装的是Modelsim,笔记本是modelsim-altera,所以报错了,注意选择对应的仿真工具。
在工程中加载自己编写的testbench文件
点击
或
遇到问题
之前在电脑上使用modelsim进行仿真,后来使用modelsim-altera进行仿真
解决方法
删除之前编译产生的simulation中的内容,重新编译
前仿真结果
点击或
仿真结果
发现有不希望产生的脉冲出现,和逻辑延迟产生
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。