首页 > 解决方案 > Machxo 2280C 上的块内存始终读取零

问题描述

所以我的时序发生器项目需要几 kB 的 SRAM。由于它不起作用,我决定编写一个带有一堆延迟的专用程序,一个输出字供我的逻辑分析仪捕获(直接连接到 RAM_DP 块的 Q 并且沮丧地我将其连接如下: 我的RAM_DP 块

我已经尝试将写入启用保持在高电平几个毫秒甚至一个周期(通过断开我的输出阵列并将一点连接到信号并使用逻辑分析仪观察它来验证,它会按预期脉冲)。我还验证了要写入的数据非零。

不管我做什么,Q总是为零,我做错了什么?一定是很明显的东西让我想念它。下面的代码:

Ram_Dq_Buffer Buffer  (sram_address,sram_address,s_write_data,s_writeEnable,osc_clck, 1'b1,1'b0,osc_clck, 1'b1,s_read_data ) ;

总是 @(posedge osc_clk ) 开始

    if (sram_state==0)
        begin
            //Initialize
            s_writeEnable<=0;   
            //sram_Clock_EN <=1;
            //sram_reset <=0;
            sram_address<=511;
            delay<=0;
            sram_state<=1;
            counter<=counter+1;
            s_write_data<=counter;
        end
    if (sram_state==1)
        begin
            delay<=delay+1;
            if (delay>20000)
                begin
                    delay<=0;
                    sram_state<=2;                      
                end
        end
    if (sram_state==2)
        begin
            s_writeEnable<=1;
            delay<=delay+1;
            if (delay>20000)
                begin
                    delay<=0;
                    sram_state<=3;
                    
                end
            
        end
    if (sram_state==3)
        begin
            s_writeEnable<=0;
            delay<=delay+1;
            if (delay>20000)
                begin
                    delay<=0;
                    sram_state<=4;
                    
                end
        end
    if (sram_state==4)
        begin
            delay<=delay+1;
            if (delay>20000)
                begin
                    delay<=0;
                    sram_state<=0;
                    mydata<=s_read_data;
                end
        end
        
end

我使用内部振荡器只是为了测试;大约 20MHz 时钟,但时间似乎在允许的时间范围内。我检查了 IP express 生成的块,这似乎很好。

标签: verilogfpga

解决方案


您似乎在一个地方使用 osc_clck 而在另一个地方使用 osc_clk。请注意,默认情况下,Verilog 会自动创建未定义的信号 - 这通常会产生警告,但您可以使用“`default_nettype none”将其变为错误


推荐阅读