dma_ddr 的编写 通过mig控制ddr3

在这里插入图片描述
此外还有别的模块 本模块是 其中一个

`timescale 1ns/1ps
module dma_ctrl (input   wire            ui_clk          ,   //100MHZ 用户时钟input   wire            ui_rst_n        ,//写fifo的写端口    input   wire            wf_wr_clk       ,   //由数据产生模块的时钟来决定input   wire            wf_wr_en        ,input   wire    [15:0]  wf_wr_data      ,//读fifo的读端口input   wire            rf_rd_clk       ,   //由数据接收模块的时钟来决定input   wire            rf_rd_en        ,output  wire    [15:0]  rf_rd_data      ,output  reg             rf_rd_req       ,   //数据请求接收信号//----native接口------  //命令控制端口output  wire    [27:0]	app_addr        ,      output  reg     [2:0]	app_cmd         ,  output  reg     		app_en          ,  input   wire    		app_rdy         ,  //写数据端口output  wire    [127:0]	app_wdf_data    ,          output  wire    		app_wdf_end     ,          output  reg     		app_wdf_wren    ,          input   wire    		app_wdf_rdy     ,      output  wire    [15:0]	app_wdf_mask    ,          //读数据端口input   wire    [127:0]	app_rd_data     ,          input   wire    		app_rd_data_end ,  input   wire    		app_rd_data_vali     
);parameter FIFO_BURST_LEN = 128; //16*8
parameter ADDR_AMX       = 40000;   //200*200localparam IDLE    = 3'b001;    //空闲
localparam WR_DATA = 3'b010;    //写
localparam RD_DATA = 3'b100;    //读reg [2:0] c_state,n_state;wire [7 : 0] wf_data_count; //写fifo中还剩多少个数据(128bit)wire [7 : 0] rf_data_count; //读fifo中还剩多少个数据(128bit)reg [8:0] cnt_addr; //地址计数器 0 - 127reg [31:0] cnt_wr_data; //写数据个数计数器reg    [27:0]	app_wr_addr;    //写地址线
reg    [27:0]	app_rd_addr;    //读地址线reg flag;   //防止程序一上电就进入读数据状态,防止读空
wire wf_rd_en;  assign wf_rd_en     = app_wdf_wren && app_wdf_rdy;  
assign app_addr     = (c_state == WR_DATA ) ? app_wr_addr : app_rd_addr;
assign app_wdf_end  = app_wdf_wren;
assign app_wdf_mask = 0;always @(posedge ui_clk ) beginif(!ui_rst_n)flag <= 0;else if(app_wr_addr == ADDR_AMX >> 2)flag <= 1;elseflag <= flag;
end//----三段式状态机。一 。将次态赋值给现态
always @(posedge ui_clk ) beginif(!ui_rst_n)c_state <= IDLE;elsec_state <= n_state;
end//----三段式状态机。二 。状态跳转描述
always @(*) beginif(!ui_rst_n)n_state = IDLE;else begincase (c_state)IDLE    : beginif(wf_data_count > FIFO_BURST_LEN)n_state = WR_DATA;else if(rf_data_count < FIFO_BURST_LEN && flag)n_state = RD_DATA;elsen_state = IDLE;endWR_DATA : beginif(app_en && app_rdy && cnt_addr == FIFO_BURST_LEN - 1)n_state = IDLE;elsen_state = WR_DATA;endRD_DATA : beginif(app_en && app_rdy && cnt_addr == FIFO_BURST_LEN - 1)n_state = IDLE;elsen_state = RD_DATA;enddefault: n_state = IDLE;endcaseend
end//----三段式状态机。三 。对中间变量及输出结果赋值
always @(posedge ui_clk ) beginif(!ui_rst_n)rf_rd_req <= 0;else if(rf_data_count > 100)rf_rd_req <= 1;elserf_rd_req <= rf_rd_req;
endalways @(posedge ui_clk ) beginif(!ui_rst_n)app_wr_addr <= 0;else if(c_state == WR_DATA && app_en && app_rdy)beginif(app_wr_addr == ADDR_AMX - 8) //固定突发长度:8app_wr_addr <= 0;elseapp_wr_addr <= app_wr_addr + 8;endelseapp_wr_addr <= app_wr_addr;
endalways @(posedge ui_clk ) beginif(!ui_rst_n)app_rd_addr <= 0;else if(c_state == RD_DATA && app_en && app_rdy)beginif(app_rd_addr == ADDR_AMX - 8) //固定突发长度:8app_rd_addr <= 0;elseapp_rd_addr <= app_rd_addr + 8;endelseapp_rd_addr <= app_rd_addr;
endalways @(posedge ui_clk ) beginif(!ui_rst_n)app_cmd <= 0;else if(c_state == WR_DATA)app_cmd <= 0;else if(c_state == RD_DATA)app_cmd <= 1;elseapp_cmd <= app_cmd;
endalways @(posedge ui_clk ) beginif(!ui_rst_n)app_en <= 0;else if(c_state == WR_DATA || c_state == RD_DATA)beginif(cnt_addr == FIFO_BURST_LEN - 1 && app_rdy)app_en <= 0;elseapp_en <= 1;endelseapp_en <= 0;
endalways @(posedge ui_clk ) beginif(!ui_rst_n)app_wdf_wren <= 0;else if(c_state == WR_DATA && app_wdf_rdy)beginif(cnt_wr_data == FIFO_BURST_LEN - 1 )app_wdf_wren <= 0;elseapp_wdf_wren <= 1;endelseapp_wdf_wren <= 0;
endalways @(posedge ui_clk ) beginif(!ui_rst_n)cnt_wr_data <= 0;else if(c_state == WR_DATA)beginif(cnt_wr_data == FIFO_BURST_LEN - 1 && app_wdf_wren && app_wdf_rdy)cnt_wr_data <= cnt_wr_data; else if(app_wdf_wren && app_wdf_rdy)    cnt_wr_data <= cnt_wr_data + 1;elsecnt_wr_data <= cnt_wr_data;endelsecnt_wr_data <= 0;
endwf_fifo wf_fifo_u (.wr_clk(wf_wr_clk),                // input wire wr_clk.rd_clk(ui_clk),                // input wire rd_clk.din(wf_wr_data),                      // input wire [15 : 0] din.wr_en(wf_wr_en),                  // input wire wr_en.rd_en(wf_rd_en),                  // input wire rd_en.dout(app_wdf_data),                    // output wire [127 : 0] dout
//   .full(full),                    // output wire full
//   .empty(empty),                  // output wire empty.rd_data_count(wf_data_count)  // output wire [7 : 0] rd_data_count
);rf_fifo rf_fifo_u (.wr_clk(ui_clk),                // input wire wr_clk.rd_clk(rf_rd_clk),                // input wire rd_clk.din(app_rd_data),                      // input wire [127 : 0] din.wr_en(app_rd_data_vali),                  // input wire wr_en.rd_en(rf_rd_en),                  // input wire rd_en.dout(rf_rd_data),                    // output wire [15 : 0] dout
//   .full(full),                    // output wire full
//   .empty(empty),                  // output wire empty.wr_data_count(rf_data_count)  // output wire [7 : 0] wr_data_count
);endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18717.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【15】思科AireOS:创建使用 PSK 认证的 WLAN

1. 概述 在 Cisco AireOS 无线局域网控制器(WLC)上,您可以配置基于预共享密钥(PSK)的 WLAN,以提供无线访问。PSK 认证是一种 WPA2/WPA3 个人模式下常用的认证方式,适用于家庭或小型企业环境。 本指南将详细介绍如何在 Cisco AireOS WLC 上配置 PSK 认证的 WLAN,并确保…

基于css实现正六边形的三种方案

方案一&#xff1a;通过旋转三个长方形生成正六边形 分析&#xff1a; 如下图所示&#xff0c;我们可以通过旋转三个长方形来得到一个正六边形。疑问&#xff1a; 1. 长方形的宽高分别是多少&#xff1f; 设正六边形的边长是100&#xff0c;基于一些数学常识&#xff0c;可以…

Python用PyMC3马尔可夫链蒙特卡罗MCMC对疾病症状数据贝叶斯推断

全文链接&#xff1a;https://tecdat.cn/?p39937 本文聚焦于马尔可夫链蒙特卡罗&#xff08;MCMC&#xff09;方法在贝叶斯推断中的Python实现。通过介绍MCMC的基础原理、在贝叶斯推断中的应用步骤&#xff0c;展示了其在解决复杂分布采样问题上的强大能力。同时&#xff0c;借…

linux--关于makefile

makefile文件 可以指定编译顺序&#xff0c;这样方便一个项目的多个文件要编译的挨个操作的麻烦。 makefile文件的命名&#xff1a;makefile 或者 Makefile 必须是这俩&#xff0c;系统才能识别 规则的书写语法如下&#xff1a; 一个makefile内可以有多个规则 目标:依赖a 依…

何须付费免费它不香吗

聊一聊 又是一年开学季。 开学了发一些应时期的小软件。 今天给大家分享一款学校班级课程表工具。 这款工具可以投放在学校电子大屏上。 支持学校的白板软件。 软件介绍 学校班级课程表 工具界面清爽&#xff0c;信息能一目了然。 虽然看感觉功能简单&#xff0c;但每个…

day10后期软件

美图秀秀&#xff1a;美拍拼图、Facetune&#xff1a;面部重塑、泼辣修图&#xff1a;手机中的PS Lightroom&#xff1a;精致调色 想法类&#xff1a; 玩创意特效 PicsArt:很强大 排版类&#xff1a;精美杂志风 MOLDIV&#xff1a;无损排版&#xff1b;天天P图&#xff1a…

用大模型学大模型03-数学基础 概率论 条件概率 全概率公式 贝叶斯定理

要深入浅出地理解条件概率与贝叶斯定理&#xff0c;可以从以下几个方面入手&#xff0c;结合理论知识和实例进行学习&#xff1a; 贝叶斯定理与智能世界的暗语 条件概率&#xff0c;全概率公式与贝叶斯公式的推导&#xff0c;理解和应用 拉普拉斯平滑 贝叶斯解决垃圾邮件分类 …

Calico网络组件本地部署支持IPv6(Kubernetes)

知其然 问题背景 因项目现场的网络正逐步从IPv4向IPv6迁移&#xff0c;这几年现场服务器基本上都配置了双栈&#xff1b;但随着IPv6铺开&#xff0c;出现了很多纯IPv6的服务器&#xff0c;并且要求通信优先使用IPv6。 在项目建设之初&#xff0c;其实就考虑了上述情况&#…

【Python】函数

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Python 文章目录 1. 函数的定义1.1 基本定义方式1.2 函数名和参数 2. 函数的调用2.1 基本调用方式2.2 参数传递 3. 函数的返回值3.1 return 语句3.2 返回多个值 4. 函数的作用域4.1 局部变量4.2 全局变量 5. 匿名函数&#xff0…

PbootCMS增加可允许上传文件类型,例如webp、mov等文件格式扩展

在PbootCMS日常使用过程中&#xff0c;会涉及一些非常见的文件格式上传。 这时候就需要在PbootCMS配置文件中追加一些允许上传文件扩展名。 操作步骤 1、打开/config/config.php文件&#xff0c;大约在30行&#xff0c;修改upload配置信息&#xff1a; // 上传配置upload &…

EasyRTC视频通话WebP2P技术:轻量化SDK助力嵌入式设备实时音视频通信

在智能硬件井喷式发展的当下&#xff0c;嵌入式设备对实时音视频通信的需求正从实验室走向千行百业。然而&#xff0c;当开发者尝试将传统RTC&#xff08;实时通信&#xff09;方案移植到MCU、边缘计算终端等资源受限设备时&#xff0c;往往会遭遇一道难以逾越的屏障——Flash存…

Vript-Hard——一个基于高分辨率和详细字幕的视频理解算法

一、概述 多模态学习的最新进展促进了对视频理解和生成模型的研究。随之而来的是&#xff0c;对高分辨率视频和详细说明所建立的高质量数据集的需求激增。然而&#xff0c;由于时间因素的影响&#xff0c;视频与文本的配对不像图像那样容易。准备视频和文本配对是一项困难得多…

如何调整 Nginx工作进程数以提升性能

&#x1f3e1;作者主页&#xff1a;点击&#xff01; Nginx-从零开始的服务器之旅专栏&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年2月15日14点20分 Nginx 的工作进程数&#xff0…

SolidWorks速成教程P3-6【零件 | 第六节】——草图封闭轮廓所选轮廓厚度为零的报错

到这里,我们已经将特征成型的常用功能学完。这节我来继续讲解一下 SolidWorks中建模的一些容易忽略的问题(草图封闭轮廓&所选轮廓&厚度为零的报错)。 目录 1.草图封闭轮廓 2.所选轮廓 3.厚度为零的报错 1.草图封闭轮廓 我们在拉伸凸台时,一般都会绘制封闭的草…

关于post和get的请求参数问题

今天在和泓宇交流的时候&#xff0c;谈到了关于postman测试接口的问题。我昨天在postman测试的时候&#xff0c;对于条件查询不知道怎么测试&#xff0c;脑子里很混乱。今天&#xff0c;泓宇借着条件查询这个机会给我讲了讲get和post的请求参数的知识&#xff0c;趁着现在有记忆…

UE5中的四元数

UE5中的四元数 绕任意轴旋转四元数与矩阵四元数与欧拉角将一个向量旋转到另一个向量插值Reference 我们知道&#xff0c;四元数是除了欧拉角&#xff0c;旋转矩阵之外&#xff0c;主要用来描述旋转的量。四元数直观的定义就是 q [ c o s ( θ 2 ) , s i n ( θ 2 ) N ] q [c…

AUTOSAR MCAL层ETH模块(1)——通信原理

基础了解 ETH&#xff0c;以太网&#xff0c;简单来讲就是将几台设备连接起来形成网络。这种连接是点到点之间的。以太网的传输速率为10M~10G&#xff0c;速度非常快。 为了实现网络通信的标准化&#xff0c;普及网络应用&#xff0c;国际标准化组织(ISO)将整个以太网通信结构制…

什么是网关?网关有什么作用?API网关的主要功能,SpringCloud可以选择有哪些API网关?什么是限流算法?网关如何实现限流?一篇文章读懂网关的前世今生

1、什么是网关&#xff1f; API网关&#xff08;API Gateway&#xff09;是一种中间层服务器&#xff0c;用于集中管理&#xff0c;保护和路由对后端服务的访问。它充当了客户端与后端服务之间的入口点&#xff0c;提供了一组统一的接口管理和控制API的访问。 2、网关示意图 3…

【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析

引言 在大数据与云原生技术快速发展的时代&#xff0c;开源技术成为推动行业进步的重要力量。本文将深入探讨三个备受瞩目的开源产品组件&#xff1a;DeepSeek、DataSophon 和 DolphinScheduler&#xff0c;分别从产品定义、功能、技术架构、应用场景、优劣势及社区活跃度等方面…

架构——Nginx功能、职责、原理、配置示例、应用场景

以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明&#xff1a; 一、Nginx 的核心功能 1. 静态资源服务 功能&#xff1a;直接返回静态文件&#xff08;如 HTML、CSS、JS、图片、视频等&#xff09;。配置示例&#xff1a;server {listen 80…