OpenCores
URL https://opencores.org/ocsvn/fir_wishbone/fir_wishbone/trunk

Subversion Repositories fir_wishbone

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /fir_wishbone
    from Rev 4 to Rev 5
    Reverse comparison

Rev 4 → Rev 5

/trunk/tester/tb_fir.vhdl
1,48 → 1,141
/* Synthesisable testbench/BiST for FIR Filter design.
Copyright© 2012 Tauhop Solutions. All rights reserved.
This core is free hardware design; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
License: LGPL.
@dependencies:
@designer(s):
Daniel C.K. Kho [daniel.kho@gmail.com] | [daniel.kho@tauhop.com] | [daniel.kho@sophicdesign.com.my];
Tan Hooi Jing [hooijingtan@gmail.com]
@info:
Revision History: @see Mercurial log for full list of changes.
This notice and disclaimer must be retained as part of this text at all times.
*/
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity tb_fir is end entity tb_fir;
entity tb_fir is generic(order:positive:=30; width:positive:=16);
port(
-- clk:in std_ulogic:='0';
-- nRst:in std_ulogic:='0';
--u:in signed(16-1 downto 0);
y:out signed(16-1 downto 0)
);
end entity tb_fir;
 
architecture sim of tb_fir is
signal clk,reset:std_ulogic:='0';
signal u: unsigned(16-1 downto 0);
signal y: unsigned(16*2-1 downto 0);
signal count: unsigned(3 downto 0);
signal pwrUpCnt:unsigned(3 downto 0):=(others=>'0');
begin
clk<=not clk after 10 ns;
process(clk) is begin
if pwrUpCnt<10 then reset<='1';
else reset<='0';
end if;
end process;
fir_test: entity work.fir(rtl)
port map (
reset => reset,
clk => clk,
/* Filter ports. */
u => u,
y => y
);
 
process(reset,clk) is begin
if reset = '1' then count <= (others =>'0');
architecture rtl of tb_fir is
signal reset:std_ulogic:='0';
signal u:signed(16-1 downto 0);
signal trig:std_logic;
/* synthesis translate_off */
signal clk:std_ulogic:='0';
signal nRst:std_ulogic:='1';
/* synthesis translate_on */
signal count:unsigned(8 downto 0);
signal pwrUpCnt:unsigned(3 downto 0):=(others=>'0');
/* on-chip debugger */
signal dbgSignals:std_ulogic_vector(127 downto 0):=(others=>'0');
/* Explicitly define all multiplications with the "*" operator to use dedicated DSP hardware multipliers. */
attribute multstyle:string; attribute multstyle of rtl:architecture is "dsp"; --altera:
-- attribute mult_style:string; attribute mult_style of fir:entity is "block"; --xilinx:
 
begin
/* synthesis translate_off*/
clk<=not clk after 10 ns;
/* synthesis translate_on*/
process(pwrUpCnt,nRst) is begin
if pwrUpCnt<10 or nRst='0' then reset<='1';
else reset<='0';
end if;
end process;
process(reset,clk) is begin
if reset='1' then count<=(others =>'0');
elsif rising_edge(clk) then
if count<10 then count<=count+1; end if;
if count<300 then count<=count+1; end if;
end if;
end process;
process(clk) is begin
if rising_edge(clk) then
end process;
process(nRst,clk) is begin
if nRst='0' then pwrUpCnt<=(others =>'0');
elsif rising_edge(clk) then
if pwrUpCnt<10 then pwrUpCnt<=pwrUpCnt+1; end if;
end if;
end process;
u<= x"0001" when count=5 else x"0000";
end architecture sim;
end process;
/* Impulse generator for impulse response measurement. */
u <= (0=>'1', others=>'0') when count=1 else (others=>'0');
filter: entity work.fir(rtl)
generic map(order=>order, width=>width)
port map(
reset=>reset,
clk=>clk,
/* Filter ports. */
u=>u,
y=>y
);
/* Simulation only. */
/* synthesis translate_off */
reporter: process(clk) is begin
if rising_edge(clk) then
/* (u,y) pairs will be exported to CSV and Matlab for plotting.
Results are then correlated to digital simulations and Matlab
simulations of the filter.
*/
report ";" & integer'image(to_integer(u)) & ";"
& integer'image(to_integer(y));
end if;
end process reporter;
process is begin
assert now<5 us report "simulation stopped." severity failure;
wait;
end process;
/* synthesis translate_on */
/* Hardware debugger (SignalTap II embedded logic analyser). */
trig<='1' when count<300 else '0'; -- Stop SignalTap Triggering after 300 counts, Total data=280
/* SignalTap debugger. */
dbgSignals(width-1 downto 0)<=std_ulogic_vector(u); -- u:16bits
dbgSignals(width*2-1 downto width)<=std_ulogic_vector(y); -- y:32bits
dbgSignals(8+width*2 downto width*2)<=std_ulogic_vector(count); --9bits (300<512)
/* debugger: entity work.stp(syn) port map(
acq_clk=>clk,
acq_data_in=>std_logic_vector(dbgSignals), -- Type conversion: std_ulogic_vector --> std_logic_vector
acq_trigger_in=>"1",
trigger_in=>trig
);
*/
end architecture rtl;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.