自己写的VHDL代码存在一些不理解的问题

[复制链接]
 楼主| 646088546 发表于 2013-5-20 23:34 | 显示全部楼层 |阅读模式
代码如下,实现的是数码管显示的代码:
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.std_logic_unsigned.all;

  4. Entity smg is
  5. port
  6. (
  7.    Clock: in std_logic;
  8.     Input_value: in integer range 0 to 9;  --input data
  9.    En: out std_logic_vector(7 downto 0);  
  10.    Display: out std_logic_vector(7 downto 0)
  11. );
  12. end smg;

  13. Architecture Decoder of smg is
  14. --Signal Counter: Integer range 0 to 7;
  15. Begin
  16.         process(clock)
  17.         Variable Num:Integer range 0 to 9;
  18.         Variable Counter: Integer range 0 to 7;
  19.         Begin
  20.                 if falling_edge(Clock) then
  21.                         if Counter = 7 then
  22.                                 Counter :=0;
  23.                         else
  24.                                 counter :=Counter + 1;
  25.                         end if;
  26.                     case Counter is   --Duan xuan
  27.                                 when 0 =>
  28.                                         En <= "11111110";
  29.                                         Num := Input_value;                               
  30.                                 when 1 =>
  31.                                         En <= "11111101";
  32.                                         Num := Input_value;
  33.                                 when 2 =>
  34.                                         En <= "11111011";
  35.                                         Num := Input_value;
  36.                                 when 3 =>
  37.                                         En <= "11110111";
  38.                                         Num := Input_value;
  39.                                 when 4 =>
  40.                                         En <= "11101111";
  41.                                         Num := Input_value;
  42.                                 when 5 =>
  43.                                         En <= "11011111";
  44.                                         Num := Input_value;
  45.                                 when 6 =>
  46.                                         En <= "10111111";
  47.                                         Num := Input_value;
  48.                                 when 7 =>
  49.                                         En <= "01111111";
  50.                                         Num := Input_value;
  51.                         end case;
  52.                         case Num is   --Wei Xuan
  53.                                 when 0=>
  54.                                         Display <= X"FC";
  55.                                 when 1=>
  56.                                         Display <= X"60";
  57.                                 when 2=>
  58.                                         Display <= X"DA";
  59.                                 when 3=>
  60.                                         Display <= X"F2";
  61.                                 when 4=>
  62.                                         Display <= X"66";
  63.                                 when 5=>
  64.                                         Display <= X"B6";
  65.                                 when 6=>
  66.                                         Display <= X"BE";
  67.                                 when 7=>
  68.                                         Display <= X"E0";
  69.                                 when 8=>
  70.                                         Display <= X"FE";
  71.                                 when 9=>
  72.                                         Display <= X"F6";
  73.                                 when others=>          --貌似这里没起作用
  74.      Display <= X"00";
  75.                         End case;
  76.   End if;
  77.       End Process;
复制代码

最后一个others好像没起作用,四个位表示BCD码输入 输入0到9显示是正常的。但是只要超过9就乱了,
按道理有了最后一个others约束应该输出的是全灭。但偏偏不是,所以很疑惑。
麻烦路过的过目下,谢谢!!
ococ 发表于 2013-5-21 08:34 | 显示全部楼层
端口最好不要使用integer类型,进程内部最后不要使用变量,改为信号试试。
 楼主| 646088546 发表于 2013-5-21 09:46 | 显示全部楼层
ococ 发表于 2013-5-21 08:34
端口最好不要使用integer类型,进程内部最后不要使用变量,改为信号试试。

integer类型最终也是转换成std_logic_vector类型吧,只是在编程的时候如果使用std_logic_vector类型容易漏掉一些值。
我按照你的建议改了代码 可还是不行 和原来的现象是一样的。:Q
ococ 发表于 2013-5-21 10:45 | 显示全部楼层
你的输入只到9,怎么输入大于9的数字呢?自然也就不会运行others了吧
 楼主| 646088546 发表于 2013-5-21 10:52 | 显示全部楼层
ococ 发表于 2013-5-21 10:45
你的输入只到9,怎么输入大于9的数字呢?自然也就不会运行others了吧

一语中的,问题解决。谢谢您!
GoldSunMonkey 发表于 2013-5-21 21:21 | 显示全部楼层
ococ 发表于 2013-5-21 10:45
你的输入只到9,怎么输入大于9的数字呢?自然也就不会运行others了吧

说的好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部