Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

news2024/9/25 13:26:16

Altera_Shift Register(RAM-based)ip核

  • 前言
  • 1.创建mif文件,通过ROM ip核调用该mif文件
    • 1.1创建mif文件
    • 1.2顺序填充mif文件
    • 1.3创建ROM ip核调用mif文件
  • 2.计数器读取mif文件中的数据
    • 2.1写一个0-15的循环计数器
    • 2.2实例化ROM ip核、调用计数器模块
  • 3.从mif中读取出来的数据传入shift_ram ip核
    • 3.1创建shift_ram ip核
    • 3.2实例化Shift_ram ip核
  • 4.modelsim仿真查看shift_ram输出数据
    • 4.1生成TestBench模板
    • 4.2顶层文件添加激励、工程添加仿真文件
      • 4.2.1顶层文件添加激励
      • 4.2.2工程添加仿真文件
    • 4.3modelsim仿真

前言

最近在做sobel、canny边缘检测需要使用shift_ram做3*3卷积模板,在这一块纠结过一阵子,最后还是想写篇博客沉淀一下。这篇博客就举例记录一下: mif文件输入shift_ram ip核,生成2条tap查看输出效果

1.创建mif文件,通过ROM ip核调用该mif文件

1.1创建mif文件

   新建mif文件,保持默认的256字数和8位字长
在这里插入图片描述
在这里插入图片描述

1.2顺序填充mif文件

  可以使用mif生成软件,也可以按照下图所示
  顺序填充mif,按照顺序填充的好处在于,modelsim仿真时,可以更方便查看结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述  保存为mif文件,等待ROM ip核调用

1.3创建ROM ip核调用mif文件

在这里插入图片描述下图中按照mif文件的大小来配置ROM的大小
在这里插入图片描述
下图中的‘q’out port可选可不选,区别在于,勾选之后‘q’数据会被存入寄存器,由此带来一个时钟信号的延迟
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2.计数器读取mif文件中的数据

2.1写一个0-15的循环计数器

这里以0-15的计数器为例,方便查看modelsim仿真数据,当然也可以配置成其他的
module counter(
	input clk_in,               //时钟信号
	input rst_n,                //复位信号
	output reg [7:0] cnt,       //计数值,在后续步骤中,这个cnt也可以作为ROM地址
	output reg shift_en         //进位信号,在后续步骤中,也可以做输出使能,
);

//0-16循环计数,计满时
always@(posedge clk_in or negedge rst_n)
begin
	if(!rst_n)
		begin
			cnt <= 8'b0;
			shift_en <= 1'b0;
		end
	else
		begin                        //8'd16表示8位二进制数,大小为16
			if(cnt >= 8'd16)
				begin
					cnt <= 8'b0;     //等于16的瞬间被置为0,因此是0-15的计数器
					shift_en <= 1'b1;
				end
			else
				cnt <= cnt + 1'b1;
		end
end
endmodule

2.2实例化ROM ip核、调用计数器模块

MY_ROM	MY_ROM_inst (
	.address ( cnt ),
	.clock 	( clk_in ),
	.q 		( in )
);
counter counter_inst(
	.clk_in ( clk_in ),
	.rst_n ( rst_n ),
	.cnt ( cnt ),	//ROM地址
	.shift_en ( shift_en )		//输出使能
);

3.从mif中读取出来的数据传入shift_ram ip核

3.1创建shift_ram ip核

在这里插入图片描述
Shift_ram配置说明
ROM输出的数据是8位的,所以要输入Shift_ram的话,shift_in需要配置为8位
这里选择2条taps输出,另一条是shiftout,所以一共是3条输出
distance根据需求配置,例如,输入一张像素是100*120的图片,那么distance可以配置成100
在这里插入图片描述
在这里插入图片描述

3.2实例化Shift_ram ip核

shift_register shift_register_inst(
	.clk_in ( clk_in ),
	.rst_n ( rst_n ),
	.shift_en ( shift_en ),
	.in ( in ),				//从ROM输入的数据

	.shiftout0 ( shiftout0 ),
	.shiftout1 ( shiftout1 ),
	.shiftout2 ( shiftout2 )
);

4.modelsim仿真查看shift_ram输出数据

4.1生成TestBench模板

在这里插入图片描述

4.2顶层文件添加激励、工程添加仿真文件

4.2.1顶层文件添加激励

`timescale 1 ns/ 1 ns
module shiftram_vlg_tst();
// test vector input registers
reg clk_in;
reg rst_n;
// wires                                               
wire [7:0]  cnt;
wire [7:0]  in;
wire shift_en;
wire [7:0]  shiftout0;
wire [7:0]  shiftout1;
wire [7:0]  shiftout2;
// assign statements (if any)                          
shiftram i1 (
	.clk_in(clk_in),
	.cnt(cnt),
	.in(in),
	.rst_n(rst_n),
	.shift_en(shift_en),
	.shiftout0(shiftout0),
	.shiftout1(shiftout1),
	.shiftout2(shiftout2)
);
initial                                                
begin
	clk_in = 0;
	rst_n = 0;
	#100 rst_n = 1;
end
always #10 clk_in = ~clk_in;
endmodule

4.2.2工程添加仿真文件

shiftram_vlg_tst这个提前复制出来,后面要用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3modelsim仿真

在这里插入图片描述
在这里插入图片描述
工程链接点我点我点我!

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

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

相关文章

【C++学习】类和对象--多态

多态的基本语法 多态是C面向对象三大特性之一 静态多态&#xff1a; 函数重载和运算符重载属于静态多态&#xff0c;复用函数名&#xff08;函数地址早绑定&#xff0c;编译阶段确定函数地址&#xff09; 动态多态&#xff1a; 派生类和虚函数实现运行时多态&#xff08;函数地…

Python |浅谈爬虫的由来

本文概要 本篇文章主要介绍Python爬虫的由来以及过程&#xff0c;适合刚入门爬虫的同学&#xff0c;文中描述和代码示例很详细&#xff0c;干货满满&#xff0c;感兴趣的小伙伴快来一起学习吧&#xff01; &#x1f31f;&#x1f31f;&#x1f31f;个人简介&#x1f31f;&…

快速搭建一个spring入门案例及整合日志

目录 环境要求 构建模块 程序开发 引入依赖 创建java类 创建配置文件 创建测试类测试 运行测试程序 程序分析 spring中配置启用Log4j2日志框架 Log4j2日志概述 引入Log4j2依赖 加入日志配置文件 测试 使用日志 环境要求 JDK&#xff1a;Java17&#xff08;Spring6要…

Linux高性能服务器编程|阅读笔记:第6章 - 高级I/O函数

目录 简介6.1 pipe函数6.2 dup函数和dup2函数6.3 readv函数和writev函数6.4 sendfile函数6.5 mmap函数和munmap函数6.6 splice函数6.7 tee函数6.8 fcntl函数结语 简介 Hello&#xff01; 非常感谢您阅读海轰的文章&#xff0c;倘若文中有错误的地方&#xff0c;欢迎您指出&…

10-Vue技术栈之脚手架配置代理(解决跨域问题)+ GitHub用户搜索案例

目录 1、基本使用1.1 方法一1.2 方法二 2、GitHub用户搜索案例 1、基本使用 1.1 方法一 ​ 在vue.config.js中添加如下配置&#xff1a; devServer:{proxy:"http://localhost:5000" }说明&#xff1a; 优点&#xff1a;配置简单&#xff0c;请求资源时直接发给前…

用三角函数解决几何问题

如图&#xff0c;在 △ A B C \triangle ABC △ABC 中&#xff0c; A C > 5 , A B > A C AC>5,AB>AC AC>5,AB>AC&#xff0c;点 E E E 是 A B AB AB 上一点&#xff0c;链接 C E CE CE&#xff0c;将 △ B C E \triangle BCE △BCE 沿 C E CE CE 折叠&…

【unity之数据持久化】-Unity公共类PlayerPrefs

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

FreeRTOS 内存管理

文章目录 一、FreeRTOS 内存管理简介二、 内存碎片三、heap_1 内存分配方法1. 分配方法简介2. 内存申请函数详解3. 内存释放函数详解 四、heap_2 内存分配方法1. 分配方法简介2. 内存块详解3. 内存堆初始化函数详解4. 内存块插入函数详解5. 内存申请函数详解6. 内存释放函数详解…

操作系统考试复习——第四章 4.3连续分配存储管理方式

在这里的开头需要讲述一下碎片&#xff0c;碎片分为内碎片和外碎片两种。 内碎片&#xff1a;分区之内未被利用的空间外碎片&#xff1a;分区之间难以利用的空闲分区&#xff08;通常是小空闲分区&#xff09;。 连续分配存储管理方式: 为了能将用户程序装入内存&#xff0c…

力扣刷题Day12_2

144.二叉树的前序遍历 测试代码main() class TreeNode:def __init__(self, valNone, leftNone, rightNone):self.val valself.left leftself.right rightfrom typing import Listclass Solution:def preorderTraversal(self, root: TreeNode) -> List[int]:s Solution…

C++易错编程练习题(1)

0 编程练习 基础不牢靠&#xff0c;回头来补课。小白这个系列主要是为了重新打基础&#xff0c;为一些常见的易错编程练习题提供记录。其间若有错误&#xff0c;欢迎指出&#xff0c;轻喷勿骂。毕竟小白确实是基础不牢靠。 1 题目 自定义函数之整数处理。 题目描述 输入10个…

多视图局部共现和全局一致性学习提高乳腺图像分类的综合性

文章目录 Multi-view Local Co-occurrence and Global Consistency Learning Improve Mammogram Classification Generalisation摘要本文方法global consistency modulelocal co-occurrence module (LCM) 实验结果 Multi-view Local Co-occurrence and Global Consistency Lear…

okio篇3-超时机制

关于System.nanoTime System.currentTimeMills与System.nanoTime实际都是时间间隔&#xff0c;只不过两个时间的起始时间衡量不一致。 我们比较常用的&#xff0c;实际是System.currentTimeMills()&#xff0c;这个时间是以1970-01-01起始&#xff0c;到系统显示时间的间隔。…

聚浪成潮,网易数帆CodeWave智能开发平台开启低代码新时代

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 随着全球范围内新一代人工智能技术发展突飞猛进&#xff0c;社会各领域从数字化、网络化向智能化转变&#xff0c;如何进一步释放数据生产力、加速智能化转型已成为企业发展的必修课。 2023年4月25日&#xff0c;“网易数帆…

K8S管理系统项目实战[API开发]-2

后端: gogin 后端代码地址GitHub - yunixiangfeng/k8s-platform: K8s管理系统后端: gogin 5、存储与配置 5.1 ConfigMap 5.2 Secret 5.3 PersistentVolumeClaims 6、工作流 6.1 流程设计 6.2 数据库操作&#xff08;GORM&#xff09; &#xff08;1&#xff09;初始化…

Mysql Sharding-JDBC读写分离 原理

0 课程视频 深入Sharding-JDBC分库分表从入门到精通【黑马程序员】_哔哩哔哩_bilibili 1 基本概念 1.1应用逻辑 1.1.1 msyql 多库 多表 多服务器 1.1.2 通过Sharding-JDBC jar包->增强JDBC 访问多数据源 -> 自动处理成一个数据源 1.1.3 使用数据的人 -> 使用Sh…

Java面试题总结 | Java面试题总结12- 测试模块

测试 测试需要具备的素质 基础的理论知识、编程语言的功底、自动化测试工具、计算机基础知识 业务分析能力&#xff1a;分析业务的流程&#xff0c;分析被测业务数据、分析被测系统的框架、分析业务模块、分析测试所需资源、分析测试完成目标 缺陷洞察能力&#xff1a;一般…

【ChatGPT】吴恩达教程笔记(预备篇)

本文概要 众所周知&#xff0c;吴恩达老师与OpenAI联合推出了一门面向开发者的Prompt课程&#xff08;https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers &#xff09;&#xff0c;时隔几天&#xff0c;吴恩达老师发推说已经有超过20万人…

Netty基础

2.1Netty是什么 是一个基于异步的&#xff08;多线程处理结果和接收&#xff09;、事件驱动的网络应用框架&#xff0c;用于基于快速开发可维护、高性能的网络服务器和客户端 异步是指调用时的异步&#xff0c;他的IO还是多路复用的IO 许多中间件都依赖与Netty zookperhado…

GUITAR PRO8吉他软件好不好用?值不值得下载

所谓“工欲善其事&#xff0c;必先利其器”&#xff0c;想成为一名专业甚至著名的音乐人&#xff0c;用到的工具软件非常多&#xff0c;在众多款软件工具中&#xff0c;Guitar Pro 8能满足乐谱创作者、学习者的所有需要。很多人在听到Guitar Pro这个名词时&#xff0c;本能反应…