0

我在用 VHDL 设计内存电路时遇到问题。我正在尝试找出对以下提示的提示:

使用结构化 VHDL 方法在 Xilinx 工具中创建一个 NAND 基本单元。为两个 NAND 门添加 1ns 门延迟(用于上升和下降转换)。适当标注输入 S 和 R 以及输出 Q 和 QN。创建一个 VHDL 测试平台来模拟电路,驱动输入如下所示。

在模拟开始时取消断言两个输入。在 100ns 时,资产 S。在 200ns 时,置低 S。在 300ns 时,置位 R。在 400ns 时,置低 R。在 500ns 时,置位两个输入。在 600ns 时,取消断言两个输入。在 700ns 时,断言两个输入。

  1. 未定义的输出
  2. 一组操作
  3. 复位操作
  4. '0' 存储在内存中
  5. '1' 存储在内存中
  6. Q 和 QN 输出都被驱动到相同值的状态
  7. 亚稳态

如果我能得到一个代码看起来像什么的基本示例,我也可以设计一个 NOR 电路(这是我希望解决的实际问题),但一个 NAND 示例就足够了。

我已经尝试将此模型用于结构代码

 import std_logic from the IEEE library
    library ieee;
    use ieee.std_logic_1164.all;

    --ENTITY DECLARATION: name, inputs, outputs
    entity nandGate is
       port( A, B : in std_logic;
                F : out std_logic);
    end nandGate;

    --FUNCTIONAL DESCRIPTION: how the NAND Gate works
    architecture func of nandGate is 
    begin
       F <= A nand B;
    end func;

and this model for the test bench 



 architecture tb of nandGate_tb is
       --pass nandGate entity to the testbench as component 
       component nandGate is
       port( A, B : in std_logic;
                F : out std_logic);
       end component;

       signal  inA, inB, outF : std_logic;
    begin
       --map the testbench signals to the ports of the nandGate
       mapping: nandGate port map(inA, inB, outF);

       process
          --variable to track errors
          variable errCnt : integer := 0;
       begin
          --TEST 1
          inA <= '0';
          inB <= '0';
          wait for 15 ns;
          assert(outF = '1')  report "Error 1" severity error;
          if(outF /= '1') then
             errCnt := errCnt + 1;
          end if;

          --TEST 2
          inA <= '0';
          inB <= '1';
          wait for 15 ns;
          assert(outF = '1')  report "Error 2" severity error;
          if(outF /= '1') then
             errCnt := errCnt + 1;
          end if;

          --TEST 3
          inA <= '1';
          inB <= '1';
          wait for 15 ns;
          assert(outF = '0')  report "Error 3" severity error;
          if(outF /= '0') then
             errCnt := errCnt + 1;
          end if;

          -------------- SUMMARY -------------
          if(errCnt = 0) then
             assert false report "Good!"  severity note;
          else
             assert true report "Error!"  severity error;
          end if;

       end process;
    end tb;
4

1 回答 1

0

问题是要求您从一对交叉耦合的 NAND 门创建一个 SR 锁存器(在指令中称为 NAND 基本单元)。提到的延迟将在 NAND 门的功能描述的逻辑方程中。

以下是由两个 NAND 门组成的 SR 锁存器的结构 VHDL 模型:

entity nandCell is
   port( S, R  : in std_logic; --S and R are active low
         Q, QN : out std_logic);
end nandCell;

architecture structural of nandCell is 
   --NAND gate component declaration
   signal Qint, QNint : std_logic; --these internal signals are required to be able to read the "outputs"
begin
   n1 : nandGate port map(S, QNint, Qint);
   n2 : nandGate port map(R, Qint, QNint);
   Q <= Qint;
   QN <= QNint;
end structural;
于 2013-10-07T03:36:16.150 回答