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.mzph.cn/diannao/69805.shtml

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

相关文章

数据中心网络监控

数据中心是全球协作的特定设备网络&#xff0c;用来在internet网络基础设施上传递、加速、展示、计算、存储数据信息。 对于任何利用IT基础设施的企业来说&#xff0c;数据中心都是运营的核心&#xff0c;它本质上为整个业务网络托管业务应用程序和存储空间。数据中心可以是任…

w~大模型~合集30

我自己的原文哦~ https://blog.51cto.com/whaosoft/13284996 #VideoMamba 视频理解因大量时空冗余和复杂时空依赖&#xff0c;同时克服两个问题难度巨大&#xff0c;CNN 和 Transformer 及 Uniformer 都难以胜任&#xff0c;Mamba 是个好思路&#xff0c;让我们看看本文是…

将Excel中的图片保存下载并导出

目录 效果演示 注意事项 核心代码 有需要将excel中的图片解析出来保存到本地的小伙子们看过来&#xff01;&#xff01;&#xff01; 效果演示 注意事项 仅支持xlsx格式&#xff1a;此方法适用于Office 2007及以上版本的.xlsx文件&#xff0c;旧版.xls格式无法使用。 图片名…

Windows11+PyCharm利用MMSegmentation训练自己的数据集保姆级教程

系统版本&#xff1a;Windows 11 依赖环境&#xff1a;Anaconda3 运行软件&#xff1a;PyCharm 一.环境配置 通过Anaconda Prompt(anaconda)打开终端创建一个虚拟环境 conda create --name mmseg python3.93.激活虚拟环境 conda activate mmseg 4.安装pytorch和cuda tor…

机会病原菌——产气克雷伯菌(Klebsiella aerogenes),产生组胺诱发IBS腹痛

2021年6月份&#xff0c;我们分享过一篇“全面认识——肺炎克雷伯菌(Klebsiella pneumoniae) ”的文章&#xff0c;当时也是发现该菌在肠道的人群检出率较高&#xff0c;基于想全面了解该菌&#xff0c;我们查阅整理了很多资料&#xff0c;包括统计了谷禾健康数据库中肺炎克雷伯…

[SAP ABAP] OOALV 报表练习1(操作讲解)

阅读该篇文章之前可先查看以下2篇文章 [SAP ABAP] ALV报表练习1 [SAP ABAP] 复制ABAP程序 上面我们是使用Function ALV进行报表程序的开发,接下来我们将使用OOALV的方式去进行报表开发,以上面的《ALV报表练习1》的程序进行相关的修改 关于OO ALV报表的选择屏幕以及取数逻…

Java--集合(理论)上

目录 一、collection collection常用方法 1.List&#xff08;可以存在重复元素&#xff09; 迭代器 迭代器的概念 注意事项 例子 1.ArrayList 特点 2.LinkedLIst 特点 3.Vector 特点 2.Set&#xff08;无重复元素&#xff09; 1.HashSet 特点 2.Linkedhashset&…

C语言基础13:循环结构 for和while

循环结构 什么是循环结构 代码在满足某种条件的前提下&#xff0c;重复执行&#xff0c;就叫做循环结构。 循环的分类 无限循环&#xff1a;其实就是死循环&#xff0c;程序设计中尽量避免无限循环&#xff0c;如果非要使用&#xff0c;那么这个循环一定要在可控范围内。有…

C++17 中的 std::gcd:探索最大公约数的现代 C++ 实现

文章目录 一、std::gcd 的基本用法&#xff08;一&#xff09;包含头文件&#xff08;二&#xff09;函数签名&#xff08;三&#xff09;使用示例 二、std::gcd 的实现原理三、std::gcd 的优势&#xff08;一&#xff09;简洁易用&#xff08;二&#xff09;类型安全&#xff…

vue项目网页图标修改

参考:https://blog.csdn.net/qq_53911056/article/details/144744699 在Vue项目中修改网页图标&#xff08;favicon&#xff09;是一个相对简单的过程。以下是详细的步骤&#xff1a; 准备新的图标文件 准备一个新的图标文件&#xff08;通常是 .ico 格式&#xff0c;但也支持其…

资料搜集-内存屏障

0. 引用 内存屏障详解-CSDN博客 为什么需要内存屏障&#xff1f;_mesi 内存屏障-CSDN博客 内存屏障与CPU优化&#xff1a;理解多核系统中的数据一致性-CSDN博客 内存屏障今生之Store Buffer, Invalid Queue_storebuffer-CSDN博客 内存屏障&#xff08;Memory Barrier&…

【Java八股文】01-Java基础面试篇

【Java八股文】01-Java基础面试篇 概念Java特点Java为什么跨平台JVM、JDK、JRE关系 面向对象什么是面向对象&#xff0c;什么是封装继承多态&#xff1f;多态体现的方面面向对象设计原则重载重写的区别抽象类和实体类区别Java抽象类和接口的区别抽象类可以被实例化吗 深拷贝浅拷…

线程池-抢票系统性能优化

文章目录 引言-购票系统线程池购票系统-线程池优化 池化 vs 未池化 引言-购票系统 public class App implements Runnable {private static int tickets 100;private static int users 10000;private final ReentrantLock lock new ReentrantLock(true);public void run() …

【多模态大模型】系列1:Transformer Encoder——ViLT、ALBEF、VLMO

目录 1 ViLT2 ALBEF3 VLMO 1 ViLT ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision 图文多模态任务&#xff0c;关键是提取视觉特征和文本特征&#xff0c;然后对齐。在之前的多模态研究工作中&#xff0c;视觉侧通常需要一个目标检测器来…

百度 API 教程 001:显示地图并添加控件

目录 01、基本使用 前期准备 显示地图 开启鼠标滚轮缩放地图 02、添加地图控件 添加标准地图控件 添加多个控件 网址&#xff1a;地图 JS API | 百度地图API SDK 01、基本使用 前期准备 注册百度账号 申请成为开发者 获取密钥&#xff1a;控制台 | 百度地图开放平台…

电容器教程摘要

正如我们将在本电容器教程中看到的那样&#xff0c;电容器是能够在其板上存储电荷的能源。因此&#xff0c;电容器由于存储充电的能力而存储能量&#xff0c;理想的电容器不会松散其存储的能量。 电容器的简单结构是使用两个平行的导电金属板通过绝缘材料通过距离分开。这种绝…

【通俗易懂说模型】一篇弄懂几个经典CNN图像模型(AlexNet、VGGNet、ResNet)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA data source1: BH coordination tabledata source2:BH layer tableprocess 1:Collect BH List To Layer Tableprocess 2:match Reduced Level from "Layer"+"BH"data source1: BH coordination…

汇编简介常用语法

为什么要有汇编 因为Cortex-A芯片一上电SP指针还没初始化&#xff0c;C环境还没准备 好&#xff0c;所以肯定不能运行C代码&#xff0c;必须先用汇编语言设置好C环境&#xff0c;比如初始化DDR、设置SP 指针等等&#xff0c;当汇编把C环境设置好了以后才可以运行C代码 GNU语法…

内网ip网段记录

1.介绍 常见的内网IP段有&#xff1a; A类&#xff1a; 10.0.0.0/8 大型企业内部网络&#xff08;如 AWS、阿里云&#xff09; 10.0.0.0 - 10.255.255.255 B类&#xff1a;172.16.0.0/12 中型企业、学校 172.16.0.0 - 172.31.255.255 C类&#xff1a;192.168.0.0/16 家庭…