集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3252|回复: 4

求助!VHDL程序由于输入输出的位数太多,导致不能用现有的芯片硬件

[复制链接]
ICE 发表于 2010-6-28 00:52:20 | 显示全部楼层 |阅读模式
由于输入输出的位数太多,导致不能用现有的芯片硬件,请教一下高手,我改怎么办啊?
9 个输出是分别连到9个不同的bcd数码管上去的
library ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
ENTITY jzzh IS
    PORT (clk12,clk240,clk15,resetj: IN std_logic;
    ascore:in std_logic_vector(13 downto 0);
    bscore:in std_logic_vector(8 downto 0);
    cscore:in std_logic_vector(6 downto 0);
  aqian,abai,ashi,age,bbai,bshi,bge,cshi,cge
       
ut std_logic_vector(3 downto 0));
END jzzh;      --ascore 是计费值;

ARCHITECTURE one OF jzzh IS
BEGIN

    u1:process(clk240,ascore)--计费按0-9999的规则变化;
  variable comba:std_logic_vector(13 downto 0);
  variable comba1,comba2,comba3,comba4:std_logic_vector(3 downto 0);
  begin
  if(clk240'event and clk240='1') then
   if(comba<ascore) then
   if(comba1<"1001" ) then
       comba1:=comba1+1; comba:=comba+1;
   elsif(comba2<"1001"
       
then
      comba2:=comba2+1;comba1:="0000";comba:=comba+1;
   elsif(comba3<"1001" ) then
     comba3:=comba3+1;comba2:="0000";comba1:="0000";comba:=comba+1;
   elsif(comba4<"1001" ) then
      comba4:=comba4+1;comba3:="0000";comba2:="0000";comba1:="0000";comba:=comba+1;
   elsecomba4:="0000";comba3:="0000";comba2:="0000";comba1:="0000";comba:="00000000000000";
   end if;
   end if;
  end if;
  aqian<=comba4;abai<=comba3;ashi<=comba2;age<=comba1;
end process u1;

u2:process(clk12,bscore)--路程按0-299的规则变化;
  variable combb:std_logic_vector( 8 downto 0);
  variable combb1,combb2,combb3:std_logic_vector(3 downto 0);
  begin
  if(clk12'event and clk12='1') then
   if(combb<bscore) then
   if(combb1<"1001" ) then
       combb1:=combb1+1; combb:=combb+1;
   elsif(combb2<"1001" ) then
      combb2:=combb2+1;combb1:="0000";combb:=combb+1;
   elsif(combb3<"1001"
       
then
     combb3:=combb3+1;combb2:="0000";combb1:="0000";combb:=combb+1;
   elsecombb3:="0000";combb2:="0000";combb1:="0000";combb:="000000000";
   end if;
   end if;
  end if;
bbai<=combb3;bshi<=combb2;bge<=combb1;
end process u2;


u3:process(clk15,cscore)--将等待时间按0-299的规则变化;
  variable combc:std_logic_vector(6 downto 0);
  variable combc1,combc2:std_logic_vector(3 downto 0);
  begin
  if(clk15'event and clk15='1') then
   if(combc<cscore) then
   if(combc1<"1001"
       
then
       combc1:=combc1+1; combc:=combc+1;
   elsif(combc2<"1001" ) then
      combc2:=combc2+1;combc1:="0000";combc:=combc+1;
   
   elsecombc2:="0000";combc1:="0000";combc:="0000000";
   end if;
   end if;
  end if;
cshi<=combc2;cge<=combc1;
end process u3;
end one;
encounter 发表于 2010-6-28 00:56:57 | 显示全部楼层
是代码不行还是因为芯片资源不够?
interige 发表于 2010-6-28 01:22:39 | 显示全部楼层
可能是芯片不够
usb 发表于 2010-6-28 03:05:02 | 显示全部楼层
我是用vhdl编写模块程序,然后将各个模块生成的框图连接起来再仿真<br>
除了刚刚那个程序外,其他的单独的程序都正确的通过了<br>
刚刚这个程序也在我选择 添加必要的硬件 后也通过了<br>
但是在整合的时候不能通过编译,除了硬件引脚不好分配外,还有其他错误.
CCIE 发表于 2010-6-28 03:32:37 | 显示全部楼层
这种B-BCD转换太慢,换算法,用一个高的时钟为这3个时钟切分状态,划分时间片。然后3个转换复用。看能不能减少点资源。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 10:25 , Processed in 0.069310 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表