1. VHDL程序编译出错,报错can't determine definition of operator ""+"" -- found 0 possible definitions
修改后的code如下:
1:将你程序中的bit_vector改为 std_logic_vector,USE IEEE.STD_LOGIC_UNSIGNED.ALL以及USE IEEE.STD_LOGIC_SIGNED.ALL可以使得“+”两方具有不同的数据类型,但不支持bit_vector。
2:USE IEEE.STD_LOGIC_UNSIGNED.ALL以及USE IEEE.STD_LOGIC_SIGNED.ALL用一个就可以了,删除了USE IEEE.STD_LOGIC_SIGNED.ALL。
请采纳!!
library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDERCTL IS
PORT( in1 : in std_logic_vector(2 downto 0);
in2 : in std_logic_vector(2 downto 0);
cntl : in std_logic;
pout : out std_logic_vector(2 downto 0));
END entity ADDERCTL;
ARCHITECTURE FUNC OF ADDERCTL IS
BEGIN
PROCESS(cntl)
BEGIN
if (cntl='1') then pout<=in1+in2;
end if;
end process;
end ARCHITECTURE FUNC;
2. 崩溃了!VHDL程序老是编译通不过!
你的原始程序做了少许的修改,其实你的程序没有错误。应该是在编写代码的时候改变了输入法,导致编译错误的,以后要注意了。
把那个coi1_out统统删除在敲一遍就好了。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY PULSE IS
PORT ( RESET : IN STD_LOGIC;
CP : IN STD_LOGIC;
direction : IN STD_LOGIC;
A_A : OUT STD_LOGIC;
n_A : OUT STD_LOGIC;
B_B : OUT STD_LOGIC;
n_B : OUT STD_LOGIC );
END PULSE;
ARCHITECTURE behv OF PULSE IS
TYPE states IS (s0,s1,s2,s3);
signal current_state,next_state : states :=s0;
BEGIN
REG : PROCESS(CP,RESET)
BEGIN
IF (RESET = '1')THEN
current_state <= s0;
ELSIF (CP = '1' AND CP'EVENT) THEN
current_state <= next_state;
END IF;
END PROCESS;
CORN:PROCESS (current_state,direction)
variable coi1_out:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
CASE current_state IS
WHEN s0 => coi1_out:="1100";
IF direction = '1' THEN
next_state <= s1;
ELSE
next_state <= s3;
END IF;
WHEN s1 => coi1_out:= "0110";
IF direction = '1' THEN
next_state <= s2;
ELSE
next_state <= s0;
END IF;
WHEN s2 => coi1_out:= "0101";
IF direction = '1' THEN
next_state <= S3;
ELSE
next_state <= s1;
END IF;
WHEN s3 => coi1_out:= "1001";
IF direction = '1' THEN
next_state <= s0;
ELSE
next_state <= s2;
END IF;
WHEN others => coi1_out:= "1100";
IF direction = '1' THEN
next_state <= s1;
ELSE
next_state <= s3;
END IF;
END CASE;
A_A <= coi1_out(3);
n_A <= coi1_out(1);
B_B <= coi1_out(2);
n_B <= coi1_out(0);
END PROCESS;
END behv;
3. quartus怎么不能开始编译我打开了下载的一个vhdl 语言的一个文件,怎么不能开始编译
首先看看这个vhdl语言文件是不是在一个工程中,并且实体名必须和工程名相同,这样才可编译。第二是仿真,建立了波形文件,要打开仿真工具,进行功能仿真,输出仿真图才可正确仿真。
4. vhdl编译出错
就是说你在你的DESIGN中已经将pn定义为一个信号或者一个逻辑IO口了,这个检查下有没重复命名的变量就行
至于"inst"检测出重复,这是你画一个.bdf文件经常会出现的问题,只需要你把.bdf文件中的所有使用元件重新命名就行,特别是名字为inst,inst0,inst1这几个元件,后面多加几个数,就能解决问题
5. VHDL编译错误 Error (10465)
你已经在端口声明中声明了端口goal_speed,就不能再将其声明为常数了。
另外,赋值语句并无规定要将双引号去掉。是否使用双引号,要看你的赋值类型,字符串文字才需要用双引号将其括在其中。
6. VHDL 四人抢答器程序哪错了,编译不出来,错误不知道咋那么该
你的程序能够编译,在MAXPLUS里面是可以编译的。如果你使用MAXPLUS不能编译,需要检查编译的是否为当前文件,选择File-Project-Set project to current file。如果你用的是quartus,检查一下你的文件是否设为顶层文件,否则一定报错。
但是需要说的是,你的程序不能实现抢答器的功能。
从仿真来看,Dout抢答结果不能正确显示第一个抢答的序号。上图S4第一个抢答,输出为8(正确),但是当S3第二个按下抢答器后,输出变成了C(1100),四个人都按下之后编程了F(1111)。
建议你思考:
使用时序电路(触发器)来做这个任务。因为组合电路不能实现抢答器的功能。虽然你使用了Process过程,但是达不到信号锁存的功能。