当前位置: 首页 > news >正文

安路EF2系列芯片单口ram ip核使用方法

测试平台:EF2L45LG144B
IP配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试代码:

module Top(input  wire I_clk,     // 系统时钟output reg  O_led2 = 1'b0
);// ------------------------------------------------------------------// RAM 接口信号(根据BRAM配置调整)// ------------------------------------------------------------------wire [7:0]  ram_dout; reg  [7:0]  ram_din;reg  [7:0]  ram_addr;  // 地址位宽扩展到8位wire        ram_oe  = 1'b1;  // 输出使能始终有效wire        ram_clk = I_clk; wire        ram_rst = 1'b0;reg         ram_we;// ------------------------------------------------------------------// 实例化单口 RAM(写优先模式,带输出寄存器)// ------------------------------------------------------------------SinglePortRam single_port_ram (.doa   (ram_dout),    // 数据输出.dia   (ram_din),     // 数据输入.addra (ram_addr),    // 地址.ocea  (ram_oe),      // 输出使能,控制输出寄存器.clka  (ram_clk),     // 时钟.wea   (ram_we),      // 写使能.rsta  (ram_rst)      // 复位);// ------------------------------------------------------------------// 状态机定义// ------------------------------------------------------------------localparam S_IDLE         = 3'd0;localparam S_WRITE        = 3'd1; // 写操作localparam S_READ_SETUP   = 3'd2; // 准备读地址localparam S_READ_WAIT    = 3'd3; // 等待输出寄存器localparam S_CHECK        = 3'd4; // 比较结果localparam S_WRITE_HOLD   = 3'd5;  // 保持写使能多一个周期reg [2:0] state = S_IDLE;reg [3:0] cnt   = 4'd0;        // 测试地址 0~7// 数据与期望值的管线,适应输出寄存器延迟reg [7:0] exp_data;            // 期望数据reg [7:0] dout_reg;            // 寄存后的读出数据// 统计/调试reg [3:0] error_count;reg [7:0] last_error_addr;reg [7:0] last_error_data;reg [7:0] last_expected;// ------------------------------------------------------------------// 主状态机:写 -> 读 -> 等待输出 -> 比较// 针对写优先模式优化:写操作时输出会立即更新// ------------------------------------------------------------------always @(posedge I_clk) begincase (state)S_IDLE: beginram_we      <= 1'b0;ram_addr    <= 8'd0;ram_din     <= 8'd0;cnt         <= 4'd0;error_count <= 4'd0;state       <= S_WRITE;end// 先给地址/数据S_WRITE: beginram_addr <= {4'd0, cnt};ram_din  <= {4'd0, cnt};exp_data <= {4'd0, cnt};state    <= S_WRITE_HOLD;end// 再拉高写使能并保持一个周期S_WRITE_HOLD: beginram_we   <= 1'b1;state    <= S_READ_SETUP;endS_READ_SETUP: beginram_we   <= 1'b0;ram_addr <= {4'd0, cnt};  // 保持同一地址state    <= S_READ_WAIT;endS_READ_WAIT: begindout_reg <= ram_dout;state    <= S_CHECK;endS_CHECK: beginif (dout_reg != exp_data) beginerror_count     <= error_count + 1'b1;last_error_addr <= {4'd0, cnt};last_error_data <= dout_reg;last_expected   <= exp_data;endif (cnt == 4'd7) begincnt   <= 4'd0;state <= S_IDLE;end else begincnt   <= cnt + 1'b1;state <= S_WRITE;endenddefault: state <= S_IDLE;endcaseend// ------------------------------------------------------------------// LED 指示:无错误常亮,有错误慢闪// ------------------------------------------------------------------reg [24:0] led_counter = 25'd0;reg        slow_toggle = 1'b0;always @(posedge I_clk) beginif (error_count == 4'd0) beginO_led2 <= 1'b0;  // 无错误:常亮end else beginif (led_counter >= 25'd10_000_000 - 1) beginled_counter <= 25'd0;slow_toggle <= ~slow_toggle;O_led2      <= slow_toggle; // 有错误:慢速闪烁end else beginled_counter <= led_counter + 1'b1;endendend// ------------------------------------------------------------------// 调试信号(便于 ILA/在线抓取)// ------------------------------------------------------------------wire [7:0] error_count_out = {4'b0, error_count};wire [7:0] current_addr    = {4'd0, cnt};wire [7:0] current_data    = dout_reg;wire [7:0] expected_out    = exp_data;endmodule
http://www.lryc.cn/news/626335.html

相关文章:

  • 记录 docker容器打包成镜像 在其他服务器快速启动镜像和容器
  • 零基础学Java第二十二讲---异常(2)
  • KV cache
  • 在Excel和WPS表格中制作可打印的九九乘法表
  • MySQL事务及原理详解
  • MySQL 数据与表结构导出 Excel 技术文档
  • 如何使用matlab将目录下不同的excel表合并成一个表
  • python中view把矩阵维度降低的时候是什么一个排序顺序
  • 系统架构设计师备考第1天——系统架构概述
  • 深入Linux内核:架构设计与核心功能解析
  • 车联网(V2X)中万物的重新定义---联网汽车新时代
  • 自动驾驶汽车机器学习安全实用解决方案
  • RK android14 Setting一级菜单IR遥控器无法聚焦问题解决方法
  • Building Systems with the ChatGPT API 使用 ChatGPT API 搭建系统(第二章学习笔记及总结)
  • 汽车ECU实现数据安全存储(机密性保护)的一种方案
  • 【openssl】openssl CA.pl 签发证书操作步骤
  • Redis String全方位指南:命令、编码、时间复杂度与应用场景
  • RK-Android11-PackageInstaller安装器自动安装功能实现
  • KubeBlocks AI:AI时代的云原生数据库运维探索
  • 3D文档控件Aspose.3D实用教程:使用 C# 构建 OBJ 到 U3D 转换器
  • Origin将普通点线图升级为3D点线图
  • ETL 工具选型评测:2025 年 Top 5 工具优缺点对比(附评分表)
  • 【自记】Power BI 中FILTER、CALCULATE 和 CALCULATETABLE 三个函数详细说明
  • React框架超详细入门到实战项目演练【前端】【React】
  • React15.x版本 子组件调用父组件的方法,从props中拿的,这个方法里面有个setState,结果调用报错
  • 【Coze】Windows 环境下使用 Docker 部署 Coze Studio 的详细指南
  • 基于分布式环境的令牌桶与漏桶限流算法对比与实践指南
  • Day 40:训练和测试的规范写法
  • 008.Redis Cluster集群架构实践
  • RabbitMQ:SpringAMQP Topic Exchange(主题交换机)