verilog语法进阶-分布式ram原语

概述

官方提供的原语

   RAM16X1S_1 #(.INIT(16'h0000) // Initial contents of RAM) RAM16X1S_1_inst (.O(O),       // RAM output.A0(A0),     // RAM address[0] input.A1(A1),     // RAM address[1] input.A2(A2),     // RAM address[2] input.A3(A3),     // RAM address[3] input.D(D),       // RAM data input.WCLK(WCLK), // Write clock input.WE(WE)      // Write enable input);RAM16X1D_1 #(.INIT(16'h0000) // Initial contents of RAM) RAM16X1D_1_inst (.DPO(DPO),     // Read-only 1-bit data output.SPO(SPO),     // Rw/ 1-bit data output.A0(A0),       // Rw/ address[0] input bit.A1(A1),       // Rw/ address[1] input bit.A2(A2),       // Rw/ address[2] input bit.A3(A3),       // Rw/ address[3] input bit.D(D),         // Write 1-bit data input.DPRA0(DPRA0), // Read-only address[0] input bit.DPRA1(DPRA1), // Read-only address[1] input bit.DPRA2(DPRA2), // Read-only address[2] input bit.DPRA3(DPRA3), // Read-only address[3] input bit.WCLK(WCLK),   // Write clock input.WE(WE)        // Write enable input);

内容

1. 单端分布式ram

2. 双端分布式ram

1. 单端分布式ram

verilog c代码

module primitive1(input clk,input write_enable,input [1-1:0] input_data,output [1-1:0] output_data,input [4-1:0] address);parameter RAM_WIDTH = 1;
parameter RAM_ADDR_BITS = 4;(* RAM_STYLE="{AUTO | DISTRIBUTED | PIPE_DISTRIBUTED}" *)
reg [RAM_WIDTH-1:0] dram [(2**RAM_ADDR_BITS)-1:0];always @(posedge clk)if (write_enable)dram[address] <= input_data; // 写数据assign output_data = dram[address];   //读数据
endmodule	

原语


module primitive1 (clk, write_enable, output_data, address, input_data
);input clk;input write_enable;output [0 : 0] output_data;input [3 : 0] address;input [0 : 0] input_data;wire address_0_IBUF_4;wire address_1_IBUF_5;wire address_2_IBUF_6;wire address_3_IBUF_7;wire clk_BUFGP_9;wire input_data_0_IBUF_11;wire output_data_0_OBUF_13;wire write_enable_IBUF_15;RAM16X1S   Mram_dram (.A0(address_0_IBUF_4),.A1(address_1_IBUF_5),.A2(address_2_IBUF_6),.A3(address_3_IBUF_7),.D(input_data_0_IBUF_11),.WCLK(clk_BUFGP_9),.WE(write_enable_IBUF_15),.O(output_data_0_OBUF_13));IBUF   write_enable_IBUF (.I(write_enable),.O(write_enable_IBUF_15));IBUF   address_3_IBUF (.I(address[3]),.O(address_3_IBUF_7));IBUF   address_2_IBUF (.I(address[2]),.O(address_2_IBUF_6));IBUF   address_1_IBUF (.I(address[1]),.O(address_1_IBUF_5));IBUF   address_0_IBUF (.I(address[0]),.O(address_0_IBUF_4));IBUF   input_data_0_IBUF (.I(input_data[0]),.O(input_data_0_IBUF_11));OBUF   output_data_0_OBUF (.I(output_data_0_OBUF_13),.O(output_data[0]));BUFGP   clk_BUFGP (.I(clk),.O(clk_BUFGP_9));
endmodule

RTL结构图

技术原理图

2. 双端分布式ram

verilog c代码

module primitive1(input clk,input write_enable,input [1-1:0] input_data,output [1-1:0] output_data,input [4-1:0] write_address,read_address);parameter RAM_WIDTH = 1;
parameter RAM_ADDR_BITS = 4;(* RAM_STYLE="{AUTO | DISTRIBUTED | PIPE_DISTRIBUTED}" *)
reg [RAM_WIDTH-1:0] ddram [(2**RAM_ADDR_BITS)-1:0];always @(posedge clk)if (write_enable)ddram[write_address] <= input_data;assign output_data = ddram[read_address];   endmodule

原语代码


module primitive1 (clk, write_enable, output_data, write_address, read_address, input_data
);input clk;input write_enable;output [0 : 0] output_data;input [3 : 0] write_address;input [3 : 0] read_address;input [0 : 0] input_data;wire clk_BUFGP_1;wire input_data_0_IBUF_3;wire output_data_0_OBUF_5;wire read_address_0_IBUF_10;wire read_address_1_IBUF_11;wire read_address_2_IBUF_12;wire read_address_3_IBUF_13;wire write_address_0_IBUF_18;wire write_address_1_IBUF_19;wire write_address_2_IBUF_20;wire write_address_3_IBUF_21;wire write_enable_IBUF_23;wire NLW_Mram_ddram_SPO_UNCONNECTED;RAM16X1D   Mram_ddram (.A0(write_address_0_IBUF_18),.A1(write_address_1_IBUF_19),.A2(write_address_2_IBUF_20),.A3(write_address_3_IBUF_21),.D(input_data_0_IBUF_3),.DPRA0(read_address_0_IBUF_10),.DPRA1(read_address_1_IBUF_11),.DPRA2(read_address_2_IBUF_12),.DPRA3(read_address_3_IBUF_13),.WCLK(clk_BUFGP_1),.WE(write_enable_IBUF_23),.SPO(NLW_Mram_ddram_SPO_UNCONNECTED),.DPO(output_data_0_OBUF_5));IBUF   write_enable_IBUF (.I(write_enable),.O(write_enable_IBUF_23));IBUF   write_address_3_IBUF (.I(write_address[3]),.O(write_address_3_IBUF_21));IBUF   write_address_2_IBUF (.I(write_address[2]),.O(write_address_2_IBUF_20));IBUF   write_address_1_IBUF (.I(write_address[1]),.O(write_address_1_IBUF_19));IBUF   write_address_0_IBUF (.I(write_address[0]),.O(write_address_0_IBUF_18));IBUF   read_address_3_IBUF (.I(read_address[3]),.O(read_address_3_IBUF_13));IBUF   read_address_2_IBUF (.I(read_address[2]),.O(read_address_2_IBUF_12));IBUF   read_address_1_IBUF (.I(read_address[1]),.O(read_address_1_IBUF_11));IBUF   read_address_0_IBUF (.I(read_address[0]),.O(read_address_0_IBUF_10));IBUF   input_data_0_IBUF (.I(input_data[0]),.O(input_data_0_IBUF_3));OBUF   output_data_0_OBUF (.I(output_data_0_OBUF_5),.O(output_data[0]));BUFGP   clk_BUFGP (.I(clk),.O(clk_BUFGP_1));
endmodule

RTL结构图

技术原理图

3. 总结

1. FPGA的LUT可以配置成分布式ram

2. 分布式ram的原语分为单端和双端

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

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

相关文章

pytest之allure测试报告02:allure具体使用方法

一、allure包含的方法 二、allure使用教程 &#xff08;1&#xff09;用例中写入allure方法 allure.epic("数据进制项目epic") allure.feature("手机号模块feature") class TestMobile:allure.story("杭州的手机号story")allure.title("测…

Selenium安装WebDriver:ChromeDriver与谷歌浏览器版本快速匹配_最新版120

最近在使用通过selenium操作Chrome浏览器时&#xff0c;安装中遇到了Chrome版本与浏览器驱动不匹配的的问题&#xff0c;在此记录安装下过程&#xff0c;如何快速找到与谷歌浏览器相匹配的ChromeDriver驱动版本。 1. 确定Chrome版本 我们首先确定自己的Chrome版本 Chrome设置…

如何从众多知识付费平台中正确选择属于自己的平台(明理信息科技知识付费平台)

在当今的知识付费市场中&#xff0c;用户面临的选择越来越多&#xff0c;如何从众多知识付费平台中正确选择属于自己的平台呢&#xff1f;下面&#xff0c;我们将为您介绍明理信息科技知识付费平台相比同行的优势&#xff0c;帮助您做出明智的选择。 一、创新的技术架构&#…

【linux】Debian不能运行sudo的解决

一、问题&#xff1a; sudo: 没有找到有效的 sudoers 资源&#xff0c;退出 sudo: 初始化审计插件 sudoers_audit 出错 二、可用的方法&#xff1a; 出现 "sudo: 没有找到有效的 sudoers 资源&#xff0c;退出" 和 "sudo: 初始化审计插件 sudoers_audit 出错&q…

IDEA中alt enter不显示创建实现类快捷键

alt enter不显示创建实现类快捷键是因为idea中的设置没打开&#xff0c;按照一下设置打开就可以了。 点击setting-->>editor-->>intentions-->>java下的declaration 如下图所示&#xff1a;

【C++干货铺】继承后的多态 | 抽象类

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 多态的概念 多态的定义和实现 多态的定义条件 虚函数 虚函数的重写 特殊情况 协变&#xff08;基类和派生类的虚函数返回值不同&#xff09; 析构函数的重…

深度学习中的预测图片中的矩形框、标签、置信度分别是什么意思。

问题描述&#xff1a;深度学习中的预测图片中的矩形框、标签、置信度分别是什么意思。 问题解答&#xff1a; 目标框&#xff08;Bounding Box&#xff09;&#xff1a; 描述目标位置的矩形边界框。 类别标签&#xff1a; 表示模型认为目标属于哪个类别&#xff08;例如&#…

【Java JVM】实例对象内存布局

当 Java 应用启动后, 基本就是在不断的创建对象, 回收对象的过程中。 而这些创建的对象基本都是存放在应用的堆 (heap) 中, 但是这些对象在堆中又是什么样子的呢? 在这篇文章中, 我们分析一下 Java JVM 中实例对象的内存布局。 在 HotSpot 虚拟机里, 对象在堆内存中的存储布局…

结构体基础全家桶(2)结构体指针

目录 指向结构体类型数据的指针&#xff1a; 指向结构体变量的指针&#xff1a; 创建&#xff1a; 应用&#xff1a; 注意事项&#xff1a; 指向结构体数组的指针 创建&#xff1a; 应用&#xff1a; 注意&#xff1a; 用结构体变量和指向结构体的指针做函数的参数 …

eNSP小实验---(简单混合)

实验目的&#xff1a;实现vlan10 vlan20 172网段用户互访 1.拓扑图 2.配置 PC1 其它同理 SW4 <Huawei> <Huawei>u t m Info: Current terminal monitor is off. <Huawei>sys <Huawei>sys Enter system view, return user view with CtrlZ. [Hua…

深度学习小白学习路线规划

作为深度学习的初学者&#xff0c;以下是一个建议的学习路线&#xff0c;可以帮助你逐步掌握图像分类、目标检测与跟踪、实例分割和姿态估计&#xff1a; 掌握这些&#xff0c;计算机视觉算是入门了&#xff01; 1. 基础知识&#xff1a; 学习Python编程语言&#xff0c;它是…

当在VMware Workstation Pro 中查询不到ens33网卡的IP

在学习中我们经常要去查询ens33的IP&#xff0c;但是有时候会查询不到&#xff0c;今天就遇到了这样的问题并且找到了解决方法 记录一下 ip a 查询不到IP 显示代码为 ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether …

[论文笔记] GAMMA: A Graph Pattern Mining Framework for Large Graphs on GPU

GAMMA: A Graph Pattern Mining Framework for Large Graphs on GPU GAMMA: 基于 GPU 的针对大型图的图模式挖掘框架 [Paper] [Code] ICDE’23 摘要 提出了一个基于 GPU 的核外(out-of-core) 图模式挖掘框架(Graph Pattern Mining, GPM) GAMMA, 充分利用主机内存来处理大型图…

〖大前端 - 基础入门三大核心之JS篇(55)〗- 内置对象

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

如何禁止孩子在电脑中浏览某些网页?

在使用电脑的过程中&#xff0c;我们会使用浏览器来查看网页。而在孩子使用电脑的过程中&#xff0c;有些网页并不适合孩子查看。因此&#xff0c;我们需要禁止孩子浏览不健康的网页。那么&#xff0c;该如何禁止孩子在电脑中浏览某些网页呢&#xff1f; 定时关机3000简介 定时…

QML 自定义进度条组件开发

一、效果预览 二、介绍&#xff1a; 自定义的QML 屏幕亮度拖动进度条组件CusProgressBar 可跟鼠标移动 更改进度条样式 三、代码 import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Controls.Material 2.12/***author:Zwj*csdn:来份煎蛋吧*date:2023/12/16*…

如何禁止服务器自动休眠

如何禁止服务器自动休眠 有时候服务器自己休眠&#xff0c;导致系统web站点无法访问&#xff0c;下面是解决办法&#xff01; 禁止服务器自动进入休眠状态的具体方法可能会因使用的Linux发行版而有所不同。以下是一些通用的方法&#xff0c;你可以根据你的系统选择适用的&#…

【机器学习】044_Kaggle房价预测(机器学习模型实战)

参考自《动手学深度学习》中“Kaggle比赛实战&#xff1a;预测房价”一节 一、数据准备 首先从网站上下载要获取的房价数据。 DATA_HUB是一个字典&#xff0c;用来将数据集名称的字符串和数据集相关的二元组一一对应。 二元组包含两个值&#xff1a;数据集的URL和用来验证文…

python实现最小二叉堆---最小堆结构

#来源于MOOC学习以及数据结构与算法分析# 在我们学习最小二叉堆代码实现之前&#xff0c;我们需要去了解一下&#xff0c;什么是最小二叉堆&#xff08;也有最大二叉堆&#xff0c;也叫最大堆&#xff09;。 也就是说什么是二叉堆&#xff1f;&#xff1f;&#xff1f;&#…

HiveSql语法优化三 :join优化

前面提到过&#xff1a;Hive拥有多种join算法&#xff0c;包括Common Join&#xff0c;Map Join&#xff0c;Bucket Map Join&#xff0c;Sort Merge Buckt Map Join等&#xff1b;每种join算法都有对应的优化方案。 Map Join 在优化阶段&#xff0c;如果能将Common Join优化为…