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

📄 alu_tb.vhd

📁 It is the code for implementing the project titled "The Reconfigurable Instruction Cell Array(IEEE 2
💻 VHD
字号:
LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.numeric_std.ALL;USE std.textio.ALL;USE ieee.std_logic_textio.ALL;-- use packageUSE work.procmem_definitions.ALL;-------------------------------------------------------------------------------ENTITY t_alu ISEND t_alu;-------------------------------------------------------------------------------ARCHITECTURE tbenchfileio OF t_alu IS-- component genericsCONSTANT width : NATURAL := 32;COMPONENT aluPORT (a, b : IN STD_ULOGIC_VECTOR(width-1 DOWNTO 0);opcode : IN STD_ULOGIC_VECTOR(2 DOWNTO 0);result : OUT STD_ULOGIC_VECTOR(width-1 DOWNTO 0);zero : OUT STD_ULOGIC);END COMPONENT;-- component portsSIGNAL a, b : STD_ULOGIC_VECTOR(width-1 DOWNTO 0);SIGNAL opcode : STD_ULOGIC_VECTOR(2 DOWNTO 0);SIGNAL result : STD_ULOGIC_VECTOR(width-1 DOWNTO 0);SIGNAL zero : STD_ULOGIC;-- definition of a clock periodCONSTANT period : time := 10 ns;FUNCTION TO_string(arg : std_ulogic) RETURN string ISVARIABLE result_string : string(1 DOWNTO 1);BEGINCASE arg ISWHEN 'U' => result_string(1) := 'U';WHEN 'X' => result_string(1) := 'X';WHEN '0' => result_string(1) := '0';WHEN '1' => result_string(1) := '1';WHEN 'Z' => result_string(1) := 'Z';WHEN 'W' => result_string(1) := 'W';WHEN 'L' => result_string(1) := 'L';WHEN 'H' => result_string(1) := 'H';WHEN '-' => result_string(1) := '-';END CASE;RETURN result_string;END TO_string;FUNCTION TO_string(arg : unsigned) RETURN string ISALIAS u : unsigned(arg'length DOWNTO 1) IS arg;VARIABLE result_string : string(arg'length DOWNTO 1);BEGINFOR i IN u'range LOOPCASE u(i) ISWHEN 'U' => result_string(i) := 'U';WHEN 'X' => result_string(i) := 'X';WHEN '0' => result_string(i) := '0';WHEN '1' => result_string(i) := '1';WHEN 'Z' => result_string(i) := 'Z';WHEN 'W' => result_string(i) := 'W';WHEN 'L' => result_string(i) := 'L';WHEN 'H' => result_string(i) := 'H';WHEN '-' => result_string(i) := '-';END CASE;END LOOP;RETURN result_string;END TO_string;BEGIN -- tbenchfileio-- component instantiationDUT: aluPORT MAP (a => a,b => b,opcode => opcode,result => result,zero => zero);stimuli_observer : PROCESSVARIABLE errflag : boolean := false;VARIABLE Li : line; -- pointer to file input bufferVARIABLE Lo : line; -- pointer to file output bufferFILE vectorfile : text OPEN read_mode IS "./stimuli/testpattern-ALU.in";-- definition of input file structure:-- # comment line starts with hash character-- otherwise a space is required for the first character !-- following definition of corresponding temp input buffer variablesCONSTANT commentchar : character := '#'; -- comment characterVARIABLE vectorfirstc : character := commentchar; -- first characterVARIABLE vectornum : integer := 0; -- vector numberVARIABLE vectordelimit : character := ' '; -- delimiter character between vectors-- variables used in file-ioVARIABLE opcode_fio : STD_ULOGIC_VECTOR(2 DOWNTO 0);VARIABLE a_fio : INTEGER;VARIABLE b_fio : INTEGER;VARIABLE result_fio : INTEGER;VARIABLE zero_fio : STD_ULOGIC;BEGINWHILE NOT endfile(vectorfile) LOOP-- read stimuli line by linereadline(vectorfile, Li);IF (Li /= NULL) AND (Li'length > 0) THENread(Li, vectorfirstc);IF (vectorfirstc /= commentchar) THENread(Li, vectornum);read(Li, vectordelimit);-- read opcoderead(Li, opcode_fio);opcode <= opcode_fio;-- read operand aread(Li, vectordelimit);read(Li, a_fio);a <= STD_ULOGIC_VECTOR(TO_UNSIGNED(a_fio, width));-- read operand bread(Li, vectordelimit);read(Li, b_fio);b <= STD_ULOGIC_VECTOR(TO_UNSIGNED(b_fio, width));-- read resultread(Li, vectordelimit);read(Li, result_fio);-- read zero bitread(Li, vectordelimit);read(Li, zero_fio);WAIT FOR period;-- compare expected resultIF result /= STD_ULOGIC_VECTOR(TO_UNSIGNED(result_fio, width)) THENwrite(Lo, string'("Pattern No. "));write(Lo, vectornum);writeline(OUTPUT, Lo);REPORT "Error: Wrong result!" & lf &to_string(UNSIGNED(result)) & " = result" & lf &to_string(TO_UNSIGNED(result_fio, width)) & " = expected result" & lfSEVERITY failure;errflag := true;END IF;-- compare zero-bitwrite(Lo, string'("Pattern No. "));write(Lo, vectornum);writeline(OUTPUT, Lo);REPORT "Error: Wrong zero-bit!" & lf &to_string(zero) & " = zero-bit" & lf &to_string(zero_fio) & " = expected zero-bit"SEVERITY failure;errflag := true;END IF;--END IF; -- first character is a commentEND IF; -- line is not nullEND LOOP; -- while not end of FILEASSERT errflagREPORT "No errors !"SEVERITY note;WAIT;END PROCESS;END tbenchfileio;

⌨️ 快捷键说明

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