32
of 76
TEP , The Engineering Projects , Image

syedzainnasir

TEP , The Engineering Projects , Rating 7.5 7.5 / 10
TEP , The Engineering Projects , Icon Level: Moderator
TEP , The Engineering Projects , Icon Joined: 20 Mar 2022
TEP , The Engineering Projects , Icon Last Active: 2:21 PM
TEP , The Engineering Projects , Icon Location: TEP , The Engineering Projects , Flag
TEP , The ENgineering Projects , Icon TEP , The ENgineering Projects , Icon TEP , The ENgineering Projects , Icon TEP , The ENgineering Projects , Icon
problem in vhdl test bench cod
TEP , The Engineering Projects , Calender Question: 08-Mar-2017
TEP , The Engineering Projects , Category In: FPGa Projects
hello,
Why the following testbench code in the first clock d1, d2 are value
And the second clock a, b
[code]library IEEE; use ieee.std_logic_1164.all; use IEEE.STD_LOGIC_UNSIGNED.ALL; use ieee.numeric_std.all; use IEEE.MATH_REAL.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use IEEE.STD_LOGIC_TEXTIO.ALL; library std; use std.textio.all; --include package textio.vhd --entity declaration entity imgadder_test is end imgadder_test; --architecture definition architecture Behavioral of imgadder_test is constant MAX : integer := 256*256-1; -- Component Declaration for the Unit Under Test (UUT) COMPONENT imadder PORT( rstb : IN std_logic; clk : IN std_logic; a : IN std_logic_vector(7 downto 0); b : IN std_logic_vector(7 downto 0); sum : OUT std_logic_vector(7 downto 0) ); END COMPONENT; --Inputs SIGNAL rstb : std_logic := '0'; SIGNAL clk : std_logic := '0'; SIGNAL a : std_logic_vector(7 downto 0) := (others=>'0'); SIGNAL b : std_logic_vector(7 downto 0) := (others=>'0'); --Outputs SIGNAL sum : std_logic_vector(7 downto 0); --period of clock,bit for indicating end of file. signal endoffile : bit := '0'; signal d1,d2,intt,n : integer:=0; signal linenumber : integer:=1; --signal dbus: std_logic_vector(7 downto 0) := x"00"; -------------------------------------------------------------------------------------------- function CONV_STDLV8bit_2INT(ARG: std_logic_vector (7 downto 0)) return integer is variable int: integer:=0; variable tmp: std_logic_vector(7 downto 0); begin int :=0; tmp := ARG; for i in 0 to 7 loop if (tmp(i) ='1') then int := int+(2**i); else int := int+0; end if; end loop; return int; end CONV_STDLV8bit_2INT; -------------------------------------------------------------------------------------------- function CONV_INT2STDLV(ARG: INTEGER; SIZE: INTEGER) return STD_LOGIC_VECTOR is variable result: STD_LOGIC_VECTOR (SIZE-1 downto 0):=x"00"; variable temp: integer:= 0; begin temp := ARG; for i in 0 to SIZE-1 loop if ((temp mod 2) = 1) then result(i) := '1'; else result(i) := '0'; end if; if temp > 0 then temp := temp / 2; elsif (temp > integer'low) then temp := (temp - 1) / 2; -- simulate ASR else temp := temp / 2; -- simulate ASR end if; end loop; return result; end CONV_INT2STDLV; -------------------------------------------------------------------------------------------- constant PERIOD : time := 20 ns; constant DUTY_CYCLE : real := 0.5; constant OFFSET : time := 30 ns; begin -- Instantiate the Unit Under Test (UUT) uut: imadder PORT MAP( rstb => rstb, clk => clk, a => a, b => b, sum => sum ); CLOCK: PROCESS -- clock process for clk BEGIN WAIT for OFFSET; CLOCK_LOOP : LOOP clk <= '0'; WAIT FOR (PERIOD - (PERIOD * DUTY_CYCLE)); clk <= '1'; WAIT FOR (PERIOD * DUTY_CYCLE); END LOOP CLOCK_LOOP; END PROCESS; tb: PROCESS BEGIN rstb <='0'; wait for 60ns; rstb <='1'; wait for 1312us; -- will wait forever END PROCESS; reading : process file infile : text is in "img1.txt"; --declare input file 1987 file infile2 : text is in "img2.txt"; --declare input file 1987 variable inline,inline2 : line; --line number declaration variable dataread1 : real; begin wait until clk = '1' and clk'event; if(n < 65535) then if (not(endfile(infile) or endfile(infile2)) ) then --checking the "END OF FILE" is not reached. readline(infile, inline); read(inline, dataread1); d1 <=integer(dataread1); a <= CONV_INT2STDLV(d1,8); readline(infile2, inline2); read(inline2, dataread1); d2 <=integer(dataread1); b <= CONV_INT2STDLV(d2,8); else a<=x"00"; b<=x"00"; end if; else endoffile <='1'; --set signal to tell end of file read file is reached. end if; end process reading; --write process @negative edge writing : process file outfile : text is out "outimgvhdl.txt"; --declare output file 1987 variable buff_out : line; --line number declaration begin wait until clk = '0' and clk'event; if(endoffile='0') then --if the file end is not reached. intt <= CONV_STDLV8bit_2INT(sum); if(linenumber>3) then write(buff_out, intt); writeline(outfile, buff_out);-- write line to output_image text file. n <= n+1; end if; linenumber <= linenumber + 1; else null; end if; end process writing; end Behavioral; --WRITE (buf, string’("hello")); --WRITELINE(fileptr,buf); --WRITE (buf, bit_vector’(" 010111 ")); --WRITELINE(fileptr,buf); --http://myfpgablog.blogspot.in/2011/12/memory-initialization-methods.html -- constant MEM_DEPTH : integer := 2**ADDR_WIDTH; -- type mem_type is array (0 to MEM_DEPTH-1) of signed(DATA_WIDTH-1 downto 0); -- impure function init_mem(mif_file_name : in string) return mem_type is -- file mif_file : text open read_mode is mif_file_name; -- variable mif_line : line; -- variable temp_bv : bit_vector(DATA_WIDTH-1 downto 0); -- variable temp_mem : mem_type; -- begin -- for i in mem_type'range loop -- readline(mif_file, mif_line); -- read(mif_line, temp_bv); -- temp_mem(i) := signed(to_stdlogicvector(temp_bv)); -- end loop; -- return temp_mem; -- end function; -- constant mem : mem_type := init_mem("mem_init_vhd.mif");[/code]
TEP , The Engineering Projects , Icon Answer: 0 TEP , The Engineering Projects , Icon Views: 150 TEP , The Engineering Projects , Icon Followers: 85
Small Bio
TEP , The Engineering Projects , Tags
PLC
Robot
STM32
Arduino
AI
ESP32
Ladder Logic
PLC Projects
Programming
Communicates STM32
PLC Projects
Communicates PLC
Font Style
Alignment
Indenting and Lists
Insert Media
Insert Items

Want to leave an answer!

Word Count :0 Draft Saved at 12:42 am.