惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tenable Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
Hacker News: Ask HN
Hacker News: Ask HN
Schneier on Security
Schneier on Security
H
Heimdal Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cyberwarzone
Cyberwarzone
V2EX - 技术
V2EX - 技术
W
WeLiveSecurity
Help Net Security
Help Net Security
S
Secure Thoughts
P
Privacy & Cybersecurity Law Blog
S
Securelist
SecWiki News
SecWiki News
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes
Know Your Adversary
Know Your Adversary
The Last Watchdog
The Last Watchdog
N
News | PayPal Newsroom
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
H
Hacker News: Front Page
NISL@THU
NISL@THU
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
Attack and Defense Labs
Attack and Defense Labs
Security Archives - TechRepublic
Security Archives - TechRepublic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Google Online Security Blog
Google Online Security Blog
The Hacker News
The Hacker News
Cloudbric
Cloudbric
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
A
Arctic Wolf
Latest news
Latest news
S
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
Project Zero
Project Zero
P
Privacy International News Feed
B
Blog
云风的 BLOG
云风的 BLOG

博客园 - 所长

Software-Defined Radio for Engineers 一 频谱仪 N9020A 操作步骤记录 FPGA-CAN MAC 层 IP 核测试(二) 源码阅读 libero reg 编译时 占用 RAM 资源 而不是 LUT 资源 加扰和解扰 FPGA-CAN MAC 层 IP 核测试(一) 上板实测 Microchip SoftConsole v2022.2-RISC-V-747 polarfire soc 裸机例程中 链接文件 mpfs-envm-lma-scratchpad-vma.ld 分析 FlashPro5 导致 window11 蓝屏 libero verilog 模块例化时,信号不存在 默认是 不连接 A3P250 在线 debug 抓取信号 Identify 在线逻辑分析仪 MPFS250T MSS 引脚 上下拉配置 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (五) 官方参考 verilog 按键消抖模块 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (四) axi-lite 信号抓取 libero Active Probes 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (三) C代码测试 访问卡死 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (二) axi-lite 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接(一)libero 设置把模块信号变总线方式 libero 2025.2 Macro Library User Guide for SmartFusion 2 and IGLOO 2 FPGAs 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (零) MSS CFG MPFS250T FLASH 只有 128KB 调整代码优化 AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(七) 初始化日志记录 AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(六) 开启 日志打印 Calibration TIMEOUT (0x247, 0x2) AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(五) ad9361_check_cal_done 卡死 AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(四) ad9361_init 编译报错 和 读取 AD9361 ID AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(三) 接口适配到自己的板子 AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(二) AD9361 初始化流程 熟悉 AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(一) 驱动代码移植 RS422 差分 逻辑分析仪 抓包 libero Simulate - ModelSim ME 仿真 串口数据处理模块 vivado axi PS-PL 封装IP 创造自定义 外设 libero Simulate - ModelSim ME (二) 语法分析 libero Simulate - ModelSim ME (一) 新建工程 libero smartdebug Libero SoC CMP402 PolarFire SOC MSS 时钟源选择 polarfire Temperature and Voltage Sensor 温度和电压传感器 log2 PolarFire SoC Clock Conditioning Circuitry - CCC (PLL/DLL) 时钟源介绍(二) PolarFire SoC Clock Conditioning Circuitry - CCC (PLL/DLL) 初始化(三) PolarFire SoC Clock Conditioning Circuitry - CCC (PLL/DLL) 简单介绍(一) libero export flashpro express Job Libero MPFS250T PFSoC MSS Configurator 2025.2 DDR3 ECC 配置 Libero MPFS250T 如何使用 FPExpress 2025.2 烧录 MPFS250TS Direct C 编程后,使用 JTAG 读取的 DEVICE_INFO LOG Xilinx SDK 2019.1 使用 JTAG 将 10MB 文件 复制到 ZYNQ 的 DDR中 大约 20 秒 libero PolarFire soc SPI-DirectC 实战 dp_G5M_check_cycle_count libero PolarFire soc SPI-DirectC 实战 dp_G5M_do_program libero PolarFire soc SPI-DirectC 实战 dp_G5M_erase_action libero PolarFire soc SPI-DirectC 实战 dp_G5M_verify_digest_action
libero Simulate - ModelSim ME (三) 实战测试 双端口 RAM 读写
所长 · 2026-04-17 · via 博客园 - 所长

libero Simulate - ModelSim ME (一) 新建工程 - 所长 - 博客园

libero Simulate - ModelSim ME (二) 语法分析 - 所长 - 博客园

libero Simulate - ModelSim ME (三) 实战测试 双端口 RAM 读写

1、 IP 版本, RAM -Dual Port v2.2

image

 2、IP 参数配置, 单位 8bit , 一个字节, 深度 512 ,表示 512字节的 RAM ,  双端口 公用一个时钟  , 使能 仿真初始化 RAM 接口

image

image

编写 测试文件 步骤:

  1、设置 时钟基准 

parameter SYSCLK_PERIOD = 100;// 10MHZ

// 定义 时钟信号和复位信号

reg SYSCLK;

reg NSYSRESET;

  2、产生时钟信号

always @(SYSCLK) begin

    #(SYSCLK_PERIOD / 2.0) SYSCLK <= !SYSCLK;

end

  3、产生复位信号

initial

begin

    #(SYSCLK_PERIOD * 10 )

        NSYSRESET = 1'b1;

end

3、 例化  RAM 模块 

4、 编写 RAM 写入 时序 

5、编写 RAM 读取时序 

开始仿真:

image

读取端口使能,地址设为1 ,  写入地址设为1 ,  写入端口使能和写入数据0x78. 下个时钟周期 写入端口 使能关闭, 再过2个时钟周期后, 端口B 输出数据

image

///////////////////////////////////////////////////////////////////////////////////////////////////
// Company: <Name>
//
// File: testbench_ram.v
// File history:
//      <Revision number>: <Date>: <Comments>
//      <Revision number>: <Date>: <Comments>
//      <Revision number>: <Date>: <Comments>
//
// Description: 
//
// <Description here>
//
// Targeted device: <Family::ProASIC3> <Die::A3P1000> <Package::144 FBGA>
// Author: <Name>
//
/////////////////////////////////////////////////////////////////////////////////////////////////// 

`timescale 1ns/100ps

module testbench_ram();

// 设置时钟基准
parameter SYSCLK_PERIOD = 100;// 10MHZ

// 定义 时钟信号和复位信号
reg SYSCLK;
reg NSYSRESET;

initial
begin
    SYSCLK = 1'b0;
    NSYSRESET = 1'b0;
end

//////////////////////////////////////////////////////////////////////
// Reset Pulse
//////////////////////////////////////////////////////////////////////
initial
begin
    #(SYSCLK_PERIOD * 1 )
        NSYSRESET = 1'b1;
end


//////////////////////////////////////////////////////////////////////
// Clock Driver
//////////////////////////////////////////////////////////////////////
always @(SYSCLK) begin
    #(SYSCLK_PERIOD / 2.0) SYSCLK <= !SYSCLK;
end


// RAM 读使能 对应 RW信号 高电平
parameter RAM_RW_READ_ENABLE  = 1'b1;
// RAM 写使能 对应 RW信号 低电平
parameter RAM_RW_WRITE_ENABLE = 1'b0;
// BLK 信号使能
parameter RAM_BLK_ENABLE  = 1'b0;
parameter RAM_BLK_DISABLE = 1'b1;

// 例化 双端口 模块
reg [8:0]  ram_addr_a;
reg [8:0]  ram_addr_b;
reg        ram_blk_a;
reg        ram_blk_b;
reg [7:0]  ram_din_a;
//wire [7:0] ram_dout_a;
wire [7:0] ram_dout_b;

ram_buff ram_0(
    // 512字节 读写同时钟 双端口 RAM
    .ADDRA(ram_addr_a),
    .ADDRB(ram_addr_b),
    .BLKA(ram_blk_a),
    .BLKB(ram_blk_b),
    .CLKAB(SYSCLK),
    .DINA(ram_din_a),
    .DINB(8'd0),
    .RESET(NSYSRESET),
    .RWA(RAM_RW_WRITE_ENABLE),
    .RWB(RAM_RW_READ_ENABLE),
    // Outputs
 //   .DOUTA(ram_dout_a),
    .DOUTB(ram_dout_b)
);

// 将 0x12345678 按顺序 写入 RAM
// 写完成 读取 RAM
reg [7:0] byte1 = 8'h78;
reg [7:0] byte2 = 8'h56;
reg [7:0] byte3 = 8'h34;
reg [7:0] byte4 = 8'h12;

reg [8:0] byte_cnt = 0;

always @(posedge SYSCLK or negedge NSYSRESET) begin
    if( !NSYSRESET ) begin
        byte_cnt <= 32'b0;
        ram_blk_b <= RAM_BLK_ENABLE;
        ram_addr_b <= 9'b1;
    end else begin

        byte_cnt <= byte_cnt + 1;

        case(byte_cnt)

        0: begin
            ram_addr_a <= 9'b1;
            ram_blk_a <= RAM_BLK_ENABLE;
            ram_din_a <= byte1;
        end

        default: begin
            ram_blk_a <= RAM_BLK_DISABLE;
        end

        endcase
    end
end

endmodule