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

Subversion Repositories opencpu32

[/] [opencpu32/] [trunk/] [hdl/] [opencpu32/] [testDataPath.vhd] - Diff between revs 21 and 27

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 21 Rev 27
Line 25... Line 25...
                          inputImm : in  STD_LOGIC_VECTOR (n downto 0);                  --! Input of Datapath from imediate value (instructions...)
                          inputImm : in  STD_LOGIC_VECTOR (n downto 0);                  --! Input of Datapath from imediate value (instructions...)
                          clk : in  STD_LOGIC;                                                                                          --! Clock signal
                          clk : in  STD_LOGIC;                                                                                          --! Clock signal
           outEn : in  typeEnDis;                                                                                       --! Enable/Disable datapath output
           outEn : in  typeEnDis;                                                                                       --! Enable/Disable datapath output
           aluOp : in  aluOps;                                                                                          --! Alu operations
           aluOp : in  aluOps;                                                                                          --! Alu operations
           muxSel : in  STD_LOGIC_VECTOR (2 downto 0);                           --! Select inputs from dataPath(Memory,Imediate,RegisterFile,Alu)
           muxSel : in  STD_LOGIC_VECTOR (2 downto 0);                           --! Select inputs from dataPath(Memory,Imediate,RegisterFile,Alu)
 
                          muxRegFile : in STD_LOGIC_VECTOR(1 downto 0);                          --! Select Alu InputA (Memory,Imediate,RegFileA)
           regFileWriteAddr : in  generalRegisters;                                     --! General register write address
           regFileWriteAddr : in  generalRegisters;                                     --! General register write address
           regFileWriteEn : in  STD_LOGIC;                                                              --! RegisterFile write enable signal
           regFileWriteEn : in  STD_LOGIC;                                                              --! RegisterFile write enable signal
           regFileReadAddrA : in  generalRegisters;                                     --! General register read address (PortA)
           regFileReadAddrA : in  generalRegisters;                                     --! General register read address (PortA)
           regFileReadAddrB : in  generalRegisters;                                     --! General register read address (PortB)
           regFileReadAddrB : in  generalRegisters;                                     --! General register read address (PortB)
           regFileEnA : in  STD_LOGIC;                                                                          --! Enable RegisterFile PortA
           regFileEnA : in  STD_LOGIC;                                                                          --! Enable RegisterFile PortA
Line 43... Line 44...
   signal inputImm : std_logic_vector(31 downto 0) := (others => 'U');   --! Wire to connect Test signal to component
   signal inputImm : std_logic_vector(31 downto 0) := (others => 'U');   --! Wire to connect Test signal to component
   signal clk : std_logic := '0';                                                                                                        --! Wire to connect Test signal to component
   signal clk : std_logic := '0';                                                                                                        --! Wire to connect Test signal to component
   signal outEn : typeEnDis := disable;                                                                                 --! Wire to connect Test signal to component
   signal outEn : typeEnDis := disable;                                                                                 --! Wire to connect Test signal to component
   signal aluOp : aluOps := alu_pass;                                                                                           --! Wire to connect Test signal to component
   signal aluOp : aluOps := alu_pass;                                                                                           --! Wire to connect Test signal to component
   signal muxSel : std_logic_vector(2 downto 0) := (others => 'U');              --! Wire to connect Test signal to component
   signal muxSel : std_logic_vector(2 downto 0) := (others => 'U');              --! Wire to connect Test signal to component
 
        signal muxRegFile : std_logic_vector(1 downto 0) := (others => 'U'); --! Wire to connect Test signal to component
   signal regFileWriteAddr : generalRegisters := r0;                                                    --! Wire to connect Test signal to component
   signal regFileWriteAddr : generalRegisters := r0;                                                    --! Wire to connect Test signal to component
   signal regFileWriteEn : std_logic := '0';                                                                             --! Wire to connect Test signal to component
   signal regFileWriteEn : std_logic := '0';                                                                             --! Wire to connect Test signal to component
   signal regFileReadAddrA : generalRegisters := r0;                                                    --! Wire to connect Test signal to component
   signal regFileReadAddrA : generalRegisters := r0;                                                    --! Wire to connect Test signal to component
        signal regFileReadAddrB : generalRegisters := r0;                                                       --! Wire to connect Test signal to component   
        signal regFileReadAddrB : generalRegisters := r0;                                                       --! Wire to connect Test signal to component   
   signal regFileEnA : std_logic := '0';                                                                                 --! Wire to connect Test signal to component
   signal regFileEnA : std_logic := '0';                                                                                 --! Wire to connect Test signal to component
Line 67... Line 69...
          inputImm => inputImm,
          inputImm => inputImm,
          clk => clk,
          clk => clk,
          outEn => outEn,
          outEn => outEn,
          aluOp => aluOp,
          aluOp => aluOp,
          muxSel => muxSel,
          muxSel => muxSel,
 
                         muxRegFile => muxRegFile,
          regFileWriteAddr => regFileWriteAddr,
          regFileWriteAddr => regFileWriteAddr,
          regFileWriteEn => regFileWriteEn,
          regFileWriteEn => regFileWriteEn,
          regFileReadAddrA => regFileReadAddrA,
          regFileReadAddrA => regFileReadAddrA,
          regFileReadAddrB => regFileReadAddrB,
          regFileReadAddrB => regFileReadAddrB,
          regFileEnA => regFileEnA,
          regFileEnA => regFileEnA,
Line 95... Line 98...
                REPORT "MOV r0,10" SEVERITY NOTE;
                REPORT "MOV r0,10" SEVERITY NOTE;
                inputImm <= conv_std_logic_vector(10, nBits);
                inputImm <= conv_std_logic_vector(10, nBits);
                regFileWriteAddr <= r0;
                regFileWriteAddr <= r0;
      aluOp <= alu_pass;
      aluOp <= alu_pass;
                muxSel <= muxPos(fromImediate);
                muxSel <= muxPos(fromImediate);
 
                muxRegFile <= muxRegPos(fromRegFileA);
                regFileWriteEn <= '1';
                regFileWriteEn <= '1';
                wait for CLK_period;    -- Wait for clock cycle to latch some data to the register file
                wait for CLK_period;    -- Wait for clock cycle to latch some data to the register file
                -- Read value in r0 to verify if is equal to 20
                -- Read value in r0 to verify if is equal to 20
                regFileWriteEn <= '0';
                regFileWriteEn <= '0';
                inputImm <= (others => 'U');
                inputImm <= (others => 'U');
Line 118... Line 122...
                REPORT "MOV r1,20" SEVERITY NOTE;
                REPORT "MOV r1,20" SEVERITY NOTE;
                inputImm <= conv_std_logic_vector(20, nBits);
                inputImm <= conv_std_logic_vector(20, nBits);
                regFileWriteAddr <= r1;
                regFileWriteAddr <= r1;
      aluOp <= alu_pass;
      aluOp <= alu_pass;
                muxSel <= muxPos(fromImediate);
                muxSel <= muxPos(fromImediate);
 
                muxRegFile <= muxRegPos(fromRegFileA);
                regFileWriteEn <= '1';
                regFileWriteEn <= '1';
                wait for CLK_period;    -- Wait for clock cycle to latch some data to the register file
                wait for CLK_period;    -- Wait for clock cycle to latch some data to the register file
                -- Read value in r1 to verify if is equal to 20
                -- Read value in r1 to verify if is equal to 20
                regFileWriteEn <= '0';
                regFileWriteEn <= '0';
                inputImm <= (others => 'U');
                inputImm <= (others => 'U');
Line 141... Line 146...
                REPORT "MOV r2,r1" SEVERITY NOTE;
                REPORT "MOV r2,r1" SEVERITY NOTE;
                regFileReadAddrB <= r1; -- Read data from r1 
                regFileReadAddrB <= r1; -- Read data from r1 
                regFileEnB <= '1';
                regFileEnB <= '1';
                regFileWriteAddr <= r2; -- Write data in r2
                regFileWriteAddr <= r2; -- Write data in r2
                muxSel <= muxPos(fromRegFileB); -- Select the PortB output from regFile
                muxSel <= muxPos(fromRegFileB); -- Select the PortB output from regFile
 
                muxRegFile <= muxRegPos(fromRegFileA);
                regFileWriteEn <= '1';
                regFileWriteEn <= '1';
                wait for CLK_period;    -- Wait for clock cycle to write into r2
                wait for CLK_period;    -- Wait for clock cycle to write into r2
                -- Read value in r2 to verify if is equal to r1(20)
                -- Read value in r2 to verify if is equal to r1(20)
                regFileWriteEn <= '0';
                regFileWriteEn <= '0';
                inputImm <= (others => 'U');
                inputImm <= (others => 'U');
Line 167... Line 173...
                regFileReadAddrB <= r0; -- Read data from r0 
                regFileReadAddrB <= r0; -- Read data from r0 
                regFileEnB <= '1';
                regFileEnB <= '1';
                aluOp <= alu_sum;
                aluOp <= alu_sum;
                regFileWriteAddr <= r2; -- Write data in r2
                regFileWriteAddr <= r2; -- Write data in r2
                muxSel <= muxPos(fromAlu);      -- Select the Alu output
                muxSel <= muxPos(fromAlu);      -- Select the Alu output
 
                muxRegFile <= muxRegPos(fromRegFileA);
                regFileWriteEn <= '1';
                regFileWriteEn <= '1';
                wait for CLK_period;    -- Wait for clock cycle to write into r2
                wait for CLK_period;    -- Wait for clock cycle to write into r2
                -- Read value in r2 to verify if is equal to 30(10+20)
                -- Read value in r2 to verify if is equal to 30(10+20)
                regFileWriteEn <= '0';
                regFileWriteEn <= '0';
                inputImm <= (others => 'U');
                inputImm <= (others => 'U');
Line 194... Line 201...
                regFileReadAddrB <= r0; -- Read data from r0 
                regFileReadAddrB <= r0; -- Read data from r0 
                regFileEnB <= '1';
                regFileEnB <= '1';
                aluOp <= alu_sum;
                aluOp <= alu_sum;
                regFileWriteAddr <= r3; -- Write data in r2
                regFileWriteAddr <= r3; -- Write data in r2
                muxSel <= muxPos(fromAlu);      -- Select the Alu output
                muxSel <= muxPos(fromAlu);      -- Select the Alu output
 
                muxRegFile <= muxRegPos(fromRegFileA);
                regFileWriteEn <= '1';
                regFileWriteEn <= '1';
                wait for CLK_period;    -- Wait for clock cycle to write into r2
                wait for CLK_period;    -- Wait for clock cycle to write into r2
                -- Read value in r2 to verify if is equal to 30(10+20)
                -- Read value in r2 to verify if is equal to 30(10+20)
                regFileWriteEn <= '0';
                regFileWriteEn <= '0';
                inputImm <= (others => 'U');
                inputImm <= (others => 'U');
Line 211... Line 219...
                muxSel <= (others => 'U');
                muxSel <= (others => 'U');
                regFileEnA <= '0';
                regFileEnA <= '0';
                regFileEnB <= '0';
                regFileEnB <= '0';
                outEn <= disable;
                outEn <= disable;
 
 
 
                -- ADD r3,2 (r2 <= r2+2)
 
                REPORT "ADD r3,2" SEVERITY NOTE;
 
                inputImm <= conv_std_logic_vector(2, nBits);
 
                regFileReadAddrB <= r3; -- Read data from r2
 
                regFileEnB <= '1';
 
                regFileWriteAddr <= r3;
 
                muxRegFile <= muxRegPos(fromImediate);
 
      aluOp <= alu_sum;
 
                muxSel <= muxPos(fromAlu);      -- Select the Alu output                
 
                regFileWriteEn <= '1';
 
                wait for CLK_period;    -- Wait for clock cycle to write into r2
 
                -- Read value in r2 to verify if is equal to 42(40+2)
 
                regFileWriteEn <= '0';
 
                inputImm <= (others => 'U');
 
                muxSel <= muxPos(fromRegFileA); -- Must access from other Port otherwise you will need an extra cycle to change it's address
 
                regFileReadAddrA <= r3; -- Read data from r0 and verify if it's 10
 
                regFileEnA <= '1';
 
                outEn <= enable;
 
                wait for 1 ns;  -- Wait for data to settle
 
                assert outputDp = conv_std_logic_vector(42, nBits) report "Invalid value" severity FAILURE;
 
                wait for 1 ns;  -- Finish test case
 
                muxSel <= (others => 'U');
 
                regFileEnA <= '0';
 
                regFileEnB <= '0';
 
                outEn <= disable;
 
                wait for 1 ns;  -- If you don't use this wait the signals will not change...! (Take care of this when implementing the ControlUnit)
 
 
 
 
      -- Finish simulation
      -- Finish simulation
                assert false report "NONE. End of simulation." severity failure;
                assert false report "NONE. End of simulation." severity failure;
                wait;
                wait;
   end process;
   end process;

powered by: WebSVN 2.1.0

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