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

Vivado -RAM

ip_ram

定义了一个名为ip_ram的模块,该模块具有以下端口:

sys_clk:系统时钟输入。
sys_rst_n:系统复位输入。

module ip_ram(
input sys_clk,
input sys_rst_n);wire       ram_en                    ;
wire       ram_wea                   ;
wire [4:0] ram_addr                  ;
wire [7:0] ram_wr_data               ;
wire [7:0] ram_rd_data               ;

ram_rw模块包含了RAM的读写逻辑,其输入输出信号如下:

clk:时钟输入。
rst:复位输入。
ram_en:RAM使能信号。
ram_wea:RAM写使能信号。
ram_addr:RAM地址信号。
ram_wr_data:RAM写入数据信号。
ram_rd_data:RAM读出数据信号。

ram_rw ram_rw_u(
.clk        (sys_clk),
.rst        (sys_rst_n),                
.ram_en     (ram_en),    
.ram_wea    (ram_wea),   
.ram_addr   (ram_addr),  
.ram_wr_data(ram_wr_data),
.ram_rd_data(ram_rd_data)
);

blk_mem_gen_0模块则是一个具有标准接口的内存生成器模块,其端口包括:

clka:时钟输入。
ena:内存使能信号。
wea:内存写使能信号。
addra:内存地址信号。
dina:写入内存的数据信号。
douta:从内存读出的数据信号。

blk_mem_gen_0 your_instance_name (.clka(sys_clk),    // input wire clka.ena(ram_en),      // input wire ena.wea(ram_wea),      // input wire [0 : 0] wea.addra(ram_addr),  // input wire [4 : 0] addra.dina(ram_wr_data),    // input wire [7 : 0] dina.douta(ram_rd_data)  // output wire [7 : 0] douta
); 

ram_rw

下面Verilog代码定义了一个名为ram_rw的模块,实现了RAM的读写控制逻辑。该模块具有以下端口:

clk:时钟输入。
rst:复位输入。
ram_en:RAM使能输出。
ram_wea:RAM写使能输出。
ram_addr:RAM地址输出。
ram_wr_data:RAM写入数据输出。
ram_rd_data:RAM读出数据输入。

ram_wea信号在rw_cnt小于或等于31且ram_en为高电平时置为逻辑1,表示RAM写入使能。否则,置为逻辑0。

ram_en信号直接由复位信号控制,在复位信号为高电平时为逻辑0,表示RAM未使能。这意味着RAM在复位时处于禁用状态。

ram_wr_data是一个8位寄存器,用于存储RAM的写入数据。在每个时钟周期的上升沿或复位信号的下降沿触发时递增。当复位信号为低电平时,将ram_wr_data清零;当ram_wr_data小于或等于31时,递增;否则,将其清零。

ram_addr是一个5位寄存器,用于存储RAM的地址。其工作原理与ram_wr_data寄存器相似。

module ram_rw(
input               clk,
input               rst,output              ram_en,
output              ram_wea,
output reg[4:0]     ram_addr,
output reg[7:0]     ram_wr_data,input [7:0]         ram_rd_data);

rw_cnt是一个6位寄存器,用于计数器功能。它在每个时钟周期上升沿或复位信号的下降沿触发时递增。当复位信号为低电平时,rw_cnt被清零。当rw_cnt达到63时,它会被重置为0。

reg [5:0] rw_cnt;  

这两行assign语句的功能是将RAM的写使能信号ram_wea和RAM的使能信号ram_en赋值。

  1. ram_wea的赋值逻辑为:如果rw_cnt小于或等于31(即计数器rw_cnt的值在0到31之间),并且RAM使能信号ram_en为高电平(1),则ram_wea被赋值为1(逻辑真);否则,被赋值为0(逻辑假)。这意味着只有在RAM使能且计数器值小于等于31时,才会使RAM的写入操作有效。

  2. ram_en的赋值逻辑为:直接将ram_en赋值为复位信号rst。当复位信号为高电平时,RAM使能信号也被置为高电平,即RAM被使能;当复位信号为低电平时,RAM使能信号被置为低电平,即RAM被禁用。

这两行assign语句定义了RAM使能信号和RAM写使能信号的逻辑,使得RAM的写入操作在特定条件下有效,并且可以通过复位信号控制整个RAM的使能状态。

assign ram_wea=(rw_cnt<=31&&ram_en)?1'b1:1'b0;
assign ram_en=rst;

模块内部逻辑包括三个always块:
第一个always块用于递增计数器rw_cnt,在时钟上升沿或复位信号下降沿触发。当复位信号为低电平时,计数器被清零;当计数器值达到63时,也将其清零;否则,计数器递增1。

always@(posedge clk or negedge rst) beginif(!rst)rw_cnt<=1'b0;else if(rw_cnt==6'd63)rw_cnt<=1'b0;elserw_cnt<=rw_cnt+1'b1;end

第二个always块用于生成RAM写入数据信号ram_wr_data。当复位信号为低电平时,将写入数据清零;当写入数据小于或等于31时,递增写入数据;否则,将其清零。

   
always@(posedge clk or negedge rst) begin if(!rst)ram_wr_data<=0;else if(ram_wr_data<=6'd31)ram_wr_data<=ram_wr_data+1'b1;elseram_wr_data<=0;end

第三个always块用于生成RAM地址信号ram_addr。其逻辑与第二个always块类似,但递增的是RAM地址。

always@(posedge clk or negedge rst) begin if(!rst)ram_addr<=0;else if(ram_addr<=6'd31)ram_addr<=ram_addr+1'b1;elseram_addr<=0;end

此外,模块中还包含了一个名为ila_0的实例,ILA(Integrated Logic Analyzer)用于调试,以便在FPGA中观察信号的值

相关文章:

Vivado -RAM

ip_ram 定义了一个名为ip_ram的模块&#xff0c;该模块具有以下端口&#xff1a; sys_clk&#xff1a;系统时钟输入。 sys_rst_n&#xff1a;系统复位输入。 module ip_ram( input sys_clk, input sys_rst_n);wire ram_en ; wire ram_wea …...

备战蓝桥杯---图论之最短路dijkstra算法

目录 先分个类吧&#xff1a; 1.对于有向无环图&#xff0c;我们直接拓扑排序&#xff0c;和AOE网类似&#xff0c;把取max改成min即可。 2.边权全部相等&#xff0c;直接BFS即可 3.单源点最短路 从一个点出发&#xff0c;到达其他顶点的最短路长度。 Dijkstra算法&#x…...

C#系列-C#实现秒杀功能(14)

在C#中实现商品秒杀功能&#xff0c;通常需要考虑并发控制、数据库事务、缓存策略、限流措施等多个方面。下面是一个简单的示例&#xff0c;演示了如何使用C#和数据库来实现一个基本的商品秒杀功能。 首先&#xff0c;假设你有一个商品表&#xff08;Product&#xff09;和一个…...

Java ‘Elasticsearch‘ 操作

依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</ar…...

【AI视野·今日NLP 自然语言处理论文速览 第七十八期】Wed, 17 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 17 Jan 2024 (showing first 100 of 163 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Deductive Closure Training of Language Models for Coherence, Accur…...

实验5-4 使用函数计算两点间的距离

本题要求实现一个函数&#xff0c;对给定平面任意两点坐标(x1​,y1​)和(x2​,y2​)&#xff0c;求这两点之间的距离。 函数接口定义&#xff1a; double dist( double x1, double y1, double x2, double y2 );其中用户传入的参数为平面上两个点的坐标(x1, y1)和(x2, y2)&…...

【JavaEE】_JavaScript(Web API)

目录 1. DOM 1.1 DOM基本概念 1.2 DOM树 2. 选中页面元素 2.1 querySelector 2.2 querySelectorAll 3. 事件 3.1 基本概念 3.2 事件的三要素 3.3 示例 4.操作元素 4.1 获取/修改元素内容 4.2 获取/修改元素属性 4.3 获取/修改表单元素属性 4.3.1 value&#xf…...

ARM交叉编译搭建SSH

首先搭建好arm-linux交叉编译环境&#xff0c;开发板和主机可以ping通。 一、下载需要的源码 下载zlib: zlib-1.2.3.tar.gz 下载ssl: openssl-0.9.8d.tar.gz 下载ssh: openssh-4.6p1.tar.gz 二、交叉编译 新建目录/home/leo/ssh&#xff0c;并且将三个源码复制到该目录下。…...

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 目录 一. 延时函数的生成 1.通过延时计算器得到延时函数 2.可赋值改变…...

回归预测模型:MATLAB多项式回归

1. 多项式回归模型的基本原理 多项式回归是线性回归的一种扩展&#xff0c;用于分析自变量 X X X与因变量 Y Y Y之间的非线性关系。与简单的线性回归模型不同&#xff0c;多项式回归模型通过引入自变量的高次项来增加模型的复杂度&#xff0c;从而能够拟合数据中的非线性模式。…...

「计算机网络」数据链路层

数据链路层的地位&#xff1a;网络中的主机、路由器等都必须实现数据链路层信道类型 点对点信道&#xff1a;使用一对一的点对点通信方式广播信道 使用一对多的广播通信方式必须使用专用的共享信道协议来协调这些主机的数据发送 使用点对点信道的数据链路层 数据链路和帧 链…...

【Linux】Ubuntu 22.04 升级 nodejs 到 v18

Ubuntu 22.04 已经安装的nodejs 版本 nodejs is already the newest version (12.22.9~dfsg-1ubuntu3.3). 删除以前的 nodejs 版本&#xff1a; 1. sudo apt remove nodejs rooterp:~# sudo apt remove nodejs Reading package lists... Done Building dependency tree..…...

当go get获取不到软件包时

当使用go get命令获取软件包时&#xff0c;如果无法成功获取&#xff0c;您可以尝试以下方法来解决问题&#xff1a; 检查网络连接&#xff1a;首先&#xff0c;确保您的计算机能够访问互联网&#xff0c;并且没有任何网络防火墙或代理设置阻止了go get命令的正常运行。 设置代…...

全网最详细解法|同济大学|高等数学|第八版|习题1-5

文章目录 全网最详细解法&#xff5c;同济大学&#xff5c;高等数学&#xff5c;第八版&#xff5c;习题1-5&#xff5c;5.1全网最详细解法&#xff5c;同济大学&#xff5c;高等数学&#xff5c;第八版&#xff5c;习题1-5&#xff5c;5.2 全网最详细解法&#xff5c;同济大学…...

可视化工具:将多种数据格式转化为交互式图形展示的利器

引言 在数据驱动的时代&#xff0c;数据的分析和理解对于决策过程至关重要。然而&#xff0c;不同的数据格式和结构使得数据的解读变得复杂和困难。为了解决这个问题&#xff0c;一种强大的可视化工具应运而生。这个工具具有将多种数据格式&#xff08;包括JSON、YAML、XML、C…...

[嵌入式AI从0开始到入土]14_orangepi_aipro小修补含yolov7多线程案例

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…...

机器学习、深度学习、强化学习、迁移学习的关联与区别

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要了解并初步探究机器学习、深度学习、强化学习、迁移学习的关系与区别&#xff0c;通过清晰直观的关系图展现出四种“学习”之间的关系。虽然这四种“学习”方法在理论和应用上存在着一定的区别&#xff0c;但它们之间也…...

苹果为什么需要台积电3nm工艺芯片?

据《经济日报》报道&#xff0c;苹果公司的产品线将迎来重大升级。下一代应用于iPad、MacBook和iPhone的M4和A18处理器预计将会增加内置AI计算核心的数量&#xff0c;从而大幅提高AI运算能力。这一变化将导致对台积电&#xff08;TSMC&#xff09;订单的显著增长。据悉&#xf…...

力扣:53. 最大子数组和

解题思路&#xff1a; 1.先把数组为空和数组的长度为1时的特殊情况分别开来。声明一个sum变量用于计算数组中的连续子数组的总和值 。在声明一个guo变量用于一种接收sum中的前i-1的总和。另一种接收sum中前i的总和&#xff0c;主要根据sum的值来判断是接收的哪一种。在声明一个…...

幻兽帕鲁Palworld专用服务器CPU内存配置怎么选择?

腾讯云幻兽帕鲁服务器配置怎么选&#xff1f;根据玩家数量选择CPU内存配置&#xff0c;4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置&#xff0c;腾讯云百科txybk.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置选择方法&#xff…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...