在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2436|回复: 8

大家看看程序什么地方错了阿?

[复制链接]
发表于 2006-12-7 18:09:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY disp IS
     PORT(clk:IN STD_LOGIC;
          clka:IN STD_LOGIC;
          addr:INOUT STD_LOGIC_VECTOR(2 DOWNTO 0);
          data:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END;
ARCHITECTURE disp_arch OF disp IS
TYPE romtable IS ARRAY (0 TO 7) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
CONSTANT roma:romtable:=romtable'(
    "11101111",
    "00000001",
    "01101101",
    "00000001",
    "01101101",
    "00000001",
    "11101111",
    "11100001");
CONSTANT romb:romtable:=romtable'(
    "00000000",
    "11111101",
    "11111011",
    "00000000",
    "11110111",
    "11110111",
    "11110111",
    "11100111");
SIGNAL q: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
   P1ROCESS(clka)
   BEGIN
      IF rising_edge(clka)THEN
          q<=q+'1';
      END IF;
   END PROCESS P1;
   P2ROCESS(clk)
   BEGIN
      IF rising_edge(clk)THEN
           addr<=addr+'1';
      END IF;
   END PROCESS P2;
   P3ROCESS(addr)
   BEGIN
      IF q(3)='1' THEN
            data<=roma(addr);
      ELSE
            data<=romb(addr);
      END IF;
    END PROCESS P3;
END disp_arch;
发表于 2006-12-26 15:17:26 | 显示全部楼层
程序完成什么功能?为什么有两个时钟?如何出错?
发表于 2006-12-26 16:10:15 | 显示全部楼层
就是你写清楚一点阿
发表于 2007-4-17 16:11:38 | 显示全部楼层

大概介绍

大概介绍以下,老大
发表于 2007-4-17 20:39:14 | 显示全部楼层
两个异步时钟逻辑最后集中到一个组合逻辑输出复选上,将会造成毛刺和大量冲激,输出结果可能非稳定!
发表于 2007-4-17 22:38:29 | 显示全部楼层
再定义一个integer型信号tmp,讲addr 从std_logic_vector 转成 integer后赋给 tmp
在最后一个进程里用 tmp替代 addr

程序的主要问题是信号类型的问题
rom() 里只能填整数型信号
发表于 2007-4-17 22:47:11 | 显示全部楼层
提供一段代码供lz参考

LIBRARY IEEE;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity myduram is   
       generic (width:integer;            
                   depth: integer;            
                   addrw:integer);   
       port(datain:in std_logic_vector(width-1 downto 0);
             dataoutut std_logic_vector(width-1 downto 0);         
             clock_w,clock_r:in std_logic;         
              we,re:in std_logic;         
            wadd:in std_logic_vector(addrw-1 downto 0);
             radd:in std_logic_vector(addrw-1 downto 0)         );
        end myduram;
     architecture art of myduram is   
            type mem is array (0 to depth-1) of std_logic_vector(width-1 downto 0);   
           signal ramtmp:mem;       
          constant zs64: std_logic_vector(width-1 downto 0):=(others=>'Z');   
        
        begin        
        process(clock_w,we)            
             begin
                  if(clock_w'event and clock_w='1')then
                          if(we='1')then                       
                               ramtmp(conv_integer(wadd))<=datain;                    
                         end if;               
                 end if;        
           end process;               
         process(clock_r,re)           
           begin
                if(clock_r'event and clock_r='1')then
                   if(re='1')then                        
                       dataout<=ramtmp(conv_integer(radd)) ;                  
                          else                        null;                  
                    end if;               
                end if;        
        end process;
end art;
发表于 2007-4-20 14:02:53 | 显示全部楼层
是编译不过去还是功能实现有问题(比如有毛刺等)?
发表于 2007-4-27 00:48:44 | 显示全部楼层
六楼的说得很对,如果只是编译通不过的话
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 03:23 , Processed in 0.027779 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表