导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→问一个vhdl的问题![ruanhan]

 *第10852篇: 问一个vhdl的问题!

  
楼 主:ruanhan 2003年4月23日10:00
 问一个vhdl的问题!
各位高手,请看一下小弟编的一个特别小vhdl的程序(在maxplus2环境下)
程序的功能是按下key1键(使key1端口为0)则显示数码管,放下(使key1端口为1)则熄灭数码管;
library IEEE;
use ieee.std_logic_1164.all;
--use ieee.std_logic_arith.all;
ENTITY rh1 IS
PORT(  key1: IN std_logic;--定义一个输入
       digital8: OUT std_logic_vector(7 downto 0)--8个输出
     );
      END rh1;
ARCHITECTURE xq OF rh1 IS
--signal k :std-logic-vector(7 downto 0);
begin
process(key1) 
begin
if(key1'event and key1='0') then
digital8  <="00000000";--数码管全亮
else
digital8  <="11111111";--数码管全灭
end if;
end process;
end xq;

--我感觉这应该没有问题,但是编译出现一下错误:

The error is:Else Clause fllowing a clock edge must hold the state of
sigal "digital8";后来我设置一个信号量k,先判断key1是上升还是下降,
然后对这个赋值(00000000或11111111),在最后将这个信号量再给digital8,
程序修改如下if(key1'event and key1='0') then
         k  <="00000000";
         else k  <="11111111";
       end if;
     digital8  <=k;
这样出现的错误是:The error is:Else Clause fllowing a clock edge must hold the state of
sigal "k"。不知这是为什么,望高手指点,谢谢!!!!

  
2楼:huzimax 2003年4月23日13:47
 这种情况无需用时序逻辑设计,用组合逻辑如下:
library IEEE;
use ieee.std_logic_1164.all;
--use ieee.std_logic_arith.all;

ENTITY rh1 IS
PORT(  key1: IN std_logic;--定义一个输入
       digital8: OUT std_logic_vector(7 downto 0)--8个输出
     );
      END rh1;
ARCHITECTURE xq OF rh1 IS
--signal k :std-logic-vector(7 downto 0);
begin

digital8   <="00000000" when key1='0' else --数码管全亮

           "11111111" ; --数码管全灭

end xq;

  
3楼:ruanhan 2003年4月23日15:25
 谢谢高手答复,我还有一个疑问:
一般来说vhdl语言编程都是包含一个或者数个process,
如果我把程序编程这样:
use ieee.std_logic_1164.all;
ENTITY rh1 IS
PORT(  key1: IN std_logic;--定义一个输入
       digital8: OUT std_logic_vector(7 downto 0)--8个输出
     );
      END rh1;
ARCHITECTURE xq OF rh1 IS
begin

process(key1)
begin
digital8   <="00000000" when key1='0' else --数码管全亮

           "11111111" ; --数码管全灭
end process;

end xq;
则编译就会出现错误:sequential signal assignment cannot contain conditional waveforms 这是为什么呢???小弟刚开始学,各位大虾可能觉得太容易,
也望高手们耐心指点,小弟感谢万分!!!!

  
4楼:huzimax 2003年4月23日19:43
 process(X)用于时序电路,一般要有CLK做为时钟
PROCESS(X)书中言道是检测到X的变化时,执行
  
5楼:guest 2003年8月26日16:56
 我想是这样的:
你的代码在语法上是没有

我想是这样的:
你的代码在语法上是没有问题的。但对于实际的电路,
你的代码可以理解成,当KEY出现一个下降沿时,点亮LED
而下降沿没有了时LED灭了。
也就是说LED只是亮一个时刻,没有建立时间,也没有保持时间。
实际上,类似于这种时种沿的条件语句,只能写成不完全的,
这样在综合时能生成触发器结构。
写成完全的,则不能综合成有效的电路,所以就报了错了。
建议你把条件判断语句中改写成电平的,综合出来的电路为数据选择器。
写的时候想一想会出来什么功能的电路。

>>>>>>对该主题发表你的看法

本主题贴数5,分页: [第1页]


[上一篇主题]:[请教]请熟悉8019的同志帮帮忙!小弟谢了!~~~

[下一篇主题]:大屏幕的LED寻求指点!