Vhdl 测试台有助于使一个时钟周期延迟

Vhdl 测试台有助于使一个时钟周期延迟,vhdl,Vhdl,有人能帮我写一个测试台吗 输入“a”时,设置加载=1 等待1个时钟周期(即时钟的时间段) 设置load=0并输入a=00000 我不知道如何使1个时钟周期延迟。您可以尝试这样做: SIGNAL CLKp :time := 40 ns; PROCESS BEGIN CLK <= '0'; wait for CLKp/2; CLK <= '1'; wait for CLKp/2; END PROCESS; PROCESS BEGIN load <=

有人能帮我写一个测试台吗

  • 输入“a”时,设置加载=1
  • 等待1个时钟周期(即时钟的时间段)
  • 设置
    load=0
    并输入
    a=00000

我不知道如何使1个时钟周期延迟。

您可以尝试这样做:

SIGNAL CLKp :time := 40 ns;

PROCESS
BEGIN
    CLK <= '0'; wait for CLKp/2;
    CLK <= '1'; wait for CLKp/2;
END PROCESS;

PROCESS
BEGIN
    load <= '1'; a <= ...; wait for CLKp;
    load <= '0'; a <= X"0"; wait for CLKp;
END PROCESS;
信号CLKp:时间=40ns;
过程
开始

CLK您可以尝试这样做:

SIGNAL CLKp :time := 40 ns;

PROCESS
BEGIN
    CLK <= '0'; wait for CLKp/2;
    CLK <= '1'; wait for CLKp/2;
END PROCESS;

PROCESS
BEGIN
    load <= '1'; a <= ...; wait for CLKp;
    load <= '0'; a <= X"0"; wait for CLKp;
END PROCESS;
信号CLKp:时间=40ns;
过程
开始

CLK我会同步进行,而不是等待“时间段”:

这将创建一个时钟信号,该信号一直运行到
完成
变为
1
,然后保持低位。模拟器将发现没有计划的进一步信号变化,并自动停止


您可以有许多不同的过程来创建不同的输入并检查输出。如果在完成后,它们中的每一个都将finished设置为
1
,则时钟将一直运行,直到它们全部完成,因为分辨率函数会导致
finished
信号变为
X
,直到所有驱动程序都是
1
s。我会同步执行,而不是等待“时间段”:

这将创建一个时钟信号,该信号一直运行到
完成
变为
1
,然后保持低位。模拟器将发现没有计划的进一步信号变化,并自动停止


您可以有许多不同的过程来创建不同的输入并检查输出。如果每个驱动器在完成后都将finished设置为
1
,则时钟将一直运行,直到它们全部完成,因为分辨率函数会导致
finished
信号变为
X
,直到所有驱动器都是
1
s。

无需将CLKp设为信号:常数更适合此目的(除非您在模拟过程中改变时钟速度!)最好使用@MartinThompson演示的clk边缘进行同步。“等待CLKp”仅在进行开环测试时有效。一旦与来自DUT的信号(如就绪或确认)协调,您就不再确切知道自己在时钟周期中的位置,“等待CLKp”不再有用。无需将CLKp设为信号:常数更适合此用途(除非您在模拟过程中改变时钟速度!)最好使用@MartinThompson演示的clk边缘进行同步。“等待CLKp”只有在进行开环测试时才起作用。一旦您与来自DUT的信号(如就绪或确认)协调,您就不再确切地知道您在时钟周期中的位置,并且“等待CLKp”不再有用。我将“等待”改为“等待”,因为“等待”是时间类型。@Hadi:谢谢-这已经错了很长时间:)我将“等待”改为“等待”,因为“等待”是时间类型。@Hadi:谢谢-这错了很长时间:)
signal clk : std_logic := '1';
....
clk <= not clk after clk_period/2 when finished /= '1' else '0';