小孩彦旻旻 发表于 2024-5-19 21:26

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&lt;256;i=i+1)
      $display("sine_rom[%d]= %h",i,sine_rom);
end
always@(posedge clk,negedge rst)
begin
if(!rst)
begin
o_sine&lt;=8'b0;
cnt&lt;=0;
end
else if(cnt&lt;256)
begin
o_sine&lt;=sine_rom;
cnt&lt;=cnt+1;
end
else
cnt&lt;=0;
end

endmodule</code></pre>

<p><br />
&nbsp;</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>&nbsp;</p>

Jacktang 发表于 2024-5-20 07:28

<p>帮楼主顶一下</p>

卿小小 发表于 2024-5-20 11:34

<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仿真,文件默认路径是&ldquo;project_1/project_1.sim/sim_1/behav/xsim/sinABFull256x16Hex.txt&rdquo;。</p>

<p>我这边使用一组递增数初始化rom,得到的仿真波形(三角波)如下:</p>

<p> &nbsp;</p>

<ul>
</ul>

小孩彦旻旻 发表于 2024-5-20 15:58

Jacktang 发表于 2024-5-20 07:28
帮楼主顶一下

<p>谢谢哦</p>

<p>&nbsp;</p>

小孩彦旻旻 发表于 2024-5-20 15:59

卿小小 发表于 2024-5-20 11:34
现象:仿真输出一直为x。

原因:在rom.v中,指定了仿真初始化文件为sinABFull256x16Hex.txt;但是你的仿 ...

<p>解决啦,就是初始化文件没有放在modelsim文件里,非常感谢!</p>
页: [1]
查看完整版本: verilog 实现rom,仿真输出一直为x。求助..