将带时钟的VHDL测试台和32位ALU更改为不带时钟的

将带时钟的VHDL测试台和32位ALU更改为不带时钟的,vhdl,xilinx,mips32,alu,xilinx-ise,Vhdl,Xilinx,Mips32,Alu,Xilinx Ise,我在ALU及其测试台上编写了这个VHDL程序: ALU代码: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity ALU_CLK is port( Clk : in std_logic; --clock signal InRegA,InRegB : in signed(31 downto 0); --input operands InOp : in unsig

我在ALU及其测试台上编写了这个VHDL程序:

ALU代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity ALU_CLK is
port(   Clk : in std_logic; --clock signal
        InRegA,InRegB : in signed(31 downto 0); --input operands
        InOp : in unsigned(2 downto 0); --Operation to be performed
        OutReg : out signed(31 downto 0);  --output of ALU
        OutZero : out std_logic
        );
end ALU_CLK;

architecture Behavioral of ALU_CLK is

signal Reg1,Reg2,Reg3 : signed(31 downto 0) := (others => '0');

begin

Reg1 <= INregA;
Reg2 <= InRegB;
OutReg <= Reg3;
process(Clk)
    variable temp: signed(31 downto 0);
begin
 if(rising_edge(Clk)) then
      case InOp is
            when "010" => 
                 temp := Reg1 + Reg2;    --addition
            when "000" => 
                 temp := Reg1 and Reg2;  --AND gate  
            when "001" => 
                 temp := Reg1 or Reg2;   --OR gate                 
            when others =>
                 NULL;
      end case;   
             if temp  = (31 downto 0=>'0') then
                OutZero <= '1';
                else
                OutZero <= '0';
            end if;
            Reg3 <= temp;
   end if; 
end process;    
end Behavioral; 
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
实体ALU_CLK是
端口(时钟:在标准逻辑中;--时钟信号
InRegA,InRegB:in有符号(31到0);--输入操作数
InOp:在无符号状态下(2下降到0);--要执行的操作
OutReg:out signed(31到0);--ALU的输出
OutZero:out std_逻辑
);
完铜锣湾;;
ALU_CLK的架构是
信号Reg1、Reg2、Reg3:已签名(31向下至0):=(其他=>“0”);
开始
Reg1
温度:=Reg1或Reg2--或门
当其他人=>
无效的
终例;
如果温度=(31向下至0=>'0'),则
零下时钟,
InRegA=>A,
InRegB=>B,
InOp=>Op,
OutReg=>R,
OutZero=>zero
);
Clk_流程:流程
开始

Clk即使在没有时钟的模块测试台上,也最好有 一种时钟,可以为测试事件计时,并使其更容易查看测试 波形方面的进展

因此,在从ALU中移除时钟后,测试台进程可以进行控制 刺激并进行如下检查:

-- Combined stimuli and check process
process is
begin
  ...
  -- === 2 + 2 test ===
  -- Stimuli control
  wait until rising_edge(clk);
  InRegA <= to_signed(2, InRegA'length);
  InRegB <= to_signed(2, InRegA'length);
  InOp   <= "010";  -- Add
  -- Output check
  wait until falling_edge(clk);
  assert OutReg = InRegA + InRegB;
  assert (OutZero = '1') = (OutReg = 0);
  ...
end process;
检查
信号由刺激过程控制,以保护 应进行检查,以避免启动时出现错误或其他错误
特殊条件。

即使在没有时钟的模块测试台上,也最好有 一种时钟,可以为测试事件计时,并使其更容易查看测试 波形方面的进展

因此,在从ALU中移除时钟后,测试台进程可以进行控制 刺激并进行如下检查:

-- Combined stimuli and check process
process is
begin
  ...
  -- === 2 + 2 test ===
  -- Stimuli control
  wait until rising_edge(clk);
  InRegA <= to_signed(2, InRegA'length);
  InRegB <= to_signed(2, InRegA'length);
  InOp   <= "010";  -- Add
  -- Output check
  wait until falling_edge(clk);
  assert OutReg = InRegA + InRegB;
  assert (OutZero = '1') = (OutReg = 0);
  ...
end process;
检查
信号由刺激过程控制,以保护 应进行检查,以避免启动时出现错误或其他错误
特殊条件。

即使在没有时钟的模块测试台上,也最好有 一种时钟,可以为测试事件计时,并使其更容易查看测试 波形方面的进展

因此,在从ALU中移除时钟后,测试台进程可以进行控制 刺激并进行如下检查:

-- Combined stimuli and check process
process is
begin
  ...
  -- === 2 + 2 test ===
  -- Stimuli control
  wait until rising_edge(clk);
  InRegA <= to_signed(2, InRegA'length);
  InRegB <= to_signed(2, InRegA'length);
  InOp   <= "010";  -- Add
  -- Output check
  wait until falling_edge(clk);
  assert OutReg = InRegA + InRegB;
  assert (OutZero = '1') = (OutReg = 0);
  ...
end process;
检查
信号由刺激过程控制,以保护 应进行检查,以避免启动时出现错误或其他错误
特殊条件。

即使在没有时钟的模块测试台上,也最好有 一种时钟,可以为测试事件计时,并使其更容易查看测试 波形方面的进展

因此,在从ALU中移除时钟后,测试台进程可以进行控制 刺激并进行如下检查:

-- Combined stimuli and check process
process is
begin
  ...
  -- === 2 + 2 test ===
  -- Stimuli control
  wait until rising_edge(clk);
  InRegA <= to_signed(2, InRegA'length);
  InRegB <= to_signed(2, InRegA'length);
  InOp   <= "010";  -- Add
  -- Output check
  wait until falling_edge(clk);
  assert OutReg = InRegA + InRegB;
  assert (OutZero = '1') = (OutReg = 0);
  ...
end process;
检查
信号由刺激过程控制,以保护 应进行检查,以避免启动时出现错误或其他错误
特殊条件。

最后我得到了:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity ALU_32 is
port(  
        InRegA,InRegB : in signed(31 downto 0); --input operands
        InOp : in unsigned(2 downto 0); --Operation to be performed
        OutReg : out signed(31 downto 0);  --output of ALU
          OutZero : out std_logic
        );
end ALU_32;

architecture Behavioral of ALU_32 is

--temporary signal declaration.
signal Reg1,Reg2,Reg3 : signed(31 downto 0) := (others => '0');

begin

Reg1 <= InRegA;
Reg2 <= InRegB;
OutReg <= Reg3;

process(InOp, InRegA, inRegB)
    variable temp: signed(31 downto 0);
begin
      case InOp is
            when "010" => 
                 temp := Reg1 + Reg2;    --addition
            when "110" => 
                 temp := Reg1 - Reg2;    --subtraction
            when "000" => 
                 temp := Reg1 and Reg2;  --AND gate  
            when "001" => 
                 temp := Reg1 or Reg2;   --OR gate               
            when "100" => 
                 temp := Reg1 nor Reg2;  --NOR gate    
            when "011" => 
                 temp := Reg1 xor Reg2;  --XOR gate   
            when "101" => 
                 temp := not Reg1;       --NOT gate
            when "111" => 
                 if Reg1 < Reg2 then     --SLT (set on less than) gate
                     temp   := (others => '1');
                     else
                     temp   := (others => '0');
                 end if;
            when others =>
                 NULL;
      end case; 

             if temp  = (31 downto 0=>'0') then
                OutZero <= '1';
                else
                OutZero <= '0';
            end if;
            Reg3 <= temp;

end process;    

end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
实体ALU_32为
港口(
InRegA,InRegB:in有符号(31到0);--输入操作数
InOp:在无符号状态下(2下降到0);--要执行的操作
OutReg:out signed(31到0);--ALU的输出
OutZero:out std_逻辑
);
结束ALU_32;
ALU_32的体系结构是
--临时信号声明。
信号Reg1、Reg2、Reg3:已签名(31向下至0):=(其他=>“0”);
开始
Reg1
温度:=Reg1和Reg2--与门
当“001”=>
温度:=Reg1或Reg2--或门
当“100”=>
温度:=Reg1或Reg2--北门
当“011”=>
温度:=Reg1或Reg2--异或门
当“101”=>
温度:=非Reg1--非门
当“111”=>
如果Reg1'1');
其他的
温度:=(其他=>“0”);
如果结束;
当其他人=>
无效的
终例;
如果温度=(31向下至0=>'0'),则
零外“0”);
--输出
信号输出寄存器:已签名(31向下至0);
信号出零:标准逻辑;
--端口列表中未检测到时钟。将下面替换为
--适当的端口名
--恒定周期:时间:=10纳秒;
开始
--实例化被测单元(UUT)
uut:ALU_32端口映射(
InRegA=>InRegA,
InRegB=>InRegB,
不工作=>不工作,
OutReg=>OutReg,
OutZero=>OutZero
);
--刺激过程
刺激程序:过程
开始
--保持复位状态100纳秒。
等待100纳秒;
--在这里插入刺激
--测试正常操作

最后我得到了这个:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity ALU_32 is
port(  
        InRegA,InRegB : in signed(31 downto 0); --input operands
        InOp : in unsigned(2 downto 0); --Operation to be performed
        OutReg : out signed(31 downto 0);  --output of ALU
          OutZero : out std_logic
        );
end ALU_32;

architecture Behavioral of ALU_32 is

--temporary signal declaration.
signal Reg1,Reg2,Reg3 : signed(31 downto 0) := (others => '0');

begin

Reg1 <= InRegA;
Reg2 <= InRegB;
OutReg <= Reg3;

process(InOp, InRegA, inRegB)
    variable temp: signed(31 downto 0);
begin
      case InOp is
            when "010" => 
                 temp := Reg1 + Reg2;    --addition
            when "110" => 
                 temp := Reg1 - Reg2;    --subtraction
            when "000" => 
                 temp := Reg1 and Reg2;  --AND gate  
            when "001" => 
                 temp := Reg1 or Reg2;   --OR gate               
            when "100" => 
                 temp := Reg1 nor Reg2;  --NOR gate    
            when "011" => 
                 temp := Reg1 xor Reg2;  --XOR gate   
            when "101" => 
                 temp := not Reg1;       --NOT gate
            when "111" => 
                 if Reg1 < Reg2 then     --SLT (set on less than) gate
                     temp   := (others => '1');
                     else
                     temp   := (others => '0');
                 end if;
            when others =>
                 NULL;
      end case; 

             if temp  = (31 downto 0=>'0') then
                OutZero <= '1';
                else
                OutZero <= '0';
            end if;
            Reg3 <= temp;

end process;    

end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
实体ALU_32为
港口(
InRegA,InRegB:in有符号(31到0);--输入操作数
InOp:在无符号状态下(2下降到0);--要执行的操作
OutReg:out signed(31到0);--ALU的输出
OutZero:out std_逻辑
);
结束ALU_32;
ALU_32的体系结构是
--临时信号声明。
信号Reg1、Reg2、Reg3:已签名(31向下至0):=(其他=>“0”);
开始
Reg1
温度:=Reg1和Reg2--与门
当“001”=>
温度:=Reg1或Reg2--或门
当“100”=>
温度:=Reg1或Reg2--北门
当“011”=>
温度:=Reg1或Reg2--异或门
当“101”=>
温度:=非Reg1--非门
当“111”=>
如果Reg1