我在用 VHDL 设计内存电路时遇到问题。我正在尝试找出对以下提示的提示:
使用结构化 VHDL 方法在 Xilinx 工具中创建一个 NAND 基本单元。为两个 NAND 门添加 1ns 门延迟(用于上升和下降转换)。适当标注输入 S 和 R 以及输出 Q 和 QN。创建一个 VHDL 测试平台来模拟电路,驱动输入如下所示。
在模拟开始时取消断言两个输入。在 100ns 时,资产 S。在 200ns 时,置低 S。在 300ns 时,置位 R。在 400ns 时,置低 R。在 500ns 时,置位两个输入。在 600ns 时,取消断言两个输入。在 700ns 时,断言两个输入。
- 未定义的输出
- 一组操作
- 复位操作
- '0' 存储在内存中
- '1' 存储在内存中
- Q 和 QN 输出都被驱动到相同值的状态
- 亚稳态
如果我能得到一个代码看起来像什么的基本示例,我也可以设计一个 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;