FPGA学习笔记
简介
- 所用芯片: Cyclone IV EP4CE10F17C8
- 所用软件: Quartus-13.0.0.156 modelsim-altera
软件安装
解压
- 分别安装3个
或者
安装Quartus-13
这里,
第 1 项为 quartus 软件主包,为必装选项;
第 2 项为 quartus 软件 64 位系统支持
包,如果你的系统是 64 位的,就需要安装此包,若为 32 位的即可不用勾选,
第 3 项为 quartus的帮助选项,建议安装。
第 4 项为 modelsim –altera 的初学者版本,如果只是基础的学习和仿真,不涉及到相当多的代码内容,安装初学者版本即可完全满足条件。
如果需要仿真很大的内容,就需要选择安装第 5 项,第 5 项使用需要 license,我们可以也可以选择破解,但是不容易破解成功,所以如果没实在的必要,就只安装初学者版本即可。
第 6 项为 dspbuilder,涉及到与 matlab 联合使用,进行相关数字信号处理的开发。
安装 modelsim-altera
Quartus 破解
- 可以通过在 Quartus II 中依次点击【Tools】->【License Setup】来重新打开
- 用Quartus_II_13.0_x64破解器.exe破解C:\altera\13.0\quartus\bin64下的sys_cpt.dll文件(运行Quartus_II_13.0_x64破解器.exe后,直接点击“应用补丁”,如果出现“未找到该文件。搜索该文件吗?”,点击“是”,(如果直接把该破解器Copy到C:\altera\13.0\quartus\bin64下,就不会出现这个对话框,而是直接开始破解!)然后选中sys_cpt.dll,点击“打开”。安装默认的sys_cpt.dll路径是在C:\altera\13.0\quartus\bin下)。
- 把license.dat里的XXXXXXXXXXXX 用网卡号替换
- 在Quartus II 13.0的Tools菜单下选择License Setup,然后选择License file,最后点击OK。
- 注意:license文件存放的路径名称不能包含汉字和空格,空格可以用下划线代替。
modelsim破解
1.安装完成后复制MentorKG.exe和patch_dll.bat到Modelsim安装目录的win32aloem文件夹下
2.编辑patch_dll.bat文件,将内容改为:(路径需修改成自己的路径)
attrib -r D:\modeltech_10.1c\win32\mgls.dll
pause
attrib +r D:\modeltech_10.1c\win32\mgls.dll
pause
3.运行CMD,输入:
CD D:\modeltech_10.1c\win32
D:
attrib -r mgls.dll
attrib -r mgls64.dll
MentorKG.exe -patch .\
4.将生成的LICENSE.TXT复制到D:\modeltech_10.1c文件夹里(自己的路径)
5.添加环境变量
变量名:MGLS_LICENSE_FILE
变量值:D:\modeltech_10.1c\LICENSE.TXT(自己的路径)
安装器件库
FPGA介绍
电源供电
运行配置
原理图设计方式
新建工程
新建原理图文件
添加元器件
- 根据原理图设计一个按键按下就电亮LED,松手就熄灭的逻辑电路
编译
仿真
下载
基于verilog设计
新建工程及代码
- 新建工程
- 新建.v文件
- 二选一多路器代码如下
module alternative(
input a,
input b,
input s,
output out
);
assign out = s ? a : b;
endmodule
- 使用大学仿真,新建仿真文档
- 选择管脚
- 设置并仿真
使用modelsim仿真
- 确认安装的modelsim软件版本
- 设置quartus软件和modelsim关联路径
- 设计仿真激励: testbench
- 设置nativelink
- 运行仿真
新建.v文件用于设计仿真激励
仿真激励代码如下
`timescale 1ns/1ns //时间刻度
module alternative_testbench();
//定义激励源
reg s1,s2,s3;
wire led;
//配置模块并将激励输入模块
alternative alternative_simulation(
.a(s1),
.b(s2),
.s(s3),
.out(led)
);
//仿真
initial begin
s1 = 0; s2 = 0; s3 = 0;//改变激励
#100;//延时100个时间刻度
s1 = 1; s2 = 0; s3 = 0;//改变激励
#100;//延时100个时间刻度
s1 = 0; s2 = 1; s3 = 0;//改变激励
#100;//延时100个时间刻度
s1 = 1; s2 = 1; s3 = 0;
#100;
s1 = 0; s2 = 0; s3 = 1;
#100;
s1 = 1; s2 = 0; s3 = 1;
#100;
s1 = 0; s2 = 1; s3 = 1;
#100;
s1 = 1; s2 = 1; s3 = 1;
#100;
$stop;
end
endmodule
配置软件关联
新建脚本文件
添加脚本文件
配置modelsim路径
开始功能仿真,(下面那个是时序仿真)
放大窗口
下载
加载文件
verilog语法
模块module - endmodule
- Verilog HDL程序是由模块构成的。
- 每个模块的内容都是嵌在module和endmodule两个语句之间。
- 每个模块实现特定的功能。
- 模块可以进行层次嵌套。
模块的结构
module <模块名> (<端口列表>)
<I/O说明>
<内部信号声明>
<功能定义>
endmodule
module led (
/* 端口列表 */
input clk, //输入端口
output [3:0]follow_led //输出端口4个
);
endmodule
always过程块
- 当敏感信号表达式的值改变时候,就执行一遍块内语句。
- 同时always过程块是不能够嵌套使用的。
模板
always @(<敏感信号表达式>)
begin
//过程赋值
//if语句
//case语句
//while、repeat、for语句
//task、function调用
end
//上升沿触发,高电平清0有效
always @(posedge clk or posedge clear)
always @(posedge clk or negedge clear)
begin
if(!clear)//当clear==0时候,always会由事件驱动
qout=0;
else
qout=in;
end
initial过程块
-
initial语句主要面向功能模拟,通常不具有可综合性。
-
模拟0时刻开始执行,只执行一次
-
同一模块内的多个initial过程块,模拟0时刻开始并行执行。
-
initial与always语句一样,是不能嵌套使用的。即在initial语句中不能再次嵌套initial语句块。
initial模板
initial
begin
语句1;
语句2;
......
end
对变量和存贮器初始化
initial
begin
reg1=0;
for(addr=0;addr<size;addr=addr+1)
memory[addr]=0;
end
计数器
always @(posedge clk)begin
if(count == 25'd24_999_999)
count <= 25'd0;
else
count <= count + 1'b1;
end