打印

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

[复制链接]
1386|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
646088546|  楼主 | 2013-5-20 23:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码如下,实现的是数码管显示的代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

Entity smg is
port
(
   Clock: in std_logic;
    Input_value: in integer range 0 to 9;  --input data
   En: out std_logic_vector(7 downto 0);  
   Display: out std_logic_vector(7 downto 0)
);
end smg;

Architecture Decoder of smg is
--Signal Counter: Integer range 0 to 7;
Begin
        process(clock)
        Variable Num:Integer range 0 to 9;
        Variable Counter: Integer range 0 to 7;
        Begin
                if falling_edge(Clock) then
                        if Counter = 7 then
                                Counter :=0;
                        else
                                counter :=Counter + 1;
                        end if;
                    case Counter is   --Duan xuan
                                when 0 =>
                                        En <= "11111110";
                                        Num := Input_value;                               
                                when 1 =>
                                        En <= "11111101";
                                        Num := Input_value;
                                when 2 =>
                                        En <= "11111011";
                                        Num := Input_value;
                                when 3 =>
                                        En <= "11110111";
                                        Num := Input_value;
                                when 4 =>
                                        En <= "11101111";
                                        Num := Input_value;
                                when 5 =>
                                        En <= "11011111";
                                        Num := Input_value;
                                when 6 =>
                                        En <= "10111111";
                                        Num := Input_value;
                                when 7 =>
                                        En <= "01111111";
                                        Num := Input_value;
                        end case;
                        case Num is   --Wei Xuan
                                when 0=>
                                        Display <= X"FC";
                                when 1=>
                                        Display <= X"60";
                                when 2=>
                                        Display <= X"DA";
                                when 3=>
                                        Display <= X"F2";
                                when 4=>
                                        Display <= X"66";
                                when 5=>
                                        Display <= X"B6";
                                when 6=>
                                        Display <= X"BE";
                                when 7=>
                                        Display <= X"E0";
                                when 8=>
                                        Display <= X"FE";
                                when 9=>
                                        Display <= X"F6";
                                when others=>          --貌似这里没起作用
     Display <= X"00";
                        End case;
  End if;
      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了吧

使用特权

评论回复
5
646088546|  楼主 | 2013-5-21 10:52 | 只看该作者
ococ 发表于 2013-5-21 10:45
你的输入只到9,怎么输入大于9的数字呢?自然也就不会运行others了吧

一语中的,问题解决。谢谢您!

使用特权

评论回复
6
GoldSunMonkey| | 2013-5-21 21:21 | 只看该作者
ococ 发表于 2013-5-21 10:45
你的输入只到9,怎么输入大于9的数字呢?自然也就不会运行others了吧

说的好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

1

粉丝