波形发生器(含test beach).vhd
上传用户:easylife05
上传日期:2013-03-21
资源大小:42k
文件大小:2k
源码类别:

VHDL/FPGA/Verilog

开发平台:

C/C++

  1. -----------------------------------------------------------------------------
  2. --
  3. --      The following information has been generated by Exemplar Logic
  4. --      and may be freely distributed and modified.
  5. --
  6. --      Design name : smart_waveform
  7. --
  8. --      Purpose : This design is a smart waveform generator.  
  9. --
  10. ----------------------------------------------------------------------------
  11. Library IEEE ;
  12. use IEEE.std_logic_1164.all ;
  13. use IEEE.std_logic_arith.all ;
  14. package waveform_pkg is
  15.   constant rom_width : integer := 6 ;
  16.   subtype  rom_word  is std_logic_vector ( 1 to rom_width) ;
  17.   subtype  rom_range is integer range 0 to 12 ;
  18.   type     rom_table is array ( 0 to 12) of rom_word ;
  19.   constant rom_data : rom_table := rom_table'(
  20.                         "111010" ,
  21.                         "101000" ,
  22.                         "011000" ,
  23.                         "001000" ,
  24.                         "011010" ,
  25.                         "010011" ,
  26.                         "101110" ,
  27.                         "110100" ,
  28.                         "001010" ,
  29.                         "001000" ,
  30.                         "010110" ,
  31.                         "010101" ,
  32.                         "001111" ) ;
  33.   subtype  data_word is integer range 0 to 100 ;
  34.   subtype  data_range is integer range 0 to 12 ;
  35.   type     data_table is array (0 to 12) of data_word ;
  36.   constant data : data_table := data_table'(1,40,9,2,2,4,1,15,5,1,1,3,1) ;
  37. end waveform_pkg ;
  38. LIBRARY IEEE ;
  39. USE IEEE.std_logic_1164.ALL ;
  40. USE IEEE.std_logic_arith.ALL ;
  41. USE work.waveform_pkg.all ;
  42.  
  43. entity smart_waveform is
  44.       port (
  45.             clock : in  std_logic ;
  46.             reset : in  boolean ;
  47.             waves : out rom_word
  48.            ) ;
  49. end ;
  50. architecture rtl of smart_waveform is 
  51.     signal step,next_step : rom_range ;
  52.     signal delay          : data_word  ;
  53.   begin
  54.   next_step <= rom_range'high when step = rom_range'high else step + 1 ;
  55.    time_step : process
  56.      begin
  57.        wait until clock'event and clock = '1' and clock'last_value = '0';
  58.        if (reset) then
  59.          step <= 0 ;
  60.        elsif (delay = 1) then 
  61.          step <= next_step ;
  62.        else
  63.          null ;
  64.        end if ;
  65.    end process ;
  66.    delay_step : process
  67.      begin
  68.        wait until clock'event and clock = '1' ;
  69.        if (reset) then
  70.          delay <= data(0) ;
  71.        elsif (delay = 1) then 
  72.          delay <= data(next_step) ;
  73.        else
  74.          delay <= delay - 1 ;
  75.        end if ;
  76.     end process ;
  77.    waves <= rom_data(step) ;
  78. end ;
  79.