【问题标题】:Generate clocks with ratio for testbench为测试台生成具有比率的时钟
【发布时间】:2019-10-10 22:05:21
【问题描述】:

我想为我的 I2S 解复用模块生成一个测试激励。激励包含来自 ADC 测量的值。 I2S 标准提供两个时钟:LRCLOCK 和 BITCLOCK。在我的例子中,LRCLOCK 的频率为 48kHz(这也是采样率),而 BITCLOCK 为 64*LRCLOCK,这导致时钟为 3.072MHz。

在测试台中创建时钟时,LRCLOCK 和 BITLCOCK 之间始终存在偏移。而且我无法解释这个偏移量是从哪里来的。

我尝试根据这篇帖子创建一个时钟生成程序:VHDL - How should I create a clock in a testbench?

两种建议的解决方案都表现出相同的行为。 我使用VIVADO 2016.4,模拟器分辨率为1ps

程序:

procedure clk_gen(signal clk : out std_logic; constant FREQ : real) is
    constant PERIOD    : time := 1 sec / FREQ;        -- Full period
    constant HIGH_TIME : time := PERIOD / 2;          -- High time
    constant LOW_TIME  : time := PERIOD - HIGH_TIME;  -- Low time; always >= HIGH_TIME
  begin
    -- Check the arguments
    assert (HIGH_TIME /= 0 fs) report "clk_plain: High time is zero; time resolution to large for frequency" severity FAILURE;
    -- Generate a clock cycle
    loop
      clk <= '1';
      wait for HIGH_TIME;
      clk <= '0';
      wait for LOW_TIME;
    end loop;
  end procedure;

时钟分配:

process
    begin
        i2s_lrclock <= '1';
        wait until reset /= '1';
        clk_gen(i2s_lrclock,48.0e3);
   end process;

 process
   begin
       i2s_bitclock <= '1';
       wait until reset /= '1';
       clk_gen(i2s_bitclock,48.0e3*64);
  end process;

我希望两个时钟的边沿是同步的,但是从 i2s_bitclock 到 i2s_lrclock 的偏移量为 26ps。

【问题讨论】:

  • 谁的模拟器将整数抽象文字隐式转换为浮点类型,或者您的意思是第二个过程中的 64.0? REAL 类型是实数的近似值,受尾数精度的限制。从一个时钟推导出另一个时钟,不要乱用 REAL。
  • 感谢您的提示。模拟器没有抱怨这一点。我使用了下面建议的解决方案,它现在可以工作了。
  • 接受的答案并未反映时钟在硬件中的相关性。期望模拟器报告两个时钟之间未指定和未经测试的关系的错误是不现实的。有一个基本假设你知道 REAL 语义,特别是“近似”位。

标签: vhdl clock


【解决方案1】:

3.072MHz 时钟的周期为 325.5208333...ns,模拟器必须在某处中继周期,并且它可能与您的其他时钟不在同一个数字上。

尝试类似的方法:

signal i2s_lrclock   : std_logic := '0';
signal i2s_bitclock  : std_logic := '0';

begin

  i2s_lrclock   <= not(i2s_lrclock) after 10416640 ps;  -- 64 * 325.520 ns / 2
  i2s_bitclock  <= not(i2s_bitclock) after 162760 ps ;  -- 325.520 ns / 2

仿真中时钟的实际值不是很重要。它们之间的比例是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2018-07-28
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多