You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VHDL中stalloLoad信号触发延迟问题咨询(ZedBoard Zynq开发板)

问题原因分析

你的stalloLoad延迟一个时钟沿触发,核心原因是VHDL同步进程中信号赋值的时序特性:在同一个时钟上升沿的进程执行中,所有信号的赋值操作不会立即生效,当前进程内用到的信号值都是上一个时钟周期的旧值。

具体逻辑链如下:

  1. 当contatoreLoad = 0时,你执行了rd_sig <= inst(11 downto 7),但这个赋值要等到当前时钟沿结束后才会更新rd_sig的实际值。
  2. 同一个时钟沿里紧接着的if(rd_sig = "00110")判断,用的还是rd_sig在上一个时钟周期的旧值,所以此时不会触发contatoreLoad <= 1。
  3. 要等到下一个时钟上升沿,rd_sig才会更新为当前inst的rd字段值,这时判断条件才会成立,contatoreLoad被设为1,进而触发stalloLoad <= '1'——这就导致了延迟一个时钟沿的现象。
修正方案

直接使用输入信号inst(11 downto 7)进行判断,而非依赖刚赋值的rd_sig(inst是当前时钟周期的稳定输入值)。修改后的关键代码片段如下:

if(contatoreLoad = 0) then
    codop <= inst(6 downto 0);
    rd_sig <= inst(11 downto 7);
    rs1_sig <= inst(19 downto 15);
    rs2_sig <= inst(24 downto 20);
    codop <= codop_sig;
    rd <= rd_sig;
    rs1 <= rs1_sig;
    rs2 <= rs2_sig;
            
    -- 直接用inst的rd字段判断,而非rd_sig
    if(inst(11 downto 7) = "00110") then
        contatoreLoad <= 1;
    end if;
end if;
额外注意事项

你的代码里还有几处未定义的信号(codop、rs1_sig、rs2_sig、codop_sig、regLoad),需要在architecture的信号声明区补充定义,否则无法正常编译。

内容的提问来源于stack exchange,提问作者Boat01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:40:50