测试台多种架构

时间:2013-09-23 19:18:20

标签: vhdl modelsim intel-fpga alu

抱歉,我是这个网站的新手,但我一直在寻找答案近两天。

我是vhdl的新手,并且一项任务要求制作一个简单的16位ALU。这个ALU需要2个架构:行为,以及RTL设计。就我而言,我有完整的代码。

我无法弄清楚如何编写一个测试平台,这将允许我在modelsim中运行两种架构的模拟。我有两个文件(测试平台和ALU)编译正常,但我在模拟中得到错误说“未初始化的inout端口没有驱动程序”

我不确定要为此问题显示什么代码,所以我只会向您展示我的TB的开头。

    LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;

ENTITY tb IS
END tb;

ARCHITECTURE behavior OF tb IS

   signal Clk,Res : std_logic := '0';
   signal A,B : signed(15 downto 0) := (others => '0');
   signal R1, R2 : signed(31 downto 0) := (others => '0');
   signal Op : unsigned(2 downto 0) := (others => '0');
   constant Clk_period : time := 10 ns;

component ALU_16_First
port(A, B: signed(15 downto 0):=(others => '0'); R: inout signed(31 downto 0):= (others => '0'); Op: in unsigned(2 downto 0) := (others => '0'); Clk, Res: Std_logic);
end component ALU_16_First;

component ALU_16_RTL
port(A, B: in signed(15 downto 0):= (others => '0');
     R: inout signed(31 downto 0):= (others => '0'); Op: in unsigned(2 downto 0) := (others => '0'); Clk, Res: Std_logic);
end component ALU_16_RTL;

for ALU_Behaviorial: ALU_16_First use entity work.simple_alu(Behavioral);
for ALU_RTL: ALU_16_RTL use entity work.simple_alu(RTL);

BEGIN

    -- Instantiate the Unit Under Test (UUT)

   ALU_Behaviorial : ALU_16_First  PORT MAP (
          A,
          B,
          R1,
          Op,
          Clk,
          Res
        );

    ALU_RTL: ALU_16_RTL PORT MAP (
          A,
          B,
          R2,
          Op,
          Clk,
          Res
        );

我基本上绝望地按时完成这件事。

感谢。

2 个答案:

答案 0 :(得分:1)

除了R端口外,它看起来很好(正如Russell所说)。如果由于某种原因需要R端口是双向的,请确保在测试平台的适当时间将其分配给“Z”:

testProc : process
begin
  ...
  R <= (others => 'Z') ; 

将来,您可以通过使用直接实体实例代替组件声明,配置规范和组件实例来节省您自己的时间:

 ALU_Behaviorial : use work.simple_alu(Behavioral)  
 PORT MAP (
      A => A_tb,
      B => B_tb,
      R => R1_tb,
      Op => Op_tb,
      Clk => Clk_tb,
      Res => Res_tb
    );

如果继续使用组件声明,则无需为每个模型创建单独的组件名称。您的配置规范将体系结构名称与实体相关联。

我建议您忘记配置规范,并针对更复杂的情况使用直接实体实例化的简单案例和配置声明。

答案 1 :(得分:0)

我建议使用显式端口映射来完全清楚组件实例化中发生了什么。例如:

   ALU_Behaviorial : ALU_16_First  PORT MAP (
      A => A_tb,
      B => B_tb,
      R1 => R1_tb,
      Op => Op_tb,
      Clk => Clk_tb,
      Res => Res_tb
    );

_tb信号是您的测试台信号。现在,确保您的组件输入(A_tb,B_tb,R1_tb,Op_tb,Clk_tb,Res_tb)由您的测试平台架构驱动。你的测试台在哪里推动这些输入?

此外,您是否有充分的理由选择让R1成为&#34; inout&#34;?你能说出来吗?对你来说可能会有点容易。