Vhdl 图像rom显示VGA
我正在用VHDL FPGA做代码,代码内容分三部分,第一部分是VGA,第二部分是rom代码,第三部分是绘制图像,第三部分是保存图像,rom显示VGA并得到问题 错误(10621):vga处的VHDL Use子句错误。vhd(230):多个Use子句导入一个简单名称为“unsigned”的声明——没有一个声明是直接可见的 提前谢谢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
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)。上述两个声明都是显式声明的,因此不适用
当您不依赖问题中显示的代码时,请使用
包装标准