针对在Vivado仿真中无法获取AN65974示例输出数据的问题,以下是逐步排查和解决方案:
时钟信号:
clk <= not clk after 10 ns; -- 假设主频为50MHz(周期20ns)确保时钟周期与设计需求匹配,且信号持续翻转。
复位信号:
reset_in_n <= '0', '1' after 100 ns; -- 复位在100ns后释放确认复位信号在仿真初期有效(低电平),并在合理时间后释放,避免模块始终处于复位状态。
关键控制信号示例:
-- 模拟FLAGA(FIFO可写标志)在复位后有效
flagd <= '0', '1' after 200 ns; -- 根据手册要求设置FLAGA为高根据AN65974时序图,确保FLAGA/FLAGB在正确时间点变化,指示FIFO状态。
写操作触发:
process
begin
wait until reset_in_n = '1'; -- 等待复位完成
wait until rising_edge(clk);
slwr_n <= '0'; -- 启动写操作
-- 提供数据到data_io...
wait until flagd = '1'; -- 等待FIFO准备好
slwr_n <= '1'; -- 结束写操作
end process;确保控制信号(如SLWR、FIFOADR)在正确的时钟边沿变化,并符合建立/保持时间。
data_io:signal data_out : std_logic_vector(31 downto 0);
signal data_dir : std_logic; -- 方向控制
data_io <= data_out when data_dir = '1' else (others => 'Z');根据操作阶段(读/写)切换方向,避免总线冲突。
补充必要信号初始化:
sloe_n <= '1'; -- 初始禁用输出使能
pktend_n <= '1'; -- 初始无包结束确保所有输入端口均有合理初始值,避免未定义行为。
增加仿真时间:
某些操作可能需要较长时间(如DMA传输)。在xsim中延长仿真运行时间:
run all -- 或指定足够长的时长,如run 1ms添加内部信号监视:
在测试台中显式导出关键内部信号(如状态机、计数器):
-- 在元件声明中添加调试端口(需修改设计代码)
debug_state : out std_logic_vector(3 downto 0)或直接在Vivado波形窗口中添加模块内部信号。
典型问题定位:
current_state是否进入预期的传输状态。data_io在写周期是否有有效数据输出,方向控制是否正确。下载AN65974官方测试台:
从Cypress/Infineon官网获取参考测试台,对比信号时序(如SLCS、FIFOADR的切换时机)。
示例修正片段:
-- 官方示例可能包含特定延时
flagd <= '1' after 500 ns; -- 延迟500ns后允许写入Vivado仿真设置:
代码版本兼容性:
总结步骤:
若问题仍未解决,建议提供仿真波形截图及模块关键信号状态(如复位后的第一个100ns),以便进一步分析。
举报
更多回帖