真双口RAM读写设计

1.1 概念

     真双端口RAM有两个独立的读写端口,每个端口都可以独立发起读或者写。

1.2 读写冲突处理

     1、读和写冲突:如果读和写同时有效,且读和写是同一个地址时,发生RAM读写冲突,此时会把最新的写数据直接赋给读数据,称为写穿通到读
     2、写和写冲突:表示两个端口写使能同时有效且写地址相同,此时需要关断一个写,把两个写端口都需要更新的值处理到一个写端口上面,任何的DP RAM 都不支持写和写冲突。

1.3 三种端口比较

在这里插入图片描述

1.4 真双口RAM读写代码

下面展示 功能代码

`timescale 1ns / 1ps
///

// 读写模块 Verilog 功能代码如下:



module dp_ram_ab_rw(
input  sys_clk,
input  sys_rst_n
    );
    
wire ram_wren;
wire ram_rden;

wire [7:0] ram_rd_dataa;
wire [7:0] ram_rd_datab;

wire [7:0] ram_wr_data;

wire [4:0] ram_rd_addr;
wire [4:0] ram_wr_addr;

wire rden_a;
wire rden_b;
wire wen_a;
wire wen_b;
wire [7:0] data_a;
wire [7:0] data_b;
wire [4:0] addr_a;
wire [4:0] addr_b;

reg  [7:0] rw_cnt;
reg   flag;    
  

assign  ram_wren = ((rw_cnt >= 8'd0) && (rw_cnt <= 8'd31))? 1'b1:1'b0 ;
assign  ram_rden = ((rw_cnt >= 8'd1) && (rw_cnt <= 8'd31))? 1'b1:1'b0 ;

assign  ram_wr_addr = rw_cnt[7:0] ;
assign  ram_rd_addr = rw_cnt[7:0] - 1'b1 ;

assign  ram_wr_data =  rw_cnt[4:0] ;

assign  rden_a = flag ? 1'b0 :ram_rden ;
assign   wen_a = flag ? ram_wren :1'b0 ;
assign  addr_a = flag ? ram_wr_addr : ram_rd_addr ;
assign  data_a = flag ? ram_wr_data : 1'b0 ;

assign  rden_b = flag ? ram_rden : 1'b0;
assign   wen_b = flag ? 1'b0 : ram_wren;
assign  addr_b = flag ? ram_rd_addr : ram_wr_addr ;
assign  data_b = flag ? 1'b0 : ram_wr_data ;

always @(posedge sys_clk or negedge sys_rst_n)
       if(!sys_rst_n)
            rw_cnt <= 8'd0 ;
       else if(rw_cnt == 8'd63)
            rw_cnt <= 8'd0 ;
            else
            rw_cnt <= rw_cnt + 1'b1 ;

always @(posedge sys_clk or negedge sys_rst_n)
        if(!sys_rst_n)
             flag <= 1'b0 ;
             else if(rw_cnt == 8'd31)
             flag <= ~flag ;
          
             
             
dp_ram_ab_ctl  dp_ram_ab_ctl_inst(
.clka(sys_clk),
.clkb(sys_clk),
.wena(wen_a),
.wenb(wen_b),
.ena (rden_a),
.enb (rden_b),
.din_a(data_a),
.din_b(data_b),
.addra(addr_a),
.addrb(addr_b),

.dout_a(ram_rd_dataa),
.dout_b(ram_rd_datab)
    );
    
    
endmodule


// 控制模块 Verilog 功能代码如下:


module dp_ram_ab_ctl(
input  clka,
input  clkb,
input  wena,
input  wenb,
input  ena,
input  enb,
input  [7:0] din_a,
input  [7:0] din_b,
input  [4:0] addra,
input  [4:0] addrb,

output reg [7:0] dout_a,
output reg [7:0] dout_b
    );
    
reg  [7:0] mem [31:0] ;

always @(posedge clka) begin
    if(wena)
        mem[addra] <= din_a;
    if(wenb)
        mem[addrb] <= din_b;
    end
    
always @(posedge clka) begin
     if(ena)  
        dout_a <= mem[addra] ;
     else
        dout_a <= 8'hx;
      end    
    
always @(posedge clka) begin 
     if(enb)
        dout_b <= mem[addra] ;
     else
        dout_b <= 8'hx;
      end   
              
endmodule


// 仿真模块 Verilog 功能代码如下:

    

module tb_dp_ram_ab(

    );
    
   reg clk ;
   reg rst ;

   initial  begin
    clk = 1'b0 ;
    rst = 1'b0 ;
    #300
    rst = 1'b1 ;
    
   end

always #10 clk = ~clk ;
   
dp_ram_ab_rw  dp_ram_ab_rw_inst(
.sys_clk(clk),
.sys_rst_n(rst)
    );
   
endmodule


 

1.5 仿真波形

在这里插入图片描述

在Windows 7操作系统中,错误模块路径C:\windows\Syswow64\nt.dll是指ntdll.dll文件在系统中的位置。ntdll.dll是Windows 7操作系统中的一个重要组件,是NT内核级文件,系统从ring3到ring0的入口。当系统出现ntdll.dll模块故障的错误提示时,可以通过以下方法进行修复: 1. 首先,下载ntdll.dll文件。确保下载的dll文件与您的操作系统相匹配,如果您的系统是64位的,请下载64位的dll文件。 2. 然后,将下载的dll文件复制到C:\Windows\SysWOW64目录下。这是64位系统的系统目录,如果您的系统是32位的,请将dll文件复制到C:\Windows\System32目录下。 3. 最后,重新启动计算机,以使更改生效。 通过以上方法,您可以修复win7错误模块路径C:\windows\Syswow64\ntdll.dll的问题。请注意,在进行任何系统文件更改之前,请确保备份重要数据,并谨慎操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [windows mysql服务自动启动 错误模块名称:ntdll.dll](https://blog.csdn.net/hefeng_aspnet/article/details/131662120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【已解决】win7系统出现ntdll.dll错误模块怎么解决?](https://blog.csdn.net/qdx698767896/article/details/122352460)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值