一、Quartus 安装
-
解压安装包,运行 QuartusSetup-13.1.0.162.exe 开始安装。
-
安装流程 (1) 点击 Next。 (2) 选择 Accept 协议,点击 Next。 (3) 自定义安装路径,建议新建文件夹且路径不含中文和特殊符号,点击 Next。 (4) 默认全选 Devices 内容,根据需求可调整,点击 Next。 (5) 确认空间充足后点击 Next。 (6) 等待自动安装完成。若之前未卸载干净可能会提示,建议先完全卸载再重装。 (7) 完成后点击 Finish,Feedback 无需勾选。
二、ModelSim-Altera 安装
-
运行 ModelSimSetup-13.1.0.162.exe。
-
安装流程 (1) 点击 Next。 (2) 选择第一个安装选项,Next。 (3) 接受协议,Next。 (4) 更改安装位置,Next。 (5) 确认空间,Next。 (6) 等待安装完成。 (7) 直接 Finish。
三、ModelSim 安装
-
版本选择:64 位系统选择 win64 版本。
-
解压缩文件,双击运行 win64-10.4-se.exe。
-
安装流程 (1) 点击 Next。 (2) 更改安装位置,Next。 (3) 同意协议 Agree。 (4) 等待安装完成。 (5) 中途弹出选项时全选 YES。 (6) 最后窗口选择 NO,禁止自动更新。 (7) Done 完成安装。
四、Quartus 和 ModelSim 的配置
-
打开 Quartus II。
-
设置 EDA 工具选项 (1) Tools -> Options -> EDA Tool Options。 (2) 分别选择 ModelSim 和 ModelSim-Altera 的安装目录(注意区分 win64 和 win32_aloem),点击 OK。
-
编译仿真库 (1) Tools -> Launch Simulation Library Compiler。 (2) Executable location 选择 ModelSim 的 win64 文件夹,Output directory 选择 output_files,点击 Start。 (3) 编译成功显示全绿(Warning 可忽略)。
-
新建工程测试 (1) 新建 VHDL 文件,保存为 div.vhd(实体名需一致)。 (2) 输入测试代码(示例为 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; 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;


