所以,我正在做一个大学项目,我必须使用Xilinx对3个计数器进行VHDL仿真。其中一个计数器从5下降到0,另一个从4下降到0,另一个从13变为0,但它用一个时钟信号计数两次。我开发的代码是这样的(它基于原理图,所以我认为实体和架构应保持不变):
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY projetesquema2_projetesquema2_sch_tb IS
END projetesquema2_projetesquema2_sch_tb;
ARCHITECTURE behavioral OF projetesquema2_projetesquema2_sch_tb IS
COMPONENT projetesquema2
PORT( CLOCK : IN STD_LOGIC;
ACL : IN STD_LOGIC;
CAT : OUT STD_LOGIC;
CRT : OUT STD_LOGIC;
CLT : OUT STD_LOGIC;
ACA : IN STD_LOGIC);
END COMPONENT;
SIGNAL CLOCK : STD_LOGIC;
SIGNAL ACL : STD_LOGIC;
SIGNAL CAT : STD_LOGIC;
SIGNAL CRT : STD_LOGIC;
SIGNAL CLT : STD_LOGIC;
SIGNAL ACA : STD_LOGIC;
BEGIN
UUT: projetesquema2 PORT MAP(
CLOCK => CLOCK,
ACL => ACL,
CAT => CAT,
CRT => CRT,
CLT => CLT,
ACA => ACA
);
*** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
process (CLOCK)
begin
if (CLOCK'event and CLOCK='1') then
if (ACA='0') then
CAT <= "0000";
else
CAT <= CAT + 1;
end if;
end if;
end process;
process (CAT)
begin
if (CAT'event and CAT='1') then
CRT <= CRT + 1;
end if;
end if;
end process;
process (CLOCK)
begin
if (CLOCK'event and CLOCK='1') then
if (ACL='0') then
CLT <= "0000";
else
CLT <= CLT + 1;
end if;
end if;
end process;
end Behavioral;
WAIT; -- will wait forever
END PROCESS;
*** End Test Bench - User Defined Section ***
END;
这给了我一些我不知道如何解决的错误,希望有人能真正帮助我。 错误是:
错误:第54行:&#34;进程&#34;附近的语法错误。
错误:第55行:&#34;开始&#34;。
附近的语法错误错误:第58行:类型std_logic与字符串文字
不匹配错误:第60行:找到&#39; 0&#39;运算符&#34; +&#34;的定义无法确定&#34; +&#34;
的精确重载匹配定义错误:第68行:找到&#39; 0&#39;运算符&#34; +&#34;的定义无法确定&#34; +&#34;
的精确重载匹配定义错误:第70行:语法错误接近&#34;如果&#34;。
错误:第77行:类型std_logic与字符串文字
不匹配错误:第79行:找到&#39; 0&#39;运算符&#34; +&#34;的定义无法确定&#34; +&#34;
的精确重载匹配定义错误:第22行:由于先前的错误而忽略了单位。
错误:第85行:&#34; WAIT&#34;附近的语法错误。
答案 0 :(得分:1)
假设星号分隔的注释不是VHDL设计规范的一部分:
你有一个无关的进程并且开始:
tb : PROCESS
BEGIN
process (CLOCK)
begin
还有end if
:
process (CAT)
begin
if (CAT'event and CAT='1') then
CRT <= CRT + 1;
end if;
end if;
end process;
还有更多无关的陈述:
end Behavioral;
WAIT; -- will wait forever
END PROCESS;
-- *** End Test Bench - User Defined Section ***
END;
这应该只是:
end Behavioral;
或
end architecture Behavioral;
现在我们发现了语义错误:
&#39; CAT&#39;被定义为标量std_logic:
SIGNAL CAT : STD_LOGIC;
SIGNAL CRT : STD_LOGIC;
SIGNAL CLT : STD_LOGIC;
SIGNAL ACA : STD_LOGIC;
并用于projetesquema2的组件声明。
您无法将其提升为std_logic_vector值:
CAT <= "0000";
else
CAT <= CAT + 1;
或者向它添加一个整数,就像它被声明为unsigned一样(use子句引用包numeric_std,BTW可以转储unisim东西)。
同一论点适用于CRT
和CLA
。 projetesquema
似乎翻译成英语作为项目计划,没有足够的信息建议回答者如何解决这些问题。
也许如果您为projetesquema2提供了实体和架构,或者告诉我们它的作用以及端口名称的含义?
看来你或者被抛到深处,错过了阅读清单的一部分,或者从我们目前所看到的错误中没有在课堂上引起注意。
Stackoverflow可能不是您应该作为学习VHDL的第一资源,而Xilinx工具对错误消息有些不友好。
我知道这是用英语写的,但请尝试使用reference来概述VHDL。
答案 1 :(得分:0)
就在这里,你开始在流程中定义流程,这是不合法的。它也没有多大意义。
tb : PROCESS
BEGIN
process (CLOCK)
begin
if (CLOCK'event and CLOCK='1') then