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

能否在Xilinx Vivado测试台中模拟SYSCLK差分时钟?

VC707 FPGA差分时钟仿真驱动问题解决

问题核心

你在Vivado仿真中遇到的问题是:测试台里定义了SYSCLK_P和SYSCLK_N两个reg变量,但未对其进行有效驱动,且错误尝试用并发赋值(assign)给reg类型变量,导致"concurrent assignment to a non-net 'SYSCLK(P/N)' is not permitted"报错;同时原测试台仅生成了单端时钟w_clk,未关联到差分输入,使得顶层模块的IBUFGDS无有效输入,仿真无法运行。

解决方案

要正确驱动差分时钟输入,需在测试台的过程块(initial或always)中对SYSCLK_P和SYSCLK_N进行反相赋值,确保差分信号的正确性,同时避免用并发语句给reg变量赋值。

修改后的测试台代码

module main_tb();

reg SYSCLK_P;
reg SYSCLK_N;

wire [7:0] GPIO_LED;

main DUT (
    .SYSCLK_P(SYSCLK_P),
    .SYSCLK_N(SYSCLK_N),
    .GPIO_LED(GPIO_LED)
);

// 生成200MHz差分时钟对
initial begin
    // 初始化差分对为相反电平
    SYSCLK_P = 1'b0;
    SYSCLK_N = 1'b1;
    forever begin
        #2.5;  // 200MHz时钟周期为5ns,半周期2.5ns
        SYSCLK_P = ~SYSCLK_P;
        SYSCLK_N = ~SYSCLK_N;
    end
end

endmodule

关键说明

  1. 差分信号驱动规则:差分时钟对必须保持严格反相,初始值设置为相反电平,翻转时同步操作,这样才能被IBUFGDS原语正确识别转换为单端时钟。
  2. reg变量赋值规则:reg类型变量只能在initial或always等过程块内赋值,不能使用assign(并发赋值仅适用于wire类型),这是你之前报错的直接原因。
  3. 时钟生成优化:使用initial块初始化时钟比原always块更合理,避免了重复初始化的逻辑问题,同时保证时钟从正确的初始状态开始翻转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:03:23