搜索
bottom↓
回复: 6

诚心诚意问牛人们:关于计数器使用宏的问题

[复制链接]

出0入55汤圆

发表于 2010-5-19 09:39:33 | 显示全部楼层 |阅读模式
20位计数器就占用了20个宏。有没有其他办法可以减少占用宏的量?

VHDL代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity counter is
    port(clk,reset,slt :in std_logic;
         output :out std_logic_vector(19 downto 0));
end counter;

architecture behav of counter is
begin
    process(clk,reset)
    variable CNT :std_logic_vector(19 downto 0);
    begin
        if(reset ='1') then                  
            CNT := "00000000000000000000";
        else
            if(clk'event and clk = '1') then
                if(slt = '1') then
                    CNT := CNT + '1';               
                else
                    CNT := CNT - '1';
                end if;
            end if;
        end if;
        output <= CNT;
    end process;
end behav;


RTL图

20位计数器 (原文件名:counter20.JPG)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-5-19 09:51:58 | 显示全部楼层
没有办法。一位对应一个Flip-Flop。

出0入55汤圆

 楼主| 发表于 2010-5-19 09:56:27 | 显示全部楼层
谢谢tear086 .COM 缺氧。发现你在论坛里最活跃了

出0入0汤圆

发表于 2010-5-19 17:29:43 | 显示全部楼层
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity counter is
    port(clk,reset,slt :in std_logic;
         output :out std_logic_vector(19 downto 0));
end counter;

architecture behav of counter is
begin
    process(clk,reset,slt)
    variable d :integer range -1 to 1;
    variable CNT :integer range -524287 to 524287 ;
    begin
      if(slt = '1') then
                    d := 1;               
                else
                    d := -1;
                end if;
                 
        if(reset ='1') then                    
            CNT := 0;
        else
            if(clk'event and clk = '1') then
                    CNT := CNT + d;
             else
            CNT:=CNT;               
            end if;
        end if;
        output <= conv_std_logic_vector(CNT,20);
    end process;
end behav;

出0入0汤圆

发表于 2010-5-20 15:59:23 | 显示全部楼层
xilinx的Slice只需要10个,其实是因为1个Slice包含2个Flip-Flop,20个Flip-Flop是必须的。
其他的逻辑资源应该能用于一些组合逻辑。

出0入55汤圆

 楼主| 发表于 2010-5-21 14:04:16 | 显示全部楼层
回复【3楼】40130064
library ieee;  
use ieee.std_logic_1164.all;  
use ieee.std_logic_unsigned.all;  
use ieee.std_logic_arith.all;  
entity counter is  
    port(clk,reset,slt :in std_logic;  
         output :out std_logic_vector(19 downto 0));  
end counter;  
architecture behav of counter is  
begin  
    process(clk,reset,slt)  
    variable d :integer range -1 to 1;  
    variable cnt :integer range -524287 to ......
-----------------------------------------------------------------------

三楼的大哥。编译了你的程序发现还真的少了一个加法器(不知道叫什么,应该就叫加法器吧)。原来可以这样写的。不过宏还是20个。看来是不可以减少了。不过还是谢谢啦!

出0入55汤圆

 楼主| 发表于 2010-5-21 14:06:27 | 显示全部楼层
回复【4楼】suipeng70
xilinx的slice只需要10个,其实是因为1个slice包含2个flip-flop,20个flip-flop是必须的。
其他的逻辑资源应该能用于一些组合逻辑。
-----------------------------------------------------------------------

我在电路中已经用了EPM7064了。当时是没接触过CPLD所以没想到宏居然用得这么快的。可是没得改了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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