vhdl程序总有错误,怎么解决

错误如下:Error (10483): VHDL error at ajcl.vhd(16): can't infer register for signal "keyout[7]" because signal does not hold its value outside clock edge
源代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ajcl IS
PORT (clk,clr:IN STD_LOGIC;
key_o,key_1,key_2,key_3,key_4,key_5,key_6,key_7,key_8,key_9:IN STD_LOGIC;
add,sub,equ:IN STD_LOGIC;keyout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
opout,press_num,press_op,press_equ:OUT STD_LOGIC);
END ajcl;
ARCHITECTURE rtl OF ajcl IS
BEGIN
PROCESS(clk)
VARIABLE key:STD_LOGIC_VECTOR(9 DOWNTO 0) ;
BEGIN
IF(clr='1')then keyout<= "00000000";press_num<='0';opout<='0';
press_op<='0';press_equ<='0';
elsif (clk' event and clk='1')then
key:= key_o&key_1&key_2&key_3&key_4&key_5&key_6&key_7&key_8&key_9;
elsif key = "1000000000" then keyout<= "00000000"; press_num<='1';
elsif key= "0100000000" then keyout<= "00000001"; press_num<='1';
elsif key= "0010000000" then keyout<= "00000010"; press_num<='1';
elsif key= "0001000000" then keyout<= "00000011"; press_num<='1';
elsif key= "0000100000" then keyout<= "00000100"; press_num<='1';
elsif key= "0000010000" then keyout<= "00000101"; press_num<='1';
elsif key= "0000001000" then keyout<= "00000110"; press_num<='1';
elsif key= "0000000100" then keyout<= "00000111"; press_num<='1';
elsif key= "0000000010" then keyout<= "00001000"; press_num<='1';
elsif key= "0000000001" then keyout<= "00001001" ; press_num<='1';
else keyout<= "00000000"; press_num<='0';

这个写法是错误的。VHDL程序在进程里面是顺序执行的,你的原始程序可以分成
if reset='1' then
c_st<=s0;
end if;

if clk='1'and clk'event then
这两个部分,if reset='1' then 这一部分其实没有起作用。
c_st又需要在电平触发,有需要沿触发,这个是没办法综合,这个就是你错误的原因。
你的本意是状态机在复位的时候初态是S0,然后不复位的时状态转换,所以稍微改一下就行了。
温馨提示:内容为网友见解,仅供参考
无其他回答

求懂的朋友帮个忙,VHDL程序出错,不知道怎么解决
VHDL程序出错时,可以按照以下步骤来定位和解决问题:1. 检查错误类型:首先要明确错误的具体类型,比如是类型不匹配错误、语法错误还是实体或架构错误。错误信息通常会提示出现问题的行数和具体原因。2. 确认错误来源:根据错误类型,确认错误来源是否是信号和变量的类型不匹配、代码语法错误、实体或架构声明...

VHDL程序运行出现的错误怎么解决
1.语法错误,你在定义变量或是信号量的时候用到了系统的关键字。2.语法错误,对变量或信号量的赋值的时候直接用的是“=”号了吧,你试试将提示出错位置的“=”好改换为“:=”。

vhdl程序总有错误,怎么解决
你的本意是状态机在复位的时候初态是S0,然后不复位的时状态转换,所以稍微改一下就行了。

用VHDL编程时总是出现这样的错误
解决的办法可以如下,将clk1和key2 增加一级状态 lcx 寄存,通过对 clk1或key2 和lcx状态判断上跳与否,改正程序如下:signal lcx:std_logic;signal a,count3:integer;begin process(en,clk)begin if en='1' then if clk'event and clk='1' then lcx<=clk1;if lcx='0' and clk1='1' ...

崩溃了!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 :...

在用maxplus2对VHDL语言程序进行编译时,出现了ERROR :Can't open VHDL...
因为你将VHDL文件存在了你的电脑里盘的根目录下面了,你应该在你存程序的盘里建个文件夹,然后在打开,

VHDL程序编译出错,报错can't determine definition of operator ""+...
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...

我的vhdl程序编译错误:unsupported feature error:non-locally-static...
你先查查你的进程里面有没有包括进程所有的输入信号,然后再看看你利用时钟上升沿和下降沿是不是没有说清楚,还是你同时都用了,,上升沿和下降沿只能用一个!!!

VHDL代码出现near text "=>"; expecting ")", or ","错误,调用了库文件...
比如先将'0'&temp_node2(2)&temp_node2(1)&'0'赋值给一个中间信号t,然后在元件例化语句中将Ain关联到这个中间信号t:Ain=>t。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序...

菜鸟上路,VHDL程序出错,求解答。
1.library UNISIM;use UNISIM.VComponents.all;这两个东西貌似无法使用。UNISIM是xilinx的库函数,如果你用第三方的仿真软件,就需要把xilinx的库编译进仿真软件库中 例如modelsim,xilinx软件中可以直接编译 2.怎么使用组件?这个你看看语法吧,在这没法一点点跟你介绍 3.预设的非门的端口为not,与关键字...

相似回答