Machxo 2280C 上的块内存始终读取零
Block Memory on Machxo 2280C always reads Zeros
所以我的时序发生器项目需要几 kB 的 SRAM。由于它不起作用,我决定编写一个带有一堆延迟的专用程序,一个输出字供我的逻辑分析器捕获(直接连接到 RAM_DP 块的 Q 并且沮丧地我已经将它连接起来如下:
My RAM_DP block
我试过将写使能保持高电平一段时间甚至一个周期(通过断开我的输出阵列并将一个位连接到信号并用逻辑分析仪观察它来验证,逻辑分析仪按预期脉冲)。我还验证了要写入的数据是非零的。
无论我做什么,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 生成的块,看起来不错。
您似乎在一个地方使用 osc_clck 而在另一个地方使用 osc_clk。请注意,默认情况下,Verilog 会自动创建未定义的信号——这通常会产生警告,但您可以使用“`default_nettype none”
将其变成错误
所以我的时序发生器项目需要几 kB 的 SRAM。由于它不起作用,我决定编写一个带有一堆延迟的专用程序,一个输出字供我的逻辑分析器捕获(直接连接到 RAM_DP 块的 Q 并且沮丧地我已经将它连接起来如下: My RAM_DP block
我试过将写使能保持高电平一段时间甚至一个周期(通过断开我的输出阵列并将一个位连接到信号并用逻辑分析仪观察它来验证,逻辑分析仪按预期脉冲)。我还验证了要写入的数据是非零的。
无论我做什么,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 生成的块,看起来不错。
您似乎在一个地方使用 osc_clck 而在另一个地方使用 osc_clk。请注意,默认情况下,Verilog 会自动创建未定义的信号——这通常会产生警告,但您可以使用“`default_nettype none”
将其变成错误