原创 罗苑棠《CPLD/FPGA常用模块与综合系统设计实例精讲》书中的1:1奇数分频器VHDL资源利用改进

2009-2-3 13:03 3296 5 5 分类: FPGA/CPLD

本人买了一本 罗苑棠 CPLD/FPGA常用模块与综合系统设计实例精讲 一书,刚好本人在学奇数的50%占空比分频电路,在网上看了一个 50%占空比的奇数分频电路,看了一些会了, 一下子没有理解,所以想找个好理解的,所以就在书上找了;


 CPLD/FPGA常用模块与综合系统设计实例精讲 一书 291页 有占空比位1:1的奇数分频电路;自己分析时序没有成功,下面是VHDL程序


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


entity fredivn1 is
 GENERIC(N:integer:=7);
  port(clk:in std_logic;
    outclk:out std_logic);
end fredivn1;


architecture rtl of fredivn1 is
 signal count1,count2:integer;          
此处要把integer 改为integer range 0 to N

 signal q,outclk1,outclk2:std_logic; 否则count1,count2会被综合成32位长度
begin                                                        同时RTL里会有4个32位长度单元,极大浪费器件单元;
 q<=outclk1 and outclk2;
    outclk<=q xor outclk1;    程序中是q 异或 outclk1 ;但是书中的文字描述是
process(clk)                          相或这个算是书中的错误;
begin
 if(clk'event and clk='1') then
  if(count1=N-1) then
   count1<=0;
  else
   count1<=count1+1;
  if count1<(integer(N/2)) then
   outclk1<='0';
  else
   outclk1<='1';
  end if;
  end if;
 end if;
end process;


process(clk)
begin
 if(clk'event and clk='0') then
  if(count2=N-1) then
   count2<=0;
  else
   count2<=count2+1;
  if count2<(integer(N/2)) then
   outclk2<='1';
  else
   outclk2<='0';
  end if;
  end if;
 end if;
end process;


end rtl;


 


 


本人使用的quartus II 7.2;  消耗141个LE, 修改后消耗9个LE,多么浪费啊,切记切记......


查看大图请点击图片再最大化窗口然后展开图片


点击开大图


 


下面是功能仿真图 ;


查看大图请点击图片再最大化窗口然后展开图片


点击开大图


 


下面是我自己的功能分析PDF版,有说明,清晰可放大缩小,不知道为什么直接PDF上传不行,所以只能打包了;


https://static.assets-stash.eet-china.com/album/old-resources/2009/2/3/9e61cb1c-8a31-468a-beb1-ceff9dd061af.rar  点击下载


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条