发信人: whynot (父亲那双破草鞋), 信区: cnElectric
标 题: fpga节省资源设计的一个例子(vhdl)
发信站: 哈工大紫丁香 (Thu Dec 23 13:07:30 1999), 转信
发信人: wavelets (wavelet), 信区: Circuit
发信站: BBS 水木清华站 (Sun Dec 5 10:43:51 1999) WWW-POST
fpga的结构化特点导致近似的设计会产生交大差别的MAPING(综合之后)之结果,
因此,设计时应充分学习FPGA之结构,才可以充分利用资源。
现举例如下:
设计方法1:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port (
inti : in std_logic;
clock : in std_logic;
reset : in std_logic;
bout : out std_logic_vector(4 downto 0));
end counter;
architecture behavior of counter is
signal counter : std_logic_vector(4 downto 0);
begin
counter_machine:process(clock)
begin
if clock'event and clock='1' then
if inti='0' then
counter<="00001";
*****************
elsif reset='1' then
if counter=19 then
counter<=(others=>'0');
else
counter<=counter+1;
end if;
else
counter<=(others=>'0');
end if;
end if;
end process;
bout<=counter;
end behavior;
设计方法2
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port (
inti : in std_logic;
clock : in std_logic;
reset : in std_logic;
bout : out std_logic_vector(4 downto 0));
end counter;
architecture behavior of counter is
signal counter : std_logic_vector(4 downto 0);
begin
counter_machine:process(clock)
begin
if clock'event and clock='1' then
if inti='0' then
counter<="00000";
*****************
elsif reset='1' then
if counter=19 then
counter<=(others=>'0');
else
counter<=counter+1;
end if;
else
counter<=(others=>'0');
end if;
end if;
end process;
bout<=counter;
end behavior;
对于设计1,由于init和reset的counter置位是不同的,所以额外的LE完成
组合逻辑。
而对于设计2,
由于inti和reset可以用LE中的LUT和cascade_in和cascade_out实现计数器
的加,用programable register实现计数器的状态,所以资源利用率是比较
高的。
二者的速度几乎没有差别。
好了,该干活了。
--
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: ningx.bbs@smth.org]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.780毫秒