verilog 实现rom,仿真输出一直为x。求助..
<p>写了一个rom,写入数据,为什么仿真的时候输出一直为x啊,有没有大佬帮我看看救命呜呜呜呜呜呜呜呜呜</p><pre>
<code>module rom( rst,clk,o_sine);
input clk;
input rst; //复位信号
outputo_sine;
reg o_sine; //存储的数据位宽为8位
//parameter INIT_FILE = "../dat/ram_init.dat"reg ROM ;
parameter SINE_FILE = "sinABFull256x16Hex.txt"; //正弦波形数据
reg sine_rom ; //存储器的深度为256
reg cnt;
integer i;
initial
begin
$readmemh(SINE_FILE, sine_rom);
for(i=0;i<256;i=i+1)
$display("sine_rom[%d]= %h",i,sine_rom);
end
always@(posedge clk,negedge rst)
begin
if(!rst)
begin
o_sine<=8'b0;
cnt<=0;
end
else if(cnt<256)
begin
o_sine<=sine_rom;
cnt<=cnt+1;
end
else
cnt<=0;
end
endmodule</code></pre>
<p><br />
</p>
<p>下面是测试代码</p>
<pre>
<code>`timescale 1ns / 1ps
module rom_tb();
reg rst,clk;
wire o_sine;
initial
begin
clk=0;
rst=1; //低电平复位信号赋初始值1
#40 rst=0;
#60 rst=1;
end
rom rom_test(.rst(rst),.clk(clk),.o_sine(o_sine));
always #1 clk=~clk; //时钟周期为2ns
endmodule</code></pre>
<p> </p>
<p>帮楼主顶一下</p>
<p>现象:仿真输出一直为x。</p>
<p>原因:在rom.v中,指定了仿真初始化文件为sinABFull256x16Hex.txt;但是你的仿真工程并没有该文件,或者该文件的路径有问题导致初始化失败。</p>
<pre>
<code class="language-bash">
parameter SINE_FILE = "sinABFull256x16Hex.txt"; //正弦波形数据</code></pre>
<p>解决办法:添加初始化文件sinABFull256x16Hex.txt,需要注意路径。如果是Vivado仿真,文件默认路径是“project_1/project_1.sim/sim_1/behav/xsim/sinABFull256x16Hex.txt”。</p>
<p>我这边使用一组递增数初始化rom,得到的仿真波形(三角波)如下:</p>
<p> </p>
<ul>
</ul>
Jacktang 发表于 2024-5-20 07:28
帮楼主顶一下
<p>谢谢哦</p>
<p> </p>
卿小小 发表于 2024-5-20 11:34
现象:仿真输出一直为x。
原因:在rom.v中,指定了仿真初始化文件为sinABFull256x16Hex.txt;但是你的仿 ...
<p>解决啦,就是初始化文件没有放在modelsim文件里,非常感谢!</p>
页:
[1]