流程
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 下载——
放弃原子看小梅哥的第一天
来源:CSDN
作者:李windoo
链接:https://blog.csdn.net/helloworld573/article/details/104438911