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

 *第11023篇: 再看一下小弟的vhdl程序!

  
楼 主:ruanhan 2003年4月25日22:15
 再看一下小弟的vhdl程序!
各位高手,请看一下小弟的vhdl(maxplus2下)的程序,我实现
的功能很简单,就是按add(add下调沿),数码管的数加一,从0到8
然后从头开始,按clr则清零,
library ieee;
use ieee.std_logic_1164.all;
entity rh1 is
port( add,clr :in std_logic; 
     digital8 :OUT std_logic_vector(7 downto 0);--数码管的8位输出
     select4 :OUT std_logic_vector(3 downto 0)--4个数码管的控制位
    );
 end rh1;
ARCHITECTURE xq1 of rh1 is
begin
 process(add,clr)
 variable k: integer range 0 to 8;
 begin
 if(clr='0') then
  k:=0;
  select4  <="0000";--选择4个数码管都亮
  digital8  <="11000000";--显示0
  elsif(add'event and add='0') then --(改后:elsif(add='0') then )
     if(k  <=7) then            
     k:=k+1;
     else
     k:=0;
     end if;
     case k is
     when 0=>  digital8  <="11000000";--显示0
     when 1=>  digital8  <="11111001";--显示1
     when 2=>  digital8  <="10100100";
     when 3=>  digital8  <="10110000";
     when 4=>  digital8  <="10011001";
     when 5=>  digital8  <="10010010";
     when 6=>  digital8  <="10000010";
     when 7=>  digital8  <="11111000";
     when 8=>  digital8  <="10000000";--显示8
     end case;
  end if;
 end process;
end xq1;  
这样编译(compile)通过,但是按start时,到partitioner时停了,就是到不了
fitter,并且提示:project does't fit等等,后来我把add'event 去掉,
则编译,连接等都通过了,,但是下载下来时,我按清零时可以显示4个
数码管都亮0,但是按add时,却不能变化,,我是买一个试验板,
cpld是emp7128sl84-15不知这是为什么???
谢谢各位高手指点!!!小弟感激万分!!
  
2楼:huzimax 2003年4月26日00:29
 看:
首先你的这种思路只是理论上的,实际应用的时候是不太可行的。原因:
键盘要有防抖动,否则就算是什么都通过了,按下ADD后,数码管可能就会显示8(不是真的8,而是跑个不停),不知你所说的 “按add时,却不能变化” 是不是显示8

解决方法:加入个CLK信号,一切都以CLK做参考进行时序电路的设计,这样才会真的实用

  
3楼:ruanhan 2003年4月26日10:41
 刚才发错了,对不起,小弟还有一下不明白:
以下再贴一下程序:
library ieee;
use ieee.std_logic_1164.all;
entity rh1 is
port( add,clr :in std_logic; 
     digital8 :OUT std_logic_vector(7 downto 0);--数码管的8位输出
     select4 :OUT std_logic_vector(3 downto 0)--4个数码管的控制位
    );
 end rh1;
ARCHITECTURE xq1 of rh1 is
begin
 process(add,clr)
 variable k: integer range 0 to 8;
 begin
 if(clr='0') then
  k:=0;
  select4  <="0000";--选择4个数码管都亮
  digital8  <="11000000";--显示0
  elsif(add'event and add='0') then --我这样就是时序啊,但是
--编译可以,综合通不过,提示是add的assignment不行(这个如何解决?),
--后来只好改成(add=‘0’)编译,综合都通过了,但是结果不对了
--好像在不停的闪,是不是maxplus2的综合能力不行?但是
--这么简单的功能应该没有问题的呀,还有高手您说的以clk参考是如何
--实现的??能提供个思路?非常感谢高手的指点!!!!
     if(k  <=7) then            
     k:=k+1;
     else
     k:=0;
     end if;
     case k is
     when 0=>  digital8  <="11000000";--显示0
     when 1=>  digital8  <="11111001";--显示1
     when 2=>  digital8  <="10100100";
     when 3=>  digital8  <="10110000";
     when 4=>  digital8  <="10011001";
     when 5=>  digital8  <="10010010";
     when 6=>  digital8  <="10000010";
     when 7=>  digital8  <="11111000";
     when 8=>  digital8  <="10000000";--显示8
     end case;
  end if;
 end process;
end xq1;
  
4楼:liao-nuaa 2003年4月29日15:52
 我怎么用maxplus2 能综合add'
我怎么用maxplus2 能综合add'event and add='1'?
你这个程序没问题牙!!
  
5楼:ruanhan 2003年4月26日10:32
 谢谢高手指点,还有:

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

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


[上一篇主题]:键盘程序请教?

[下一篇主题]:[求助]求助Mep100软件!红色LEDV2.7版本