Vhdl 图像rom显示VGA

Vhdl 图像rom显示VGA,vhdl,Vhdl,我正在用VHDL FPGA做代码,代码内容分三部分,第一部分是VGA,第二部分是rom代码,第三部分是绘制图像,第三部分是保存图像,rom显示VGA并得到问题 错误(10621):vga处的VHDL Use子句错误。vhd(230):多个Use子句导入一个简单名称为“unsigned”的声明——没有一个声明是直接可见的 提前谢谢 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_log

我正在用VHDL FPGA做代码,代码内容分三部分,第一部分是VGA,第二部分是rom代码,第三部分是绘制图像,第三部分是保存图像,rom显示VGA并得到问题

错误(10621):vga处的VHDL Use子句错误。vhd(230):多个Use子句导入一个简单名称为“unsigned”的声明——没有一个声明是直接可见的

提前谢谢

 LIBRARY ieee;
            USE ieee.std_logic_1164.all;
            USE ieee.std_logic_arith.all;
            use IEEE.STD_LOGIC_UNSIGNED.ALL;
            use IEEE.NUMERIC_STD.ALL;
            LIBRARY lpm;
            USE lpm.lpm_components.all;
            ----------------------------------------------------------
            ENTITY vga IS
            GENERIC (
            Ha: INTEGER := 96; --Hpulse
            Hb: INTEGER := 144; --Hpulse+HBP
            Hc: INTEGER := 784; --Hpulse+HBP+Hactive
            Hd: INTEGER := 800; --Hpulse+HBP+Hactive+HFP
            Va: INTEGER := 2; --Vpulse
            Vb: INTEGER := 35; --Vpulse+VBP
            Vc: INTEGER := 515; --Vpulse+VBP+Vactive            vbp
            Vd: INTEGER := 525); --Vpulse+VBP+Vactive+VFP
            PORT (
            clk: IN STD_LOGIC; --50MHz in our board
            red_switch, green_switch, blue_switch: IN STD_LOGIC;
            pixel_clk: BUFFER STD_LOGIC;
            Hsync, Vsync: BUFFER STD_LOGIC;
            R, G, B: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
            nblanck, nsync : OUT STD_LOGIC);
            END vga;
            ----------------------------------------------------------
            ARCHITECTURE vga OF vga IS
            SIGNAL Hactive, Vactive, dena: STD_LOGIC;
            SIGNAL address: STD_LOGIC_VECTOR(9 DOWNTO 0);
            SIGNAL intensity: STD_LOGIC_VECTOR(7 DOWNTO 0);
            SIGNAL hPos: integer;
            SIGNAL vPos : integer;
            SIGNAL videoOn : STD_logic;
            constant picture_size : Integer:=9000; 
            begin
            -------------------------------------------
            --ROM instantiation:
            myrom: lpm_rom
            GENERIC MAP (
            lpm_widthad => 10, --address width
            lpm_outdata => "UNREGISTERED",
            lpm_address_control => "REGISTERED",
            lpm_file => "2colom.mif", --data file
            lpm_width => 8) --data width 
            PORT MAP (
            inclock=>NOT pixel_clk, address=>address, q=>intensity);
            --Create address (row number):
            PROCESS (Vsync, Hsync)
            VARIABLE line_counter: INTEGER RANGE 0 TO Vd;
            BEGIN
            IF (Vsync='0') THEN
            line_counter := 0;
            ELSIF (Hsync'EVENT AND Hsync='1') THEN
            IF (Vactive='1') THEN
            line_counter := line_counter + 1;
            END IF;
            END IF;
            -- address <= conv_std_logic_vector(line_counter , 16);
            --  address <= conv_std_logic_vector(line_counter , 10);
            end process;
            ---------------------------------------------
            Horizontal_position_counter:process(pixel_clk)
            begin   
            if(pixel_clk'event and pixel_clk = '1')then
            if (hPos = (Ha + Hb + Hc + Hd)) then
            hPos <= 0;
            else
            hPos <= hPos + 1;
            end if;
            end if;
            end process;
            Vertical_position_counter:process(pixel_clk, hPos)
            begin
            if(pixel_clk'event and pixel_clk = '1')then
            if(hPos = (Ha + Hb + Hc + Hd))then
            if (vPos = (Va + Vb + Vc + Vd)) then
            vPos <= 0;
            else
            vPos <= vPos + 1;
            end if;
            end if;
            end if;
            end process;
            Horizontal_Synchronisation:process(pixel_clk, hPos)
            begin
            if(pixel_clk'event and pixel_clk = '1')then
            if((hPos <= (Ha + Hb)) OR (hPos > Ha + Hb + Hc))then
            Hsync <= '1';
            else
            Hsync <= '0';
            end if;
            end if;
            Vertical_Synchronisation:process(pixel_clk, vPos)
            begin
            if(pixel_clk'event and pixel_clk = '1')then
            if((vPos <= (Va + Vb)) OR (vPos > Va + Vb + Vc))then
            Vsync <= '1';
            else
            Vsync <= '0';
            end if;
            end if;
            end process;
            video_on:process(pixel_clk, hPos, vPos)
            begin
            if(pixel_clk'event and pixel_clk = '1')then
            if(hPos <= Ha and vPos <= va)then
            videoOn <= '1';
            else
            videoOn <= '0';
            end if;
            end if;
            end process;
            draw:process(pixel_clk, hPos, vPos, videoOn)
            begin
            if(pixel_clk'event and pixel_clk = '1')then
            if(videoOn = '1')then
            if (unsigned(address)<picture_size) then
            R<=intensity(11 downto 8);
            G<=intensity(7 downto 4);
            B<=intensity(3 downto 0);
            address<= STD_LOGIC_VECTOR (unsigned(address)+1);
            else
            R<=(others=>'0');
            G<=(others=>'0');
            B<=(others=>'0');
            end if;
            else
            R<=(others=>'0');
            G<=(others=>'0');
            B<=(others=>'0');
            address<=(others=>'0');
            end if;
            end if;
            end process;
            ---- 
            END vga;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_arith.all;
使用IEEE.STD_LOGIC_UNSIGNED.ALL;
使用IEEE.NUMERIC_STD.ALL;
图书馆lpm;
使用lpm.lpm_components.all;
----------------------------------------------------------
实体vga是
一般的(
Ha:整数:=96;--Hpulse
Hb:整数:=144;--Hpulse+HBP
Hc:整数:=784;--Hpulse+HBP+Hactive
Hd:整数:=800;--Hpulse+HBP+Hactive+HFP
Va:整数:=2;--V脉冲
Vb:整数:=35;--Vpulse+VBP
Vc:整数:=515;--Vpulse+VBP+Vactive VBP
Vd:整数:=525)--Vpulse+VBP+Vactive+VFP
港口(
时钟:在标准逻辑中;--50MHz在我们的电路板中
红色开关、绿色开关、蓝色开关:标准逻辑;
像素时钟:缓冲器标准时钟逻辑;
Hsync,Vsync:缓冲器标准逻辑;
R、 G,B:输出标准逻辑向量(7到0);
Nblank,nsync:输出标准逻辑);
结束vga;
----------------------------------------------------------
vga的架构是
信号Hactive、Vactive、dena:STD_逻辑;
信号地址:标准逻辑向量(9到0);
信号强度:标准逻辑向量(7到0);
信号hPos:整数;
信号vPos:整数;
信号videoOn:STD_逻辑;
恒定图片大小:整数:=9000;
开始
-------------------------------------------
--ROM实例化:
myrom:lpm_rom
通用地图(
lpm_widthad=>10,--地址宽度
lpm_outdata=>“未注册”,
lpm_地址_控件=>“已注册”,
lpm_文件=>“2colom.mif”,--数据文件
lpm_宽度=>8)--数据宽度
港口地图(
inclock=>非像素时钟,地址=>地址,q=>强度);
--创建地址(行号):
进程(Vsync、Hsync)
可变行计数器:整数范围0至Vd;
开始
如果(Vsync='0'),则
行计数器:=0;
ELSIF(Hsync'EVENT和Hsync='1'),然后
如果(Vactive='1'),则
行计数器:=行计数器+1;
如果结束;
如果结束;
--地址IEEE标准1076-2008
12.4使用条款

use子句可直接查看通过选择可见的声明。

为了确定由使用子句在给定位置直接可见哪些声明,请考虑由其范围包含该位置的所有使用子句所标识的声明集。此集合中的任何声明都可能是可见的声明。除以下三种情况外,潜在可见声明实际上是直接可见的:

a) 如果所考虑的位置在声明的同形词的直接范围内,则潜在可见的声明不会直接可见

b) 如果两个可能可见的声明是同形词,一个显式声明,另一个隐式声明,则隐式声明不直接可见

c)具有相同指示符且不包含在案例b)中的潜在可见声明不会直接可见,除非每个声明都是枚举文字规范或子程序声明。

还有

12.3能见度,第7段(部分)

…当且仅当两个声明具有相同的指示符,并且它们表示不同的命名实体,并且两个声明中的一个最多允许重载,或者两个声明都允许重载,并且它们具有相同的参数和结果类型概要(见4.5.1),则两个声明中的每一个都称为另一个的同形图

定义同形异义词和

  • 声明
    6.1一般第3段
  • 对于每种形式的声明,语言规则定义了称为声明范围的特定文本区域(见12.2)。每种形式的声明都将标识符、运算符符号或字符文字与命名实体相关联。标识符、运算符符号或字符文字称为声明的指示符。只有在其范围内,才有可能使用指示符来指代相关申报实体的地方;这些位置由可见性规则定义(见12.3)。在这些地方,该标志被称为该实体的名称;该名称表示关联实体

    它定义了指示符

    对于部分误差

    错误(10621):vga处的VHDL Use子句错误。vhd(230):多个Use子句导入一个简单名称为“unsigned”的声明——没有一个声明是直接可见的

    对于use子句集:

    使用ieee.std_logic_1164.all;
    使用ieee.std_logic_arith.all;
    使用IEEE.STD_LOGIC_UNSIGNED.ALL;
    使用IEEE.NUMERIC_STD.ALL;
    
    包std_logic_arith和numeric_std都为unsigned类型提供声明

    无符号的两个声明都是同形异义词,具有相同的指示符b)。上述两个声明都是显式声明的,因此不适用

    当您不依赖问题中显示的代码时,请使用 包装标准