首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对(2^n) x m单端口RAM进行建模

对(2^n) x m单端口RAM进行建模
EN

Stack Overflow用户
提问于 2020-08-21 02:30:35
回答 1查看 99关注 0票数 1

我正在使用Verilog对(2^n) x m单端口ram进行建模。该ram具有输入使能端口、输入读写端口(rw),其中当其为1时,我们将写入ram,而当其为零时,我们将仅读取、输入地址端口(addr)、输入输出数据端口和输入write_data端口。

以下是设计代码:

代码语言:javascript
复制
module single_port_ram # ( parameter n=4,m=4) (rw,addr,data,enable);
  input rw,enable;
  inout [m-1:0]data;
  input [n-1:0] addr;
  reg [m-1:0] ram [(2**n)-1:0]; 
  reg [m-1:0]data_reg;
  assign data = (enable & !rw ) ? data_reg : {(m-1){1'bz}};
  
  always @ (*) begin
   
    if(enable) begin
      if(rw) 
        ram[addr]<=data;// wrtite to the ram address
        else
          data_reg <= ram[addr] ; // read from ram address
    end
  end
endmodule

以下是测试平台代码:

代码语言:javascript
复制
module t_b # ( parameter n=4 , m=4);
  reg rw,enable;
  reg [n-1:0] addr;
  // Variables needed for the read and write strategy to/from the bi-directional port
 
  wire [m-1:0]data;
  reg  [m-1:0]write_data; // input data to be written
 
  
  assign data = (enable & rw) ? write_data: {(m-1){1'bz}};
 
  
  
  single_port_ram  tb (.rw(rw),.enable(enable),.addr(addr),.data(data));
                     
   initial begin 
    $dumpfile("dump.vcd");
    $dumpvars;
    end 
                     
initial begin
      // write
       enable=1; rw=1 ; #20
      addr=1; write_data='b 1 ;  #20
  
  // write again
       enable=1; rw=1 ; #20
      addr=2; write_data='b0 ;  #20
      
      // read
      
       
      rw=0 ;  addr=1;  #10
      
      
      
      
      
      $finish;
       end
                     
  endmodule 

问题是,当我们写入时,ram应该在其数据双向端口中输出z值,并且当我们读取时,ram应该在数据双向端口中输出所需的值。在我的代码中,情况并非如此。如果您对其进行模拟,您将发现在我们写入时,数据端口将遵循write_data端口的值。此问题的原因是什么?我想它在tb代码中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-21 02:42:49

在您的测试平台中,您当前总是设置enable=1,这永远不会允许您在数据上看到z。如果您设置了enable=0,您将在您的数据上看到z。例如:

代码语言:javascript
复制
  // read
  rw=0 ;  addr=1;  #10

  // read
  enable=0; rw=0 ;  addr=1;  #10

  $finish;

此外,z常量的位宽度也有错误。更改:

代码语言:javascript
复制
{(m-1){1'bz}}

至:

代码语言:javascript
复制
{m{1'bz}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63511219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档