【问题标题】:Xilinx, Isim treatment of Verilog integer types in simulationXilinx、Isim 在仿真中对 Verilog 整数类型的处理
【发布时间】:2012-03-19 18:09:50
【问题描述】:

我对 FPGA 和 Verilog 还很陌生,但是我无法让我的代码按照我的预期在模拟器中运行。似乎 Isim 模拟器没有在我的代码中对整数进行“操作”。下面是相关代码的sn-p。我试图通过每次整数 i 达到 10 时切换 SCK_gen 来划分 clk 脉冲。当我在 Isim 中运行此代码时,SCK_gen 永远不会改变值。同样,当我在 FPGA 上实现代码时,它的行为与我预期的一样,我可以观察到 1/10 时钟频率的脉冲。如果有人能指出我正确的方向,我将不胜感激。谢谢

    //signals
//for SCK_clock
reg SCK_gen, SCK_hold;
integer i;
reg en_SCK;
wire neg_edge_SCK;


//SCK_generator
always @(posedge clk, posedge reset)
    if (reset)
        begin 
            SCK_gen <= 0;
        end
    else
        begin
            i <= i+1;
            SCK_hold <= SCK_gen;
                if(i == 10)
                    begin
                        SCK_gen <= ~SCK_gen;
                        i <= 0;
                    end
        end

//detect neg edge of SCK
assign neg_edge_SCK = SCK_hold & SCK_gen;

【问题讨论】:

    标签: simulation verilog fpga


    【解决方案1】:

    如果任何操作数是“x”,则任何算术或逻辑等式运算的结果都是“x”。由于看起来i 没有初始化,所以声明i &lt;= i+1i 没有影响,因此比较(i == 10) 将始终为false。

    【讨论】:

    • 我在发帖后就发现了其中的一部分。我用 initial 语句解决了这个问题。因此,只是为了看看我是否正确,如果您没有为 reg 或变量指定初始值,那么在模拟中它的值是 x 直到分配一个值。但另一方面,当它们在硬件中实现时,它们采用 0 值。它是否正确?我还应该在硬件综合和实现之前注释掉我的 initial 语句,还是那些通常被忽略的语句?
    • 是的。并非总是如此,这恰好是您的工具链和目标硬件的行为。模拟器无法从 RTL 描述中知道这一点,因此它将信号标记为未知。
    猜你喜欢
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多