前言
在学习 FPGA 课程时,感觉学校机房电脑用起来不是很方便,想着在自己电脑上下载一个 Quartus II 来进行基于 vhdl 语言的 FPGA 开发。原以为是一件很简单的事情,没想到搜了全网文章发现几乎没有一个完整且详细的流程教学安装,因此想做一个纯小白式安装教程,将网上分享的几位大佬关于安装部分的流程都总结到一文当中,包括软件及软件配套仿真和芯片库的安装,让大家花最少的时间完成安装。
一、Quartus 安装
-
首先需要去官方或可靠渠道下载相关资料。
-
下载的是压缩包,解压后可以看到相关文件。 先打开 QuartusSetup-13.1.0.162.exe 文件开始安装。
-
安装流程 (1)打开后点击 next。 (2)选择第一个 accept,再点击 next。 (3)选择文件夹可以自定义安装的位置,尽量建立一个新的文件夹(路径不包括中文和特殊符号)来存放,不然很多子文件夹可能会填的很乱....,选择好后点击 next。 (4)除了最后一个不勾选外,其他全选(默认情况),当然也可以根据自己的芯片包需要更改 Devices 里面的内容,然后 Next。 (5)Summary 确保有足够的安装空间,确认后点击 Next。 (6)这里就开始自动安装了,需要等待一段时间。 如果你之前安装过 quartus 却没有删除干净的话,它可能会问你是不是要建立 quartus(copy),最好还是先把之前的卸载完全再重装(卸载教程在后面)。 (7)完成安装后直接点击 Finish,最后一个 feedback 不用框选。
二、ModelSim-Altera 安装
- 选择 ModelSimSetup-13.1.0.162.exe 运行,开始安装。
- 安装过程 (1)点击 next。 (2)选择第一个安装,next。 (3)选择 accept 然后 next。 (4) 单击文件夹可以更改安装位置,选择完成后 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 完成安装。
四、Quartus 和 ModelSim 的配置
- 通过软件快捷方式或者开始界面搜索打开 quartus ii。
- (1)打开 Tools->option 界面,选择 EDA Tool Options,点击 ModelSim 和 ModelSim-Altera 的...选择文件。 (2)ModelSim 中选择 win64 文件夹,ModelSim-Altera 中选择 win32aloem 文件夹,最后点击 OK。
- (1)配置 compiler,Tools->Launch Simulaton 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; elsif(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'; elsif(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; elsif(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'; elsif(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;


