零。前言
在学习 FPGA 课程时,为了方便基于 VHDL 语言的 FPGA 开发,建议在自己电脑上安装 Quartus II 软件。本文总结了软件及配套仿真环境的安装流程,帮助大家快速完成安装。
一、Quartus 安装
- 下载相关资料并解压。
- 打开 QuartusSetup-13.1.0.162.exe 文件开始安装。
- 安装流程 (1) 打开后点击 Next。 (2) 选择 Accept,再点击 Next。 (3) 自定义安装位置,路径尽量不包含中文和特殊符号,选择好后点击 Next。 (4) 默认全选 Devices 内容,根据芯片包需要更改后可点击 Next。 (5) Summary 确保有足够的安装空间,确认后点击 Next。 (6) 等待自动安装完成。若之前安装过未卸载干净,建议先完全卸载再重装。 (7) 完成安装后直接点击 Finish,Feedback 不用框选。
- 许可证设置 请确保使用合法授权。打开软件会提示试用或输入 License 信息,需正确配置 License 文件地址以激活软件。
二、ModelSim-Altera 安装
- 选择 ModelSimSetup-13.1.0.162.exe 运行,开始安装。
- 安装过程 (1) 点击 Next。 (2) 选择第一个安装选项,Next。 (3) 选择 Accept 然后 Next。 (4) 单击 Browse 可以更改安装位置,选择完成后 Next。 (5) 确认空间充足后 Next。 (6) 等待安装完成。 (7) 不用点框选,直接 Finish。
三、ModelSim 安装
- 版本选择,32 位系统选择 win32,64 位系统选择 win64,这里以 64 位的安装为例。
- 解压缩文件,双击运行 win64-10.4-se.exe 文件。
- 安装流程 (1) 直接单击 Next。 (2) 单击 Browse 可以更改安装位置,单击 Next。 (3) 直接点击 Agree。 (4) 等待安装完成。 (5) 50% 时候会跳出两个选项全选 YES。 (6) 最后跳出的窗口选择 NO,禁止自动更新。 (7) 最后 Done 完成安装。
- 许可证设置 打开软件会提示无注册,需按照官方文档配置环境变量 MGLS_LICENSE_FILE 指向合法的 license 文件路径。
四、Quartus 和 Modelsim 的配置
- 通过软件快捷方式或者开始界面搜索打开 Quartus II。
- 配置 EDA 工具 (1) 打开 Tools->Option 界面,选择 EDA Tool Options,点击 ModelSim 和 ModelSim-Altera 的...选择文件。 (2) ModelSim 中选择 win64 文件夹,ModelSim-Altera 中选择 win32aloem 文件夹,最后点击 OK。
- 配置 Compiler (1) 配置 Compiler,Tools->Launch Simulation Library Compiler。 (2) Executable location 选择 Modelsim 的 win64 文件夹,Output directory 选择 output_files,点击 Start。 (3) 编译成功显示全绿(有 warning 可以不管)。
- 新建一个 vhdl 文件用来测试,复制测试代码进去,保存文件名为 div(与 entity 同名)。
测试代码(6 分频)
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;
entity div is
port(clk : in std_logic; rst : in std_logic; clkout :out std_logic );
end div;
architecture rtl of div is
constant n : integer range 0 to 10 := 6; --这里的 n 可以是任意值,当然要大于 1.
signal clk_p : std_logic;
signal clk_n : std_logic;
signal cnt_p : integer range 0 to n;
signal cnt_n : integer range 0 to n;
begin
process(clk_p, clk_n)
begin
if((n mod 2) = 0)then
clkout <= clk_p;
else
clkout <= clk_p or clk_n;
end if;
end process;
process(clk, rst)
begin
if(rst = '0') then
cnt_p <= 0;
elif(clk'event and clk = '1') then
if(cnt_p = n-1) then
cnt_p <= 0;
else
cnt_p <= cnt_p + 1;
end if;
end if;
end process;
process(clk, rst)
begin
if(rst = '0') then
clk_p <= '0';
elif(clk'event and clk = '1')then
if (cnt_p < (n/2)) then
clk_p <= '1';
else
clk_p <= '0';
end if ;
end if;
end process;
process(clk, rst)
begin
if(rst = '0') then
cnt_n <= 0;
elif(clk'event and clk = '0')then
if(cnt_n = n-1) then
cnt_n <= 0;
else
cnt_n <= cnt_n + 1;
end if;
end if;
end process;
process(clk, rst)
begin
if(rst = '0') then
clk_n <= '0';
elif(clk'event and clk = '0')then
if (cnt_n < (n/2)) then
clk_n <= '1';
else
clk_n <= '0';
end if ;
end if;
end process;
end rtl;


