【问题标题】:VHDL Simulation Timing BehaviourVHDL 仿真时序行为
【发布时间】:2014-08-23 09:18:12
【问题描述】:

我正在尝试编写一些 VHDL 代码,这些代码只是将 std_logic_vector 中的顺序位提供给 FSM 模型。但是,这些位似乎没有正确更新。为了解决这个问题,我使用了以下代码,我没有从向量中获取一点点,而是切换信号 x(我会得到一点点的同一个地方)。

    clk <= NOT clk after 10 ns;
    process(clk) 
        begin
            if count = 8 then
                assert false report "Simulation ended" severity failure;
            elsif (clk = '1') then
                x <= test1(count);
                count <= count + 1;
            end if;         
    end process;

编辑: 看来我很困惑。我已经把它放回到试图一点一点地从向量中取出。这是输出。我会认为当 count 为 1 时,x 将采用 test1(1) 的值,即 1。

【问题讨论】:

  • “...... count 和 x 没有同时更新,即在我的时钟信号的上升沿上”是什么意思。 ?从波形来看,正如代码所预期的那样,countx 确实在clk 的上升沿更新。
  • x,count 在上升沿更新。
  • 是的,抱歉,我弄乱了我的时钟线。当我尝试从向量中取出位时,我已经用它输出的内容更新了问题。
  • 后期编辑,代码匹配波形。当 count 为 1 x 时,在下一个时钟上升沿分配 test(1)。测试(1)是'0'。要让它从 MSB(测试的左元素)开始,您需要从 7 倒数到 0 或使用互补索引值来计数(7 - 计数),这相当于 3 位计数器的反转输出。
  • 回答您自己的问题并接受或关闭问题。我们有很多僵尸问题。

标签: vhdl


【解决方案1】:

正如 David 在 cmets 中指出的那样,代码运行良好。问题是我对 std_logic_vector 中的位顺序一无所知。

【讨论】:

    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多