⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t_ncof.vhd

📁 quartus2环境中设计的高速任意波形发生器
💻 VHD
📖 第 1 页 / 共 4 页
字号:
END PROCESS t_prcs_out_valid;

-- expected out_valid4
t_prcs_out_valid4: PROCESS
BEGIN
	out_valid4_expected <= 'X';
WAIT;
END PROCESS t_prcs_out_valid4;

-- expected out_valid8
t_prcs_out_valid8: PROCESS
BEGIN
	out_valid8_expected <= 'X';
WAIT;
END PROCESS t_prcs_out_valid8;

-- Set trigger on real/expected o/ pattern changes                        

t_prcs_trigger_e : PROCESS(fsin_o_expected,fsin_o3_expected,fsin_o7_expected,out_valid_expected,out_valid4_expected,out_valid8_expected)
BEGIN
	trigger_e <= NOT trigger_e;
END PROCESS t_prcs_trigger_e;

t_prcs_trigger_r : PROCESS(fsin_o,fsin_o3,fsin_o7,out_valid,out_valid4,out_valid8)
BEGIN
	trigger_r <= NOT trigger_r;
END PROCESS t_prcs_trigger_r;


t_prcs_selfcheck : PROCESS
VARIABLE i : INTEGER := 1;
VARIABLE txt : LINE;

VARIABLE last_fsin_o_exp : STD_LOGIC_VECTOR(9 DOWNTO 0) := "UUUUUUUUUU";
VARIABLE last_fsin_o3_exp : STD_LOGIC_VECTOR(9 DOWNTO 0) := "UUUUUUUUUU";
VARIABLE last_fsin_o7_exp : STD_LOGIC_VECTOR(9 DOWNTO 0) := "UUUUUUUUUU";
VARIABLE last_out_valid_exp : STD_LOGIC := 'U';
VARIABLE last_out_valid4_exp : STD_LOGIC := 'U';
VARIABLE last_out_valid8_exp : STD_LOGIC := 'U';

VARIABLE on_first_change : trackvec := "111111";
BEGIN

WAIT UNTIL (sampler'LAST_VALUE = '1'OR sampler'LAST_VALUE = '0')
	AND sampler'EVENT;
IF (debug_tbench = '1') THEN
	write(txt,string'("Scanning pattern "));
	write(txt,i);
	writeline(output,txt);
	write(txt,string'("| expected "));write(txt,fsin_o_name);write(txt,string'(" = "));write(txt,fsin_o_expected_prev);
	write(txt,string'("| expected "));write(txt,fsin_o3_name);write(txt,string'(" = "));write(txt,fsin_o3_expected_prev);
	write(txt,string'("| expected "));write(txt,fsin_o7_name);write(txt,string'(" = "));write(txt,fsin_o7_expected_prev);
	write(txt,string'("| expected "));write(txt,out_valid_name);write(txt,string'(" = "));write(txt,out_valid_expected_prev);
	write(txt,string'("| expected "));write(txt,out_valid4_name);write(txt,string'(" = "));write(txt,out_valid4_expected_prev);
	write(txt,string'("| expected "));write(txt,out_valid8_name);write(txt,string'(" = "));write(txt,out_valid8_expected_prev);
	writeline(output,txt);
	write(txt,string'("| real "));write(txt,fsin_o_name);write(txt,string'(" = "));write(txt,fsin_o_prev);
	write(txt,string'("| real "));write(txt,fsin_o3_name);write(txt,string'(" = "));write(txt,fsin_o3_prev);
	write(txt,string'("| real "));write(txt,fsin_o7_name);write(txt,string'(" = "));write(txt,fsin_o7_prev);
	write(txt,string'("| real "));write(txt,out_valid_name);write(txt,string'(" = "));write(txt,out_valid_prev);
	write(txt,string'("| real "));write(txt,out_valid4_name);write(txt,string'(" = "));write(txt,out_valid4_prev);
	write(txt,string'("| real "));write(txt,out_valid8_name);write(txt,string'(" = "));write(txt,out_valid8_prev);
	writeline(output,txt);
	i := i + 1;
END IF;
IF ( fsin_o_expected_prev /= "XXXXXXXXXX" ) AND (fsin_o_expected_prev /= "UUUUUUUUUU" ) AND (fsin_o_prev /= fsin_o_expected_prev) AND (
	(fsin_o_expected_prev /= last_fsin_o_exp) OR
	(on_first_change(1) = '1')
		) THEN
	throw_error("fsin_o",fsin_o_expected_prev,fsin_o_prev);
	num_mismatches(0) <= num_mismatches(0) + 1;
	on_first_change(1) := '0';
	last_fsin_o_exp := fsin_o_expected_prev;
END IF;
IF ( fsin_o3_expected_prev /= "XXXXXXXXXX" ) AND (fsin_o3_expected_prev /= "UUUUUUUUUU" ) AND (fsin_o3_prev /= fsin_o3_expected_prev) AND (
	(fsin_o3_expected_prev /= last_fsin_o3_exp) OR
	(on_first_change(2) = '1')
		) THEN
	throw_error("fsin_o3",fsin_o3_expected_prev,fsin_o3_prev);
	num_mismatches(1) <= num_mismatches(1) + 1;
	on_first_change(2) := '0';
	last_fsin_o3_exp := fsin_o3_expected_prev;
END IF;
IF ( fsin_o7_expected_prev /= "XXXXXXXXXX" ) AND (fsin_o7_expected_prev /= "UUUUUUUUUU" ) AND (fsin_o7_prev /= fsin_o7_expected_prev) AND (
	(fsin_o7_expected_prev /= last_fsin_o7_exp) OR
	(on_first_change(3) = '1')
		) THEN
	throw_error("fsin_o7",fsin_o7_expected_prev,fsin_o7_prev);
	num_mismatches(2) <= num_mismatches(2) + 1;
	on_first_change(3) := '0';
	last_fsin_o7_exp := fsin_o7_expected_prev;
END IF;
IF ( out_valid_expected_prev /= 'X' ) AND (out_valid_expected_prev /= 'U' ) AND (out_valid_prev /= out_valid_expected_prev) AND (
	(out_valid_expected_prev /= last_out_valid_exp) OR
	(on_first_change(4) = '1')
		) THEN
	throw_error("out_valid",out_valid_expected_prev,out_valid_prev);
	num_mismatches(3) <= num_mismatches(3) + 1;
	on_first_change(4) := '0';
	last_out_valid_exp := out_valid_expected_prev;
END IF;
IF ( out_valid4_expected_prev /= 'X' ) AND (out_valid4_expected_prev /= 'U' ) AND (out_valid4_prev /= out_valid4_expected_prev) AND (
	(out_valid4_expected_prev /= last_out_valid4_exp) OR
	(on_first_change(5) = '1')
		) THEN
	throw_error("out_valid4",out_valid4_expected_prev,out_valid4_prev);
	num_mismatches(4) <= num_mismatches(4) + 1;
	on_first_change(5) := '0';
	last_out_valid4_exp := out_valid4_expected_prev;
END IF;
IF ( out_valid8_expected_prev /= 'X' ) AND (out_valid8_expected_prev /= 'U' ) AND (out_valid8_prev /= out_valid8_expected_prev) AND (
	(out_valid8_expected_prev /= last_out_valid8_exp) OR
	(on_first_change(6) = '1')
		) THEN
	throw_error("out_valid8",out_valid8_expected_prev,out_valid8_prev);
	num_mismatches(5) <= num_mismatches(5) + 1;
	on_first_change(6) := '0';
	last_out_valid8_exp := out_valid8_expected_prev;
END IF;
    trigger_i <= NOT trigger_i;
END PROCESS t_prcs_selfcheck;


t_prcs_trigger_res : PROCESS(trigger_e,trigger_i,trigger_r)
BEGIN
	trigger <= trigger_i XOR trigger_e XOR trigger_r;
END PROCESS t_prcs_trigger_res;

t_prcs_endsim : PROCESS
VARIABLE txt : LINE;
VARIABLE total_mismatches : INTEGER := 0;
BEGIN
WAIT FOR 1000000 ps;
total_mismatches := num_mismatches(0) + num_mismatches(1) + num_mismatches(2) + num_mismatches(3) + num_mismatches(4) + num_mismatches(5);
IF (total_mismatches = 0) THEN                                              
        write(txt,string'("Simulation passed !"));                        
        writeline(output,txt);                                              
ELSE                                                                        
        write(txt,total_mismatches);                                        
        write(txt,string'(" mismatched vectors : Simulation failed !"));  
        writeline(output,txt);                                              
END IF;                                                                     
WAIT;
END PROCESS t_prcs_endsim;

END ovec_arch;

LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;                                

LIBRARY STD;                                                            
USE STD.textio.ALL;                                                     

USE WORK.ncof_vhd_tb_types.ALL;                                         

ENTITY ncof_vhd_vec_tst IS
END ncof_vhd_vec_tst;
ARCHITECTURE ncof_arch OF ncof_vhd_vec_tst IS
-- constants                                                 
-- signals                                                   
SIGNAL clk_250 : STD_LOGIC;
SIGNAL clk_en : STD_LOGIC;
SIGNAL fsin_o : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL fsin_o3 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL fsin_o7 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL out_valid : STD_LOGIC;
SIGNAL out_valid4 : STD_LOGIC;
SIGNAL out_valid8 : STD_LOGIC;
SIGNAL phase_mod_i : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL phase_mod_i2 : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL phase_mod_i6 : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL phi_inc_i : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL phi_inc_i1 : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL phi_inc_i5 : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL resetn : STD_LOGIC;
SIGNAL sampler : sample_type;

COMPONENT ncof
	PORT (
	clk_250 : IN STD_LOGIC;
	clk_en : IN STD_LOGIC;
	fsin_o : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);
	fsin_o3 : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);
	fsin_o7 : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);
	out_valid : OUT STD_LOGIC;
	out_valid4 : OUT STD_LOGIC;
	out_valid8 : OUT STD_LOGIC;
	phase_mod_i : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
	phase_mod_i2 : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
	phase_mod_i6 : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
	phi_inc_i : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
	phi_inc_i1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
	phi_inc_i5 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
	resetn : IN STD_LOGIC
	);
END COMPONENT;
COMPONENT ncof_vhd_check_tst
PORT (
	fsin_o : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
	fsin_o3 : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
	fsin_o7 : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
	out_valid : IN STD_LOGIC;
	out_valid4 : IN STD_LOGIC;
	out_valid8 : IN STD_LOGIC;
	sampler : IN sample_type
);
END COMPONENT;
COMPONENT ncof_vhd_sample_tst
PORT (
	clk_250 : IN STD_LOGIC;
	clk_en : IN STD_LOGIC;
	phase_mod_i : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
	phase_mod_i2 : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
	phase_mod_i6 : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
	phi_inc_i : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
	phi_inc_i1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
	phi_inc_i5 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
	resetn : IN STD_LOGIC;
	sampler : OUT sample_type
	);
END COMPONENT;
BEGIN
	i1 : ncof
	PORT MAP (
-- list connections between master ports and signals
	clk_250 => clk_250,
	clk_en => clk_en,
	fsin_o => fsin_o,
	fsin_o3 => fsin_o3,
	fsin_o7 => fsin_o7,
	out_valid => out_valid,
	out_valid4 => out_valid4,
	out_valid8 => out_valid8,
	phase_mod_i => phase_mod_i,
	phase_mod_i2 => phase_mod_i2,
	phase_mod_i6 => phase_mod_i6,
	phi_inc_i => phi_inc_i,
	phi_inc_i1 => phi_inc_i1,
	phi_inc_i5 => phi_inc_i5,
	resetn => resetn
	);

-- clk_250
t_prcs_clk_250: PROCESS
BEGIN
LOOP
	clk_250 <= '0';
	WAIT FOR 2000 ps;
	clk_250 <= '1';
	WAIT FOR 2000 ps;
	IF (NOW >= 1000000 ps) THEN WAIT; END IF;
END LOOP;
END PROCESS t_prcs_clk_250;

-- clk_en
t_prcs_clk_en: PROCESS
BEGIN
	clk_en <= '1';
WAIT;
END PROCESS t_prcs_clk_en;
-- phase_mod_i[15]
t_prcs_phase_mod_i_15: PROCESS
BEGIN
	phase_mod_i(15) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_15;
-- phase_mod_i[14]
t_prcs_phase_mod_i_14: PROCESS
BEGIN
	phase_mod_i(14) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_14;
-- phase_mod_i[13]
t_prcs_phase_mod_i_13: PROCESS
BEGIN
	phase_mod_i(13) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_13;
-- phase_mod_i[12]
t_prcs_phase_mod_i_12: PROCESS
BEGIN
	phase_mod_i(12) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_12;
-- phase_mod_i[11]
t_prcs_phase_mod_i_11: PROCESS
BEGIN
	phase_mod_i(11) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_11;
-- phase_mod_i[10]
t_prcs_phase_mod_i_10: PROCESS
BEGIN
	phase_mod_i(10) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_10;
-- phase_mod_i[9]
t_prcs_phase_mod_i_9: PROCESS
BEGIN
	phase_mod_i(9) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_9;
-- phase_mod_i[8]
t_prcs_phase_mod_i_8: PROCESS
BEGIN
	phase_mod_i(8) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_8;
-- phase_mod_i[7]
t_prcs_phase_mod_i_7: PROCESS
BEGIN
	phase_mod_i(7) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_7;
-- phase_mod_i[6]
t_prcs_phase_mod_i_6: PROCESS
BEGIN
	phase_mod_i(6) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_6;
-- phase_mod_i[5]
t_prcs_phase_mod_i_5: PROCESS
BEGIN
	phase_mod_i(5) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_5;
-- phase_mod_i[4]
t_prcs_phase_mod_i_4: PROCESS
BEGIN
	phase_mod_i(4) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_4;
-- phase_mod_i[3]
t_prcs_phase_mod_i_3: PROCESS
BEGIN
	phase_mod_i(3) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_3;
-- phase_mod_i[2]
t_prcs_phase_mod_i_2: PROCESS
BEGIN
	phase_mod_i(2) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_2;
-- phase_mod_i[1]
t_prcs_phase_mod_i_1: PROCESS
BEGIN
	phase_mod_i(1) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_1;
-- phase_mod_i[0]
t_prcs_phase_mod_i_0: PROCESS
BEGIN
	phase_mod_i(0) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i_0;
-- phase_mod_i2[15]
t_prcs_phase_mod_i2_15: PROCESS
BEGIN
	phase_mod_i2(15) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i2_15;
-- phase_mod_i2[14]
t_prcs_phase_mod_i2_14: PROCESS
BEGIN
	phase_mod_i2(14) <= '1';
WAIT;
END PROCESS t_prcs_phase_mod_i2_14;
-- phase_mod_i2[13]
t_prcs_phase_mod_i2_13: PROCESS
BEGIN
	phase_mod_i2(13) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i2_13;
-- phase_mod_i2[12]
t_prcs_phase_mod_i2_12: PROCESS
BEGIN
	phase_mod_i2(12) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i2_12;
-- phase_mod_i2[11]
t_prcs_phase_mod_i2_11: PROCESS
BEGIN
	phase_mod_i2(11) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i2_11;
-- phase_mod_i2[10]
t_prcs_phase_mod_i2_10: PROCESS
BEGIN
	phase_mod_i2(10) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i2_10;
-- phase_mod_i2[9]
t_prcs_phase_mod_i2_9: PROCESS
BEGIN
	phase_mod_i2(9) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i2_9;
-- phase_mod_i2[8]
t_prcs_phase_mod_i2_8: PROCESS
BEGIN
	phase_mod_i2(8) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i2_8;
-- phase_mod_i2[7]
t_prcs_phase_mod_i2_7: PROCESS
BEGIN
	phase_mod_i2(7) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i2_7;
-- phase_mod_i2[6]
t_prcs_phase_mod_i2_6: PROCESS
BEGIN
	phase_mod_i2(6) <= '0';
WAIT;
END PROCESS t_prcs_phase_mod_i2_6;
-- phase_mod_i2[5]
t_prcs_phase_mod_i2_5: PROCESS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -