VHDL-QuartusⅡmodsim

VHDL-QuartusⅡmodsim,vhdl,quartus,Vhdl,Quartus,我开始为DE0板编写VGA控制器。我有一个编译并加载到DE0板上的模型。它还显示测试消息。我遇到的问题是,我无法使用Quartus II modsim模拟我的控制器。当我运行模拟时,我无法启动VGA文件。文件中缺少小加号图标。我使用的图片和模型文件如下: vga型号 LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; USE IEEE.numeric_std.ALL; ENTITY VGA is PORT (clk

我开始为DE0板编写VGA控制器。我有一个编译并加载到DE0板上的模型。它还显示测试消息。我遇到的问题是,我无法使用Quartus II modsim模拟我的控制器。当我运行模拟时,我无法启动VGA文件。文件中缺少小加号图标。我使用的图片和模型文件如下:

vga型号

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;

ENTITY VGA is 
PORT (clk                       :   IN   std_logic; -- demo had 2 bit vector
        rst                     :   IN   std_logic:='1';
        vga_hs, vga_vs          :   OUT std_logic;
        vga_r, vga_g, vga_b :   OUT std_logic_vector(3 DOWNTO 0));
END ENTITY VGA;

ARCHITECTURE A1 OF VGA IS
SIGNAL clk25    :   std_logic; -- clk25 signal
BEGIN
SYNC1    :  ENTITY work.sync(A1)
            PORT MAP (clk25, vga_hs, vga_vs, vga_r, vga_g, vga_b);
CLK_25 :    ENTITY work.CLK25(behav)
            PORT MAP (clk, rst, clk25);
END ARCHITECTURE A1;
同步模型

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;

ENTITY SYNC IS
GENERIC (
h_res               :   integer:= 640 ;     -- horizontal screen resolution
h_fp                :  integer:= 16 ;   -- horizontal front porch
h_bp                :   integer:= 48 ;     -- horizontal back porch
h_sync          :   integer:= 96 ;  -- horizontal sync pulse duration
h_sync_pol      :   std_logic:='0';     -- horizontal sync pulse state
v_res               :   integer:= 480 ; -- vertical screen resolution
v_fp                :   integer:= 10 ;     -- vertical front porch
v_bp                :   integer:= 33 ;      -- vertical back porch
v_sync          :  integer:= 2;    -- vertical sync pulse duration
v_sync_pol      :   std_logic:='0'    -- vertical sync pulse state
);
PORT(
clk                             :   IN      std_logic;
h_sync_pulse, v_sync_pulse  :   OUT     std_logic;
r, g, b                         :   OUT std_logic_vector(3 DOWNTO 0)
);
END ENTITY SYNC;

ARCHITECTURE A1 OF SYNC IS
 CONSTANT h_size  : integer := (h_res + h_fp + h_bp + h_sync); -- total horizontal vector
 CONSTANT v_size  : integer := (v_res + v_fp + v_bp + v_sync); -- total vertical vector
 SIGNAL h_pos       : integer RANGE 0 TO h_size := 0; -- total horizontal vector
 SIGNAL v_pos      : integer RANGE 0 TO h_size := 0; -- total vertical vector
BEGIN
TIMING :PROCESS(clk, h_pos, v_pos) IS
BEGIN
    IF rising_edge(clk) THEN
        IF (h_pos <= 480 or v_pos <= 285)  THEN -- middle of the screen is pic res/2 + (FP + sync + BP)
            r <= (OTHERS => '1');
            g <= (OTHERS => '1');
            b <= (OTHERS => '1');
        ELSE
            r <= (OTHERS => '0');
            g <= (OTHERS => '0');
            b <= (OTHERS => '0');   

        END IF;
                    IF (h_pos <= 480 or v_pos <= 285)  THEN -- middle of the screen is pic res/2 + (FP + sync + BP)
            r <= (OTHERS => '1');
            g <= (OTHERS => '1');
            b <= (OTHERS => '1');
        ELSE
            r <= (OTHERS => '0');
            g <= (OTHERS => '0');
            b <= (OTHERS => '0');   
        END IF;
        IF (h_pos < h_size) THEN
                h_pos <= h_pos + 1;
            ELSE
                h_pos <= 0;
            IF (v_pos < v_size) THEN
                    v_pos <= v_pos + 1;
                ELSE
                    v_pos <= 0; --< edit was v_pos <= v_pos
            END IF;
        END IF;

        IF (h_pos > h_fp and h_pos < h_fp + h_sync ) THEN -- H_POS between end of FP and the end of H_SYNC
            h_sync_pulse <= h_sync_pol;                       -- H_SYNC needs to stay high during display
        ELSE
            h_sync_pulse <= '1';
        END IF; 

        IF (v_pos > v_fp and v_pos < v_fp + v_sync ) THEN    --V_POS between end of FP and the end of V_SYNC
            v_sync_pulse <= v_sync_pol;                          -- V_SYNC needs to stay high during display
        ELSE
            v_sync_pulse <= '1';
        END IF;

        IF ((h_pos > 0 and h_pos < h_fp + h_bp + h_sync) or (v_pos > 0 and v_pos < v_fp + v_bp + v_sync )) THEN --During all of SYNC i.e FP + SYNC + BP colour signals stay low
            r <= (OTHERS => '0');
            g <= (OTHERS => '0');
            b <= (OTHERS => '0');
        END IF;         
    END IF;
END PROCESS TIMING; 
END ARCHITECTURE A1;
IEEE库;
使用IEEE.std_logic_1164.ALL;
使用IEEE.numeric_std.ALL;
实体同步是
一般的(
分辨率:整数:=640;--水平屏幕分辨率
h_fp:integer:=16;--水平前廊
h_bp:整数:=48;--水平后廊
h_同步:整数:=96;--水平同步脉冲持续时间
h_sync_pol:std_逻辑:='0';--水平同步脉冲状态
v_res:integer:=480;--垂直屏幕分辨率
v_fp:integer:=10;--垂直前廊
v_bp:整数:=33;--垂直后廊
v_同步:整数:=2;--垂直同步脉冲持续时间
v_sync_pol:std_逻辑:='0'--垂直同步脉冲状态
);
港口(
clk:标准逻辑中;
h_同步_脉冲、v_同步_脉冲:输出标准_逻辑;
r、 g,b:输出标准逻辑向量(3到0)
);
终端实体同步;
SYNC的体系结构是
常量h_大小:整数:=(h_res+h_fp+h_bp+h_sync);--总水平矢量
常量v_大小:整数:=(v_res+v_fp+v_bp+v_sync);--总垂直矢量
信号h_位置:从0到h_大小的整数范围:=0;--总水平矢量
信号v_位置:整数范围0到h_大小:=0;--总垂直矢量
开始
定时:进程(时钟、h_pos、v_pos)为
开始
如果上升沿(clk),则

如果(h_pos)测试台在哪里?为了节省时间,我还没有编写测试台。我想先看看是否可以在mod sim中打开它,然后手动更改一些输入值。双重检查您是否编译了正确的文件,因为在使用
vga
(vga.vhd)编译文件时,它将在ModelSim工作库中生成实体和体系结构。已选中。我的模型“vga”中编译了两个子组件“sync”和“clk25”它只有一个架构。编译后,我仍然只有vga实体以modish显示,但没有任何架构。您没有为clk25提供任何代码,因此我对该实例进行了注释。除此之外,它在Modelsim和Quartus上都运行良好。您是否尝试退出Modelsim和Quartus,删除所有生成的文件s(库、项目文件等)并重新开始?